diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2018-07-26 21:15:59 +0200 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2018-07-26 21:15:59 +0200 |
| commit | bfdc0b9f497ef10f6687abcc55d93405c611af11 (patch) | |
| tree | 43914b2eada0bf5fb09093d61a250d4930b57a5d | |
| parent | 853c6cddaa2713a9eb0c1f1c55e3f61592f04a46 (diff) | |
* Menu.cpp: actions for CHOICE_SINGLE_PLAYER_GAME have been moved to a new function called MainMenuSinglePlayer().
+ BaseUnit.cpp, BaseUnit.h: new _selected flag.
+ Camera.cpp, Camera.h: linear movement has been taken over quadratic movement. Also, cursor now moves if dealing with screen borders.
+ Cursor.cpp, Cursor.h: new Cursor class holds cursor X/Y information. It is meant to be contained inside a HumanPlayer object.
* Game.cpp: minor changes in casts and comments.
+ HumanPlayer.cpp: added callbacks for button release events.
* HumanPlayer.cpp, HumanPlayerBtn.cpp: button handling has been transferred from HumanPlayer.cpp to HumanPlayerBtn.cpp in order to improve modularity.
+ Sprite.cpp: sprite data was not being checked against NULL.
- Unit.cpp: drawHandler() is now executed by Player object.
| -rw-r--r-- | BaseUnit.cpp | 1 | ||||
| -rw-r--r-- | BaseUnit.h | 5 | ||||
| -rw-r--r-- | Camera.cpp | 165 | ||||
| -rw-r--r-- | Camera.h | 19 | ||||
| -rw-r--r-- | Cursor.cpp | 126 | ||||
| -rw-r--r-- | Cursor.h | 47 | ||||
| -rwxr-xr-x | Exe/POCKET.ELF | bin | 31100 -> 32916 bytes | |||
| -rw-r--r-- | Exe/POCKET.HEX | 1744 | ||||
| -rw-r--r-- | Exe/POCKET.MAP | 938 | ||||
| -rw-r--r-- | Game.cpp | 17 | ||||
| -rw-r--r-- | HumanPlayer.cpp | 143 | ||||
| -rw-r--r-- | HumanPlayer.h | 32 | ||||
| -rw-r--r-- | HumanPlayerBtn.cpp | 272 | ||||
| -rw-r--r-- | Makefile | 5 | ||||
| -rw-r--r-- | Menu.cpp | 74 | ||||
| -rw-r--r-- | Player.cpp | 25 | ||||
| -rw-r--r-- | Player.h | 2 | ||||
| -rw-r--r-- | PocketEmpires.geany | 79 | ||||
| -rw-r--r-- | Sprite.cpp | 45 | ||||
| -rw-r--r-- | System.h | 2 | ||||
| -rw-r--r-- | Unit.cpp | 2 | ||||
| -rw-r--r-- | Unit.h | 2 |
22 files changed, 2171 insertions, 1574 deletions
diff --git a/BaseUnit.cpp b/BaseUnit.cpp index 7831c16..55ee7de 100644 --- a/BaseUnit.cpp +++ b/BaseUnit.cpp @@ -38,6 +38,7 @@ BaseUnit::BaseUnit(void) : _hp(0), _alive(false), +_selected(false), _x(0), _y(0) { @@ -31,13 +31,14 @@ class BaseUnit { public: - explicit BaseUnit(); + explicit BaseUnit(void); void handler(void); void create(const uint16_t x, const uint16_t y); protected: uint16_t _hp; /**< Health points. */ - bool _alive; /**< Alive flag. */ + bool _alive; /**< Alive unit flag. */ + bool _selected; /**< Selected unit flag. */ uint16_t _x; /**< X coordinate inside map. */ uint16_t _y; /**< Y coordinate inside map. */ }; @@ -3,16 +3,20 @@ * ******************************************************************/ #include "Camera.h" +#include "Cursor.h" #include <stdint.h> -#include <limits.h> +#include <stdbool.h> /* ******************************************************************* * Defines * ******************************************************************/ -#define MAX_CAMERA_SPEED ((int8_t)3) -#define SPEED_CALCULATION_TIME ((uint8_t)3) -#define CAMERA_ACCELERATION ((int8_t)1) +/*****************************************************************//** + * + * \brief This macro defines camera speed, in pixels per frame. + * + *********************************************************************/ +#define CAMERA_SPEED (static_cast<int8_t>(4)) /* ******************************************************************* * Types definition @@ -43,54 +47,10 @@ Camera::Camera(void) : _bLocked(false), _xOffset(0), _yOffset(0), - _xSpeed(0), - _ySpeed(0), _speedTimer(0) { } -void Camera::handler(void) -{ - if (((_xOffset + _xSpeed) >= -16) - || - ((_xOffset + _xSpeed) <= 0) ) - { - _xOffset += _xSpeed; - //~_yOffset += _ySpeed; - } - - if (++_speedTimer >= SPEED_CALCULATION_TIME) - { - _speedTimer = 0; - - if (_ySpeed < 0) - { - _ySpeed += CAMERA_ACCELERATION; - } - else if (_ySpeed > 0) - { - _ySpeed -= CAMERA_ACCELERATION; - } - else - { - /* Y speed is already still. Continue. */ - } - - if (_xSpeed < 0) - { - _xSpeed += CAMERA_ACCELERATION; - } - else if (_xSpeed > 0) - { - _xSpeed -= CAMERA_ACCELERATION; - } - else - { - /* x speed is alreadx still. Continue. */ - } - } -} - /*****************************************************************//** * * \brief This function transforms X coordinates for a given @@ -99,7 +59,7 @@ void Camera::handler(void) *********************************************************************/ uint8_t Camera::getX(const uint8_t x) const { - return x + _xOffset; + return x - _xOffset; } /*****************************************************************//** @@ -110,7 +70,7 @@ uint8_t Camera::getX(const uint8_t x) const *********************************************************************/ uint8_t Camera::getY(const uint8_t y) const { - return y + _yOffset; + return y - _yOffset; } /*****************************************************************//** @@ -119,15 +79,23 @@ uint8_t Camera::getY(const uint8_t y) const * left arrow button. * *********************************************************************/ -void Camera::onLeftBtnPressed(void) +void Camera::onLeftBtnPressed(Cursor& cursor) { - if (_xSpeed < 0) + if (not cursor.isXCentered()) { - _xSpeed += CAMERA_ACCELERATION << 1; + /* Move cursor to initial position. */ + cursor.move(-CAMERA_SPEED); } - else if (_xSpeed < MAX_CAMERA_SPEED) + else if (_xOffset >= CAMERA_SPEED) { - _xSpeed += CAMERA_ACCELERATION; + /* Move camera to the left. */ + _xOffset -= CAMERA_SPEED; + } + else + { + /* Left screen margin reached. + * Cursor has to be moved. */ + cursor.move(-CAMERA_SPEED); } } @@ -137,26 +105,23 @@ void Camera::onLeftBtnPressed(void) * right arrow button. * *********************************************************************/ -void Camera::onRightBtnPressed(void) +void Camera::onRightBtnPressed(Cursor& cursor) { - int8_t acc = 0; - - if (_xSpeed > 0) + if (not cursor.isXCentered()) { - acc = CAMERA_ACCELERATION << 1; + /* Move cursor to initial position. */ + cursor.move(CAMERA_SPEED); } - else if (_xSpeed > -MAX_CAMERA_SPEED) + else if (_xOffset < 512) { - acc = CAMERA_ACCELERATION; - } - - if ((_xOffset + (_xSpeed - acc)) >= -16) - { - _xSpeed -= acc; + /* Move camera to the right. */ + _xOffset += CAMERA_SPEED; } else { - _xSpeed = 0; + /* Right screen margin reached. + * Cursor has to be moved. */ + cursor.move(CAMERA_SPEED); } } @@ -166,15 +131,23 @@ void Camera::onRightBtnPressed(void) * up arrow button. * *********************************************************************/ -void Camera::onUpBtnPressed(void) +void Camera::onUpBtnPressed(Cursor& cursor) { - if (_ySpeed < 0) + if (not cursor.isYCentered()) + { + /* Move cursor to initial position. */ + cursor.move(0, -CAMERA_SPEED); + } + else if (_yOffset > 0) { - _ySpeed += CAMERA_ACCELERATION << 1; + /* Move camera to the right. */ + _yOffset -= CAMERA_SPEED; } - else if (_ySpeed < MAX_CAMERA_SPEED) + else { - _ySpeed += CAMERA_ACCELERATION; + /* Upper screen margin reached. + * Cursor has to be moved. */ + cursor.move(0, -CAMERA_SPEED); } } @@ -184,14 +157,50 @@ void Camera::onUpBtnPressed(void) * down arrow button. * *********************************************************************/ -void Camera::onDownBtnPressed(void) +void Camera::onDownBtnPressed(Cursor& cursor) { - if (_ySpeed > 0) + if (not cursor.isYCentered()) + { + /* Move cursor to initial position. */ + cursor.move(0, CAMERA_SPEED); + } + else if (_yOffset < 512) { - _ySpeed -= CAMERA_ACCELERATION << 1; + /* Move camera to the right. */ + _yOffset += CAMERA_SPEED; } - else if (_ySpeed < MAX_CAMERA_SPEED) + else { - _ySpeed -= CAMERA_ACCELERATION; + /* Lower screen margin reached. + * Cursor has to be moved. */ + cursor.move(0, CAMERA_SPEED); } } + +/*****************************************************************//** + * + * \brief As its name suggests, this function adjusts camera lock. + * + * When camera is locked, it cannot be moved when pressing + * direction keys. + * + * \param bLock + * True if camera must be locked, false otherwise. + * + *********************************************************************/ +void Camera::adjustLock(const bool bLock) +{ + _bLocked = bLock; +} + +/*****************************************************************//** + * + * \brief Returns camera lock state. + * + * \return Returns true if camera is locked, false otherwise. + * + *********************************************************************/ +bool Camera::isLocked(void) const +{ + return _bLocked; +} @@ -5,7 +5,9 @@ * Includes * *************************************/ +#include "Cursor.h" #include <stdint.h> +#include <stdbool.h> /* ************************************* * Defines @@ -23,26 +25,21 @@ class Camera { public: Camera(void); - void handler(void); - void setLock(const bool bLock) - { - _bLocked = bLock; - } + void adjustLock(const bool bLock); + bool isLocked(void) const; uint8_t getX(const uint8_t x) const; uint8_t getY(const uint8_t y) const; /* Event handlers. */ - void onLeftBtnPressed(void); - void onRightBtnPressed(void); - void onUpBtnPressed(void); - void onDownBtnPressed(void); + void onLeftBtnPressed(Cursor& cursor); + void onRightBtnPressed(Cursor& cursor); + void onUpBtnPressed(Cursor& cursor); + void onDownBtnPressed(Cursor& cursor); private: bool _bLocked; int16_t _xOffset; int16_t _yOffset; - int16_t _xSpeed; - int16_t _ySpeed; uint8_t _speedTimer; }; diff --git a/Cursor.cpp b/Cursor.cpp new file mode 100644 index 0000000..2b02ad6 --- /dev/null +++ b/Cursor.cpp @@ -0,0 +1,126 @@ +/* ******************************************************************* + * Includes + * ******************************************************************/ + +#include "Cursor.h" +#include <stdint.h> + +/* ******************************************************************* + * Defines + * ******************************************************************/ + +#define CURSOR_DEFAULT_X (static_cast<uint8_t>(80 >> 1)) +#define CURSOR_DEFAULT_Y (static_cast<uint8_t>(44 >> 1)) + +/* ******************************************************************* + * Types definition + * ******************************************************************/ + +/* ******************************************************************* + * Global variables definition + * ******************************************************************/ + +/* ******************************************************************* + * Local variables definition + * ******************************************************************/ + +/* ******************************************************************* + * Local prototypes declaration + * ******************************************************************/ + +/* ******************************************************************* + * Functions definition + * ******************************************************************/ + +/*****************************************************************//** + * + * \brief Constructor for Cursor class. + * + *********************************************************************/ +Cursor::Cursor(void) : +_x(CURSOR_DEFAULT_X), +_y(CURSOR_DEFAULT_Y) +{ +} + +/*****************************************************************//** + * + * \brief This function moves the cursor to a given position, + * as long as X coordinates are between {0, CURSOR_DEFAULT_X} + * and Y coordinates are between {0, CURSOR_DEFAULT_Y}. + * + * \param x + * X position diff. + * + * \param y + * Y position diff. + * + *********************************************************************/ +void Cursor::move(const int8_t x, const int8_t y) +{ + if ((static_cast<int8_t>(_x) + x >= 0) + && + (static_cast<int8_t>(_x) + x <= CURSOR_DEFAULT_X)) + { + _x += x; + } + + if ((static_cast<int8_t>(_y) + y >= 0) + && + (static_cast<int8_t>(_y) + y <= CURSOR_DEFAULT_Y)) + { + _y += y; + } +} + +/*****************************************************************//** + * + * \brief This function simply returns cursor X position. + * + * \return Returns cursor X position. + * + *********************************************************************/ +uint8_t Cursor::getX(void) +{ + return _x; +} + +/*****************************************************************//** + * + * \brief This function simply returns cursor Y position. + * + * \return Returns cursor Y position. + * + *********************************************************************/ +uint8_t Cursor::getY(void) +{ + return _y; +} + +/*****************************************************************//** + * + * \brief This function returns whether cursor is on its initial + * X position. + * + * \return True if \ref Cursor object is on its initial X position, + * false otherwise. + * + *********************************************************************/ +bool Cursor::isXCentered(void) +{ + return _x == CURSOR_DEFAULT_X; +} + +/*****************************************************************//** + * + * \brief This function returns whether cursor is on its initial + * Y position. + * + * \return True if \ref Cursor object is on its initial Y position, + * false otherwise. + * + *********************************************************************/ +bool Cursor::isYCentered(void) +{ + return _y == CURSOR_DEFAULT_Y; +} diff --git a/Cursor.h b/Cursor.h new file mode 100644 index 0000000..33ba008 --- /dev/null +++ b/Cursor.h @@ -0,0 +1,47 @@ +#ifndef CURSOR_H__ +#define CURSOR_H__ + +/* ******************************************************************* + * Includes + * ******************************************************************/ + +#include <stdbool.h> +#include <stdint.h> + +/* ******************************************************************* + * Defines + * ******************************************************************/ + +/* ******************************************************************* + * Global types definition + * ******************************************************************/ + +/* ******************************************************************* + * Global variables declaration + * ******************************************************************/ + +/* ******************************************************************* + * Global functions declaration + * ******************************************************************/ + +/* ******************************************************************* + * Class definition + * ******************************************************************/ + +class Cursor +{ + public: + explicit Cursor(void); + void move(const int8_t x = 0, const int8_t y = 0); + uint8_t getX(void); + uint8_t getY(void); + bool isXCentered(void); + bool isYCentered(void); + + private: + uint8_t _x; + uint8_t _y; +}; + +#endif /* CURSOR_H__ */ + diff --git a/Exe/POCKET.ELF b/Exe/POCKET.ELF Binary files differindex c453a3f..5626364 100755 --- a/Exe/POCKET.ELF +++ b/Exe/POCKET.ELF diff --git a/Exe/POCKET.HEX b/Exe/POCKET.HEX index 723878f..1306a7b 100644 --- a/Exe/POCKET.HEX +++ b/Exe/POCKET.HEX @@ -1,849 +1,897 @@ -:100000000C9406020C942E020C942E020C942E02D8
-:100010000C942E020C942E020C942E020C942E02A0
-:100020000C942E020C942E020C942E020C9472133B
-:100030000C942E020C942E020C942E020C942E0280
-:100040000C9490140C942E020C942E020C942E02FC
-:100050000C942E020C942E020C942E020C942E0260
-:100060000C942E020C942E02526573756D6500512E
-:100070007569740068006F000808003C4299A56625
-:10008000180053696E676C6520706C617965722029
-:1000900067616D65004D756C7469706C617965722E
-:1000A0002067616D65004F7074696F6E7300820028
-:1000B0009500A600506F636B657420456D70697282
-:1000C00065730003053F213F1208120A100A0E1C37
-:1000D0000E0C1E0C141A14161F161E131E1E1B1EA9
-:1000E0001E1F1E3F213F3A2F3A173D173F213F1851
-:1000F0001F02040A041F0E04040E1F0A1F0A0E0E1C
-:100100001F04110E2E252E2F2A2E262929021F020A
-:10011000081F08150E04040E150E15151B151B04DB
-:100120000604040C040000000017000300031F0A6B
-:100130001F16371A1904130A153A000300000E118E
-:10014000110E000A040A040E040030000404040026
-:1001500010001804031F111F121F101D1517111571
-:100160001F07041F17151D1F151D01011F1F151F38
-:1001700017151F000A00003200040A110A0A0A11AA
-:100180000A040115020E11171E051E1F150A0E1175
-:100190000A1F110E1F15111F05010E111D1F041F2F
-:1001A000111F1108100F1F041B1F10101F061F1E08
-:1001B000040F0E110E1F09060E112E1F051A12151F
-:1001C00009011F011F101F0F180F1F0C1F1B041BFD
-:1001D000031C03191513001F11030418111F00023B
-:1001E00001022020200001020C121E1F120C0C1212
-:1001F000120C121F0C1A14041E05242A1E1F021CA6
-:10020000141D1020201D1F0814111F101E041E1E77
-:10021000021C0C120C3E0A040C123E1E04021416A0
-:100220000A020F120E101E0E100E1E081E120C12C5
-:1002300026281E322A26041E21001F00211E04012A
-:1002400002013F213F0A4E6F2053442063617264D4
-:10025000206F720A6E6F204C4F414445522E484524
-:10026000580A0A153A45786974001D20466C617376
-:1002700068696E670A20206C6F616465722E2E2E8D
-:100280000A0A444F4E2754205455524E204F46469A
-:1002900021000A0A153A49676E6F7265006D560AA9
-:1002A0000A504C45415345205455524E204F464626
-:1002B00020004C4F572042415454455259212000B0
-:1002C000175344001613780016131400151020005D
-:1002D00015201000540A03E181867F3E186D830FBC
-:1002E0000F0E0183866033186DC3198F1803C38EF8
-:1002F0006033186DE330CF1803C39E603630CDE312
-:1003000060CF3006C79E7E3E30CDB360CF300CC686
-:10031000F6603330D9B660CF33CFCCF66061B0DB56
-:100320001E60CF30D86CE6C061B0DB1E618F1998BB
-:100330006CC6C063B19B0E330F0FB078C6FF7E1F33
-:100340001B061E0F05008930080238024978681420
-:100350000000F6E8DBCFC3B8AEA49B928A827B7420
-:100360006E68625C57524E4945413E3A3734312EF1
-:100370002C29272523211F1D1C1A191716151413A4
-:100380001211100F0E0D0C0B0A0908070645006824
-:10039000010000050068013801000005003801680F
-:1003A000010000AB03A7030101FF030101F70300F4
-:1003B0000000070002010000030406000000000026
-:1003C000000000010204081020408001020408100F
-:1003D000200102040810200404040404040404029C
-:1003E00002020202020303030303030000000023CE
-:1003F000002600290000000000250028002B000036
-:10040000000000240027002A00007A0211241FBEE9
-:10041000CFEFD8E0DEBFCDBF11E0A0E0B1E0ECE867
-:10042000F4E302C005900D92A835B107D9F723E097
-:10043000A8E5B1E001C01D92A03FB207E1F712E0CC
-:10044000C6E0D2E004C02197FE010E94EF18C5303B
-:10045000D107C9F70E9430020C94441A0C94000092
-:100460000E9474020E94DB04FDCFEF92FF920F9373
-:100470001F93CF938C018AE3E82EFF24F394C0E00E
-:10048000F8018281C81778F4CE9DC001CF9D900DF0
-:10049000112420813181820F931F009711F00E9457
-:1004A0001503CF5FEDCFF801838194810E94C303D0
-:1004B00088E591E00E94750C8823D1F366E082E61E
-:1004C00091E00E947F058823D1F242E064E770E06A
-:1004D00088E591E00E94300D813089F6CF911F911F
-:1004E0000F91FF90EF9008950E94311588E591E0FB
-:1004F0000C9476101092A9011092A8018DE491E05D
-:100500009093A7018093A6010895089508950F93ED
-:100510001F93CF93DF93EC018A010E94710381E462
-:1005200091E099838883FE01E85CFE4F118300838C
-:1005300020E130E040E150E061E070E0CE0148961B
-:10054000DF91CF911F910F910C945F04BF92CF92D6
-:10055000DF92EF92FF920F931F93CF93DF937C0173
-:1005600005E011E0C1E2D1E0B12C885C9E4F6C0146
-:100570006B2D82E691E00E94A005882309F444C017
-:10058000E881F9818A819B819C0121703327309712
-:1005900019F42115310589F095958795232B51F094
-:1005A000D701A80FB91F2D913C91E20FF31F0190C5
-:1005B000F081E02D8E0D9F1D0995D801ED91FC91E4
-:1005C000119712968D919C9113979C01217033275E
-:1005D000309719F421153105B9F095958795232B9E
-:1005E00069F0D6012D913C91D901A80FB91F2D9129
-:1005F0003C91E20FF31F0190F081E02DD6012D9187
-:100600003C91820F931F0995B3940C5F1F4F249662
-:10061000B7E0BB12ADCFDF91CF911F910F91FF904B
-:10062000EF90DF90CF90BF9008950F931F93CF93DB
-:10063000DF93EC010E94A6028E01085E1F4FC85C8A
-:10064000DE4FC8010E94D104075F1F4F0C171D0722
-:10065000C1F7DF91CF911F910F9108950F93FC0186
-:1006600071836083428323830483158216820F91F2
-:100670000895FC016583468308951F93CF93DF930C
-:10068000EC0140E06B8186EA91E00E948206809155
-:10069000DF019091E001009701F12A81222329F0E6
-:1006A0006D810E94EB03182F01C01D818A81882370
-:1006B00041F06E818091DF019091E0010E94EF0393
-:1006C00001C08E8128813981482F612F86EA91E00F
-:1006D000DF91CF911F910C946108DF91CF911F9111
-:1006E0000895AF92BF92CF92DF92EF92FF920F9355
-:1006F0001F93CF93DF93EC016B0187E491E0998323
-:1007000088837E0188E0E80EF11C80E1F7011192F8
-:100710008A95E9F78E01085E1F4F5E01F8ECAF1A6B
-:10072000FEEFBF0A60E070E0C8010E945004075F5E
-:100730001F4F0A151B05B1F7C114D10431F040E178
-:1007400050E0B601C7010E94351A43E050E06CE268
-:1007500071E0CE010296DF91CF911F910F91FF9032
-:10076000EF90DF90CF90BF90AF900C942E1AFC01C9
-:1007700010821282118214821382168215821086D0
-:10078000178211860895FC0185819681218132812D
-:10079000280F391F3283218321852F5F233010F4E6
-:1007A0002187089511862781308537FF03C02F5F89
-:1007B0003F4F05C02115310521F021503109308707
-:1007C000278397FF02C0019603C0009719F0019795
-:1007D000968385830895FC018181860F0895FC012D
-:1007E0008381860F0895FC012581368137FF03C080
-:1007F0002E5F3F4F05C02330310524F42F5F3F4F5C
-:10080000368325830895FC0125813681121613064F
-:100810003CF081E02E3F4FEF34071CF480E001C034
-:1008200082E0281B310981819281820F931F803FD2
-:100830009F4F1CF0368325830895168215820895F4
-:10084000FC012781308537FF03C02E5F3F4F05C075
-:100850002330310524F42F5F3F4F308727830895DD
-:10086000FC0127813085121613061CF42250310931
-:1008700002C021503109308727830895FC0111827D
-:100880001082128214821382168215820895FC014E
-:1008900081E082837483638356834583089508953A
-:1008A0000F931F93CF93DF93EC018B010E943E04C3
-:1008B00018870F83DF91CF911F910F910895EF92C9
-:1008C000FF920F931F93CF93DF9300D01F92CDB76A
-:1008D000DEB77C018B01BA01A9010E944704F70130
-:1008E000108707838091020190910301A091040178
-:1008F00089839A83AB83FE01E00FF11F818190E031
-:10090000F701918380830F900F900F90DF91CF912B
-:100910001F910F91FF90EF900895EF92FF920F9328
-:10092000CF93DF93CDB7DEB72D970FB6F894DEBF28
-:100930000FBECDBFFC0127813085233031052CF55A
-:100940007C011986188688E790E09B878A871D8638
-:100950001C86220F331FE1E0F0E0EC0FFD1FE20FD9
-:10096000F31F6781708500E021E041E0CE01019630
-:100970000E942E03F70145816381CE0101960E94FA
-:100980003903CE0101960E943D032D960FB6F894CF
-:10099000DEBF0FBECDBFDF91CF910F91FF90EF90E3
-:1009A0000895CF93DF93EC010E944F04CE01DF91B5
-:1009B000CF910C948D04EF92FF920F931F93CF93DE
-:1009C000DF93CDB7DEB7C355D1400FB6F894DEBF85
-:1009D0000FBECDBF64EB70E088E591E00E94F90F97
-:1009E00043E06EEA70E088E591E00E94300D8111ED
-:1009F00032C08E010B5B1E4FC8010E94B7037E01FF
-:100A000085ECE81A8EEFF80A8AE0D7011D928A95E4
-:100A1000E9F7B70188E591E00E94D110A801B7017C
-:100A2000FE0131967F01CF010E948702FE01E15B4A
-:100A3000FE4F85E0DF011D928A95E9F781E0828310
-:100A4000F182E082148303831093E0010093DF01BD
-:100A5000CF010E943502CD5ADE4F0FB6F894DEBFAB
-:100A60000FBECDBFDF91CF911F910F91FF90EF90FF
-:100A70000895FC0188E0808389E0818387E0828398
-:100A800086E0838384E0848382E0858381E18683BA
-:100A90000895FF920F931F93CF93DF93EC018C0186
-:100AA000095F1F4FFF24FA9462E088810E941116AB
-:100AB00088810E947C162F81892B19F42F5F2F8348
-:100AC00007C0222349F02F3F11F41F8201C0FF828B
-:100AD00060E088810E9411162196C017D10721F786
-:100AE000DF91CF911F910F91FF900895FC01E60FC8
-:100AF000F11D81E09781913009F080E00895FC01BB
-:100B0000E60FF11D81E097819F3F09F080E0089595
-:100B1000262F30E0FC01E20FF31F423030F49781C2
-:100B2000915081E09E3F58F009C087818F3F31F09E
-:100B3000642F0E946F1881E0913009F080E00895E1
-:100B4000860F911DFC0187818F3F09F480E0089595
-:100B50008EBD0DB407FEFDCF8EB50895DC01643562
-:100B600008F057C0403308F054C090969C9190977D
-:100B7000E42FE595E595E595262F062E000C330B21
-:100B8000542F57709230A1F4D90184E5E802A00DEA
-:100B9000B11D1124AF51BE4F8C9190E0052E02C0C3
-:100BA000959587950A94E2F78095982F91700CC0DF
-:100BB000933051F41C968C916427062E000C770B11
-:100BC000682760FF03C014C0911112C084E5E802D9
-:100BD000200D311D1124F901EF51FE4F81E090E00D
-:100BE00001C0880F5A95EAF780959081892310C03B
-:100BF00084E5E802200D311D1124F901EF51FE4F6B
-:100C000081E090E001C0880F5A95EAF79081892B26
-:100C1000808308951F93CF93DF93EC01162FF894F0
-:100C200060E08F850E944D16888918161CF460E0DC
-:100C30000E944D16812F0E94A805888918161CF461
-:100C400061E00E944D167894DF91CF911F91089535
-:100C500028EF31E0E1EEF1E0DF01A9011D92415002
-:100C60005040E1F7DC0119961C9219971A961C92D4
-:100C70000895CF92DF92EF92FF920F931F93CF933D
-:100C8000DF93EC018C858F5F8C8781EEE82E81E00D
-:100C9000F82E10E0612F6064CE010E940A0660E821
-:100CA000CE010E940A0661E08F850E944D16888958
-:100CB00018161CF460E00E944D16670104E5F60169
-:100CC00081916F010E94A8050150C9F78889181603
-:100CD0001CF461E00E944D161F5FF4E5EF0EF11C5D
-:100CE0001630C1F660E4CE01DF91CF911F910F91D4
-:100CF000FF90EF90DF90CF900C940A06FC0160A368
-:100D000061A30895FC0160A341A30895EF92FF92AF
-:100D10000F931F93CF93DF938C01D62FF42EE22EE7
-:100D2000C0E0CE1544F44F2D4C0F6D2FC8010E942A
-:100D3000AE05CF5FF6CFDF91CF911F910F91FF905E
-:100D4000EF900895EF92FF920F931F93CF93DF934D
-:100D50008C01F62ED42FE22EC0E0CE1544F46F2D78
-:100D60006C0F4D2FC8010E94AE05CF5FF6CFDF910B
-:100D7000CF911F910F91FF90EF900895DF92EF9226
-:100D8000FF920F931F93CF93DF937C01D62FD22E28
-:100D9000C42F002E000C110B040F111D47FD1A95D6
-:100DA0008C2F0C2E000C990B8017910744F42D2DDD
-:100DB0004C2F6D2FC7010E94A206CF5FF1CFDF91AC
-:100DC000CF911F910F91FF90EF90DF9008958F9238
-:100DD0009F92AF92BF92CF92DF92EF92FF920F93CA
-:100DE0001F93CF93DF937C01162FD42EC22F81E067
-:100DF000C82EC21AB22EB194BB0CD0E0802F8470E2
-:100E0000A82E802F8270982E802F8870882E0170D7
-:100E1000DC170CF04DC0C7FC04C0C150B394B394B0
-:100E2000CB0CDF5F8D2F880F8F5FC80EAA2071F06B
-:100E30004D2D4C0F612F6D0FC7010E94AE054D2D3A
-:100E40004D0F6C2F610FC7010E94AE05992071F004
-:100E50004D2D4C1B612F6D0FC7010E94AE054D2D0E
-:100E60004D1B6C2F610FC7010E94AE05882071F0E9
-:100E70004D2D4D0F612F6C1BC7010E94AE054D2DEE
-:100E80004C0F612F6D1BC7010E94AE05002309F4B2
-:100E9000BFCF4D2D4D1B612F6C1BC7010E94AE05AE
-:100EA0004D2D4C1B612F6D1BC7010E94AE05B0CFAD
-:100EB000DF91CF911F910F91FF90EF90DF90CF9036
-:100EC000BF90AF909F908F9008958F929F92AF9216
-:100ED000BF92CF92DF92EF92FF920F931F93CF9327
-:100EE000DF936C01A62E942EC22F11E0121BF22E5E
-:100EF000F194FF0C83E0B82EBE0CD1E0802F8170FE
-:100F0000882EE39402708FEF8D0F8C17BCF517FDC0
-:100F100004C0C150F394F3941F0D8D2F880F8F5F81
-:100F2000180F882091F02C2F220F2E0D492D4C1BCD
-:100F30006D2F6A0DC6010E9486062B2D492D4D1B73
-:100F40006C2F6A0DC6010E948606011104C0DF5F86
-:100F5000B394B394D8CF2C2F220F2E0D492D4C1BB8
-:100F60006A2D6D1BC6010E9486062B2D492D4D1B37
-:100F70006A2D6C1BC6010E948606E9CFDF91CF91D6
-:100F80001F910F91FF90EF90DF90CF90BF90AF90A7
-:100F90009F908F9008959F92AF92BF92CF92DF92D1
-:100FA000EF92FF920F931F93CF93DF936C01C62FA5
-:100FB000D42FB22EAE2CAA0C922E9A18FE2CF60E1E
-:100FC000292D6F2D0E94A2061FEF100F1D0F292D36
-:100FD000412F6F2DC6010E94A2060A19DE0D202F97
-:100FE0004D2F6C2FC6010E948606CB0D6FEF6C0F44
-:100FF000202F4D2FC6010E94860601E02E2D4D2F79
-:101000006F2DC6010E94E7068E2D8095C80F02E065
-:101010002E2D4D2F6C2FC6010E94E706D12FDE1911
-:1010200004E02E2D4D2F6C2FC6010E94E70608E02C
-:101030002E2D4D2F6F2DC6010E94E706DF91CF9117
-:101040001F910F91FF90EF90DF90CF90BF90AF90E6
-:101050009F900895AF92BF92CF92DF92EF92FF924E
-:101060000F931F93CF93DF936C01B62EF42E122FA4
-:10107000C02FDE2DEE0CAD2EA60E2E196A2D0E946D
-:10108000BE06C150CE19FD0E6FEF6B0D610F6D1BCB
-:10109000EC2E01E02D2F4F2DC6010E94650702E0C6
-:1010A0002D2F4F2D6A2DC6010E946507DF91CF912C
-:1010B0001F910F91FF90EF90DF90CF90BF90AF9076
-:1010C00008952F923F925F926F927F928F929F929C
-:1010D000AF92BF92CF92DF92EF92FF920F931F9346
-:1010E000CF93DF93EC01F901E4903196849164355C
-:1010F0000CF019C10E2C000CFF08062F062E000C58
-:10110000110BF701E00FF11F1E161F060CF00BC1AB
-:1011100040330CF008C1A82FC42E042E000CDD08AB
-:101120005601A80EB11C87FDBA941A141B040CF0CA
-:10113000FAC02E5F3F4F570197E0A90EB11CB7FED2
-:1011400004C05701BEE0AB0EB11CB3E0B594A79448
-:10115000BA95E1F747FF0AC0A42FA80FAC9CC001C5
-:10116000AD9C900D1124281B390B40E08A2F0A2ECC
-:10117000000C990B840F911D47FD9A95C19714F0AF
-:10118000A0E3A41BF8A067FD60E0E535F10514F0CD
-:10119000E4E5F0E09E2FCC85C427C62E062E000C79
-:1011A000DD08F601E01BF10B8F014F01F7E08F2204
-:1011B0009924E0E8F0E002C0F595E7958A94E2F71B
-:1011C0007E2F17FF02C0095F1F4FF3E015950795AB
-:1011D000FA95E1F7200F311F542F577081E001C0BD
-:1011E000880F5A95EAF7459545954595F601B4E57A
-:1011F0004B02E00DF11D1124AF014F515E4FD0E0C5
-:101200002A2EAA0F3308EE24E394BB24ED2FF0E03E
-:10121000E215F3050CF087C0F9015490F1E0FF12DC
-:101220001AC0962E8A01E72F6901991608F072C03C
-:101230008E2E852021F0D8018C90882A8C92E695FC
-:1012400031F4BFEFCB1ADB0AF6015490E0E8939437
-:101250000F5F1F4FEACFF1101CC0782E7094962EAE
-:101260008A01E72F6901991608F054C08E2E852057
-:1012700021F0D8018C9087208C92E69531F4BFEF55
-:10128000CB1ADB0AF6015490E0E893940F5F1F4FEE
-:10129000EACFF3E0FF1629F0962E8A01E72F6901C5
-:1012A00037C0682E6094862E8A01972E69018916B0
-:1012B000D8F4E92DE52159F0D801EC917C2E782461
-:1012C00070FE02C0E82B02C0E621D801EC93969490
-:1012D00039F4BFEFCB1ADB0AF6015490E0E89E2EFA
-:1012E00083940F5F1F4FE3CFCE2514C08E2E852031
-:1012F00021F0D8018C9088268C92E69531F4BFEFCE
-:10130000CB1ADB0AF6015490E0E893940F5F1F4F6D
-:10131000991660F3880F19F44C5A5F4F81E0DF5F34
-:101320002A0D3B1D73CFDF91CF911F910F91FF903D
-:10133000EF90DF90CF90BF90AF909F908F907F9075
-:101340006F905F903F902F900895DC01FB01849196
-:101350008F5F14968C9314973196E491EF5F1596F6
-:10136000EC9315976E5F7F4F5F967C936E935E97BD
-:101370000895EF920F93CF93DF93EC014E876D8723
-:101380002F87E98A088B81E0888788A319A28F8339
-:1013900063EC70E0CE010E94A5090E942C1881E048
-:1013A0000E94421885E00E9450188CE00E944B1861
-:1013B00061E08E850E94111661E08D850E941116F4
-:1013C00061E08F850E941116898918161CF461E06E
-:1013D0000E941116888918161CF461E00E941116EB
-:1013E000898918166CF460E00E944D166AE070E07E
-:1013F00080E090E00E940B1561E089890E944D1603
-:101400008D85082E000C990BFC01E952FC4FE491EC
-:10141000F0E0EE0FFF1FEB50FC4F259134913D8B18
-:101420002C8BFC01ED53FC4FE491EB8F8E85082E45
-:10143000000C990BFC01E952FC4FE491F0E0EE0F37
-:10144000FF1FEB50FC4F259134913B8B2A8BFC0105
-:10145000ED53FC4FE491EA8F8889082E000C990B1C
-:10146000FC01E952FC4FE491F0E0EE0FFF1FEB505E
-:10147000FC4F259134913F8B2E8BFC01ED53FC4F9B
-:10148000E491EC8F8F85082E000C990BFC01E9523A
-:10149000FC4FE491F0E0EE0FFF1FEB50FC4F259165
-:1014A0003491398F288FFC01ED53FC4FE491ED8F7F
-:1014B00061E2CE010E940A0664E1CE010E940A06A2
-:1014C0008B8587FF02C08FE78B876B856068CE01B5
-:1014D0000E940A0660E2CE010E940A066CE0CE017C
-:1014E0000E940A06CE01DF91CF910F91EF900C94EC
-:1014F00039066F927F928F929F92AF92BF92CF9256
-:10150000DF92EF92FF920F931F93CF93DF93EC0143
-:1015100064350CF084C040330CF081C0EC81F0E005
-:1015200031970E9FC0010F9F900D1124860F911DC2
-:1015300067FD9A95181619060CF071C03D81842F2D
-:10154000042E000C990B039F800D911D1124181679
-:1015500019060CF064C0D02EB42EC62E88A0A62E7C
-:10156000962EE22EF12CEA2DEC190E2E000CFF0B1C
-:101570008C8190E0E817F9070CF050C00197E8174C
-:10158000F90779F0E89E9001E99E300DF89E300D44
-:101590001124E20FF31F8E8D9F8DE80FF91F149118
-:1015A00001C010E07B2C6B2C272D2B19022E000C78
-:1015B000330B8D8190E0281739076CF510FF11C0AF
-:1015C00081E0D81206C0472D6A2DCE010E94AE05DB
-:1015D0001EC00D2D2D2D462D692DCE010E94BE065B
-:1015E00016C089A198A1891791F088A381E0D8122B
-:1015F00006C0472D6A2DCE010E94AE0507C00D2DF5
-:101600002D2D462D692DCE010E94BE0688A216956D
-:101610006D0C7394C9CF9D0CA394A5CF88A2DF91C4
-:10162000CF911F910F91FF90EF90DF90CF90BF90DF
-:10163000AF909F908F907F906F9008950F93CF936E
-:10164000DF93EC016A3011F428851EC06D3019F16A
-:10165000262F08854A8569850E94790A28853C815C
-:101660008985239F800D112489879F81992399F073
-:10167000082E000C990B44E550E0239F40195109B6
-:101680001124481759073CF49D818A85299F800DB4
-:1016900011248A87198681E090E0DF91CF910F9124
-:1016A00008958F929F92AF92BF92CF92DF92EF9266
-:1016B000FF920F931F93CF93DF93EC015C0186E8B9
-:1016C000A80EB11CD5019C91992309F44DC09C3002
-:1016D00018F41CE0191B01C010E0FE01EA5AFF4F8C
-:1016E00081E080836E01BEE4CB0ED11C60E0C601B8
-:1016F0000E947E064E01E3E58E0E911CD4018C9172
-:1017000003E0080F9DE2F92E4F2D481B410F23E007
-:10171000E22E24E560E0C6010E942A0861E0C601CD
-:101720000E947E06F401808103E0080F4F2D481BC4
-:10173000410F24E560E0C6010E94CB07FE01E95A93
-:10174000FF4F84E080833196D4018C91181B115D8A
-:101750001083CC57DF4F68817981C6010E94E21661
-:10176000F501808181508083DF91CF911F910F918E
-:10177000FF90EF90DF90CF90BF90AF909F908F90B1
-:101780000895CF92DF92FF920F931F93CF93DF9331
-:10179000FC01248D358D232B09F49FC0EC018C01B5
-:1017A000025B1F4F40E061E0C8010E948206FE011B
-:1017B000E95AFF4FDE01AE5ABF4F9C9185E5891B68
-:1017C000808331961082698D613009F463C028F0FE
-:1017D000888D653008F074C06FC0CE0185960E9478
-:1017E000171281E0FE01EA5AFF4F808363EC70E03C
-:1017F000C8010E94A5091D8E1C8EFE01EC5AFF4FE8
-:10180000108288EAF82E6E01FAE0CF0ED11CCE01CC
-:101810000E94750C8823D9F362EB72E0C8010E9424
-:10182000E2166A8D7B8D4AE050E0C8010E94951750
-:101830006DE972E0C8010E94E2166F2D62956F702B
-:1018400070E04AE050E0C8010E94E31762E972E0EC
-:10185000C8010E94E21664E0C6010E94760581116B
-:101860003CC0FA94F110D3CF60E0CE010E94EA139D
-:1018700083B7817F846083BF83B7816083BF83B771
-:10188000816083BF889583B78E7F83BF83B78E7F48
-:1018900083BFBDCFCF58DF4F88819981AA81BB819B
-:1018A0008F709927AA27BB270897A105B10510F4C7
-:1018B00067E009C068E707C0882379F06B5F03C061
-:1018C000882359F06FE2C801DF91CF911F910F91EA
-:1018D000FF90DF90CF900C940517DF91CF911F916F
-:1018E0000F91FF90DF90CF9008958F929F92AF92CB
-:1018F000BF92CF92DF92EF92FF920F931F93CF93FD
-:10190000DF93EC017C0180E8E80EF11CF701808098
-:101910009180A280B3800E94DA14861A970AA80ADE
-:10192000B90A6E01FFE7CF0ED11CF601808190E06D
-:10193000A0E0B0E08E0105581F4F88159905AA0553
-:10194000BB0550F4F80180819181A281B381892B7C
-:101950008A2B8B2B09F040C0F80180819181A281F4
-:10196000B381892B8A2B8B2BA9F57E01F5E2EF0E33
-:10197000F11CC7010E941412C7010E948012C70106
-:101980000E944513CE010E94510BCE010E94C10B53
-:101990007E018EE4E80EF11CC7010E943906FE01AB
-:1019A000EC5AFF4F8081811103C0C7010E942806B5
-:1019B0000E94E614F8016083718382839383FE01A1
-:1019C000EB58FF4FC958DF4F28813981621B730BD9
-:1019D0007183608380E037C00E94DA14F6012081B1
-:1019E000DC01CB01820F911DA11DB11DF701808388
-:1019F0009183A283B383FE01EF58FF4F80819181D1
-:101A0000A281B3810196A11DB11D80839183A28320
-:101A1000B383F80110821182128213820E94E614AD
-:101A2000FE01E958FF4F6083718382839383CE0167
-:101A30000E94EE13CE010A960E944905CE014896F7
-:101A40000E94571481E0DF91CF911F910F91FF9079
-:101A5000EF90DF90CF90BF90AF909F908F900895C0
-:101A60002F923F924F925F926F927F928F929F92AE
-:101A7000AF92BF92CF92DF92EF92FF920F931F939C
-:101A8000CF93DF93CDB7DEB765970FB6F894DEBF7F
-:101A90000FBECDBF6C016A8B7B8B4B83FC01EC5A74
-:101AA000FF4F10822FEF2D831C821D8A10E31C8AAA
-:101AB0005C013AE0A30EB11C1C0183E5280E311C29
-:101AC000BF972F01242F30E03F832E83C601895A10
-:101AD0009F4F99878887F396FB87EA8796012A5A52
-:101AE0003F4F3F872E870297998B888B3A973F010C
-:101AF000C6010E94750C8823D9F364E0C5010E94D9
-:101B00007605012F110F110B811144C065E0C5014D
-:101B10000E94760581113EC066E0C5010E947605EF
-:101B2000811138C02C8121114CC044E063E0C50113
-:101B30000E948805882331F03C893F5F3C8BC201BD
-:101B40000E94C21344E061E0C5010E948805882319
-:101B500031F08C8981508C8BC2010E94C213EC89B8
-:101B60008E2F0E2E000C990B2E813F81821793072A
-:101B700031F0E7FF05C03B8131503C8B01C01C8A2E
-:101B8000F1018081F4E0F80F2C89829FF019112473
-:101B9000FD8B22C0F101F081F98364E0C5010E9450
-:101BA0007605882309F48CC0C2010E949613FC8933
-:101BB000FD83298121953B81239F302D11243250B3
-:101BC0003D8BC8013D89831B910937FD9395029791
-:101BD0000CF47AC081E08C839D89090F111D97FD5B
-:101BE0001A9517FF02C00F5F1F4FF801F595E79593
-:101BF000FA83E9830981102FE885F9851082EA8547
-:101C0000FB85008381E0EE85FF858083E889F98983
-:101C10001082EA88FB88812C912C2C89022E000CE2
-:101C2000330B3D872C878E819F818816990609F199
-:101C3000EC85FD85E815F90579F423E0E885F9855B
-:101C40002083F1018081F02F2C89289FF00D112431
-:101C50008F2FEA85FB858083F70165917491C3011D
-:101C60000E942017FFEF8F1A9F0A22E0E20EF11C5C
-:101C7000DACF60E0C3010E947E06F10180814981D4
-:101C8000FC89F89F400D1124415024E560E0C30118
-:101C90000E94A20661E0C3010E947E06F1018081DC
-:101CA00003E0080F4981FC89F89F400D1124425040
-:101CB00083E0E82E24E560E0C3010E94CB0718CF43
-:101CC000C2010E94AC1375CF8D8165960FB6F89452
-:101CD000DEBF0FBECDBFDF91CF911F910F91FF905F
-:101CE000EF90DF90CF90BF90AF909F908F907F90BC
-:101CF0006F905F904F903F902F9008950F931F9398
-:101D0000CF93DF93EC018C01025B1F4FC8010E944F
-:101D100028066AE672E0C8010E94E216C8010E9425
-:101D2000390683E00E94501881E591E0EEEFFFE371
-:101D30000995FE01EC5AFF4F108265E472E0C8017C
-:101D40000E942017C8010E9439062A96CE010E94DF
-:101D5000490564E0CE010E947605811107C062E367
-:101D600070E080E090E00E940B15F0CFDF91CF9102
-:101D70001F910F9108952F923F924F925F926F9211
-:101D80007F928F929F92AF92BF92CF92DF92EF920B
-:101D9000FF920F931F93CF93DF93CDB7DEB72997B1
-:101DA0000FB6F894DEBF0FBECDBF3C0120E7620E38
-:101DB000711CF3012081222309F402C15A011B0185
-:101DC000998788877A9781E08083E885F985EB5A3F
-:101DD000FF4F1082E885F985EC5AFF4F1082E885A5
-:101DE000F985108E8F01025B1F4F61E0C8010E94D0
-:101DF0007E06888599858D5A9F4F9D838C83C884E4
-:101E0000D98497E5C90ED11CE884F984E8E5EE0E83
-:101E1000F11C888599858E5A9F4F9A838983E8851E
-:101E2000F985EF58FF4FFF83EE8388849984FAE0A9
-:101E30008F0E911C4884598425E2420E511C8885DE
-:101E400099850E94750C8823D1F3F1018491882330
-:101E500029F0EC81FD81F081FB8301C01B8224ED20
-:101E600032E040E060E0C8010E946108A114B104C2
-:101E700039F04B81445F950160E0C8010E94610820
-:101E8000F60110822CE0F7012083B101C8010E9405
-:101E9000E216E981FA818081982F990F890F819547
-:101EA0008D5AF6018083EC81FD818081982F990FF6
-:101EB000890F8195835DF7018083EE81FF818081A9
-:101EC00084FF03C060ED72E002C06CEC72E0C801F8
-:101ED0000E942017E981FA818081982F990F890F3C
-:101EE00081958D5AF6018083F70180818F5F808311
-:101EF000E885F98582A5882319F068EC72E002C0B4
-:101F000064EC72E0C8010E942017E981FA818081A7
-:101F1000982F990F890F81958D5AF6018083F701CB
-:101F200080818F5F808360EC72E0C8010E9420177F
-:101F300065E0C4010E947605882351F0E885F985A3
-:101F400062A56F5FC2010E94D813C2010E94C21332
-:101F500064E0C4010E947605811113C0F301208161
-:101F6000422F50E060E070E0EE81FF81808191813E
-:101F7000A281B38184179507A607B707A8F02F3F62
-:101F800099F08FEFF3018083088519850B5D1F4F52
-:101F900060E0C8010E94B511C8010E94961381E05B
-:101FA000E885F985808F0CC066E0C4010E94760543
-:101FB000882309F444CF888599850E947E0E35CF09
-:101FC00029960FB6F894DEBF0FBECDBFDF91CF913B
-:101FD0001F910F91FF90EF90DF90CF90BF90AF9047
-:101FE0009F908F907F906F905F904F903F902F9039
-:101FF000089540E050E00C94BB0EE0E8F7E725912F
-:10200000349181E02130304C09F080E00895CF9385
-:10201000DF93EC010E94FD0F9E01275A3F4FDE0126
-:10202000A059BF4F882309F43CC0E6E9F7E7849143
-:10203000F9018083E7E9F7E7E491EC83E8E9F7E762
-:10204000E491ED83E9E9F7E7859194919F838E838D
-:10205000EBE9F7E78591949199878887EDE9F7E7B0
-:10206000E491EBA7EEE9F7E7E491EAA7EFE9F7E7F8
-:10207000E491EC93E0EAF7E7859194919D8F8C8F42
-:10208000E2EAF7E7859194919F8F8E8FE4EAF7E774
-:102090008591949199A388A3E6EAF7E785919491B5
-:1020A00020C08CE3F90180831C828FEF8D8320E2B6
-:1020B00033E03F832E8324ED33E03987288791E096
-:1020C0009BA79AA78C938CEA9DE09D8F8C8F8EEDB9
-:1020D0009DE09F8F8E8F84E79EE099A388A38CE379
-:1020E0009FE09BA38AA3DF91CF910895CF92DF92C7
-:1020F000EF920F93CF93DF93EC01FC01E158FF4F78
-:1021000082E38083349781E090E0A0E0B0E08083B8
-:102110009183A283B3833B978FEF8083CE010E948C
-:102120000710CE010E94E6136FEFCE010E94EA1362
-:102130006E018AE0C80ED11CC6010E943905C60195
-:102140000E944905CE0148960E944D148EE0E82E6B
-:102150000FE020E14BE06DE0CE01825B9F4F0E94DB
-:10216000B909A596CE010E94211165E0C6010E9421
-:102170007605882351F060E0CE01DF91CF910F9179
-:10218000EF90DF90CF900C94D81340E064E473E0BC
-:10219000CE01DF91CF910F91EF90DF90CF900C9413
-:1021A000C011CF93DF93D62FC72F0E94FD0F882336
-:1021B00059F0AD2FBC2FEBE8F7E784918D93319662
-:1021C000E53987E7F807C9F7DF91CF91089550E027
-:1021D000DA01AA0FBB1FA80FB91F1F963C911F97CA
-:1021E00050962C915097E32FF22FE60FF11DE60F3A
-:1021F000F11D2591349190963C932E935F97F901B0
-:1022000065917491FC017481769F602D1124DC012D
-:10221000A40FB51F91966C939197F90185919491B4
-:10222000E92FF0E0862F90E0E817F90720F4F90194
-:1022300085919491692F769F602D112492966C93CD
-:10224000089521E0FC01248324E020A723EA33E061
-:10225000308B278740E060E00E94E71061E070E08B
-:1022600083E00E948915E1EBF0E08081887F816046
-:102270008083F89410928000E1E8F0E010821092E0
-:1022800085001092840088E191E09093890080930A
-:102290008800808188608083808181608083EFE610
-:1022A000F0E0808182608083789408950F93FC0130
-:1022B000842F01112AC06230D9F050F4662399F0BE
-:1022C000613019F540E0682FCF010F910C94E710B1
-:1022D0006330A9F06430C9F46481649F802D1124B7
-:1022E000858F268F12C04B3008F08AE0868B0DC098
-:1022F0006481649F802D1124818F228F06C06481A8
-:10230000649F802D1124838F248F0F910895FC01E9
-:1023100021110EC0648B8481849F402D1124458B34
-:1023200015A214A213A281E0878B8093E503108E7F
-:1023300008958091E503882319F08091E20301C09C
-:1023400080E08093B4000895FC0161110DC0178AEC
-:10235000158A14A213A2108E1092E2031092E303C6
-:102360001092E5030C9499110895CF93DF936111B6
-:1023700004C0EC010E94A4111982DF91CF9108954D
-:102380000F931F93CF93DF93411110C08B01EC018A
-:1023900060E00E94B5111E870D871B8A1A8A81E0B2
-:1023A000898389E08E8B198E1B8E1D8EDF91CF91D4
-:1023B0001F910F910895CF93DF93DC01611131C01C
-:1023C0008C91882371F111968C911197811129C0FC
-:1023D00019968C91199717962C91179718969C918E
-:1023E0001897E22FF92FE80FF11DE80FF11D259145
-:1023F00034912F3F8FEF380711F41C9212C0ED017A
-:102400003C873327220F331FEA85FB85E20FF31F3A
-:102410006591749140E0CD010E94C01189858F5F64
-:102420008987DF91CF91089560E00C94DB1160E023
-:102430000C94B5110F93CF93DF93EC0161115CC045
-:102440008981882309F458C08D89811155C02D8553
-:102450003E85EA89FB89EE0FFF1FE20FF31F85918E
-:102460009491009701F58989813021F41B8A1A8A99
-:10247000F90110C01982888160E0882371F0CE01D3
-:102480000E94DB11EA89FB89EE0FFF1F8D859E8577
-:10249000E80FF91F8591949106C0CE01DF91CF918D
-:1024A0000F910C94A411BC0176956795769567956C
-:1024B00080FF17C0AC0186E0569547958A95E1F7F5
-:1024C000292F26952695269520514F716F7000E093
-:1024D000CE010E945611EA89FB893196FB8BEA8B6B
-:1024E000D3CF492F6F7320E0CE010E9487118A89D4
-:1024F0009B8901969B8B8A8BDF91CF910F910895D9
-:1025000060E00C941A12CF93DF93EC016111BAC012
-:102510008F89882309F4B6C09D89911105C0CE0129
-:10252000DF91CF910C94A41191509D8B8DA18111BD
-:1025300039C02BA13CA12F5F3F4FC901880F991FC4
-:10254000EF8DF8A1E80FF91F65917491862F8770C0
-:102550008EA3AB0163E0569547956A95E1F7CA01F2
-:1025600096958795972F969596959FA38F739C81A7
-:10257000899F802D11248DA341704093E1033CA3DA
-:102580002BA389A190E02817390760F02AA1222304
-:1025900029F0821B91099CA38BA304C060E0CE01AB
-:1025A0000E94A4118DA181508DA3888D21E0280F58
-:1025B000288F4C893FA1340F8C85380F3A836B8D5F
-:1025C000662361F070E0822F022E000C990B0E94AE
-:1025D0008F188C8D869F300D11243A838A8190E06C
-:1025E000CB966BE370E00E948F188A833E893B8311
-:1025F000698D662371F0062E000C770B822F022E58
-:10260000000C990B0E948F188A8D869F300D112423
-:102610003B836D8D662389F0822F220F990B70E02A
-:102620000E948F18CB0162E070E00E948F182E8DFF
-:102630009B81289F900D11249B834F3341F08B8108
-:102640008A300CF089E087FD80E08B8301C01B821B
-:10265000F894EA81F0E0EE5AFC4FE491E093E40351
-:102660008D8198A5899F802D11249B81899F802D24
-:1026700011249EA1899F802D11248093E3038093D0
-:10268000E2037894DF91CF91089560E00C94831277
-:102690006091E303662329F18091E6038F5F8093C5
-:1026A000E6039091E4038917E0F081E09091E5035F
-:1026B000911180E08093E5031092E6038091E1039D
-:1026C000882369F08091000193E4899F802D112473
-:1026D000895B809300010E946F189093E2030C9431
-:1026E000991108951F920F920FB60F9211242F93F4
-:1026F0003F934F935F936F937F938F939F93AF938A
-:10270000BF93EF93FF930E944813FF91EF91BF9106
-:10271000AF919F918F917F916F915F914F913F9179
-:102720002F910F900FBE0F901F901895CF93DF93AE
-:10273000EC0160E00E94B5118BE993E09E878D87E4
-:102740001B8A1A8A81E0898389E08E8B198E1B8E01
-:102750001D8EDF91CF910895CF93DF93EC0160E060
-:102760000E94B51183E993E09E878D871B8A1A8AA0
-:1027700081E0898389E08E8B198E1B8E1D8EDF91FF
-:10278000CF910895CF93DF93EC0160E00E94B511E3
-:102790008DE893E09E878D871B8A1A8A81E0898362
-:1027A00089E08E8B198E1B8E1D8EDF91CF9108953F
-:1027B000FC01262F660F330B9681692F70E06F5F47
-:1027C0007F4FC9010E948F188583089521E0FC0185
-:1027D0002083089570E085E00C948915AF92BF9234
-:1027E000CF92DF92EF92FF920F931F93CF93DF93DD
-:1027F000EC0189819A812FE0289F8001299F100D8B
-:10280000112485E10E946C15800F911F24E096959C
-:1028100087952A95E1F79A8389832881222391F16C
-:10282000EC81AD80B12CC12CD12CA885B9857D015E
-:1028300000E010E06E817F819B0140E050E0861750
-:10284000970728F0BC01A817B90708F4BD0180E07C
-:1028500090E01F921F921F92EF930E94EA176B83E2
-:102860000F900F900F900F9070E085E0DF91CF9167
-:102870001F910F91FF90EF90DF90CF90BF90AF909E
-:102880000C948915DF91CF911F910F91FF90EF90DC
-:10289000DF90CF90BF90AF900895FC018CE39FE054
-:1028A0009383828384E0818381E084870895CF933A
-:1028B000DF93FC0124813581232B79F1EC018485A0
-:1028C0008F7141F584E10E946C15BC01990F880B52
-:1028D000990B0E94351926EE3FE34EEC50E40E941E
-:1028E000C1190E9404199B017B836A83672B81F0C5
-:1028F00084E08983FE01349680E041915191241750
-:10290000350710F4898309C08F5F8430B1F702C0A6
-:102910008FEF89838C858F5F8C87DF91CF910895AE
-:102920001F920F920FB60F9211242F933F938F9304
-:102930009F93AF93BF938091E8039091E903A09197
-:10294000EA03B091EB033091E70323E0230F2D3727
-:1029500020F40196A11DB11D05C026E8230F0296A3
-:10296000A11DB11D2093E7038093E8039093E90331
-:10297000A093EA03B093EB038091EC039091ED03F5
-:10298000A091EE03B091EF030196A11DB11D8093BC
-:10299000EC039093ED03A093EE03B093EF03BF918C
-:1029A000AF919F918F913F912F910F900FBE0F90FC
-:1029B0001F9018952FB7F8946091E8037091E90380
-:1029C0008091EA039091EB032FBF08953FB7F894ED
-:1029D0008091EC039091ED03A091EE03B091EF0391
-:1029E00026B5A89B05C02F3F19F00196A11DB11D6A
-:1029F0003FBFBA2FA92F982F8827820F911DA11DA5
-:102A0000B11DBC01CD0142E0660F771F881F991FE1
-:102A10004A95D1F70895CF92DF92EF92FF92CF932C
-:102A2000DF936B017C010E94E614EB01C114D10419
-:102A3000E104F10479F00E94E6146C1B7D0B683E02
-:102A40007340A0F381E0C81AD108E108F108C85129
-:102A5000DC4FECCFDF91CF91FF90EF90DF90CF90E4
-:102A60000895789484B5826084BD84B5816084BD06
-:102A700085B5826085BD85B5816085BDEEE6F0E0F7
-:102A8000808181608083E1E8F0E010828081826053
-:102A90008083808181608083E0E8F0E080818160D4
-:102AA0008083E1EBF0E0808184608083E0EBF0E004
-:102AB000808181608083EAE7F0E0808184608083A8
-:102AC0008081826080838081816080838081806852
-:102AD00080831092C10008958E3008F08E502091AE
-:102AE000010190E4299F900111248770822B80932B
-:102AF0007C0080917A00806480937A0080917A00D3
-:102B000086FDFCCF809178002091790090E0922B97
-:102B100008951F93CF93DF93182FEB0161E00E947C
-:102B20001116209711F460E004C0CF3FD10539F4AD
-:102B300061E0812FDF91CF911F910C944D16E12F11
-:102B4000F0E0E155FC4FE491E330F9F048F4E13076
-:102B5000B9F0E230A1F584B5806284BDC8BD34C04F
-:102B6000E630E9F0E73019F1E43049F58091800072
-:102B7000806280938000D0938B00C0938A0024C031
-:102B800084B5806884BDC7BD1FC080918000806807
-:102B900080938000D0938900C093880015C08091F5
-:102BA000B00080688093B000C093B3000DC08091E6
-:102BB000B00080628093B000C093B40005C0C038FC
-:102BC000D1050CF0B5CFAFCFDF91CF911F91089514
-:102BD000833081F028F4813099F08230A1F008959B
-:102BE0008630A9F08730B9F08430D1F4809180002C
-:102BF0008F7D03C0809180008F778093800008953F
-:102C000084B58F7702C084B58F7D84BD089580918F
-:102C1000B0008F7703C08091B0008F7D8093B000AB
-:102C20000895CF93DF9390E0FC01ED53FC4F249186
-:102C3000FC01E952FC4F8491882361F190E0880FF8
-:102C4000991FFC01E150FC4FC591D491FC01EB5060
-:102C5000FC4FA591B491611109C09FB7F894888188
-:102C6000209582238883EC912E230BC0623061F47F
-:102C70009FB7F8948881322F309583238883EC9115
-:102C80002E2B2C939FBF06C08FB7F894E8812E2B74
-:102C900028838FBFDF91CF9108951F93CF93DF9348
-:102CA000282F30E0F901E155FC4F8491F901ED53F3
-:102CB000FC4FD491F901E952FC4FC491CC23C1F0EF
-:102CC000162F81110E94E815EC2FF0E0EE0FFF1F88
-:102CD000EB50FC4FA591B4919FB7F894111104C02B
-:102CE0008C91D095D82302C0EC91DE2BDC939FBF52
-:102CF000DF91CF911F910895CF93DF93282F30E07C
-:102D0000F901E155FC4F8491F901ED53FC4FD49149
-:102D1000F901E952FC4FC491CC2391F081110E943A
-:102D2000E815EC2FF0E0EE0FFF1FE551FC4FA591E9
-:102D3000B491EC91ED2381E090E021F480E002C0B9
-:102D400080E090E0DF91CF910895CF92DF92EF92F3
-:102D5000FF920F931F93CF93DF936C01EB017B01E5
-:102D6000E40EF51E00E010E0CE15DF0561F069917C
-:102D7000D601ED91FC910190F081E02DC6010995FD
-:102D8000080F191FF1CFC801DF91CF911F910F914B
-:102D9000FF90EF90DF90CF9008956115710579F065
-:102DA000FB0101900020E9F73197AF01461B570B5B
-:102DB000DC01ED91FC910280F381E02D099480E02B
-:102DC00090E00895EF92FF920F931F93CF93DF93BC
-:102DD0007C01FB0100E010E06491EF012196662385
-:102DE00061F0D701ED91FC910190F081E02DC701D8
-:102DF0000995080F191FFE01EFCFC801DF91CF9190
-:102E00001F910F91FF90EF900895DC01ED91FC91DF
-:102E10000190F081E02D09940F931F93CF93DF93DE
-:102E2000EC016DE00E9405178C016AE0CE010E9462
-:102E30000517800F911FDF91CF911F910F9108957A
-:102E40000F931F93CF93DF93EC010E94E2168C0146
-:102E5000CE010E940C17800F911FDF91CF911F911F
-:102E60000F9108958F929F92AF92BF92CF92DF926F
-:102E7000EF92FF920F931F93CF93DF93CDB7DEB7FF
-:102E8000A1970FB6F894DEBF0FBECDBF6C01142F13
-:102E9000E52FCB01022F19A2223008F40AE07E01AF
-:102EA00021E2E20EF11C802E912CA12CB12C612F7D
-:102EB0007E2FA50194010E94A318029F10191124CE
-:102EC00081E0E81AF1081A3014F4105D01C0195CB1
-:102ED000F7011083122FE32FCA01232B242B252B5C
-:102EE00031F7B701C6010E94CD16A1960FB6F8942E
-:102EF000DEBF0FBECDBFDF91CF911F910F91FF902D
-:102F0000EF90DF90CF90BF90AF909F908F900895FB
-:102F10002115310541F4DC01ED91FC910190F08126
-:102F2000E02D642F09940C9432179A01AB0160E0F4
-:102F300070E00C948817CF92DF92EF92FF920F937C
-:102F40001F93CF93DF932115310581F4DC01ED91BF
-:102F5000FC910190F081E02D642FDF91CF911F91C2
-:102F60000F91FF90EF90DF90CF9009942A303105B8
-:102F700001F577FF1DC06A017B01EC016DE20E9443
-:102F800005178C0144275527BA014C195D096E09B4
-:102F90007F092AE0CE010E943217800F911FDF9136
-:102FA000CF911F910F91FF90EF90DF90CF900895F8
-:102FB0002AE0DF91CF911F910F91FF90EF90DF906A
-:102FC000CF900C9432179A01AB01770F660B770BF9
-:102FD0000C949B174F925F926F927F92AF92BF9229
-:102FE000CF92DF92EF92FF920F931F93CF93DF93D5
-:102FF000CDB7DEB729013A019B01AC01241935098F
-:103000004609570989899A89AB89BC89BC01CD01D8
-:103010006A197B098C099D090E945F18A801970114
-:1030200024193509460957090E94C518CA01B90172
-:103030006A0D7B1D8C1D9D1DDF91CF911F910F91FE
-:10304000FF90EF90DF90CF90BF90AF907F906F9008
-:103050005F904F900895089561E08AE00E944D16B8
-:1030600061E08AE00E9411168CB580618CBD8CB540
-:1030700080648CBD61E08DE00E94111661E08BE000
-:103080000C941116811103C08CB5806202C08CB5FE
-:103090008F7D8CBD08959CB5937F892B8CBD089541
-:1030A0009CB59C7F282F2370922B9CBD2DB582FB55
-:1030B000992790F9822F8E7F892B8DBD0895DB0192
-:1030C0008F939F930E94E418BF91AF91A29F800DB0
-:1030D000911DA39F900DB29F900D11240895991BEF
-:1030E00079E004C0991F961708F0961B881F7A95FF
-:1030F000C9F780950895AA1BBB1B51E107C0AA1F01
-:10310000BB1FA617B70710F0A61BB70B881F991F88
-:103110005A95A9F780959095BC01CD01089597FB2C
-:10312000072E16F4009407D077FD09D00E947B1873
-:1031300007FC05D03EF4909581959F4F08957095BA
-:1031400061957F4F0895A1E21A2EAA1BBB1BFD01BA
-:103150000DC0AA1FBB1FEE1FFF1FA217B307E40776
-:10316000F50720F0A21BB30BE40BF50B661F771FCE
-:10317000881F991F1A9469F76095709580959095AE
-:103180009B01AC01BD01CF010895052E97FB1EF4F4
-:1031900000940E94DC1857FD07D00E94A31807FC7A
-:1031A00003D04EF40C94DC18509540953095219541
-:1031B0003F4F4F4F5F4F0895909580957095619563
-:1031C0007F4F8F4F9F4F08950E94F518A59F900D38
-:1031D000B49F900DA49F800D911D11240895EE0FB2
-:1031E000FF1F0590F491E02D0994A29FB001B39FB9
-:1031F000C001A39F700D811D1124911DB29F700D00
-:10320000811D1124911D08950E94A01988F09F57D7
-:1032100098F0B92F9927B751B0F0E1F0660F771FFA
-:10322000881F991F1AF0BA95C9F714C0B13091F0F0
-:103230000E94BA19B1E008950C94BA19672F782F3B
-:103240008827B85F39F0B93FCCF3869577956795B5
-:10325000B395D9F73EF490958095709561957F4F21
-:103260008F4F9F4F0895E89409C097FB3EF49095C7
-:103270008095709561957F4F8F4F9F4F9923A9F04F
-:10328000F92F96E9BB279395F695879577956795DE
-:10329000B795F111F8CFFAF4BB0F11F460FF1BC022
-:1032A0006F5F7F4F8F4F9F4F16C0882311F096E9B5
-:1032B00011C0772321F09EE8872F762F05C0662363
-:1032C00071F096E8862F70E060E02AF09A95660F1C
-:1032D000771F881FDAF7880F9695879597F90895D5
-:1032E00097F99F6780E870E060E008959FEF80ECB9
-:1032F000089500240A94161617061806090608955C
-:1033000000240A9412161306140605060895092EC1
-:103310000394000C11F4882352F0BB0F40F4BF2B30
-:1033200011F460FF04C06F5F7F4F8F4F9F4F089570
-:1033300057FD9058440F551F59F05F3F71F0479566
-:10334000880F97FB991F61F09F3F79F0879508954B
-:10335000121613061406551FF2CF4695F1DF08C06A
-:10336000161617061806991FF1CF86957105610587
-:1033700008940895E894BB2766277727CB0197F92F
-:1033800008950E94D4190C9487190E94791938F075
-:103390000E94801920F0952311F00C9470190C9460
-:1033A000761911240C94BB190E94981970F3959FFB
-:1033B000C1F3950F50E0551F629FF001729FBB272C
-:1033C000F00DB11D639FAA27F00DB11DAA1F649FC8
-:1033D0006627B00DA11D661F829F2227B00DA11D7B
-:1033E000621F739FB00DA11D621F839FA00D611D01
-:1033F000221F749F3327A00D611D231F849F600D22
-:10340000211D822F762F6A2F11249F5750409AF04A
-:10341000F1F088234AF0EE0FFF1FBB1F661F771FD6
-:10342000881F91505040A9F79E3F510580F00C94A1
-:1034300070190C94BB195F3FE4F3983ED4F3869562
-:1034400077956795B795F795E7959F5FC1F7FE2B41
-:10345000880F911D9695879597F90895DC0101C015
-:103460006D9341505040E0F70895FB01DC0141505D
-:10347000504048F001900D920020C9F701C01D9204
-:0C34800041505040E0F70895F894FFCF51
-:10348C000101001923F303000020040000030400D1
-:10349C0000300400000000000000000000000000EC
-:1034AC000000000000000000000000000000000010
-:1034BC0000860200008502000000000000000000F1
-:1034CC00008502000000002B18000000001E0BA558
-:0834DC00164C4F41444552001B
-:040000030000046095
+:100000000C940B020C9433020C9433020C943302C4
+:100010000C9433020C9433020C9433020C9433028C
+:100020000C9433020C9433020C9433020C94E014BD
+:100030000C9433020C9433020C9433020C9433026C
+:100040000C94FE150C9433020C9433020C9433027E
+:100050000C9433020C9433020C9433020C9433024C
+:100060000C9433020C943302526573756D65005124
+:100070007569740068006F000808FC848884A2D148
+:100080000A040808003C4299A566180053696E6787
+:100090006C6520706C617965722067616D65004DDB
+:1000A000756C7469706C617965722067616D65004B
+:1000B0004F7074696F6E73008C009F00B000506FBA
+:1000C000636B657420456D70697265730003053F4D
+:1000D000213F1208120A100A0E1C0E0C1E0C141AD4
+:1000E00014161F161E131E1E1B1E1E1F1E3F213F11
+:1000F0003A2F3A173D173F213F181F02040A041FE9
+:100100000E04040E1F0A1F0A0E0E1F04110E2E25C8
+:100110002E2F2A2E262929021F02081F08150E0439
+:10012000040E150E15151B151B040604040C040003
+:1001300000000017000300031F0A1F16371A1904D6
+:10014000130A153A000300000E11110E000A040AEA
+:10015000040E040030000404040010001804031FFF
+:10016000111F121F101D151711151F07041F17153A
+:100170001D1F151D01011F1F151F17151F000A0048
+:10018000003200040A110A0A0A110A040115020EBB
+:1001900011171E051E1F150A0E110A1F110E1F151D
+:1001A000111F05010E111D1F041F111F1108100F33
+:1001B0001F041B1F10101F061F1E040F0E110E1F01
+:1001C00009060E112E1F051A121509011F011F1015
+:1001D0001F0F180F1F0C1F1B041B031C03191513E3
+:1001E000001F11030418111F00020102202020002B
+:1001F00001020C121E1F120C0C12120C121F0C1AF0
+:1002000014041E05242A1E1F021C141D1020201D6C
+:100210001F0814111F101E041E1E021C0C120C3E7F
+:100220000A040C123E1E040214160A020F120E10CB
+:100230001E0E100E1E081E120C1226281E322A2612
+:10024000041E21001F00211E040102013F213F0A5C
+:100250004E6F2053442063617264206F720A6E6F88
+:10026000204C4F414445522E4845580A0A153A45FC
+:10027000786974001D20466C617368696E670A2096
+:10028000206C6F616465722E2E2E0A0A444F4E2731
+:1002900054205455524E204F464621000A0A153A22
+:1002A00049676E6F7265006D560A0A504C4541539E
+:1002B00045205455524E204F464620004C4F572063
+:1002C00042415454455259212000175344001613FB
+:1002D0007800161314001510200015201000540A81
+:1002E00003E181867F3E186D830F0F0E01838660C8
+:1002F00033186DC3198F1803C38E6033186DE33044
+:10030000CF1803C39E603630CDE360CF3006C79E62
+:100310007E3E30CDB360CF300CC6F6603330D9B6F8
+:1003200060CF33CFCCF66061B0DB1E60CF30D86CCD
+:10033000E6C061B0DB1E618F19986CC6C063B19BCB
+:100340000E330F0FB078C6FF7E1F1B061E0F050071
+:10035000893008023802497868140000F6E8DBCFDB
+:10036000C3B8AEA49B928A827B746E68625C57525B
+:100370004E4945413E3A3734312E2C292725232139
+:100380001F1D1C1A1917161514131211100F0E0D1C
+:100390000C0B0A0908070645006801000005006803
+:1003A00001380100000500380168010000B503B103
+:1003B000030101FF030101F7030000000700020130
+:1003C0000000030406000000000000000001020419
+:1003D00008102040800102040810200102040810C7
+:1003E00020040404040404040402020202020203BE
+:1003F000030303030300000000230026002900007C
+:10040000000000250028002B000000000024002729
+:10041000002A00007B0211241FBECFEFD8E0DEBF10
+:10042000CDBF11E0A0E0B1E0E8E6F7E302C005903F
+:100430000D92A437B107D9F724E0A4E7B1E001C0D9
+:100440001D92AC30B207E1F712E0CBE0D2E004C07D
+:100450002197FE010E945D1ACA30D107C9F70E9498
+:1004600035020C94B21B0C9400000E9475020E948D
+:100470004C05FDCFEF92FF920F931F93CF93DF9325
+:100480007C01C0E0D0E000E010E0F701828190E064
+:100490000817190768F4808191818C0F9D1F0097C0
+:1004A00011F00E9401030F5F1F4FC15ADE4FEDCFC5
+:1004B00084E791E00E94E30D8823D1F366E08EE7A4
+:1004C00091E00E94C5068823E1F242E064E770E013
+:1004D00084E791E00E949E0E813099F6DF91CF91E2
+:1004E0001F910F91FF90EF9008950E949F1684E74F
+:1004F00091E00C94E4111092C5011092C40189E6B8
+:1005000091E09093C3018093C2010895EF92FF920E
+:100510000F931F93CF93DF93CDB7DEB727970FB617
+:10052000F894DEBF0FBECDBF7C010E94B503F7017A
+:10053000E35AFE4F80819181019769F461E082EC7A
+:1005400091E00E94C40708E024E548E260E082EC04
+:1005500091E00E94040800E022E040E068E770E0DB
+:10056000CE0101960E94120386EAE81A8EEFF80A7D
+:10057000C7010E948505182FC7010E948205412FDF
+:10058000682FCE0101960E945403CE0101960E946D
+:100590001D0327960FB6F894DEBF0FBECDBFDF91C7
+:1005A000CF911F910F91FF90EF9008950F931F939C
+:1005B000CF93DF93EC018A010E94580389E091E018
+:1005C00099838883FE01E85AFE4F11830083CE0190
+:1005D000865A9E4F0E945E05FE01E45AFE4F10822D
+:1005E00031961182108220E130E040E150E061E07C
+:1005F00070E0CE014896DF91CF911F910F910C943E
+:100600008904CF93DF93EC010E945C06CE010E9427
+:100610009E03E881F9810190F081E02DCE01DF9108
+:10062000CF9109940F93FC017183608342832383EC
+:100630000483158216820F9108951F93CF93DF9341
+:10064000EC0140E06B8182EC91E00E94C807809150
+:10065000FB019091FC01009719F12A81222329F0D6
+:100660006D810E94D403182F01C01D818A818823C7
+:1006700041F06E818091FB019091FC010E94D903B1
+:1006800001C08E81288139812115310549F0482F1B
+:10069000612F82EC91E0DF91CF911F910C94CF09F3
+:1006A000DF91CF911F910895FC01658346830895E2
+:1006B000AF92BF92CF92DF92EF92FF920F931F9370
+:1006C000CF93DF93EC016B018FE091E099838883F6
+:1006D0007E0188E0E80EF11C80E1F70111928A9515
+:1006E000E9F78E01085E1F4F5E01F8EAAF1AFEEFD0
+:1006F000BF0A60E070E0C8010E947A04065F1F4FE5
+:100700000A151B05B1F7C114D10431F040E150E0E6
+:10071000B601C7010E94A31B43E050E06CE271E008
+:10072000CE010296DF91CF911F910F91FF90EF9034
+:10073000DF90CF90BF90AF900C949C1B0F931F93B2
+:10074000CF93DF938C01085E1F4FEC01C85ADE4F38
+:10075000C8010E94B704065F1F4F0C171D07C1F7A1
+:10076000DF91CF911F910F9108950F931F93CF9316
+:10077000DF938C01085E1F4FEC01C85ADE4FC801A1
+:100780000E94B904065F1F4F0C171D07C1F7DF91C8
+:10079000CF911F910F910895FC0110821282118256
+:1007A0001482138215820895FC018181681B862FB3
+:1007B0000895FC018381681B862F08950F931F9372
+:1007C000CF93DF93EC018B01CB010E94880581114F
+:1007D00009C040E06CEFC801DF91CF911F910F91EC
+:1007E0000C94640589819A818430910594F304976F
+:1007F0009A838983DF91CF911F910F9108950F9371
+:100800001F93CF93DF93EC018B01CB010E948805EE
+:10081000811109C040E064E0C801DF91CF911F91D0
+:100820000F910C94640589819A81811522E09207C9
+:100830008CF704969A838983DF91CF911F910F9152
+:1008400008950F931F93CF93DF93EC018B01CB019E
+:100850000E948F05811109C04CEF60E0C801DF9153
+:10086000CF911F910F910C9464058B819C81181678
+:10087000190694F704979C838B83DF91CF911F9186
+:100880000F9108950F931F93CF93DF93EC018B018A
+:10089000CB010E948F05811109C044E060E0C801CE
+:1008A000DF91CF911F910F910C9464058B819C81F6
+:1008B000811522E092078CF704969C838B83DF914D
+:1008C000CF911F910F910895FC0180810895FC0143
+:1008D000118210821282138215821482178216826C
+:1008E0000895FC0181E08283758364835783468386
+:1008F000089508950F931F93CF93DF93EC018B011D
+:100900000E94670419870887DF91CF911F910F918B
+:100910000895EF92FF920F931F93CF93DF9300D030
+:100920001F92CDB7DEB77C018B01BA01A9010E94ED
+:100930007104F701118700878091020190910301F2
+:10094000A091040189839A83AB83FE01E00FF11F1C
+:10095000818190E0F701918380830F900F900F9039
+:10096000DF91CF911F910F91FF90EF9008950C941C
+:100970007904EF92FF920F93CF93DF93CDB7DEB759
+:100980002D970FB6F894DEBF0FBECDBFFC012085BA
+:100990003185233031052CF57C011986188682E8D3
+:1009A00090E09B878A871D861C86220F331FE1E01B
+:1009B000F0E0EC0FFD1FE20FF31F6781708500E090
+:1009C00021E041E0CE0101960E941203F701468129
+:1009D0006481CE0101960E945403CE0101960E94CB
+:1009E0001D032D960FB6F894DEBF0FBECDBFDF916D
+:1009F000CF910F91FF90EF900895EF92FF920F9398
+:100A00001F93CF93DF93CDB7DEB7C457D1400FB656
+:100A1000F894DEBF0FBECDBF7E0180EAE81A8EEFEC
+:100A2000F80A8AE0D7011D928A95E9F7B70184E7B1
+:100A300091E00E943F128E0106591E4FC8010E948C
+:100A4000CC03A801B701FE0131967F01CF010E94BE
+:100A5000D602FE01E059FE4F85E0DF011D928A9526
+:100A6000E9F781E08283F182E082148303831093AB
+:100A7000FC010093FB01CF010E943A02CC58DE4FEB
+:100A80000FB6F894DEBF0FBECDBFDF91CF911F919F
+:100A90000F91FF90EF9008956EEB70E084E791E086
+:100AA0000E94671143E068EB70E084E791E00E94E8
+:100AB0009E0E811102C00C94FD04089528E2FC01F1
+:100AC000208326E121830895FC019081262F062EA4
+:100AD000000C330B290F311D97FD3A952932310552
+:100AE00010F4960F90838181242F042E000C330B79
+:100AF000280F311D87FD3A952731310510F4840FF9
+:100B000081830895FC0180810895FC01818108950D
+:100B1000FC0181E09081983209F080E0089521E0A5
+:100B2000FC018181863109F020E0822F089508952B
+:100B3000DC01A35ABE4F2D913C911197FC01E45A60
+:100B4000FE4F2230310539F48081853020F081E07C
+:100B500090E08D939C9310820895FC01E35AFE4F20
+:100B6000208131812230310531F4319780818F3FEE
+:100B700011F08F5F80830895DB01AA0FBB1FAA0FBE
+:100B8000BB1FA75BBE4FED91FC91119712962D9163
+:100B90003C911397A90141705527309719F44115DD
+:100BA000510589F035952795452B51F0DC01A20FB1
+:100BB000B31F4D915C91E40FF51F0190F081E02D82
+:100BC000820F931F09940895EF92FF920F931F9342
+:100BD000CF93DF938C01EB017C0188EAE81A8EEF5A
+:100BE000F80AD7018D919C910E946404811135C04F
+:100BF000DE01AA0FBB1FAA0FBB1FA35DBE4FED9165
+:100C0000FC91119712968D919C9113979C012170E4
+:100C10003327309719F421153105F9F0959587950B
+:100C2000232B61F0E701A881B981A80FB91F2D918D
+:100C30003C91E20FF31F0190F081E02DB801665A5C
+:100C40007E4FD7012D913C91820F931FDF91CF9161
+:100C50001F910F91FF90EF900994DF91CF911F9119
+:100C60000F91FF90EF900895DB01AA0FBB1FAA0F11
+:100C7000BB1FAF5EBE4FED91FC91119712962D9167
+:100C80003C911397A90141705527309719F44115EC
+:100C9000510589F035952795452B51F0DC01A20FC0
+:100CA000B31F4D915C91E40FF51F0190F081E02D91
+:100CB000820F931F099408950F931F93CF93DF938F
+:100CC0008C01C0E0D0E06C2F8EE791E00E94E60638
+:100CD000BE01882341F0C8010E94BC05BE01C801C5
+:100CE0000E94E40503C0C8010E9434062196C73063
+:100CF000D10549F7DF91CF911F910F910895FC0124
+:100D000088E0808389E0818387E0828386E0838333
+:100D100084E0848382E0858381E186830895FF9265
+:100D20000F931F93CF93DF93EC018C01095F1F4F4B
+:100D3000FF24FA9462E088810E947F1788810E94D4
+:100D4000EA172F81892B19F42F5F2F8307C02223E5
+:100D500049F02F3F11F41F8201C0FF8260E08881BB
+:100D60000E947F172196C017D10721F7DF91CF91FD
+:100D70001F910F91FF900895FC01E60FF11D81E096
+:100D80009781913009F080E00895FC01E60FF11D94
+:100D900081E097819F3F09F080E00895262F30E0A1
+:100DA000FC01E20FF31F423030F49781915081E053
+:100DB0009E3F58F009C087818F3F31F0642F0E9419
+:100DC000DD1981E0913009F080E00895860F911DD2
+:100DD000FC0187818F3F09F480E008958EBD0DB43A
+:100DE00007FEFDCF8EB50895DC01643508F057C0CD
+:100DF000403308F054C090969C919097E42FE5956D
+:100E0000E595E595262F062E000C330B542F5770D1
+:100E10009230A1F4D90184E5E802A00DB11D11249E
+:100E2000A350BE4F8C9190E0052E02C095958795FA
+:100E30000A94E2F78095982F91700CC0933051F48A
+:100E40001C968C916427062E000C770B682760FF98
+:100E500003C014C0911112C084E5E802200D311DB9
+:100E60001124F901E350FE4F81E090E001C0880FAA
+:100E70005A95EAF780959081892310C084E5E802AD
+:100E8000200D311D1124F901E350FE4F81E090E067
+:100E900001C0880F5A95EAF79081892B80830895C5
+:100EA0001F93CF93DF93EC01162FF89460E08F85AA
+:100EB0000E94BB17888918161CF460E00E94BB17BB
+:100EC000812F0E94EE06888918161CF461E00E94AA
+:100ED000BB177894DF91CF911F91089528EF31E0EF
+:100EE000EDEFF1E0DF01A9011D9241505040E1F723
+:100EF000DC0119961C9219971A961C920895CF92AC
+:100F0000DF92EF92FF920F931F93CF93DF93EC0149
+:100F10008C858F5F8C878DEFE82E81E0F82E10E0B6
+:100F2000612F6064CE010E94500760E8CE010E94EC
+:100F3000500761E08F850E94BB17888918161CF442
+:100F400060E00E94BB17670104E5F60181916F0123
+:100F50000E94EE060150C9F7888918161CF461E05A
+:100F60000E94BB171F5FF4E5EF0EF11C1630C1F6AF
+:100F700060E4CE01DF91CF911F910F91FF90EF9030
+:100F8000DF90CF900C945007FC0160A361A30895FB
+:100F9000FC0160A341A30895EF92FF920F931F936A
+:100FA000CF93DF938C01D62FF42EE22EC0E0CE1526
+:100FB00044F44F2D4C0F6D2FC8010E94F406CF5FF3
+:100FC000F6CFDF91CF911F910F91FF90EF90089591
+:100FD000EF92FF920F931F93CF93DF938C01F62E26
+:100FE000D42FE22EC0E0CE1544F46F2D6C0F4D2FA0
+:100FF000C8010E94F406CF5FF6CFDF91CF911F9119
+:101000000F91FF90EF900895EF92FF920F931F932F
+:10101000CF93DF937C01C62F142FD22F0E94E807B5
+:101020004FEF400F410F2D2F6C2FC7010E94E80793
+:10103000202F412F6C2FC7010E94CC076FEF6D0F3F
+:101040006C0F202F412FC701DF91CF911F910F917E
+:10105000FF90EF900C94CC07DF92EF92FF920F93EA
+:101060001F93CF93DF937C01D62FD22EC42F002E57
+:10107000000C110B040F111D47FD1A958C2F0C2E1F
+:10108000000C990B8017910744F42D2D4C2F6D2FD8
+:10109000C7010E94E807CF5FF1CFDF91CF911F9189
+:1010A0000F91FF90EF90DF9008958F929F92AF92F3
+:1010B000BF92CF92DF92EF92FF920F931F93CF9345
+:1010C000DF937C01162FD42EC22F81E0C82EC21AC6
+:1010D000B22EB194BB0CD0E0802F8470A82E802F4C
+:1010E0008270982E802F8870882E0170DC170CF08B
+:1010F0004DC0C7FC04C0C150B394B394CB0CDF5FA8
+:101100008D2F880F8F5FC80EAA2071F04D2D4C0FC8
+:10111000612F6D0FC7010E94F4064D2D4D0F6C2FEE
+:10112000610FC7010E94F406992071F04D2D4C1BF0
+:10113000612F6D0FC7010E94F4064D2D4D1B6C2FC2
+:10114000610FC7010E94F406882071F04D2D4D0FEC
+:10115000612F6C1BC7010E94F4064D2D4C0F612FAF
+:101160006D1BC7010E94F406002309F4BFCF4D2D6B
+:101170004D1B612F6C1BC7010E94F4064D2D4C1BAB
+:10118000612F6D1BC7010E94F406B0CFDF91CF9194
+:101190001F910F91FF90EF90DF90CF90BF90AF9095
+:1011A0009F908F9008958F929F92AF92BF92CF920F
+:1011B000DF92EF92FF920F931F93CF93DF936C0117
+:1011C000A62E942EC22F11E0121BF22EF194FF0CCA
+:1011D00083E0B82EBE0CD1E0802F8170882EE3947E
+:1011E00002708FEF8D0F8C17BCF517FD04C0C15036
+:1011F000F394F3941F0D8D2F880F8F5F180F8820A5
+:1012000091F02C2F220F2E0D492D4C1B6D2F6A0DA6
+:10121000C6010E94CC072B2D492D4D1B6C2F6A0D4A
+:10122000C6010E94CC07011104C0DF5FB394B394E0
+:10123000D8CF2C2F220F2E0D492D4C1B6A2D6D1B44
+:10124000C6010E94CC072B2D492D4D1B6A2D6C1B0E
+:10125000C6010E94CC07E9CFDF91CF911F910F917A
+:10126000FF90EF90DF90CF90BF90AF909F908F90C6
+:1012700008959F92AF92BF92CF92DF92EF92FF922A
+:101280000F931F93CF93DF936C01C62FD42FB22EF1
+:10129000AE2CAA0C922E9A18FE2CF60E292D6F2D2C
+:1012A0000E94E8071FEF100F1D0F292D412F6F2DF2
+:1012B000C6010E94E8070A19DE0D202F4D2F6C2F62
+:1012C000C6010E94CC07CB0D6FEF6C0F202F4D2F66
+:1012D000C6010E94CC0701E02E2D4D2F6F2DC601B7
+:1012E0000E9455088E2D8095C80F02E02E2D4D2F9F
+:1012F0006C2FC6010E945508D12FDE1904E02E2D57
+:101300004D2F6C2FC6010E94550808E02E2D4D2F41
+:101310006F2DC6010E945508DF91CF911F910F914B
+:10132000FF90EF90DF90CF90BF90AF909F90089587
+:10133000AF92BF92CF92DF92EF92FF920F931F93E3
+:10134000CF93DF936C01B62EF42E122FC02FDE2D1B
+:10135000EE0CAD2EA60E2E196A2D0E942C08C1503F
+:10136000CE19FD0E6FEF6B0D610F6D1BEC2E01E0C2
+:101370002D2F4F2DC6010E94D30802E02D2F4F2D97
+:101380006A2DC6010E94D308DF91CF911F910F9162
+:10139000FF90EF90DF90CF90BF90AF9008952F9285
+:1013A0003F925F926F927F928F929F92AF92BF9285
+:1013B000CF92DF92EF92FF920F931F93CF93DF9321
+:1013C000EC01F901E4903196849164350CF019C177
+:1013D0000E2C000CFF08062F062E000C110BF70137
+:1013E000E00FF11F1E161F060CF00BC140330CF06E
+:1013F00008C1A82FC42E042E000CDD085601A80E2B
+:10140000B11C87FDBA941A141B040CF0FAC02E5FAD
+:101410003F4F570197E0A90EB11CB7FE04C057011A
+:10142000BEE0AB0EB11CB3E0B594A794BA95E1F75A
+:1014300047FF0AC0A42FA80FAC9CC001AD9C900D23
+:101440001124281B390B40E08A2F0A2E000C990B1F
+:10145000840F911D47FD9A95C19714F0A0E3A41B3A
+:10146000F8A067FD60E0E535F10514F0E4E5F0E093
+:101470009E2FCC85C427C62E062E000CDD08F60153
+:10148000E01BF10B8F014F01F7E08F229924E0E878
+:10149000F0E002C0F595E7958A94E2F77E2F17FFFA
+:1014A00002C0095F1F4FF3E015950795FA95E1F724
+:1014B000200F311F542F577081E001C0880F5A95BB
+:1014C000EAF7459545954595F601B4E54B02E00DE3
+:1014D000F11D1124AF0143505E4FD0E02A2EAA0F18
+:1014E0003308EE24E394BB24ED2FF0E0E215F3057E
+:1014F0000CF087C0F9015490F1E0FF121AC0962E4B
+:101500008A01E72F6901991608F072C08E2E852096
+:1015100021F0D8018C90882A8C92E69531F4BFEFA7
+:10152000CB1ADB0AF6015490E0E893940F5F1F4F4B
+:10153000EACFF1101CC0782E7094962E8A01E72F06
+:101540006901991608F054C08E2E852021F0D8012B
+:101550008C9087208C92E69531F4BFEFCB1ADB0A92
+:10156000F6015490E0E893940F5F1F4FEACFF3E049
+:10157000FF1629F0962E8A01E72F690137C0682EE1
+:101580006094862E8A01972E69018916D8F4E92D78
+:10159000E52159F0D801EC917C2E782470FE02C030
+:1015A000E82B02C0E621D801EC93969439F4BFEF02
+:1015B000CB1ADB0AF6015490E0E89E2E83940F5F6D
+:1015C0001F4FE3CFCE2514C08E2E852021F0D801E9
+:1015D0008C9088268C92E69531F4BFEFCB1ADB0A0B
+:1015E000F6015490E0E893940F5F1F4F991660F353
+:1015F000880F19F44C5A5F4F81E0DF5F2A0D3B1DC5
+:1016000073CFDF91CF911F910F91FF90EF90DF90FB
+:10161000CF90BF90AF909F908F907F906F905F9092
+:101620003F902F900895DC01FB0184918F5F149609
+:101630008C9314973196E491EF5F1596EC93159780
+:101640006E5F7F4F5F967C936E935E970895EF92E7
+:101650000F93CF93DF93EC014E876D872F87E98A35
+:10166000088B81E0888788A319A28F836DEC70E0D6
+:10167000CE010E94130B0E949A1981E00E94B019BA
+:1016800085E00E94BE198CE00E94B91961E08E8548
+:101690000E947F1761E08D850E947F1761E08F8532
+:1016A0000E947F17898918161CF461E00E947F1739
+:1016B000888918161CF461E00E947F178989181622
+:1016C0006CF460E00E94BB176AE070E080E090E09C
+:1016D0000E94791661E089890E94BB178D85082ECA
+:1016E000000C990BFC01EF51FC4FE491F0E0EE0F80
+:1016F000FF1FE150FC4F259134913D8B2C8BFC0159
+:10170000E353FC4FE491EB8F8E85082E000C990B70
+:10171000FC01EF51FC4FE491F0E0EE0FFF1FE150B0
+:10172000FC4F259134913B8B2A8BFC01E353FC4FFA
+:10173000E491EA8F8889082E000C990BFC01EF5187
+:10174000FC4FE491F0E0EE0FFF1FE150FC4F2591BC
+:1017500034913F8B2E8BFC01E353FC4FE491EC8FD3
+:101760008F85082E000C990BFC01EF51FC4FE49182
+:10177000F0E0EE0FFF1FE150FC4F25913491398FBF
+:10178000288FFC01E353FC4FE491ED8F61E2CE0121
+:101790000E94500764E1CE010E9450078B8587FFAD
+:1017A00002C08FE78B876B856068CE010E9450076F
+:1017B00060E2CE010E9450076CE0CE010E9450070B
+:1017C000CE01DF91CF910F91EF900C947F076F9234
+:1017D0007F928F929F92AF92BF92CF92DF92EF92C1
+:1017E000FF920F931F93CF93DF93EC0164350CF0BE
+:1017F00084C040330CF081C0EC81F0E031970E9F43
+:10180000C0010F9F900D1124860F911D67FD9A95C1
+:10181000181619060CF071C03D81842F042E000C9F
+:10182000990B039F800D911D1124181619060CF0B9
+:1018300064C0D02EB42EC62E88A0A62E962EE22EE0
+:10184000F12CEA2DEC190E2E000CFF0B8C8190E090
+:10185000E817F9070CF050C00197E817F90779F07D
+:10186000E89E9001E99E300DF89E300D1124E20FA4
+:10187000F31F8E8D9F8DE80FF91F149101C010E0AA
+:101880007B2C6B2C272D2B19022E000C330B8D81FA
+:1018900090E0281739076CF510FF11C081E0D812CD
+:1018A00006C0472D6A2DCE010E94F4061EC00D2DE4
+:1018B0002D2D462D692DCE010E942C0816C089A120
+:1018C00098A1891791F088A381E0D81206C0472D0E
+:1018D0006A2DCE010E94F40607C00D2D2D2D462D38
+:1018E000692DCE010E942C0888A216956D0C739468
+:1018F000C9CF9D0CA394A5CF88A2DF91CF911F9152
+:101900000F91FF90EF90DF90CF90BF90AF909F909E
+:101910008F907F906F9008950F93CF93DF93EC019A
+:101920006A3011F428851EC06D3019F1262F088504
+:101930004A8569850E94E70B28853C818985239F1C
+:10194000800D112489879F81992399F0082E000C1E
+:10195000990B44E550E0239F401951091124481781
+:1019600059073CF49D818A85299F800D11248A871F
+:10197000198681E090E0DF91CF910F9108958F92C9
+:101980009F92AF92BF92CF92DF92EF92FF920F930E
+:101990001F93CF93DF93EC015C0186E8A80EB11C86
+:1019A000D5019C91992309F44DC09C3018F41CE09A
+:1019B000191B01C010E0FE01EA5AFF4F81E080834D
+:1019C0006E01BEE4CB0ED11C60E0C6010E94C407CC
+:1019D0004E01E3E58E0E911CD4018C9103E0080FBB
+:1019E0009DE2F92E4F2D481B410F23E0E22E24E506
+:1019F00060E0C6010E94980961E0C6010E94C40728
+:101A0000F401808103E0080F4F2D481B410F24E5AE
+:101A100060E0C6010E943909FE01E95AFF4F84E0E7
+:101A200080833196D4018C91181B115D1083CC57A3
+:101A3000DF4F68817981C6010E945018F5018081CD
+:101A400081508083DF91CF911F910F91FF90EF9094
+:101A5000DF90CF90BF90AF909F908F900895CF92DE
+:101A6000DF92FF920F931F93CF93DF93FC01248D9E
+:101A7000358D232B09F49FC0EC018C01025B1F4FB5
+:101A800040E061E0C8010E94C807FE01E95AFF4F2B
+:101A9000DE01AE5ABF4F9C9185E5891B808331964C
+:101AA0001082698D613009F463C028F0888D65303B
+:101AB00008F074C06FC0CE0185960E94851381E046
+:101AC000FE01EA5AFF4F80836DEC70E0C8010E946E
+:101AD000130B1D8E1C8EFE01EC5AFF4F108288EAFC
+:101AE000F82E6E01FAE0CF0ED11CCE010E94E30D5C
+:101AF0008823D9F36CEB72E0C8010E9450186A8DFC
+:101B00007B8D4AE050E0C8010E94031967EA72E049
+:101B1000C8010E9450186F2D62956F7070E04AE006
+:101B200050E0C8010E9451196CE972E0C8010E949E
+:101B3000501864E0C6010E94BC0681113CC0FA94B2
+:101B4000F110D3CF60E0CE010E94581583B7817F9A
+:101B5000846083BF83B7816083BF83B7816083BFA5
+:101B6000889583B78E7F83BF83B78E7F83BFBDCFBA
+:101B7000CF58DF4F88819981AA81BB818F709927C7
+:101B8000AA27BB270897A105B10510F467E009C093
+:101B900068E707C0882379F06B5F03C0882359F09A
+:101BA0006FE2C801DF91CF911F910F91FF90DF90FD
+:101BB000CF900C947318DF91CF911F910F91FF90EC
+:101BC000DF90CF9008958F929F92AF92BF92CF9265
+:101BD000DF92EF92FF920F931F93CF93DF93EC016D
+:101BE0007C0180E8E80EF11CF70180809180A280E2
+:101BF000B3800E944816861A970AA80AB90A6E018D
+:101C0000FFE7CF0ED11CF601808190E0A0E0B0E0AC
+:101C10008E0105581F4F88159905AA05BB0550F47C
+:101C2000F80180819181A281B381892B8A2B8B2B32
+:101C300009F040C0F80180819181A281B381892B94
+:101C40008A2B8B2BA9F57E01F5E2EF0EF11CC70163
+:101C50000E948213C7010E94EE13C7010E94B314B1
+:101C6000CE010E94BF0CCE010E942F0D7E018EE49A
+:101C7000E80EF11CC7010E947F07FE01EC5AFF4FDE
+:101C80008081811103C0C7010E946E070E94541613
+:101C9000F8016083718382839383FE01EB58FF4FC9
+:101CA000C958DF4F28813981621B730B71836083B0
+:101CB00080E037C00E944816F6012081DC01CB018C
+:101CC000820F911DA11DB11DF70180839183A28315
+:101CD000B383FE01EF58FF4F80819181A281B381D0
+:101CE0000196A11DB11D80839183A283B383F80166
+:101CF00010821182128213820E945416FE01E9584A
+:101D0000FF4F6083718382839383CE010E945C15B1
+:101D1000CE010A960E948F06CE0148960E94C515F4
+:101D200081E0DF91CF911F910F91FF90EF90DF90B5
+:101D3000CF90BF90AF909F908F9008952F923F9239
+:101D40004F925F926F927F928F929F92AF92BF92CB
+:101D5000CF92DF92EF92FF920F931F93CF93DF9377
+:101D6000CDB7DEB765970FB6F894DEBF0FBECDBF17
+:101D70006C016A8B7B8B4B83FC01EC5AFF4F10820A
+:101D80002FEF2D831C821D8A10E31C8A5C013AE030
+:101D9000A30EB11C1C0183E5280E311CBF972F0137
+:101DA000242F30E03F832E83C601895A9F4F9987A5
+:101DB0008887F396FB87EA8796012A5A3F4F3F8729
+:101DC0002E870297998B888B3A973F01C6010E9414
+:101DD000E30D8823D9F364E0C5010E94BC06012FFE
+:101DE000110F110B811144C065E0C5010E94BC06B2
+:101DF00081113EC066E0C5010E94BC06811138C059
+:101E00002C8121114CC044E063E0C5010E94CE0644
+:101E1000882331F03C893F5F3C8BC2010E94301522
+:101E200044E061E0C5010E94CE06882331F08C8930
+:101E300081508C8BC2010E943015EC898E2F0E2EA2
+:101E4000000C990B2E813F818217930731F0E7FF39
+:101E500005C03B8131503C8B01C01C8AF10180815F
+:101E6000F4E0F80F2C89829FF0191124FD8B22C019
+:101E7000F101F081F98364E0C5010E94BC0688236A
+:101E800009F48CC0C2010E940415FC89FD832981DC
+:101E900021953B81239F302D112432503D8BC80169
+:101EA0003D89831B910937FD939502970CF47AC005
+:101EB00081E08C839D89090F111D97FD1A9517FFED
+:101EC00002C00F5F1F4FF801F595E795FA83E9838C
+:101ED0000981102FE885F9851082EA85FB8500834A
+:101EE00081E0EE85FF858083E889F9891082EA88A0
+:101EF000FB88812C912C2C89022E000C330B3D8702
+:101F00002C878E819F818816990609F1EC85FD85C5
+:101F1000E815F90579F423E0E885F9852083F101D6
+:101F20008081F02F2C89289FF00D11248F2FEA85B6
+:101F3000FB858083F70165917491C3010E948E181F
+:101F4000FFEF8F1A9F0A22E0E20EF11CDACF60E069
+:101F5000C3010E94C407F10180814981FC89F89F77
+:101F6000400D1124415024E560E0C3010E94E807C0
+:101F700061E0C3010E94C407F101808103E0080F02
+:101F80004981FC89F89F400D1124425083E0E82EDE
+:101F900024E560E0C3010E94390918CFC2010E9404
+:101FA0001A1575CF8D8165960FB6F894DEBF0FBEFA
+:101FB000CDBFDF91CF911F910F91FF90EF90DF90F8
+:101FC000CF90BF90AF909F908F907F906F905F90D9
+:101FD0004F903F902F9008950F931F93CF93DF93CF
+:101FE000EC018C01025B1F4FC8010E946E0764E781
+:101FF00072E0C8010E945018C8010E947F0783E068
+:102000000E94BE198DE691E0EEEFFFE30995FE0117
+:10201000EC5AFF4F10826FE472E0C8010E948E18E4
+:10202000C8010E947F072A96CE010E948F0664E0B5
+:10203000CE010E94BC06811107C062E370E080E01F
+:1020400090E00E947916F0CFDF91CF911F910F9110
+:1020500008952F923F924F925F926F927F928F924C
+:102060009F92AF92BF92CF92DF92EF92FF920F9327
+:102070001F93CF93DF93CDB7DEB729970FB6F894B0
+:10208000DEBF0FBECDBF3C0120E7620E711CF30125
+:102090002081222309F402C15A011B0199878887F4
+:1020A0007A9781E08083E885F985EB5AFF4F1082AB
+:1020B000E885F985EC5AFF4F1082E885F985108E86
+:1020C0008F01025B1F4F61E0C8010E94C407888531
+:1020D00099858D5A9F4F9D838C83C884D98497E5B9
+:1020E000C90ED11CE884F984E8E5EE0EF11C888560
+:1020F00099858E5A9F4F9A838983E885F985EF5891
+:10210000FF4FFF83EE8388849984FAE08F0E911C41
+:102110004884598425E2420E511C888599850E9485
+:10212000E30D8823D1F3F1018491882329F0EC8118
+:10213000FD81F081FB8301C01B822EED32E040E087
+:1021400060E0C8010E94CF09A114B10439F04B81AD
+:10215000445F950160E0C8010E94CF09F60110823A
+:102160002CE0F7012083B101C8010E945018E981D9
+:10217000FA818081982F990F890F81958D5AF601E8
+:102180008083EC81FD818081982F990F890F819543
+:10219000835DF7018083EE81FF81808184FF03C02E
+:1021A0006AED72E002C066ED72E0C8010E948E180E
+:1021B000E981FA818081982F990F890F81958D5A35
+:1021C000F6018083F70180818F5F8083E885F98540
+:1021D00082A5882319F062ED72E002C06EEC72E015
+:1021E000C8010E948E18E981FA818081982F990F89
+:1021F000890F81958D5AF6018083F70180818F5F69
+:1022000080836AEC72E0C8010E948E1865E0C40108
+:102210000E94BC06882351F0E885F98562A56F5FAE
+:10222000C2010E944615C2010E94301564E0C4013B
+:102230000E94BC06811113C0F3012081422F50E09F
+:1022400060E070E0EE81FF8180819181A281B381A5
+:1022500084179507A607B707A8F02F3F99F08FEFCF
+:10226000F3018083088519850B5D1F4F60E0C8016D
+:102270000E942313C8010E94041581E0E885F985B6
+:10228000808F0CC066E0C4010E94BC06882309F45C
+:1022900044CF888599850E94EC0F35CF29960FB6DB
+:1022A000F894DEBF0FBECDBFDF91CF911F910F918C
+:1022B000FF90EF90DF90CF90BF90AF909F908F9066
+:1022C0007F906F905F904F903F902F90089540E0E7
+:1022D00050E00C942910E0E8F7E72591349181E073
+:1022E0002130304C09F080E00895CF93DF93EC016A
+:1022F0000E946B119E01275A3F4FDE01A059BF4F2C
+:10230000882309F43CC0E6E9F7E78491F90180836A
+:10231000E7E9F7E7E491EC83E8E9F7E7E491ED8397
+:10232000E9E9F7E7859194919F838E83EBE9F7E7DD
+:102330008591949199878887EDE9F7E7E491EBA778
+:10234000EEE9F7E7E491EAA7EFE9F7E7E491EC9328
+:10235000E0EAF7E7859194919D8F8C8FE2EAF7E7A9
+:10236000859194919F8F8E8FE4EAF7E78591949100
+:1023700099A388A3E6EAF7E78591949120C08CE3BE
+:10238000F90180831C828FEF8D8320E233E03F834D
+:102390002E8324ED33E03987288791E09BA79AA705
+:1023A0008C938CEA9DE09D8F8C8F8EED9DE09F8FAE
+:1023B0008E8F84E79EE099A388A38CE39FE09BA384
+:1023C0008AA3DF91CF910895CF92DF92EF920F937E
+:1023D000CF93DF93EC01FC01E158FF4F82E3808350
+:1023E000349781E090E0A0E0B0E080839183A28305
+:1023F000B3833B978FEF8083CE010E947511CE018E
+:102400000E9454156FEFCE010E9458156E018AE0AC
+:10241000C80ED11CC6010E947F06C6010E948F060D
+:10242000CE0148960E94BB158EE0E82E0FE020E119
+:102430004BE06DE0CE01825B9F4F0E94270BA5967B
+:10244000CE010E948F1265E0C6010E94BC0688235F
+:1024500051F060E0CE01DF91CF910F91EF90DF90CE
+:10246000CF900C94461540E06EE473E0CE01DF910E
+:10247000CF910F91EF90DF90CF900C942E13CF93CC
+:10248000DF93D62FC72F0E946B11882359F0AD2FF1
+:10249000BC2FEBE8F7E784918D933196E53987E718
+:1024A000F807C9F7DF91CF91089550E0DA01AA0F3C
+:1024B000BB1FA80FB91F1F963C911F9750962C91D8
+:1024C0005097E32FF22FE60FF11DE60FF11D259136
+:1024D000349190963C932E935F97F9016591749196
+:1024E000FC017481769F602D1124DC01A40FB51FBF
+:1024F00091966C939197F90185919491E92FF0E071
+:10250000862F90E0E817F90720F4F901859194915E
+:10251000692F769F602D112492966C93089521E087
+:10252000FC01248324E020A72DEA33E0308B2787A9
+:1025300040E060E00E94551261E070E083E00E949C
+:10254000F716E1EBF0E08081887F81608083F8946A
+:1025500010928000E1E8F0E0108210928500109265
+:10256000840088E191E090938900809388008081C5
+:1025700088608083808181608083EFE6F0E08081E5
+:1025800082608083789408950F93FC01842F011159
+:102590002AC06230D9F050F4662399F0613019F501
+:1025A00040E0682FCF010F910C9455126330A9F0D1
+:1025B0006430C9F46481649F802D1124858F268F37
+:1025C00012C04B3008F08AE0868B0DC06481649F96
+:1025D000802D1124818F228F06C06481649F802DFD
+:1025E0001124838F248F0F910895FC0121110EC0B7
+:1025F000648B8481849F402D1124458B15A214A2E5
+:1026000013A281E0878B80930104108E089580913E
+:102610000104882319F08091FE0301C080E08093BB
+:10262000B4000895FC0161110DC0178A158A14A227
+:1026300013A2108E1092FE031092FF031092010459
+:102640000C9407130895CF93DF93611104C0EC013C
+:102650000E9412131982DF91CF9108950F931F9357
+:10266000CF93DF93411110C08B01EC0160E00E9419
+:1026700023131E870D871B8A1A8A81E0898389E0CC
+:102680008E8B198E1B8E1D8EDF91CF911F910F9116
+:102690000895CF93DF93DC01611131C08C918823C1
+:1026A00071F111968C911197811129C019968C9115
+:1026B000199717962C91179718969C911897E22FB7
+:1026C000F92FE80FF11DE80FF11D259134912F3FEF
+:1026D0008FEF380711F41C9212C0ED013C873327AD
+:1026E000220F331FEA85FB85E20FF31F659174917A
+:1026F00040E0CD010E942E1389858F5F8987DF918D
+:10270000CF91089560E00C94491360E00C9423137A
+:102710000F93CF93DF93EC0161115CC08981882313
+:1027200009F458C08D89811155C02D853E85EA89EF
+:10273000FB89EE0FFF1FE20FF31F85919491009725
+:1027400001F58989813021F41B8A1A8AF90110C0A8
+:102750001982888160E0882371F0CE010E944913BC
+:10276000EA89FB89EE0FFF1F8D859E85E80FF91F13
+:102770008591949106C0CE01DF91CF910F910C9479
+:102780001213BC01769567957695679580FF17C003
+:10279000AC0186E0569547958A95E1F7292F269555
+:1027A0002695269520514F716F7000E0CE010E9452
+:1027B000C412EA89FB893196FB8BEA8BD3CF492F70
+:1027C0006F7320E0CE010E94F5128A899B890196E1
+:1027D0009B8B8A8BDF91CF910F91089560E00C94D1
+:1027E0008813CF93DF93EC016111BAC08F898823DE
+:1027F00009F4B6C09D89911105C0CE01DF91CF913A
+:102800000C94121391509D8B8DA1811139C02BA175
+:102810003CA12F5F3F4FC901880F991FEF8DF8A191
+:10282000E80FF91F65917491862F87708EA3AB0115
+:1028300063E0569547956A95E1F7CA0196958795A5
+:10284000972F969596959FA38F739C81899F802D36
+:1028500011248DA341704093FD033CA32BA389A1B8
+:1028600090E02817390760F02AA1222329F0821B63
+:1028700091099CA38BA304C060E0CE010E941213B7
+:102880008DA181508DA3888D21E0280F288F4C8940
+:102890003FA1340F8C85380F3A836B8D662361F02E
+:1028A00070E0822F022E000C990B0E94FD198C8D76
+:1028B000869F300D11243A838A8190E0CB966BE39A
+:1028C00070E00E94FD198A833E893B83698D6623EF
+:1028D00071F0062E000C770B822F022E000C990B44
+:1028E0000E94FD198A8D869F300D11243B836D8DCA
+:1028F000662389F0822F220F990B70E00E94FD1948
+:10290000CB0162E070E00E94FD192E8D9B81289F13
+:10291000900D11249B834F3341F08B818A300CF052
+:1029200089E087FD80E08B8301C01B82F894EA81F7
+:10293000F0E0E45AFC4FE491E09300048D8198A507
+:10294000899F802D11249B81899F802D11249EA118
+:10295000899F802D11248093FF038093FE03789438
+:10296000DF91CF91089560E00C94F1136091FF0323
+:10297000662329F1809102048F5F80930204909175
+:1029800000048917E0F081E090910104911180E04A
+:1029900080930104109202048091FD03882369F062
+:1029A0008091000193E4899F802D1124895B80939D
+:1029B00000010E94DD199093FE030C940713089503
+:1029C0001F920F920FB60F9211242F933F934F93A4
+:1029D0005F936F937F938F939F93AF93BF93EF9387
+:1029E000FF930E94B614FF91EF91BF91AF919F9119
+:1029F0008F917F916F915F914F913F912F910F90A8
+:102A00000FBE0F901F901895CF93DF93EC0160E0FD
+:102A10000E94231385EA93E09E878D871B8A1A8A7A
+:102A200081E0898389E08E8B198E1B8E1D8EDF914C
+:102A3000CF910895CF93DF93EC0160E00E942313C0
+:102A40008DE993E09E878D871B8A1A8A81E08983AE
+:102A500089E08E8B198E1B8E1D8EDF91CF9108958C
+:102A6000CF93DF93EC0160E00E94231387E993E0AA
+:102A70009E878D871B8A1A8A81E0898389E08E8BE5
+:102A8000198E1B8E1D8EDF91CF910895FC01262F8C
+:102A9000660F330B9681692F70E06F5F7F4FC9011E
+:102AA0000E94FD198583089521E0FC01208308958B
+:102AB00070E085E00C94F716AF92BF92CF92DF9250
+:102AC000EF92FF920F931F93CF93DF93EC018981D5
+:102AD0009A812FE0289F8001299F100D112485E104
+:102AE0000E94DA16800F911F24E0969587952A950B
+:102AF000E1F79A8389832881222391F1EC81AD80CB
+:102B0000B12CC12CD12CA885B9857D0100E010E045
+:102B10006E817F819B0140E050E08617970728F087
+:102B2000BC01A817B90708F4BD0180E090E01F922E
+:102B30001F921F92EF930E9458196B830F900F9072
+:102B40000F900F9070E085E0DF91CF911F910F9172
+:102B5000FF90EF90DF90CF90BF90AF900C94F7165E
+:102B6000DF91CF911F910F91FF90EF90DF90CF9069
+:102B7000BF90AF900895FC018CE39FE09383828324
+:102B800084E0818381E084870895CF93DF93FC0103
+:102B900024813581232B79F1EC0184858F7141F5F6
+:102BA00084E10E94DA16BC01990F880B990B0E94F0
+:102BB000A31A26EE3FE34EEC50E40E942F1B0E9426
+:102BC000721A9B017B836A83672B81F084E089837F
+:102BD000FE01349680E0419151912417350710F49D
+:102BE000898309C08F5F8430B1F702C08FEF89837A
+:102BF0008C858F5F8C87DF91CF9108951F920F9204
+:102C00000FB60F9211242F933F938F939F93AF93FF
+:102C1000BF938091040490910504A0910604B091A3
+:102C200007043091030423E0230F2D3720F401968D
+:102C3000A11DB11D05C026E8230F0296A11DB11DDF
+:102C4000209303048093040490930504A093060446
+:102C5000B09307048091080490910904A0910A049C
+:102C6000B0910B040196A11DB11D809308049093AF
+:102C70000904A0930A04B0930B04BF91AF919F91F4
+:102C80008F913F912F910F900FBE0F901F9018952D
+:102C90002FB7F894609104047091050480910604A4
+:102CA000909107042FBF08953FB7F89480910804CE
+:102CB00090910904A0910A04B0910B0426B5A89B39
+:102CC00005C02F3F19F00196A11DB11D3FBFBA2FBE
+:102CD000A92F982F8827820F911DA11DB11DBC011E
+:102CE000CD0142E0660F771F881F991F4A95D1F7E3
+:102CF0000895CF92DF92EF92FF92CF93DF936B0113
+:102D00007C010E945416EB01C114D104E104F104CA
+:102D100079F00E9454166C1B7D0B683E7340A0F343
+:102D200081E0C81AD108E108F108C851DC4FECCFA6
+:102D3000DF91CF91FF90EF90DF90CF90089578943E
+:102D400084B5826084BD84B5816084BD85B58260B0
+:102D500085BD85B5816085BDEEE6F0E0808181604E
+:102D60008083E1E8F0E0108280818260808380814E
+:102D700081608083E0E8F0E0808181608083E1EB26
+:102D8000F0E0808184608083E0EBF0E0808181600E
+:102D90008083EAE7F0E080818460808380818260C4
+:102DA00080838081816080838081806880831092AD
+:102DB000C10008958E3008F08E502091010190E4FA
+:102DC000299F900111248770822B80937C00809131
+:102DD0007A00806480937A0080917A0086FDFCCF2F
+:102DE000809178002091790090E0922B08951F93B4
+:102DF000CF93DF93182FEB0161E00E947F1720979C
+:102E000011F460E004C0CF3FD10539F461E0812FB7
+:102E1000DF91CF911F910C94BB17E12FF0E0E754A5
+:102E2000FC4FE491E330F9F048F4E130B9F0E230DE
+:102E3000A1F584B5806284BDC8BD34C0E630E9F038
+:102E4000E73019F1E43049F5809180008062809389
+:102E50008000D0938B00C0938A0024C084B5806822
+:102E600084BDC7BD1FC080918000806880938000B2
+:102E7000D0938900C093880015C08091B00080680D
+:102E80008093B000C093B3000DC08091B000806209
+:102E90008093B000C093B40005C0C038D1050CF0D9
+:102EA000B5CFAFCFDF91CF911F910895833081F0DF
+:102EB00028F4813099F08230A1F008958630A9F08D
+:102EC0008730B9F08430D1F4809180008F7D03C0C9
+:102ED000809180008F7780938000089584B58F77EC
+:102EE00002C084B58F7D84BD08958091B0008F7736
+:102EF00003C08091B0008F7D8093B0000895CF9380
+:102F0000DF9390E0FC01E353FC4F2491FC01EF516F
+:102F1000FC4F8491882361F190E0880F991FFC0198
+:102F2000E75FFB4FC591D491FC01E150FC4FA591A7
+:102F3000B491611109C09FB7F894888120958223CC
+:102F40008883EC912E230BC0623061F49FB7F89414
+:102F50008881322F309583238883EC912E2B2C93FC
+:102F60009FBF06C08FB7F894E8812E2B28838FBFB0
+:102F7000DF91CF9108951F93CF93DF93282F30E0F7
+:102F8000F901E754FC4F8491F901E353FC4FD491CC
+:102F9000F901EF51FC4FC491CC23C1F0162F8111E0
+:102FA0000E945617EC2FF0E0EE0FFF1FE150FC4F90
+:102FB000A591B4919FB7F894111104C08C91D0954C
+:102FC000D82302C0EC91DE2BDC939FBFDF91CF9121
+:102FD0001F910895CF93DF93282F30E0F901E75434
+:102FE000FC4F8491F901E353FC4FD491F901EF5167
+:102FF000FC4FC491CC2391F081110E945617EC2F05
+:10300000F0E0EE0FFF1FEB50FC4FA591B491EC9157
+:10301000ED2381E090E021F480E002C080E090E0C8
+:10302000DF91CF910895CF92DF92EF92FF920F93AD
+:103030001F93CF93DF936C01EB017B01E40EF51E30
+:1030400000E010E0CE15DF0561F06991D601ED9149
+:10305000FC910190F081E02DC6010995080F191F20
+:10306000F1CFC801DF91CF911F910F91FF90EF90A9
+:10307000DF90CF9008956115710579F0FB01019003
+:103080000020E9F73197AF01461B570BDC01ED91AA
+:10309000FC910280F381E02D099480E090E0089596
+:1030A000EF92FF920F931F93CF93DF937C01FB016D
+:1030B00000E010E06491EF012196662361F0D701F2
+:1030C000ED91FC910190F081E02DC7010995080F69
+:1030D000191FFE01EFCFC801DF91CF911F910F9112
+:1030E000FF90EF900895DC01ED91FC910190F0814B
+:1030F000E02D09940F931F93CF93DF93EC016DE0C4
+:103100000E9473188C016AE0CE010E947318800F30
+:10311000911FDF91CF911F910F9108950F931F93EE
+:10312000CF93DF93EC010E9450188C01CE010E94D6
+:103130007A18800F911FDF91CF911F910F91089501
+:103140008F929F92AF92BF92CF92DF92EF92FF92B7
+:103150000F931F93CF93DF93CDB7DEB7A1970FB631
+:10316000F894DEBF0FBECDBF6C01142FE52FCB014D
+:10317000022F19A2223008F40AE07E0121E2E20EB9
+:10318000F11C802E912CA12CB12C612F7E2FA5013A
+:1031900094010E94111A029F1019112481E0E81A6B
+:1031A000F1081A3014F4105D01C0195CF7011083A6
+:1031B000122FE32FCA01232B242B252B31F7B70124
+:1031C000C6010E943B18A1960FB6F894DEBF0FBE51
+:1031D000CDBFDF91CF911F910F91FF90EF90DF90C6
+:1031E000CF90BF90AF909F908F900895211531059B
+:1031F00041F4DC01ED91FC910190F081E02D642F10
+:1032000009940C94A0189A01AB0160E070E00C9452
+:10321000F618CF92DF92EF92FF920F931F93CF9306
+:10322000DF932115310581F4DC01ED91FC910190D2
+:10323000F081E02D642FDF91CF911F910F91FF90CE
+:10324000EF90DF90CF9009942A30310501F577FF98
+:103250001DC06A017B01EC016DE20E9473188C01B4
+:1032600044275527BA014C195D096E097F092AE0E8
+:10327000CE010E94A018800F911FDF91CF911F9166
+:103280000F91FF90EF90DF90CF9008952AE0DF91AB
+:10329000CF911F910F91FF90EF90DF90CF900C9402
+:1032A000A0189A01AB01770F660B770B0C940919E4
+:1032B0004F925F926F927F92AF92BF92CF92DF92C6
+:1032C000EF92FF920F931F93CF93DF93CDB7DEB7AB
+:1032D00029013A019B01AC01241935094609570916
+:1032E00089899A89AB89BC89BC01CD016A197B099E
+:1032F0008C099D090E94CD19A8019701241935094F
+:10330000460957090E94331ACA01B9016A0D7B1D8B
+:103310008C1D9D1DDF91CF911F910F91FF90EF901C
+:10332000DF90CF90BF90AF907F906F905F904F9065
+:103330000895089561E08AE00E94BB1761E08AE089
+:103340000E947F178CB580618CBD8CB580648CBD6C
+:1033500061E08DE00E947F1761E08BE00C947F17A5
+:10336000811103C08CB5806202C08CB58F7D8CBD8D
+:1033700008959CB5937F892B8CBD08959CB59C7F47
+:10338000282F2370922B9CBD2DB582FB992790F995
+:10339000822F8E7F892B8DBD0895DB018F939F93A4
+:1033A0000E94521ABF91AF91A29F800D911DA39FC1
+:1033B000900DB29F900D11240895991B79E004C0DF
+:1033C000991F961708F0961B881F7A95C9F7809564
+:1033D0000895AA1BBB1B51E107C0AA1FBB1FA6175C
+:1033E000B70710F0A61BB70B881F991F5A95A9F7AE
+:1033F00080959095BC01CD01089597FB072E16F49A
+:10340000009407D077FD09D00E94E91907FC05D088
+:103410003EF4909581959F4F0895709561957F4FEB
+:103420000895A1E21A2EAA1BBB1BFD010DC0AA1F05
+:10343000BB1FEE1FFF1FA217B307E407F50720F01D
+:10344000A21BB30BE40BF50B661F771F881F991F98
+:103450001A9469F760957095809590959B01AC01E1
+:10346000BD01CF010895052E97FB1EF400940E9424
+:103470004A1A57FD07D00E94111A07FC03D04EF4D8
+:103480000C944A1A50954095309521953F4F4F4FD7
+:103490005F4F089590958095709561957F4F8F4F00
+:1034A0009F4F08950E94631AA59F900DB49F900DA1
+:1034B000A49F800D911D11240895EE0FFF1F05900C
+:1034C000F491E02D0994A29FB001B39FC001A39F86
+:1034D000700D811D1124911DB29F700D811D11244D
+:1034E000911D08950E940E1B88F09F5798F0B92FE8
+:1034F0009927B751B0F0E1F0660F771F881F991F29
+:103500001AF0BA95C9F714C0B13091F00E94281B87
+:10351000B1E008950C94281B672F782F8827B85F97
+:1035200039F0B93FCCF3869577956795B395D9F780
+:103530003EF490958095709561957F4F8F4F9F4F8A
+:103540000895E89409C097FB3EF490958095709596
+:1035500061957F4F8F4F9F4F9923A9F0F92F96E9DF
+:10356000BB279395F695879577956795B795F11154
+:10357000F8CFFAF4BB0F11F460FF1BC06F5F7F4FF1
+:103580008F4F9F4F16C0882311F096E911C0772303
+:1035900021F09EE8872F762F05C0662371F096E80C
+:1035A000862F70E060E02AF09A95660F771F881FDB
+:1035B000DAF7880F9695879597F9089597F99F6799
+:1035C00080E870E060E008959FEF80EC08950024AB
+:1035D0000A941616170618060906089500240A9478
+:1035E00012161306140605060895092E0394000CFE
+:1035F00011F4882352F0BB0F40F4BF2B11F460FF8D
+:1036000004C06F5F7F4F8F4F9F4F089557FD9058B5
+:10361000440F551F59F05F3F71F04795880F97FB96
+:10362000991F61F09F3F79F0879508951216130650
+:103630001406551FF2CF4695F1DF08C0161617067F
+:103640001806991FF1CF86957105610508940895B4
+:10365000E894BB2766277727CB0197F908950E9446
+:10366000421B0C94F51A0E94E71A38F00E94EE1AD9
+:1036700020F0952311F00C94DE1A0C94E41A112416
+:103680000C94291B0E94061B70F3959FC1F3950FA4
+:1036900050E0551F629FF001729FBB27F00DB11DD6
+:1036A000639FAA27F00DB11DAA1F649F6627B00D66
+:1036B000A11D661F829F2227B00DA11D621F739F4F
+:1036C000B00DA11D621F839FA00D611D221F749F5D
+:1036D0003327A00D611D231F849F600D211D822FA4
+:1036E000762F6A2F11249F5750409AF0F1F08823CB
+:1036F0004AF0EE0FFF1FBB1F661F771F881F9150F8
+:103700005040A9F79E3F510580F00C94DE1A0C94AE
+:10371000291B5F3FE4F3983ED4F386957795679530
+:10372000B795F795E7959F5FC1F7FE2B880F911D21
+:103730009695879597F90895DC0101C06D934150E6
+:103740005040E0F70895FB01DC014150504048F043
+:1037500001900D920020C9F701C01D9241505040C8
+:08376000E0F70895F894FFCF93
+:1037680001010019230000000086020000000099F2
+:103778001900000000000000000000000000000028
+:1037880000980500000000000000000000DE0300B3
+:103798000021040000FF03000042040000000000B4
+:1037A8000000000000000000000000000000000011
+:1037B800000000000000000000AD050000970500B3
+:1037C8000000000000000000008C0C13184C4F4152
+:0437D8004445520012
+:040000030000046A8B
:00000001FF
diff --git a/Exe/POCKET.MAP b/Exe/POCKET.MAP index 9e04e10..fa94013 100644 --- a/Exe/POCKET.MAP +++ b/Exe/POCKET.MAP @@ -3,7 +3,7 @@ Archive member included to satisfy reference by file (symbol) ../lib/libgamebuino.a(Buttons.o) Obj/Game.o (_ZN7Buttons8releasedEh) ../lib/libgamebuino.a(Display.o) - Obj/Sprite.o (_ZN7Display8setColorEaa) + Obj/HumanPlayer.o (_ZN7Display8setColorEa) ../lib/libgamebuino.a(font3x5.o) ../lib/libgamebuino.a(Display.o) (font3x5) ../lib/libgamebuino.a(Gamebuino.o) @@ -191,6 +191,8 @@ Discarded input sections .text 0x0000000000000000 0x0 Obj/Camera.o .data 0x0000000000000000 0x0 Obj/Camera.o .bss 0x0000000000000000 0x0 Obj/Camera.o + .text._ZN6Camera10adjustLockEb + 0x0000000000000000 0x6 Obj/Camera.o .text 0x0000000000000000 0x0 Obj/BaseUnit.o .data 0x0000000000000000 0x0 Obj/BaseUnit.o .bss 0x0000000000000000 0x0 Obj/BaseUnit.o @@ -200,6 +202,12 @@ Discarded input sections .text 0x0000000000000000 0x0 Obj/Menu.o .data 0x0000000000000000 0x0 Obj/Menu.o .bss 0x0000000000000000 0x0 Obj/Menu.o + .text 0x0000000000000000 0x0 Obj/Cursor.o + .data 0x0000000000000000 0x0 Obj/Cursor.o + .bss 0x0000000000000000 0x0 Obj/Cursor.o + .text 0x0000000000000000 0x0 Obj/HumanPlayerBtn.o + .data 0x0000000000000000 0x0 Obj/HumanPlayerBtn.o + .bss 0x0000000000000000 0x0 Obj/HumanPlayerBtn.o .text 0x0000000000000000 0x0 ../lib/libgamebuino.a(Buttons.o) .data 0x0000000000000000 0x0 ../lib/libgamebuino.a(Buttons.o) .bss 0x0000000000000000 0x0 ../lib/libgamebuino.a(Buttons.o) @@ -217,8 +225,6 @@ Discarded input sections 0x0000000000000000 0x34 ../lib/libgamebuino.a(Display.o) .text._ZN7Display10fillScreenEh 0x0000000000000000 0x10 ../lib/libgamebuino.a(Display.o) - .text._ZN7Display8drawRectEaaaa - 0x0000000000000000 0x50 ../lib/libgamebuino.a(Display.o) .text._ZN7Display8drawLineEaaaa 0x0000000000000000 0xf2 ../lib/libgamebuino.a(Display.o) .text._ZN7Display10drawCircleEaaa @@ -1030,6 +1036,8 @@ LOAD Obj/Camera.o LOAD Obj/BaseUnit.o LOAD Obj/Unit.o LOAD Obj/Menu.o +LOAD Obj/Cursor.o +LOAD Obj/HumanPlayerBtn.o LOAD ../lib/libgamebuino.a LOAD ../lib/libarduino.a LOAD /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a @@ -1138,7 +1146,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x0000000000000000 0x348c +.text 0x0000000000000000 0x3768 *(.vectors) .vectors 0x0000000000000000 0x68 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o 0x0000000000000000 __vectors @@ -1160,584 +1168,630 @@ END GROUP 0x000000000000006f 0x5 Obj/Game.o .progmem.data._ZZL9GamePausevE20astrPauseMenuOptions 0x0000000000000074 0x4 Obj/Game.o + .progmem.data._ZL15au8MouseSprData + 0x0000000000000078 0xa Obj/HumanPlayer.o .progmem.data._ZL17au8PeasantSprData - 0x0000000000000078 0xa Obj/Unit.o + 0x0000000000000082 0xa Obj/Unit.o .progmem.data._ZZ8MainMenuvE20strMainMenuOptions_0 - 0x0000000000000082 0x13 Obj/Menu.o + 0x000000000000008c 0x13 Obj/Menu.o .progmem.data._ZZ8MainMenuvE20strMainMenuOptions_1 - 0x0000000000000095 0x11 Obj/Menu.o + 0x000000000000009f 0x11 Obj/Menu.o .progmem.data._ZZ8MainMenuvE20strMainMenuOptions_2 - 0x00000000000000a6 0x8 Obj/Menu.o + 0x00000000000000b0 0x8 Obj/Menu.o .progmem.data._ZZ8MainMenuvE19astrMainMenuOptions - 0x00000000000000ae 0x6 Obj/Menu.o + 0x00000000000000b8 0x6 Obj/Menu.o .progmem.data._ZZ8MainMenuvE3__c - 0x00000000000000b4 0xf Obj/Menu.o + 0x00000000000000be 0xf Obj/Menu.o .progmem.data.font3x5 - 0x00000000000000c3 0x182 ../lib/libgamebuino.a(font3x5.o) - 0x00000000000000c3 font3x5 + 0x00000000000000cd 0x182 ../lib/libgamebuino.a(font3x5.o) + 0x00000000000000cd font3x5 .progmem.data._ZZN9Gamebuino10changeGameEvE3__c_0 - 0x0000000000000245 0x25 ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000024f 0x25 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino10changeGameEvE3__c - 0x000000000000026a 0x28 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000000274 0x28 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino14displayBatteryEvE3__c_1 - 0x0000000000000292 0xb ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000029c 0xb ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino14displayBatteryEvE3__c_0 - 0x000000000000029d 0x15 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002a7 0x15 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino14displayBatteryEvE3__c - 0x00000000000002b2 0xe ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002bc 0xe ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_3 - 0x00000000000002c0 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002ca 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_2 - 0x00000000000002c4 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002ce 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_1 - 0x00000000000002c8 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002d2 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_0 - 0x00000000000002cc 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002d6 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c - 0x00000000000002d0 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002da 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZL13gamebuinoLogo - 0x00000000000002d4 0x70 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000002de 0x70 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZL12startupSound - 0x0000000000000344 0xe ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000034e 0xe ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZL12_halfPeriods - 0x0000000000000352 0x3b ../lib/libgamebuino.a(Sound.o) + 0x000000000000035c 0x3b ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL9playTickP - 0x000000000000038d 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000000397 0x6 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL17playCancelPattern - 0x0000000000000393 0x8 ../lib/libgamebuino.a(Sound.o) + 0x000000000000039d 0x8 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL13playOKPattern - 0x000000000000039b 0x8 ../lib/libgamebuino.a(Sound.o) + 0x00000000000003a5 0x8 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL18defaultInstruments - 0x00000000000003a3 0x4 ../lib/libgamebuino.a(Sound.o) + 0x00000000000003ad 0x4 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL15noiseInstrument - 0x00000000000003a7 0x4 ../lib/libgamebuino.a(Sound.o) + 0x00000000000003b1 0x4 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL20squareWaveInstrument - 0x00000000000003ab 0x4 ../lib/libgamebuino.a(Sound.o) + 0x00000000000003b5 0x4 ../lib/libgamebuino.a(Sound.o) .progmem.data.digital_pin_to_timer_PGM - 0x00000000000003af 0x14 ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003af digital_pin_to_timer_PGM + 0x00000000000003b9 0x14 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000003b9 digital_pin_to_timer_PGM .progmem.data.digital_pin_to_bit_mask_PGM - 0x00000000000003c3 0x14 ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003c3 digital_pin_to_bit_mask_PGM + 0x00000000000003cd 0x14 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000003cd digital_pin_to_bit_mask_PGM .progmem.data.digital_pin_to_port_PGM - 0x00000000000003d7 0x14 ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003d7 digital_pin_to_port_PGM + 0x00000000000003e1 0x14 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000003e1 digital_pin_to_port_PGM .progmem.data.port_to_input_PGM - 0x00000000000003eb 0xa ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003eb port_to_input_PGM - .progmem.data.port_to_output_PGM 0x00000000000003f5 0xa ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003f5 port_to_output_PGM - .progmem.data.port_to_mode_PGM + 0x00000000000003f5 port_to_input_PGM + .progmem.data.port_to_output_PGM 0x00000000000003ff 0xa ../lib/libarduino.a(wiring_digital.o) - 0x00000000000003ff port_to_mode_PGM - 0x000000000000040a . = ALIGN (0x2) - *fill* 0x0000000000000409 0x1 + 0x00000000000003ff port_to_output_PGM + .progmem.data.port_to_mode_PGM + 0x0000000000000409 0xa ../lib/libarduino.a(wiring_digital.o) + 0x0000000000000409 port_to_mode_PGM + 0x0000000000000414 . = ALIGN (0x2) + *fill* 0x0000000000000413 0x1 *(.jumptables) *(.jumptables*) *(.lowtext) *(.lowtext*) - 0x000000000000040a __ctors_start = . + 0x0000000000000414 __ctors_start = . *(.ctors) - .ctors 0x000000000000040a 0x2 Obj/System.o - 0x000000000000040c __ctors_end = . - 0x000000000000040c __dtors_start = . + .ctors 0x0000000000000414 0x2 Obj/System.o + 0x0000000000000416 __ctors_end = . + 0x0000000000000416 __dtors_start = . *(.dtors) - 0x000000000000040c __dtors_end = . + 0x0000000000000416 __dtors_end = . SORT(*)(.ctors) SORT(*)(.dtors) *(.init0) - .init0 0x000000000000040c 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o - 0x000000000000040c __init + .init0 0x0000000000000416 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o + 0x0000000000000416 __init *(.init0) *(.init1) *(.init1) *(.init2) - .init2 0x000000000000040c 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o + .init2 0x0000000000000416 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o *(.init2) *(.init3) *(.init3) *(.init4) - .init4 0x0000000000000418 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) - 0x0000000000000418 __do_copy_data - .init4 0x000000000000042e 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) - 0x000000000000042e __do_clear_bss + .init4 0x0000000000000422 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o) + 0x0000000000000422 __do_copy_data + .init4 0x0000000000000438 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o) + 0x0000000000000438 __do_clear_bss *(.init4) *(.init5) *(.init5) *(.init6) - .init6 0x000000000000043e 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ctors.o) - 0x000000000000043e __do_global_ctors + .init6 0x0000000000000448 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_ctors.o) + 0x0000000000000448 __do_global_ctors *(.init6) *(.init7) *(.init7) *(.init8) *(.init8) *(.init9) - .init9 0x0000000000000454 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o + .init9 0x000000000000045e 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o *(.init9) *(.text) - .text 0x000000000000045c 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o - 0x000000000000045c __vector_22 - 0x000000000000045c __vector_1 - 0x000000000000045c __vector_24 - 0x000000000000045c __vector_12 - 0x000000000000045c __bad_interrupt - 0x000000000000045c __vector_6 - 0x000000000000045c __vector_3 - 0x000000000000045c __vector_23 - 0x000000000000045c __vector_25 - 0x000000000000045c __vector_13 - 0x000000000000045c __vector_17 - 0x000000000000045c __vector_19 - 0x000000000000045c __vector_7 - 0x000000000000045c __vector_5 - 0x000000000000045c __vector_4 - 0x000000000000045c __vector_9 - 0x000000000000045c __vector_2 - 0x000000000000045c __vector_21 - 0x000000000000045c __vector_15 - 0x000000000000045c __vector_8 - 0x000000000000045c __vector_14 - 0x000000000000045c __vector_10 - 0x000000000000045c __vector_18 - 0x000000000000045c __vector_20 - 0x0000000000000460 . = ALIGN (0x2) + .text 0x0000000000000466 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o + 0x0000000000000466 __vector_22 + 0x0000000000000466 __vector_1 + 0x0000000000000466 __vector_24 + 0x0000000000000466 __vector_12 + 0x0000000000000466 __bad_interrupt + 0x0000000000000466 __vector_6 + 0x0000000000000466 __vector_3 + 0x0000000000000466 __vector_23 + 0x0000000000000466 __vector_25 + 0x0000000000000466 __vector_13 + 0x0000000000000466 __vector_17 + 0x0000000000000466 __vector_19 + 0x0000000000000466 __vector_7 + 0x0000000000000466 __vector_5 + 0x0000000000000466 __vector_4 + 0x0000000000000466 __vector_9 + 0x0000000000000466 __vector_2 + 0x0000000000000466 __vector_21 + 0x0000000000000466 __vector_15 + 0x0000000000000466 __vector_8 + 0x0000000000000466 __vector_14 + 0x0000000000000466 __vector_10 + 0x0000000000000466 __vector_18 + 0x0000000000000466 __vector_20 + 0x000000000000046a . = ALIGN (0x2) *(.text.*) .text.startup.main - 0x0000000000000460 0xa Obj/main.o - 0x0000000000000460 main + 0x000000000000046a 0xa Obj/main.o + 0x000000000000046a main .text._Z4GameRK11tGameConfig - 0x000000000000046a 0x7e Obj/Game.o - 0x000000000000046a _Z4GameRK11tGameConfig + 0x0000000000000474 0x76 Obj/Game.o + 0x0000000000000474 _Z4GameRK11tGameConfig .text._Z10SystemInitv - 0x00000000000004e8 0xc Obj/System.o - 0x00000000000004e8 _Z10SystemInitv + 0x00000000000004ea 0xc Obj/System.o + 0x00000000000004ea _Z10SystemInitv .text.startup._GLOBAL__sub_I_gb - 0x00000000000004f4 0x16 Obj/System.o + 0x00000000000004f6 0x16 Obj/System.o .text._ZN11HumanPlayer11drawHandlerEv - 0x000000000000050a 0x2 Obj/HumanPlayer.o - 0x000000000000050a _ZN11HumanPlayer11drawHandlerEv - 0x000000000000050a _ZN11HumanPlayer13onBBtnPressedEv - .text._ZN11HumanPlayer13onABtnPressedEv - 0x000000000000050c 0x2 Obj/HumanPlayer.o - 0x000000000000050c _ZN11HumanPlayer13onABtnPressedEv + 0x000000000000050c 0xa0 Obj/HumanPlayer.o + 0x000000000000050c _ZN11HumanPlayer11drawHandlerEv .text._ZN11HumanPlayerC2EPKcRK6Camera - 0x000000000000050e 0x3e Obj/HumanPlayer.o - 0x000000000000050e _ZN11HumanPlayerC2EPKcRK6Camera - 0x000000000000050e _ZN11HumanPlayerC1EPKcRK6Camera - .text._ZN11HumanPlayer13buttonHandlerEv - 0x000000000000054c 0xde Obj/HumanPlayer.o - 0x000000000000054c _ZN11HumanPlayer13buttonHandlerEv + 0x00000000000005ac 0x56 Obj/HumanPlayer.o + 0x00000000000005ac _ZN11HumanPlayerC2EPKcRK6Camera + 0x00000000000005ac _ZN11HumanPlayerC1EPKcRK6Camera .text._ZN11HumanPlayer7handlerEv - 0x000000000000062a 0x32 Obj/HumanPlayer.o - 0x000000000000062a _ZN11HumanPlayer7handlerEv + 0x0000000000000602 0x22 Obj/HumanPlayer.o + 0x0000000000000602 _ZN11HumanPlayer7handlerEv .text._ZN6SpriteC2EPKhbhh - 0x000000000000065c 0x16 Obj/Sprite.o - 0x000000000000065c _ZN6SpriteC2EPKhbhh - 0x000000000000065c _ZN6SpriteC1EPKhbhh - .text._ZN6Sprite6setPosEhh - 0x0000000000000672 0x8 Obj/Sprite.o - 0x0000000000000672 _ZN6Sprite6setPosEhh + 0x0000000000000624 0x16 Obj/Sprite.o + 0x0000000000000624 _ZN6SpriteC2EPKhbhh + 0x0000000000000624 _ZN6SpriteC1EPKhbhh .text._ZN6Sprite4drawEv - 0x000000000000067a 0x68 Obj/Sprite.o - 0x000000000000067a _ZN6Sprite4drawEv + 0x000000000000063a 0x6e Obj/Sprite.o + 0x000000000000063a _ZN6Sprite4drawEv + .text._ZN6Sprite6setPosEhh + 0x00000000000006a8 0x8 Obj/Sprite.o + 0x00000000000006a8 _ZN6Sprite6setPosEhh .text._ZN6PlayerC2EPKc - 0x00000000000006e2 0x8c Obj/Player.o - 0x00000000000006e2 _ZN6PlayerC1EPKc - 0x00000000000006e2 _ZN6PlayerC2EPKc + 0x00000000000006b0 0x8c Obj/Player.o + 0x00000000000006b0 _ZN6PlayerC1EPKc + 0x00000000000006b0 _ZN6PlayerC2EPKc + .text._ZN6Player11handleUnitsEv + 0x000000000000073c 0x2e Obj/Player.o + 0x000000000000073c _ZN6Player11handleUnitsEv + .text._ZN6Player9drawUnitsEv + 0x000000000000076a 0x2e Obj/Player.o + 0x000000000000076a _ZN6Player9drawUnitsEv .text._ZN6CameraC2Ev - 0x000000000000076e 0x18 Obj/Camera.o - 0x000000000000076e _ZN6CameraC1Ev - 0x000000000000076e _ZN6CameraC2Ev - .text._ZN6Camera7handlerEv - 0x0000000000000786 0x50 Obj/Camera.o - 0x0000000000000786 _ZN6Camera7handlerEv + 0x0000000000000798 0x10 Obj/Camera.o + 0x0000000000000798 _ZN6CameraC1Ev + 0x0000000000000798 _ZN6CameraC2Ev .text._ZNK6Camera4getXEh - 0x00000000000007d6 0x8 Obj/Camera.o - 0x00000000000007d6 _ZNK6Camera4getXEh + 0x00000000000007a8 0xa Obj/Camera.o + 0x00000000000007a8 _ZNK6Camera4getXEh .text._ZNK6Camera4getYEh - 0x00000000000007de 0x8 Obj/Camera.o - 0x00000000000007de _ZNK6Camera4getYEh - .text._ZN6Camera16onLeftBtnPressedEv - 0x00000000000007e6 0x20 Obj/Camera.o - 0x00000000000007e6 _ZN6Camera16onLeftBtnPressedEv - .text._ZN6Camera17onRightBtnPressedEv - 0x0000000000000806 0x3a Obj/Camera.o - 0x0000000000000806 _ZN6Camera17onRightBtnPressedEv - .text._ZN6Camera14onUpBtnPressedEv - 0x0000000000000840 0x20 Obj/Camera.o - 0x0000000000000840 _ZN6Camera14onUpBtnPressedEv - .text._ZN6Camera16onDownBtnPressedEv - 0x0000000000000860 0x1c Obj/Camera.o - 0x0000000000000860 _ZN6Camera16onDownBtnPressedEv + 0x00000000000007b2 0xa Obj/Camera.o + 0x00000000000007b2 _ZNK6Camera4getYEh + .text._ZN6Camera16onLeftBtnPressedER6Cursor + 0x00000000000007bc 0x42 Obj/Camera.o + 0x00000000000007bc _ZN6Camera16onLeftBtnPressedER6Cursor + .text._ZN6Camera17onRightBtnPressedER6Cursor + 0x00000000000007fe 0x44 Obj/Camera.o + 0x00000000000007fe _ZN6Camera17onRightBtnPressedER6Cursor + .text._ZN6Camera14onUpBtnPressedER6Cursor + 0x0000000000000842 0x42 Obj/Camera.o + 0x0000000000000842 _ZN6Camera14onUpBtnPressedER6Cursor + .text._ZN6Camera16onDownBtnPressedER6Cursor + 0x0000000000000884 0x44 Obj/Camera.o + 0x0000000000000884 _ZN6Camera16onDownBtnPressedER6Cursor + .text._ZNK6Camera8isLockedEv + 0x00000000000008c8 0x6 Obj/Camera.o + 0x00000000000008c8 _ZNK6Camera8isLockedEv .text._ZN8BaseUnitC2Ev - 0x000000000000087c 0x12 Obj/BaseUnit.o - 0x000000000000087c _ZN8BaseUnitC1Ev - 0x000000000000087c _ZN8BaseUnitC2Ev + 0x00000000000008ce 0x14 Obj/BaseUnit.o + 0x00000000000008ce _ZN8BaseUnitC1Ev + 0x00000000000008ce _ZN8BaseUnitC2Ev .text._ZN8BaseUnit6createEjj - 0x000000000000088e 0x10 Obj/BaseUnit.o - 0x000000000000088e _ZN8BaseUnit6createEjj + 0x00000000000008e2 0x10 Obj/BaseUnit.o + 0x00000000000008e2 _ZN8BaseUnit6createEjj .text._ZN8BaseUnit7handlerEv - 0x000000000000089e 0x2 Obj/BaseUnit.o - 0x000000000000089e _ZN8BaseUnit7handlerEv + 0x00000000000008f2 0x2 Obj/BaseUnit.o + 0x00000000000008f2 _ZN8BaseUnit7handlerEv .text._ZN4UnitC2ENS_7tUnitIDE - 0x00000000000008a0 0x1e Obj/Unit.o - 0x00000000000008a0 _ZN4UnitC2ENS_7tUnitIDE - 0x00000000000008a0 _ZN4UnitC1ENS_7tUnitIDE + 0x00000000000008f4 0x1e Obj/Unit.o + 0x00000000000008f4 _ZN4UnitC2ENS_7tUnitIDE + 0x00000000000008f4 _ZN4UnitC1ENS_7tUnitIDE .text._ZN4Unit6createENS_7tUnitIDEjj - 0x00000000000008be 0x5c Obj/Unit.o - 0x00000000000008be _ZN4Unit6createENS_7tUnitIDEjj - .text._ZN4Unit11drawHandlerEv - 0x000000000000091a 0x88 Obj/Unit.o - 0x000000000000091a _ZN4Unit11drawHandlerEv + 0x0000000000000912 0x5c Obj/Unit.o + 0x0000000000000912 _ZN4Unit6createENS_7tUnitIDEjj .text._ZN4Unit7handlerEv - 0x00000000000009a2 0x14 Obj/Unit.o - 0x00000000000009a2 _ZN4Unit7handlerEv + 0x000000000000096e 0x4 Obj/Unit.o + 0x000000000000096e _ZN4Unit7handlerEv + .text._ZN4Unit11drawHandlerEv + 0x0000000000000972 0x88 Obj/Unit.o + 0x0000000000000972 _ZN4Unit11drawHandlerEv + .text._ZL20MainMenuSinglePlayerv + 0x00000000000009fa 0x9e Obj/Menu.o .text._Z8MainMenuv - 0x00000000000009b6 0xbc Obj/Menu.o - 0x00000000000009b6 _Z8MainMenuv + 0x0000000000000a98 0x24 Obj/Menu.o + 0x0000000000000a98 _Z8MainMenuv + .text._ZN6CursorC2Ev + 0x0000000000000abc 0xc Obj/Cursor.o + 0x0000000000000abc _ZN6CursorC1Ev + 0x0000000000000abc _ZN6CursorC2Ev + .text._ZN6Cursor4moveEaa + 0x0000000000000ac8 0x3c Obj/Cursor.o + 0x0000000000000ac8 _ZN6Cursor4moveEaa + .text._ZN6Cursor4getXEv + 0x0000000000000b04 0x6 Obj/Cursor.o + 0x0000000000000b04 _ZN6Cursor4getXEv + .text._ZN6Cursor4getYEv + 0x0000000000000b0a 0x6 Obj/Cursor.o + 0x0000000000000b0a _ZN6Cursor4getYEv + .text._ZN6Cursor11isXCenteredEv + 0x0000000000000b10 0xe Obj/Cursor.o + 0x0000000000000b10 _ZN6Cursor11isXCenteredEv + .text._ZN6Cursor11isYCenteredEv + 0x0000000000000b1e 0x10 Obj/Cursor.o + 0x0000000000000b1e _ZN6Cursor11isYCenteredEv + .text._ZN11HumanPlayer13onBBtnPressedEv + 0x0000000000000b2e 0x2 Obj/HumanPlayerBtn.o + 0x0000000000000b2e _ZN11HumanPlayer13onBBtnPressedEv + .text._ZN11HumanPlayer14onABtnReleasedEv + 0x0000000000000b30 0x2a Obj/HumanPlayerBtn.o + 0x0000000000000b30 _ZN11HumanPlayer14onABtnReleasedEv + .text._ZN11HumanPlayer13onABtnPressedEv + 0x0000000000000b5a 0x1e Obj/HumanPlayerBtn.o + 0x0000000000000b5a _ZN11HumanPlayer13onABtnPressedEv + .text._ZN11HumanPlayer26playerButtonPressedHandlerEj + 0x0000000000000b78 0x50 Obj/HumanPlayerBtn.o + 0x0000000000000b78 _ZN11HumanPlayer26playerButtonPressedHandlerEj + .text._ZN11HumanPlayer26cameraButtonPressedHandlerEj + 0x0000000000000bc8 0xa0 Obj/HumanPlayerBtn.o + 0x0000000000000bc8 _ZN11HumanPlayer26cameraButtonPressedHandlerEj + .text._ZN11HumanPlayer27playerButtonReleasedHandlerEj + 0x0000000000000c68 0x50 Obj/HumanPlayerBtn.o + 0x0000000000000c68 _ZN11HumanPlayer27playerButtonReleasedHandlerEj + .text._ZN11HumanPlayer13buttonHandlerEv + 0x0000000000000cb8 0x46 Obj/HumanPlayerBtn.o + 0x0000000000000cb8 _ZN11HumanPlayer13buttonHandlerEv .text._ZN7Buttons5beginEv - 0x0000000000000a72 0x20 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000a72 _ZN7Buttons5beginEv + 0x0000000000000cfe 0x20 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000cfe _ZN7Buttons5beginEv .text._ZN7Buttons6updateEv - 0x0000000000000a92 0x5a ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000a92 _ZN7Buttons6updateEv + 0x0000000000000d1e 0x5a ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000d1e _ZN7Buttons6updateEv .text._ZN7Buttons7pressedEh - 0x0000000000000aec 0x12 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000aec _ZN7Buttons7pressedEh + 0x0000000000000d78 0x12 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000d78 _ZN7Buttons7pressedEh .text._ZN7Buttons8releasedEh - 0x0000000000000afe 0x12 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000afe _ZN7Buttons8releasedEh + 0x0000000000000d8a 0x12 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000d8a _ZN7Buttons8releasedEh .text._ZN7Buttons6repeatEhh - 0x0000000000000b10 0x30 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000b10 _ZN7Buttons6repeatEhh + 0x0000000000000d9c 0x30 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000d9c _ZN7Buttons6repeatEhh .text._ZN7Buttons8timeHeldEh - 0x0000000000000b40 0x10 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000000b40 _ZN7Buttons8timeHeldEh + 0x0000000000000dcc 0x10 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000000dcc _ZN7Buttons8timeHeldEh .text._ZN8SPIClass8transferEh - 0x0000000000000b50 0xc ../lib/libgamebuino.a(Display.o) - 0x0000000000000b50 _ZN8SPIClass8transferEh + 0x0000000000000ddc 0xc ../lib/libgamebuino.a(Display.o) + 0x0000000000000ddc _ZN8SPIClass8transferEh .text._ZN7Display9drawPixelEaa - 0x0000000000000b5c 0xb8 ../lib/libgamebuino.a(Display.o) - 0x0000000000000b5c _ZN7Display9drawPixelEaa + 0x0000000000000de8 0xb8 ../lib/libgamebuino.a(Display.o) + 0x0000000000000de8 _ZN7Display9drawPixelEaa .text._ZN7Display7commandEh - 0x0000000000000c14 0x3c ../lib/libgamebuino.a(Display.o) - 0x0000000000000c14 _ZN7Display7commandEh + 0x0000000000000ea0 0x3c ../lib/libgamebuino.a(Display.o) + 0x0000000000000ea0 _ZN7Display7commandEh .text._ZN7Display5clearEv - 0x0000000000000c50 0x22 ../lib/libgamebuino.a(Display.o) - 0x0000000000000c50 _ZN7Display5clearEv + 0x0000000000000edc 0x22 ../lib/libgamebuino.a(Display.o) + 0x0000000000000edc _ZN7Display5clearEv .text._ZN7Display6updateEv - 0x0000000000000c72 0x8a ../lib/libgamebuino.a(Display.o) - 0x0000000000000c72 _ZN7Display6updateEv + 0x0000000000000efe 0x8a ../lib/libgamebuino.a(Display.o) + 0x0000000000000efe _ZN7Display6updateEv .text._ZN7Display8setColorEa - 0x0000000000000cfc 0x8 ../lib/libgamebuino.a(Display.o) - 0x0000000000000cfc _ZN7Display8setColorEa + 0x0000000000000f88 0x8 ../lib/libgamebuino.a(Display.o) + 0x0000000000000f88 _ZN7Display8setColorEa .text._ZN7Display8setColorEaa - 0x0000000000000d04 0x8 ../lib/libgamebuino.a(Display.o) - 0x0000000000000d04 _ZN7Display8setColorEaa + 0x0000000000000f90 0x8 ../lib/libgamebuino.a(Display.o) + 0x0000000000000f90 _ZN7Display8setColorEaa .text._ZN7Display13drawFastVLineEaaa - 0x0000000000000d0c 0x38 ../lib/libgamebuino.a(Display.o) - 0x0000000000000d0c _ZN7Display13drawFastVLineEaaa + 0x0000000000000f98 0x38 ../lib/libgamebuino.a(Display.o) + 0x0000000000000f98 _ZN7Display13drawFastVLineEaaa .text._ZN7Display13drawFastHLineEaaa - 0x0000000000000d44 0x38 ../lib/libgamebuino.a(Display.o) - 0x0000000000000d44 _ZN7Display13drawFastHLineEaaa + 0x0000000000000fd0 0x38 ../lib/libgamebuino.a(Display.o) + 0x0000000000000fd0 _ZN7Display13drawFastHLineEaaa + .text._ZN7Display8drawRectEaaaa + 0x0000000000001008 0x50 ../lib/libgamebuino.a(Display.o) + 0x0000000000001008 _ZN7Display8drawRectEaaaa .text._ZN7Display8fillRectEaaaa - 0x0000000000000d7c 0x52 ../lib/libgamebuino.a(Display.o) - 0x0000000000000d7c _ZN7Display8fillRectEaaaa + 0x0000000000001058 0x52 ../lib/libgamebuino.a(Display.o) + 0x0000000000001058 _ZN7Display8fillRectEaaaa .text._ZN7Display16drawCircleHelperEaaah - 0x0000000000000dce 0xfc ../lib/libgamebuino.a(Display.o) - 0x0000000000000dce _ZN7Display16drawCircleHelperEaaah + 0x00000000000010aa 0xfc ../lib/libgamebuino.a(Display.o) + 0x00000000000010aa _ZN7Display16drawCircleHelperEaaah .text._ZN7Display16fillCircleHelperEaaaha - 0x0000000000000eca 0xcc ../lib/libgamebuino.a(Display.o) - 0x0000000000000eca _ZN7Display16fillCircleHelperEaaaha + 0x00000000000011a6 0xcc ../lib/libgamebuino.a(Display.o) + 0x00000000000011a6 _ZN7Display16fillCircleHelperEaaaha .text._ZN7Display13drawRoundRectEaaaaa - 0x0000000000000f96 0xbe ../lib/libgamebuino.a(Display.o) - 0x0000000000000f96 _ZN7Display13drawRoundRectEaaaaa + 0x0000000000001272 0xbe ../lib/libgamebuino.a(Display.o) + 0x0000000000001272 _ZN7Display13drawRoundRectEaaaaa .text._ZN7Display13fillRoundRectEaaaaa - 0x0000000000001054 0x6e ../lib/libgamebuino.a(Display.o) - 0x0000000000001054 _ZN7Display13fillRoundRectEaaaaa + 0x0000000000001330 0x6e ../lib/libgamebuino.a(Display.o) + 0x0000000000001330 _ZN7Display13fillRoundRectEaaaaa .text._ZN7Display10drawBitmapEaaPKh - 0x00000000000010c2 0x288 ../lib/libgamebuino.a(Display.o) - 0x00000000000010c2 _ZN7Display10drawBitmapEaaPKh + 0x000000000000139e 0x288 ../lib/libgamebuino.a(Display.o) + 0x000000000000139e _ZN7Display10drawBitmapEaaPKh .text._ZN7Display7setFontEPKh - 0x000000000000134a 0x28 ../lib/libgamebuino.a(Display.o) - 0x000000000000134a _ZN7Display7setFontEPKh + 0x0000000000001626 0x28 ../lib/libgamebuino.a(Display.o) + 0x0000000000001626 _ZN7Display7setFontEPKh .text._ZN7Display5beginEaaaaa - 0x0000000000001372 0x180 ../lib/libgamebuino.a(Display.o) - 0x0000000000001372 _ZN7Display5beginEaaaaa + 0x000000000000164e 0x180 ../lib/libgamebuino.a(Display.o) + 0x000000000000164e _ZN7Display5beginEaaaaa .text._ZN7Display8drawCharEaahh - 0x00000000000014f2 0x14a ../lib/libgamebuino.a(Display.o) - 0x00000000000014f2 _ZN7Display8drawCharEaahh + 0x00000000000017ce 0x14a ../lib/libgamebuino.a(Display.o) + 0x00000000000017ce _ZN7Display8drawCharEaahh .text._ZN7Display5writeEh - 0x000000000000163c 0x66 ../lib/libgamebuino.a(Display.o) - 0x000000000000163c _ZN7Display5writeEh + 0x0000000000001918 0x66 ../lib/libgamebuino.a(Display.o) + 0x0000000000001918 _ZN7Display5writeEh .text._ZN9Gamebuino11updatePopupEv - 0x00000000000016a2 0xe0 ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000016a2 _ZN9Gamebuino11updatePopupEv + 0x000000000000197e 0xe0 ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000197e _ZN9Gamebuino11updatePopupEv .text._ZN9Gamebuino14displayBatteryEv - 0x0000000000001782 0x168 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001782 _ZN9Gamebuino14displayBatteryEv + 0x0000000000001a5e 0x168 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000001a5e _ZN9Gamebuino14displayBatteryEv .text._ZN9Gamebuino6updateEv - 0x00000000000018ea 0x176 ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000018ea _ZN9Gamebuino6updateEv + 0x0000000000001bc6 0x176 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000001bc6 _ZN9Gamebuino6updateEv .text._ZN9Gamebuino4menuEPKPKch - 0x0000000000001a60 0x29c ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001a60 _ZN9Gamebuino4menuEPKPKch + 0x0000000000001d3c 0x29c ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000001d3c _ZN9Gamebuino4menuEPKPKch .text._ZN9Gamebuino10changeGameEv - 0x0000000000001cfc 0x7a ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001cfc _ZN9Gamebuino10changeGameEv + 0x0000000000001fd8 0x7a ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000001fd8 _ZN9Gamebuino10changeGameEv .text._ZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKh - 0x0000000000001d76 0x27c ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001d76 _ZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKh + 0x0000000000002052 0x27c ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000002052 _ZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKh .text._ZN9Gamebuino11titleScreenEPK19__FlashStringHelper - 0x0000000000001ff2 0x8 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001ff2 _ZN9Gamebuino11titleScreenEPK19__FlashStringHelper + 0x00000000000022ce 0x8 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000022ce _ZN9Gamebuino11titleScreenEPK19__FlashStringHelper .text._ZN9Gamebuino17settingsAvailableEv - 0x0000000000001ffa 0x14 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000001ffa _ZN9Gamebuino17settingsAvailableEv + 0x00000000000022d6 0x14 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000022d6 _ZN9Gamebuino17settingsAvailableEv .text._ZN9Gamebuino12readSettingsEv - 0x000000000000200e 0xde ../lib/libgamebuino.a(Gamebuino.o) - 0x000000000000200e _ZN9Gamebuino12readSettingsEv + 0x00000000000022ea 0xde ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000022ea _ZN9Gamebuino12readSettingsEv .text._ZN9Gamebuino5beginEv - 0x00000000000020ec 0xb6 ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000020ec _ZN9Gamebuino5beginEv + 0x00000000000023c8 0xb6 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000023c8 _ZN9Gamebuino5beginEv .text._ZN9Gamebuino14getDefaultNameEPc - 0x00000000000021a2 0x2c ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000021a2 _ZN9Gamebuino14getDefaultNameEPc + 0x000000000000247e 0x2c ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000247e _ZN9Gamebuino14getDefaultNameEPc .text._ZN5Sound7commandEhhah.part.0 - 0x00000000000021ce 0x74 ../lib/libgamebuino.a(Sound.o) + 0x00000000000024aa 0x74 ../lib/libgamebuino.a(Sound.o) .text._ZN5Sound5beginEv - 0x0000000000002242 0x6a ../lib/libgamebuino.a(Sound.o) - 0x0000000000002242 _ZN5Sound5beginEv + 0x000000000000251e 0x6a ../lib/libgamebuino.a(Sound.o) + 0x000000000000251e _ZN5Sound5beginEv .text._ZN5Sound7commandEhhah - 0x00000000000022ac 0x62 ../lib/libgamebuino.a(Sound.o) - 0x00000000000022ac _ZN5Sound7commandEhhah + 0x0000000000002588 0x62 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002588 _ZN5Sound7commandEhhah .text._ZN5Sound8playNoteEhhh - 0x000000000000230e 0x24 ../lib/libgamebuino.a(Sound.o) - 0x000000000000230e _ZN5Sound8playNoteEhhh + 0x00000000000025ea 0x24 ../lib/libgamebuino.a(Sound.o) + 0x00000000000025ea _ZN5Sound8playNoteEhhh .text._ZN5Sound12updateOutputEv - 0x0000000000002332 0x16 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002332 _ZN5Sound12updateOutputEv + 0x000000000000260e 0x16 ../lib/libgamebuino.a(Sound.o) + 0x000000000000260e _ZN5Sound12updateOutputEv .text._ZN5Sound8stopNoteEh - 0x0000000000002348 0x22 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002348 _ZN5Sound8stopNoteEh + 0x0000000000002624 0x22 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002624 _ZN5Sound8stopNoteEh .text._ZN5Sound11stopPatternEh - 0x000000000000236a 0x16 ../lib/libgamebuino.a(Sound.o) - 0x000000000000236a _ZN5Sound11stopPatternEh + 0x0000000000002646 0x16 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002646 _ZN5Sound11stopPatternEh .text._ZN5Sound11playPatternEPKjh - 0x0000000000002380 0x36 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002380 _ZN5Sound11playPatternEPKjh + 0x000000000000265c 0x36 ../lib/libgamebuino.a(Sound.o) + 0x000000000000265c _ZN5Sound11playPatternEPKjh .text._ZN5Sound11updateTrackEh - 0x00000000000023b6 0x72 ../lib/libgamebuino.a(Sound.o) - 0x00000000000023b6 _ZN5Sound11updateTrackEh + 0x0000000000002692 0x72 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002692 _ZN5Sound11updateTrackEh .text._ZN5Sound11updateTrackEv - 0x0000000000002428 0x6 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002428 _ZN5Sound11updateTrackEv + 0x0000000000002704 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002704 _ZN5Sound11updateTrackEv .text._ZN5Sound11stopPatternEv - 0x000000000000242e 0x6 ../lib/libgamebuino.a(Sound.o) - 0x000000000000242e _ZN5Sound11stopPatternEv + 0x000000000000270a 0x6 ../lib/libgamebuino.a(Sound.o) + 0x000000000000270a _ZN5Sound11stopPatternEv .text._ZN5Sound13updatePatternEh - 0x0000000000002434 0xcc ../lib/libgamebuino.a(Sound.o) - 0x0000000000002434 _ZN5Sound13updatePatternEh + 0x0000000000002710 0xcc ../lib/libgamebuino.a(Sound.o) + 0x0000000000002710 _ZN5Sound13updatePatternEh .text._ZN5Sound13updatePatternEv - 0x0000000000002500 0x6 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002500 _ZN5Sound13updatePatternEv + 0x00000000000027dc 0x6 ../lib/libgamebuino.a(Sound.o) + 0x00000000000027dc _ZN5Sound13updatePatternEv .text._ZN5Sound10updateNoteEh - 0x0000000000002506 0x184 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002506 _ZN5Sound10updateNoteEh + 0x00000000000027e2 0x184 ../lib/libgamebuino.a(Sound.o) + 0x00000000000027e2 _ZN5Sound10updateNoteEh .text._ZN5Sound10updateNoteEv - 0x000000000000268a 0x6 ../lib/libgamebuino.a(Sound.o) - 0x000000000000268a _ZN5Sound10updateNoteEv + 0x0000000000002966 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000002966 _ZN5Sound10updateNoteEv .text._ZN5Sound14generateOutputEv - 0x0000000000002690 0x54 ../lib/libgamebuino.a(Sound.o) - 0x0000000000002690 _ZN5Sound14generateOutputEv + 0x000000000000296c 0x54 ../lib/libgamebuino.a(Sound.o) + 0x000000000000296c _ZN5Sound14generateOutputEv .text.__vector_11 - 0x00000000000026e4 0x48 ../lib/libgamebuino.a(Sound.o) - 0x00000000000026e4 __vector_11 + 0x00000000000029c0 0x48 ../lib/libgamebuino.a(Sound.o) + 0x00000000000029c0 __vector_11 .text._ZN5Sound6playOKEv - 0x000000000000272c 0x2c ../lib/libgamebuino.a(Sound.o) - 0x000000000000272c _ZN5Sound6playOKEv + 0x0000000000002a08 0x2c ../lib/libgamebuino.a(Sound.o) + 0x0000000000002a08 _ZN5Sound6playOKEv .text._ZN5Sound10playCancelEv - 0x0000000000002758 0x2c ../lib/libgamebuino.a(Sound.o) - 0x0000000000002758 _ZN5Sound10playCancelEv + 0x0000000000002a34 0x2c ../lib/libgamebuino.a(Sound.o) + 0x0000000000002a34 _ZN5Sound10playCancelEv .text._ZN5Sound8playTickEv - 0x0000000000002784 0x2c ../lib/libgamebuino.a(Sound.o) - 0x0000000000002784 _ZN5Sound8playTickEv + 0x0000000000002a60 0x2c ../lib/libgamebuino.a(Sound.o) + 0x0000000000002a60 _ZN5Sound8playTickEv .text._ZN5Sound9setVolumeEa - 0x00000000000027b0 0x1c ../lib/libgamebuino.a(Sound.o) - 0x00000000000027b0 _ZN5Sound9setVolumeEa + 0x0000000000002a8c 0x1c ../lib/libgamebuino.a(Sound.o) + 0x0000000000002a8c _ZN5Sound9setVolumeEa .text._ZN9Backlight5beginEv - 0x00000000000027cc 0x8 ../lib/libgamebuino.a(Backlight.o) - 0x00000000000027cc _ZN9Backlight5beginEv + 0x0000000000002aa8 0x8 ../lib/libgamebuino.a(Backlight.o) + 0x0000000000002aa8 _ZN9Backlight5beginEv .text._ZN9Backlight3setEh - 0x00000000000027d4 0x8 ../lib/libgamebuino.a(Backlight.o) - 0x00000000000027d4 _ZN9Backlight3setEh + 0x0000000000002ab0 0x8 ../lib/libgamebuino.a(Backlight.o) + 0x0000000000002ab0 _ZN9Backlight3setEh .text._ZN9Backlight6updateEv - 0x00000000000027dc 0xbe ../lib/libgamebuino.a(Backlight.o) - 0x00000000000027dc _ZN9Backlight6updateEv + 0x0000000000002ab8 0xbe ../lib/libgamebuino.a(Backlight.o) + 0x0000000000002ab8 _ZN9Backlight6updateEv .text._ZN7Battery5beginEv - 0x000000000000289a 0x14 ../lib/libgamebuino.a(Battery.o) - 0x000000000000289a _ZN7Battery5beginEv + 0x0000000000002b76 0x14 ../lib/libgamebuino.a(Battery.o) + 0x0000000000002b76 _ZN7Battery5beginEv .text._ZN7Battery6updateEv - 0x00000000000028ae 0x72 ../lib/libgamebuino.a(Battery.o) - 0x00000000000028ae _ZN7Battery6updateEv + 0x0000000000002b8a 0x72 ../lib/libgamebuino.a(Battery.o) + 0x0000000000002b8a _ZN7Battery6updateEv .text.__vector_16 - 0x0000000000002920 0x94 ../lib/libarduino.a(wiring.o) - 0x0000000000002920 __vector_16 - .text.millis 0x00000000000029b4 0x18 ../lib/libarduino.a(wiring.o) - 0x00000000000029b4 millis - .text.micros 0x00000000000029cc 0x4a ../lib/libarduino.a(wiring.o) - 0x00000000000029cc micros - .text.delay 0x0000000000002a16 0x4c ../lib/libarduino.a(wiring.o) - 0x0000000000002a16 delay - .text.init 0x0000000000002a62 0x76 ../lib/libarduino.a(wiring.o) - 0x0000000000002a62 init + 0x0000000000002bfc 0x94 ../lib/libarduino.a(wiring.o) + 0x0000000000002bfc __vector_16 + .text.millis 0x0000000000002c90 0x18 ../lib/libarduino.a(wiring.o) + 0x0000000000002c90 millis + .text.micros 0x0000000000002ca8 0x4a ../lib/libarduino.a(wiring.o) + 0x0000000000002ca8 micros + .text.delay 0x0000000000002cf2 0x4c ../lib/libarduino.a(wiring.o) + 0x0000000000002cf2 delay + .text.init 0x0000000000002d3e 0x76 ../lib/libarduino.a(wiring.o) + 0x0000000000002d3e init .text.analogRead - 0x0000000000002ad8 0x3a ../lib/libarduino.a(wiring_analog.o) - 0x0000000000002ad8 analogRead + 0x0000000000002db4 0x3a ../lib/libarduino.a(wiring_analog.o) + 0x0000000000002db4 analogRead .text.analogWrite - 0x0000000000002b12 0xbe ../lib/libarduino.a(wiring_analog.o) - 0x0000000000002b12 analogWrite + 0x0000000000002dee 0xbe ../lib/libarduino.a(wiring_analog.o) + 0x0000000000002dee analogWrite .text.turnOffPWM - 0x0000000000002bd0 0x52 ../lib/libarduino.a(wiring_digital.o) - .text.pinMode 0x0000000000002c22 0x78 ../lib/libarduino.a(wiring_digital.o) - 0x0000000000002c22 pinMode + 0x0000000000002eac 0x52 ../lib/libarduino.a(wiring_digital.o) + .text.pinMode 0x0000000000002efe 0x78 ../lib/libarduino.a(wiring_digital.o) + 0x0000000000002efe pinMode .text.digitalWrite - 0x0000000000002c9a 0x5e ../lib/libarduino.a(wiring_digital.o) - 0x0000000000002c9a digitalWrite + 0x0000000000002f76 0x5e ../lib/libarduino.a(wiring_digital.o) + 0x0000000000002f76 digitalWrite .text.digitalRead - 0x0000000000002cf8 0x52 ../lib/libarduino.a(wiring_digital.o) - 0x0000000000002cf8 digitalRead + 0x0000000000002fd4 0x52 ../lib/libarduino.a(wiring_digital.o) + 0x0000000000002fd4 digitalRead .text._ZN5Print5writeEPKhj - 0x0000000000002d4a 0x50 ../lib/libarduino.a(Print.o) - 0x0000000000002d4a _ZN5Print5writeEPKhj + 0x0000000000003026 0x50 ../lib/libarduino.a(Print.o) + 0x0000000000003026 _ZN5Print5writeEPKhj .text._ZN5Print5writeEPKc - 0x0000000000002d9a 0x2a ../lib/libarduino.a(Print.o) - 0x0000000000002d9a _ZN5Print5writeEPKc + 0x0000000000003076 0x2a ../lib/libarduino.a(Print.o) + 0x0000000000003076 _ZN5Print5writeEPKc .text._ZN5Print5printEPK19__FlashStringHelper - 0x0000000000002dc4 0x46 ../lib/libarduino.a(Print.o) - 0x0000000000002dc4 _ZN5Print5printEPK19__FlashStringHelper + 0x00000000000030a0 0x46 ../lib/libarduino.a(Print.o) + 0x00000000000030a0 _ZN5Print5printEPK19__FlashStringHelper .text._ZN5Print5printEc - 0x0000000000002e0a 0xe ../lib/libarduino.a(Print.o) - 0x0000000000002e0a _ZN5Print5printEc + 0x00000000000030e6 0xe ../lib/libarduino.a(Print.o) + 0x00000000000030e6 _ZN5Print5printEc .text._ZN5Print7printlnEv - 0x0000000000002e18 0x28 ../lib/libarduino.a(Print.o) - 0x0000000000002e18 _ZN5Print7printlnEv + 0x00000000000030f4 0x28 ../lib/libarduino.a(Print.o) + 0x00000000000030f4 _ZN5Print7printlnEv .text._ZN5Print7printlnEPK19__FlashStringHelper - 0x0000000000002e40 0x24 ../lib/libarduino.a(Print.o) - 0x0000000000002e40 _ZN5Print7printlnEPK19__FlashStringHelper + 0x000000000000311c 0x24 ../lib/libarduino.a(Print.o) + 0x000000000000311c _ZN5Print7printlnEPK19__FlashStringHelper .text._ZN5Print11printNumberEmh - 0x0000000000002e64 0xac ../lib/libarduino.a(Print.o) - 0x0000000000002e64 _ZN5Print11printNumberEmh + 0x0000000000003140 0xac ../lib/libarduino.a(Print.o) + 0x0000000000003140 _ZN5Print11printNumberEmh .text._ZN5Print5printEmi - 0x0000000000002f10 0x1a ../lib/libarduino.a(Print.o) - 0x0000000000002f10 _ZN5Print5printEmi + 0x00000000000031ec 0x1a ../lib/libarduino.a(Print.o) + 0x00000000000031ec _ZN5Print5printEmi .text._ZN5Print5printEji - 0x0000000000002f2a 0xc ../lib/libarduino.a(Print.o) - 0x0000000000002f2a _ZN5Print5printEji + 0x0000000000003206 0xc ../lib/libarduino.a(Print.o) + 0x0000000000003206 _ZN5Print5printEji .text._ZN5Print5printEli - 0x0000000000002f36 0x90 ../lib/libarduino.a(Print.o) - 0x0000000000002f36 _ZN5Print5printEli + 0x0000000000003212 0x90 ../lib/libarduino.a(Print.o) + 0x0000000000003212 _ZN5Print5printEli .text._ZN5Print5printEii - 0x0000000000002fc6 0xe ../lib/libarduino.a(Print.o) - 0x0000000000002fc6 _ZN5Print5printEii + 0x00000000000032a2 0xe ../lib/libarduino.a(Print.o) + 0x00000000000032a2 _ZN5Print5printEii .text._Z3maplllll - 0x0000000000002fd4 0x82 ../lib/libarduino.a(WMath.o) - 0x0000000000002fd4 _Z3maplllll + 0x00000000000032b0 0x82 ../lib/libarduino.a(WMath.o) + 0x00000000000032b0 _Z3maplllll .text.__cxa_pure_virtual - 0x0000000000003056 0x2 ../lib/libarduino.a(forward.o) - 0x0000000000003056 __cxa_pure_virtual + 0x0000000000003332 0x2 ../lib/libarduino.a(forward.o) + 0x0000000000003332 __cxa_pure_virtual .text._ZN8SPIClass5beginEv - 0x0000000000003058 0x2c ../lib/libarduino.a(SPI.o) - 0x0000000000003058 _ZN8SPIClass5beginEv + 0x0000000000003334 0x2c ../lib/libarduino.a(SPI.o) + 0x0000000000003334 _ZN8SPIClass5beginEv .text._ZN8SPIClass11setBitOrderEh - 0x0000000000003084 0x12 ../lib/libarduino.a(SPI.o) - 0x0000000000003084 _ZN8SPIClass11setBitOrderEh + 0x0000000000003360 0x12 ../lib/libarduino.a(SPI.o) + 0x0000000000003360 _ZN8SPIClass11setBitOrderEh .text._ZN8SPIClass11setDataModeEh - 0x0000000000003096 0xa ../lib/libarduino.a(SPI.o) - 0x0000000000003096 _ZN8SPIClass11setDataModeEh + 0x0000000000003372 0xa ../lib/libarduino.a(SPI.o) + 0x0000000000003372 _ZN8SPIClass11setDataModeEh .text._ZN8SPIClass15setClockDividerEh - 0x00000000000030a0 0x1e ../lib/libarduino.a(SPI.o) - 0x00000000000030a0 _ZN8SPIClass15setClockDividerEh + 0x000000000000337c 0x1e ../lib/libarduino.a(SPI.o) + 0x000000000000337c _ZN8SPIClass15setClockDividerEh .text.libgcc.mul - 0x00000000000030be 0x20 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) - 0x00000000000030be __mulsi3 + 0x000000000000339a 0x20 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_mulsi3.o) + 0x000000000000339a __mulsi3 .text.libgcc.div - 0x00000000000030de 0x18 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodqi4.o) - 0x00000000000030de __udivmodqi4 + 0x00000000000033ba 0x18 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodqi4.o) + 0x00000000000033ba __udivmodqi4 .text.libgcc.div - 0x00000000000030f6 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) - 0x00000000000030f6 __udivmodhi4 + 0x00000000000033d2 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodhi4.o) + 0x00000000000033d2 __udivmodhi4 .text.libgcc.div - 0x000000000000311e 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) - 0x000000000000311e __divmodhi4 - 0x000000000000311e _div + 0x00000000000033fa 0x28 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodhi4.o) + 0x00000000000033fa __divmodhi4 + 0x00000000000033fa _div .text.libgcc.div - 0x0000000000003146 0x44 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) - 0x0000000000003146 __udivmodsi4 + 0x0000000000003422 0x44 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_udivmodsi4.o) + 0x0000000000003422 __udivmodsi4 .text.libgcc.div - 0x000000000000318a 0x2e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodsi4.o) - 0x000000000000318a __divmodsi4 + 0x0000000000003466 0x2e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_divmodsi4.o) + 0x0000000000003466 __divmodsi4 .text.libgcc.div - 0x00000000000031b8 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_negsi2.o) - 0x00000000000031b8 __negsi2 + 0x0000000000003494 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_negsi2.o) + 0x0000000000003494 __negsi2 .text.libgcc.mul - 0x00000000000031c8 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) - 0x00000000000031c8 __muluhisi3 - .text.libgcc 0x00000000000031de 0xc /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) - 0x00000000000031de __tablejump2__ + 0x00000000000034a4 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_muluhisi3.o) + 0x00000000000034a4 __muluhisi3 + .text.libgcc 0x00000000000034ba 0xc /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_tablejump2.o) + 0x00000000000034ba __tablejump2__ .text.libgcc.mul - 0x00000000000031ea 0x1e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) - 0x00000000000031ea __umulhisi3 + 0x00000000000034c6 0x1e /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_umulhisi3.o) + 0x00000000000034c6 __umulhisi3 .text.avr-libc.fplib - 0x0000000000003208 0x5e /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fixunssfsi.o) - 0x0000000000003208 __fixunssfsi + 0x00000000000034e4 0x5e /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fixunssfsi.o) + 0x00000000000034e4 __fixunssfsi .text.avr-libc.fplib - 0x0000000000003266 0x7a /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(floatsisf.o) - 0x0000000000003266 __floatunsisf - 0x000000000000326a __floatsisf + 0x0000000000003542 0x7a /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(floatsisf.o) + 0x0000000000003542 __floatunsisf + 0x0000000000003546 __floatsisf .text.avr-libc.fplib - 0x00000000000032e0 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_inf.o) - 0x00000000000032e0 __fp_inf + 0x00000000000035bc 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_inf.o) + 0x00000000000035bc __fp_inf .text.avr-libc.fplib - 0x00000000000032ec 0x6 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_nan.o) - 0x00000000000032ec __fp_nan + 0x00000000000035c8 0x6 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_nan.o) + 0x00000000000035c8 __fp_nan .text.avr-libc.fplib - 0x00000000000032f2 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_pscA.o) - 0x00000000000032f2 __fp_pscA + 0x00000000000035ce 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_pscA.o) + 0x00000000000035ce __fp_pscA .text.avr-libc.fplib - 0x0000000000003300 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_pscB.o) - 0x0000000000003300 __fp_pscB + 0x00000000000035dc 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_pscB.o) + 0x00000000000035dc __fp_pscB .text.avr-libc.fplib - 0x000000000000330e 0x22 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_round.o) - 0x000000000000330e __fp_round + 0x00000000000035ea 0x22 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_round.o) + 0x00000000000035ea __fp_round .text.avr-libc.fplib - 0x0000000000003330 0x44 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_split3.o) - 0x0000000000003330 __fp_split3 - 0x0000000000003340 __fp_splitA + 0x000000000000360c 0x44 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_split3.o) + 0x000000000000360c __fp_split3 + 0x000000000000361c __fp_splitA .text.avr-libc.fplib - 0x0000000000003374 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_zero.o) - 0x0000000000003374 __fp_zero - 0x0000000000003376 __fp_szero + 0x0000000000003650 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(fp_zero.o) + 0x0000000000003650 __fp_zero + 0x0000000000003652 __fp_szero .text.avr-libc.fplib - 0x0000000000003382 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(mulsf3.o) - 0x0000000000003382 __mulsf3 + 0x000000000000365e 0x8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(mulsf3.o) + 0x000000000000365e __mulsf3 .text.avr-libc.fplib - 0x000000000000338a 0xd2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(mulsf3x.o) - 0x00000000000033a8 __mulsf3x - 0x00000000000033ae __mulsf3_pse + 0x0000000000003666 0xd2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a(mulsf3x.o) + 0x0000000000003684 __mulsf3x + 0x000000000000368a __mulsf3_pse .text.avr-libc - 0x000000000000345c 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o) - 0x000000000000345c memset + 0x0000000000003738 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o) + 0x0000000000003738 memset .text.avr-libc - 0x000000000000346a 0x1e /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncpy.o) - 0x000000000000346a strncpy - 0x0000000000003488 . = ALIGN (0x2) + 0x0000000000003746 0x1e /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strncpy.o) + 0x0000000000003746 strncpy + 0x0000000000003764 . = ALIGN (0x2) *(.fini9) - .fini9 0x0000000000003488 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) - 0x0000000000003488 exit - 0x0000000000003488 _exit + .fini9 0x0000000000003764 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + 0x0000000000003764 exit + 0x0000000000003764 _exit *(.fini9) *(.fini8) *(.fini8) @@ -1756,11 +1810,11 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x0000000000003488 0x4 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) + .fini0 0x0000000000003764 0x4 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o) *(.fini0) - 0x000000000000348c _etext = . + 0x0000000000003768 _etext = . -.data 0x0000000000800100 0x58 load address 0x000000000000348c +.data 0x0000000000800100 0x74 load address 0x0000000000003768 0x0000000000800100 PROVIDE (__data_start, .) *(.data) *(.data*) @@ -1772,74 +1826,76 @@ END GROUP *(.rodata) .rodata 0x0000000000800102 0x3 Obj/Unit.o *(.rodata*) - .rodata._ZZN11HumanPlayer13buttonHandlerEvE23apBtnCameraHandlerTable - 0x0000000000800105 0x1c Obj/HumanPlayer.o - .rodata._ZZN11HumanPlayer13buttonHandlerEvE17apBtnHandlerTable - 0x0000000000800121 0x1c Obj/HumanPlayer.o .rodata._ZTV11HumanPlayer - 0x000000000080013d 0x6 Obj/HumanPlayer.o - 0x000000000080013d _ZTV11HumanPlayer + 0x0000000000800105 0x6 Obj/HumanPlayer.o + 0x0000000000800105 _ZTV11HumanPlayer .rodata._ZTV6Player - 0x0000000000800143 0x6 Obj/Player.o - 0x0000000000800143 _ZTV6Player + 0x000000000080010b 0x6 Obj/Player.o + 0x000000000080010b _ZTV6Player + .rodata._ZZN11HumanPlayer27playerButtonReleasedHandlerEjE17apBtnHandlerTable + 0x0000000000800111 0x1c Obj/HumanPlayerBtn.o + .rodata._ZZN11HumanPlayer26cameraButtonPressedHandlerEjE23apBtnCameraHandlerTable + 0x000000000080012d 0x1c Obj/HumanPlayerBtn.o + .rodata._ZZN11HumanPlayer26playerButtonPressedHandlerEjE17apBtnHandlerTable + 0x0000000000800149 0x1c Obj/HumanPlayerBtn.o .rodata._ZTV7Display - 0x0000000000800149 0x8 ../lib/libgamebuino.a(Display.o) - 0x0000000000800149 _ZTV7Display + 0x0000000000800165 0x8 ../lib/libgamebuino.a(Display.o) + 0x0000000000800165 _ZTV7Display .rodata.str1.1 - 0x0000000000800151 0x7 ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000080016d 0x7 ../lib/libgamebuino.a(Gamebuino.o) *(.gnu.linkonce.d*) - 0x0000000000800158 . = ALIGN (0x2) - 0x0000000000800158 _edata = . - 0x0000000000800158 PROVIDE (__data_end, .) + 0x0000000000800174 . = ALIGN (0x2) + 0x0000000000800174 _edata = . + 0x0000000000800174 PROVIDE (__data_end, .) -.bss 0x0000000000800158 0x298 - 0x0000000000800158 PROVIDE (__bss_start, .) +.bss 0x0000000000800174 0x298 + 0x0000000000800174 PROVIDE (__bss_start, .) *(.bss) *(.bss*) - .bss.gb 0x0000000000800158 0x87 Obj/System.o - 0x0000000000800158 gb - .bss._cam 0x00000000008001df 0x2 Obj/Sprite.o - 0x00000000008001df _cam + .bss.gb 0x0000000000800174 0x87 Obj/System.o + 0x0000000000800174 gb + .bss._cam 0x00000000008001fb 0x2 Obj/Sprite.o + 0x00000000008001fb _cam .bss._displayBuffer - 0x00000000008001e1 0x200 ../lib/libgamebuino.a(Display.o) - 0x00000000008001e1 _displayBuffer + 0x00000000008001fd 0x200 ../lib/libgamebuino.a(Display.o) + 0x00000000008001fd _displayBuffer .bss._chanNoise - 0x00000000008003e1 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e1 _chanNoise + 0x00000000008003fd 0x1 ../lib/libgamebuino.a(Sound.o) + 0x00000000008003fd _chanNoise .bss._chanOutput - 0x00000000008003e2 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e2 _chanOutput + 0x00000000008003fe 0x1 ../lib/libgamebuino.a(Sound.o) + 0x00000000008003fe _chanOutput .bss._chanOutputVolume - 0x00000000008003e3 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e3 _chanOutputVolume + 0x00000000008003ff 0x1 ../lib/libgamebuino.a(Sound.o) + 0x00000000008003ff _chanOutputVolume .bss._chanHalfPeriod - 0x00000000008003e4 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e4 _chanHalfPeriod + 0x0000000000800400 0x1 ../lib/libgamebuino.a(Sound.o) + 0x0000000000800400 _chanHalfPeriod .bss._chanState - 0x00000000008003e5 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e5 _chanState + 0x0000000000800401 0x1 ../lib/libgamebuino.a(Sound.o) + 0x0000000000800401 _chanState .bss._chanCount - 0x00000000008003e6 0x1 ../lib/libgamebuino.a(Sound.o) - 0x00000000008003e6 _chanCount + 0x0000000000800402 0x1 ../lib/libgamebuino.a(Sound.o) + 0x0000000000800402 _chanCount .bss.timer0_fract - 0x00000000008003e7 0x1 ../lib/libarduino.a(wiring.o) + 0x0000000000800403 0x1 ../lib/libarduino.a(wiring.o) .bss.timer0_millis - 0x00000000008003e8 0x4 ../lib/libarduino.a(wiring.o) - 0x00000000008003e8 timer0_millis + 0x0000000000800404 0x4 ../lib/libarduino.a(wiring.o) + 0x0000000000800404 timer0_millis .bss.timer0_overflow_count - 0x00000000008003ec 0x4 ../lib/libarduino.a(wiring.o) - 0x00000000008003ec timer0_overflow_count + 0x0000000000800408 0x4 ../lib/libarduino.a(wiring.o) + 0x0000000000800408 timer0_overflow_count *(COMMON) - 0x00000000008003f0 PROVIDE (__bss_end, .) - 0x000000000000348c __data_load_start = LOADADDR (.data) - 0x00000000000034e4 __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x000000000080040c PROVIDE (__bss_end, .) + 0x0000000000003768 __data_load_start = LOADADDR (.data) + 0x00000000000037dc __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00000000008003f0 0x0 +.noinit 0x000000000080040c 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00000000008003f0 _end = . - 0x00000000008003f0 PROVIDE (__heap_start, .) + 0x000000000080040c _end = . + 0x000000000080040c PROVIDE (__heap_start, .) .eeprom 0x0000000000810000 0x0 *(.eeprom*) @@ -1891,6 +1947,8 @@ END GROUP .comment 0x0000000000000011 0x12 Obj/BaseUnit.o .comment 0x0000000000000011 0x12 Obj/Unit.o .comment 0x0000000000000011 0x12 Obj/Menu.o + .comment 0x0000000000000011 0x12 Obj/Cursor.o + .comment 0x0000000000000011 0x12 Obj/HumanPlayerBtn.o .comment 0x0000000000000011 0x12 ../lib/libgamebuino.a(Buttons.o) .comment 0x0000000000000011 0x12 ../lib/libgamebuino.a(Display.o) .comment 0x0000000000000011 0x12 ../lib/libgamebuino.a(font3x5.o) @@ -67,7 +67,7 @@ void Game(const struct tGameConfig& sGameConfig) /* Do not calculate a new frame * until refresh flag is set. */ - while (gb.update() == false); + while (not gb.update()); } while (GamePause() != PAUSE_MENU_CHOICE_QUIT); } @@ -82,19 +82,20 @@ void Game(const struct tGameConfig& sGameConfig) *********************************************************************/ static void GameNextFrame(const struct tGameConfig& sGameConfig) { - for (uint8_t i = 0; i < sGameConfig.u8NHumanPlayers; i++) + for (size_t szHumanPlayer = 0; szHumanPlayer < sGameConfig.u8NHumanPlayers; szHumanPlayer++) { - HumanPlayer* pHumanPlayerData = &sGameConfig.pHumanPlayerData[i]; + HumanPlayer* const pHumanPlayerData = &sGameConfig.pHumanPlayerData[szHumanPlayer]; if (pHumanPlayerData != NULL) { + /* Execute handler for selected HumanPlayer. */ pHumanPlayerData->handler(); } + else + { + /* HumanPlayer handler callback not available. */ + } } - - /* Update camera position according - * to button pressed events. */ - sGameConfig.cam.handler(); } /*****************************************************************//** @@ -118,7 +119,7 @@ static enum tPauseMenuChoice GamePause(void) [PAUSE_MENU_CHOICE_QUIT] = strPauseMenuOption_1 }; - return (enum tPauseMenuChoice)gb.menu(astrPauseMenuOptions, MAX_PAUSE_MENU_CHOICES); + return static_cast<enum tPauseMenuChoice>(gb.menu(astrPauseMenuOptions, MAX_PAUSE_MENU_CHOICES)); } else { diff --git a/HumanPlayer.cpp b/HumanPlayer.cpp index e83d4e6..d13bc6b 100644 --- a/HumanPlayer.cpp +++ b/HumanPlayer.cpp @@ -4,8 +4,12 @@ #include "HumanPlayer.h" #include "System.h" +#include "Sprite.h" +#include "Cursor.h" #include <Buttons.h> #include <Gamebuino.h> +#include <stdint.h> +#include <string.h> /* ******************************************************************* * Defines @@ -23,6 +27,25 @@ * Local variables definition * ******************************************************************/ +/*****************************************************************//** + * + * \brief Bitmap data for idle UNIT_ID_PEASANT. + * + *********************************************************************/ +static const PROGMEM uint8_t au8MouseSprData[] = +{ + 8, + 8, + 0xFC, + 0x84, + 0x88, + 0x84, + 0xA2, + 0xD1, + 0x0A, + 0x04 +}; + /* ******************************************************************* * Local prototypes declaration * ******************************************************************/ @@ -38,7 +61,9 @@ *********************************************************************/ HumanPlayer::HumanPlayer(const char* const strPlayerName, const Camera& cam) : Player(strPlayerName), -_cam(cam) +_cam(cam), +_ABtnFrames(0), +_eState(PLAYER_STATE_IDLE) { _unitsMap[0].create(Unit::UNIT_ID_PEASANT, 16, 16); } @@ -50,114 +75,52 @@ _cam(cam) *********************************************************************/ void HumanPlayer::handler(void) { - this->buttonHandler(); + /* Execute HumanPlayerBtn submodule. */ + buttonHandler(); - for (uint8_t i = 0; i < MAX_UNITS; i++) - { - Unit& unit = _unitsMap[i]; + /* Execute parent class unit handler. */ + Player::handleUnits(); - unit.handler(); - } + drawHandler(); } /*****************************************************************//** * - * \brief Event handler executed when human player presses - * left arrow button. + * \brief This function draws all units and player UI. * *********************************************************************/ -void HumanPlayer::buttonHandler(void) +void HumanPlayer::drawHandler(void) { - for (uint8_t u8Btn = 0; u8Btn < NUM_BTN; u8Btn++) + /* Execute base class Unit drawHandler. */ + Player::drawUnits(); + + if (_eState == PLAYER_STATE_UNIT_MENU) { - /* This array of member functions lists - * button pressed event handlers for each button. */ - static void (HumanPlayer::*const apBtnHandlerTable[NUM_BTN])(void) = - { - [BTN_LEFT] = NULL, - [BTN_UP] = NULL, - [BTN_RIGHT] = NULL, - [BTN_DOWN] = NULL, - [BTN_A] = &HumanPlayer::onABtnPressed, - [BTN_B] = &HumanPlayer::onBBtnPressed - }; - - static void (Camera::*const apBtnCameraHandlerTable[NUM_BTN])(void) = - { - [BTN_LEFT] = &Camera::onLeftBtnPressed, - [BTN_UP] = &Camera::onUpBtnPressed, - [BTN_RIGHT] = &Camera::onRightBtnPressed, - [BTN_DOWN] = &Camera::onDownBtnPressed - }; - - if (gb.buttons.timeHeld(u8Btn) > 0) - { - /* Key has been pressed. Execute both - * HumanPlayer and Camera handlers, if available. */ - - /* Get pointer to HumanPlayer member function for selected button. */ - void (HumanPlayer::*const pBtnHandler)(void) = apBtnHandlerTable[u8Btn]; - - if (pBtnHandler != NULL) - { - /* HumanPlayer member function - * pointer is available. Execute. */ - (this->*pBtnHandler)(); - } - else - { - /* Undefined callback for selected button. */ - } - - /* Get pointer to Camera member function for selected button. */ - void (Camera::*const pCameraBtnHandler)(void) = apBtnCameraHandlerTable[u8Btn]; - - if (pCameraBtnHandler != NULL) - { - /* Camera member function pointer - * is available. - * Note: "const" qualifier must be - * removed since camera button event - * handler modifies Camera class members. */ - ((Camera&)_cam.*pCameraBtnHandler)(); - } - else - { - /* Undefined callback for selected button. */ - } - } - else - { - /* Key has not been pressed. Exit. */ - } + gb.display.setColor(BLACK); + gb.display.drawRect(0, 40, 84, 8); } -} -/*****************************************************************//** - * - * \brief Event handler executed when human player presses - * A button. - * - *********************************************************************/ -void HumanPlayer::onABtnPressed(void) -{ + /* Configure cursor sprite object. */ + Sprite cursorSpr(au8MouseSprData, false, INVERT); + + /* Transfer Cursor to Sprite coordinates. */ + cursorSpr.setPos(_cursor.getX(), _cursor.getY()); + + /* Draw cursor sprite. */ + cursorSpr.draw(); } /*****************************************************************//** * - * \brief Event handler executed when human player presses - * B button. + * \brief This function looks for units nearby and selects them. + * If no units can be selected, player state remains + * unchanged. * - *********************************************************************/ -void HumanPlayer::onBBtnPressed(void) -{ -} - -/*****************************************************************//** + * \return New player state. * - * \brief This function draws all units and player UI. + * \see \ref tPlayerState. * *********************************************************************/ -void HumanPlayer::drawHandler(void) +enum tPlayerState HumanPlayer::selectUnit(void) { } diff --git a/HumanPlayer.h b/HumanPlayer.h index 8a6e598..262dde8 100644 --- a/HumanPlayer.h +++ b/HumanPlayer.h @@ -7,6 +7,8 @@ #include "Player.h" #include "Camera.h" +#include "Cursor.h" +#include <string.h> /* ************************************** * Defines * @@ -27,13 +29,37 @@ class HumanPlayer : public Player void handler(void); private: - const Camera& _cam; - void buttonHandler(void); + enum tPlayerState + { + PLAYER_STATE_IDLE, /**< Player has not entered any menu or unit. */ + PLAYER_STATE_UNIT_MENU, /**< Player has opened Unit menu. */ + PLAYER_STATE_UNIT_SELECTED /**< Player has selected one or more units. */ + } _eState; /**< Player action state. */ + void drawHandler(void); - /* Event handlers. */ + /* Button handlers. */ + void buttonHandler(void); + void playerButtonPressedHandler(const size_t szBtn); + void cameraButtonPressedHandler(const size_t szBtn); + void playerButtonReleasedHandler(const size_t szBtn); + + /* Pressed button event handlers. */ void onABtnPressed(void); void onBBtnPressed(void); + + /* Released button event handlers. */ + void onABtnReleased(void); + + /* Unit selection. */ + enum tPlayerState selectUnit(void); + + /* Private objects. */ + const Camera& _cam; + Cursor _cursor; + + /* Private variables. */ + uint8_t _ABtnFrames; }; #endif /* HUMAN_PLAYER_H__ */ diff --git a/HumanPlayerBtn.cpp b/HumanPlayerBtn.cpp new file mode 100644 index 0000000..a21962e --- /dev/null +++ b/HumanPlayerBtn.cpp @@ -0,0 +1,272 @@ +/* ******************************************************************* + * Includes + * ******************************************************************/ + +#include "HumanPlayer.h" +#include "System.h" +#include "Cursor.h" +#include <Buttons.h> +#include <Gamebuino.h> +#include <stdint.h> +#include <string.h> +#include <limits.h> + +/* ******************************************************************* + * Defines + * ******************************************************************/ + +/* ******************************************************************* + * Types definition + * ******************************************************************/ + +/* ******************************************************************* + * Global variables definition + * ******************************************************************/ + +/* ******************************************************************* + * Local variables definition + * ******************************************************************/ + +/* ******************************************************************* + * Local prototypes declaration + * ******************************************************************/ + +/* ******************************************************************* + * Functions definition + * ******************************************************************/ + +/*****************************************************************//** + * + * \brief Event handler executed when human player presses + * left arrow button. + * + *********************************************************************/ +void HumanPlayer::buttonHandler(void) +{ + for (size_t szBtn = 0; szBtn < NUM_BTN; szBtn++) + { + if (gb.buttons.timeHeld(static_cast<uint8_t>(szBtn)) > 0) + { + /* Update player attributes + * according to pressed button. */ + playerButtonPressedHandler(szBtn); + + /* Update camera attributes + * according to pressed button. */ + cameraButtonPressedHandler(szBtn); + } + else + { + /* Key has not been pressed. */ + + /* Update player attributes + * according to released button. */ + playerButtonReleasedHandler(szBtn); + } + } +} + +/*****************************************************************//** + * + * \brief This function executes button pressed handler events + * used on a \ref HumanPlayer object. + * + * \param szBtn + * Pressed button ID. + * + *********************************************************************/ +void HumanPlayer::playerButtonPressedHandler(const size_t szBtn) +{ + /* This array of member functions lists + * button pressed event handlers for each button. */ + static void (HumanPlayer::*const apBtnHandlerTable[NUM_BTN])(void) = + { + [BTN_LEFT] = NULL, + [BTN_UP] = NULL, + [BTN_RIGHT] = NULL, + [BTN_DOWN] = NULL, + [BTN_A] = &HumanPlayer::onABtnPressed, + [BTN_B] = &HumanPlayer::onBBtnPressed + }; + + /* Key has been pressed. Execute both + * HumanPlayer and Camera handlers, if available. */ + + /* Get pointer to HumanPlayer member function for selected button. */ + void (HumanPlayer::*const pBtnHandler)(void) = apBtnHandlerTable[szBtn]; + + if (pBtnHandler != NULL) + { + /* HumanPlayer member function + * pointer is available. Execute. */ + (this->*pBtnHandler)(); + } + else + { + /* Undefined callback for selected button. */ + } +} + +/*****************************************************************//** + * + * \brief This function executes button pressed handler events + * used on a \ref Camera object. + * + * \param szBtn + * Pressed button ID. + * + *********************************************************************/ +void HumanPlayer::cameraButtonPressedHandler(const size_t szBtn) +{ + if (not _cam.isLocked()) + { + static void (Camera::*const apBtnCameraHandlerTable[NUM_BTN])(Cursor&) = + { + [BTN_LEFT] = &Camera::onLeftBtnPressed, + [BTN_UP] = &Camera::onUpBtnPressed, + [BTN_RIGHT] = &Camera::onRightBtnPressed, + [BTN_DOWN] = &Camera::onDownBtnPressed + }; + + /* Get pointer to Camera member function for selected button. */ + void (Camera::*const pCameraBtnHandler)(Cursor&) = apBtnCameraHandlerTable[szBtn]; + + if (pCameraBtnHandler != NULL) + { + /* Camera member function pointer + * is available. + * Note: "const" qualifier must be + * removed since camera button event + * handler modifies Camera class members. */ + ((Camera&)_cam.*pCameraBtnHandler)(_cursor); + } + else + { + /* Undefined callback for selected button. */ + } + } +} + +/*****************************************************************//** + * + * \brief This function executes button released handler events + * used on a \ref HumanPlayer object. + * + * \param szBtn + * Released button ID. + * + *********************************************************************/ +void HumanPlayer::playerButtonReleasedHandler(const size_t szBtn) +{ + /* This array of member functions lists + * button pressed event handlers for each button. */ + static void (HumanPlayer::*const apBtnHandlerTable[NUM_BTN])(void) = + { + [BTN_LEFT] = NULL, + [BTN_UP] = NULL, + [BTN_RIGHT] = NULL, + [BTN_DOWN] = NULL, + [BTN_A] = &HumanPlayer::onABtnReleased + }; + + /* Key has been pressed. Execute both + * HumanPlayer and Camera handlers, if available. */ + + /* Get pointer to HumanPlayer member function for selected button. */ + void (HumanPlayer::*const pBtnHandler)(void) = apBtnHandlerTable[szBtn]; + + if (pBtnHandler != NULL) + { + /* HumanPlayer member function + * pointer is available. Execute. */ + (this->*pBtnHandler)(); + } + else + { + /* Undefined callback for selected button. */ + } +} + +/*****************************************************************//** + * + * \brief Event handler executed when human player presses + * A button. + * + *********************************************************************/ +void HumanPlayer::onABtnPressed(void) +{ + switch (_eState) + { + case PLAYER_STATE_IDLE: + + /* Select nearest unit, if possible. */ + _eState = selectUnit(); + break; + + case PLAYER_STATE_UNIT_SELECTED: + + if (_ABtnFrames < UCHAR_MAX) + { + /* Increase number of frames + * A button has been pressed. */ + _ABtnFrames++; + } + + break; + + default: + /* Undefined player state. Exit. */ + break; + } +} + +/*****************************************************************//** + * + * \brief Event handler executed when human player presses + * B button. + * + *********************************************************************/ +void HumanPlayer::onBBtnPressed(void) +{ +} + +/*****************************************************************//** + * + * \brief Event handler executed when human player releases + * A button. + * + *********************************************************************/ +void HumanPlayer::onABtnReleased(void) +{ + switch (_eState) + { + case PLAYER_STATE_UNIT_SELECTED: + { + enum + { + /* Number of frames where A button + * must be pressed in order to enter + * unit menu. */ + ENTER_MENU_FRAMES = 5 + }; + + if (_ABtnFrames >= ENTER_MENU_FRAMES) + { + /* Enable unit menu. */ + _eState = PLAYER_STATE_UNIT_MENU; + } + else + { + /* Short button press. Exit. */ + } + } + break; + + default: + /* Undefined state. Exit. */ + break; + } + + /* Reset pressed A button frames counter. */ + _ABtnFrames = 0; +} @@ -13,8 +13,9 @@ CXX_FLAGS = $(CC_FLAGS) -std=c++11 OBJ_DIR = Obj SRC_DIR = . -OBJECTS=$(addprefix $(OBJ_DIR)/,main.o Game.o System.o HumanPlayer.o Sprite.o \ - Player.o Camera.o BaseUnit.o Unit.o Menu.o ) +OBJECTS=$(addprefix $(OBJ_DIR)/,main.o Game.o System.o HumanPlayer.o Sprite.o \ + Player.o Camera.o BaseUnit.o Unit.o Menu.o \ + Cursor.o HumanPlayerBtn.o) DEPS = $(OBJECTS:.o=.d) @@ -32,6 +32,8 @@ * Local prototypes declaration * ******************************************************************/ +static void MainMenuSinglePlayer(void); + /* ******************************************************************* * Functions definition * ******************************************************************/ @@ -75,38 +77,7 @@ void MainMenu(void) switch (gb.menu(astrMainMenuOptions, MAX_CHOICES)) { case CHOICE_SINGLE_PLAYER_GAME: - { - enum - { - /* Maximum number of characters for - * player name, as specified on - * Gamebuino documentation. */ - GAMEBUINO_MAX_PLAYER_NAME = 10 - }; - - Camera cam; - - char strName[GAMEBUINO_MAX_PLAYER_NAME] = {0}; - - /* Fill strName with default user name. */ - gb.getDefaultName(strName); - - /* Declare 1 human player instance. */ - HumanPlayer h(strName, cam); - - const struct tGameConfig c = - { - .pHumanPlayerData = &h, - .u8NHumanPlayers = 1, - .cam = cam - }; - - /* Set global camera for sprites. */ - Sprite::setCamera(&c.cam); - - /* Initialize game with defined configuration. */ - Game(c); - } + MainMenuSinglePlayer(); break; case CHOICE_MULTI_PLAYER_GAME: @@ -118,3 +89,42 @@ void MainMenu(void) break; } } + +/*****************************************************************//** + * + * \brief Executes single player mode. + * + *********************************************************************/ +static void MainMenuSinglePlayer(void) +{ + enum + { + /* Maximum number of characters for + * player name, as specified on + * Gamebuino documentation. */ + GAMEBUINO_MAX_PLAYER_NAME = 10 + }; + + char strName[GAMEBUINO_MAX_PLAYER_NAME] = {0}; + + /* Fill strName with default user name. */ + gb.getDefaultName(strName); + + Camera cam; + + /* Declare 1 human player instance. */ + HumanPlayer h(strName, cam); + + const struct tGameConfig c = + { + .pHumanPlayerData = &h, + .u8NHumanPlayers = 1, + .cam = cam + }; + + /* Set global camera for sprites. */ + Sprite::setCamera(&c.cam); + + /* Initialize game with defined configuration. */ + Game(c); +} @@ -3,6 +3,7 @@ * ******************************************************************/ #include "Player.h" +#include "Unit.h" #include <string.h> /* ******************************************************************* @@ -54,3 +55,27 @@ _name{'\0'} /* Set all resources to default value. */ memset(_resourcesMap, DEFAULT_RESOURCES, sizeof(uint8_t) * MAX_RESOURCE_TYPES); } + +void Player::handleUnits(void) +{ + for (size_t szUnit = 0; szUnit < MAX_UNITS; szUnit++) + { + /* Select Unit object from internal table. */ + Unit& unit = _unitsMap[szUnit]; + + /* Execute unit handler. */ + unit.handler(); + } +} + +void Player::drawUnits(void) +{ + for (size_t szUnit = 0; szUnit < MAX_UNITS; szUnit++) + { + /* Select Unit object from internal table. */ + Unit& u = _unitsMap[szUnit]; + + /* Execute drawHandler for selected Unit. */ + u.drawHandler(); + } +} @@ -44,6 +44,8 @@ class Player MAX_UNITS = 32 }; + void handleUnits(void); + void drawUnits(void); uint16_t _resourcesMap[MAX_RESOURCE_TYPES]; char _name[MAX_NAME_LENGTH]; Unit _unitsMap[MAX_UNITS]; diff --git a/PocketEmpires.geany b/PocketEmpires.geany index 5f2b61f..89d5168 100644 --- a/PocketEmpires.geany +++ b/PocketEmpires.geany @@ -28,46 +28,45 @@ long_line_behaviour=1 long_line_column=120 [files] -current_page=17 -FILE_NAME_0=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGfx.cpp;0;4 -FILE_NAME_1=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2Fmain.cpp;0;4 -FILE_NAME_2=3528;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMenu.cpp;0;4 -FILE_NAME_3=549;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPad.cpp;0;4 -FILE_NAME_4=987;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCamera.h;0;4 -FILE_NAME_5=665;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGfx.h;0;4 -FILE_NAME_6=314;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGlobal_Inc.h;0;4 -FILE_NAME_7=299;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMenu.h;0;4 -FILE_NAME_8=611;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPad.h;0;4 -FILE_NAME_9=1191;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPlayer.h;0;4 -FILE_NAME_10=412;Make;0;EUTF-8;1;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMakefile;0;4 -FILE_NAME_11=2168;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSystem.cpp;0;4 -FILE_NAME_12=789;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayer.h;0;4 -FILE_NAME_13=3100;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayer.cpp;0;4 -FILE_NAME_14=1460;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPlayer.cpp;0;4 -FILE_NAME_15=3119;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGame.cpp;0;4 -FILE_NAME_16=571;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGame.h;0;4 -FILE_NAME_17=1886;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCamera.cpp;0;4 -FILE_NAME_18=281;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCameraOld.c;0;4 -FILE_NAME_19=768;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSprite.h;0;4 -FILE_NAME_20=2844;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSprite.cpp;0;4 -FILE_NAME_21=818;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSystem.h;0;4 -FILE_NAME_22=5650;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FDisplay.h;0;4 -FILE_NAME_23=14993;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FGamebuino.cpp;0;4 -FILE_NAME_24=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FGamebuino.h;0;4 -FILE_NAME_25=3497;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FButtons.cpp;0;4 -FILE_NAME_26=1135;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FButtons.h;0;4 -FILE_NAME_27=3441;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2Fsettings.c;0;4 -FILE_NAME_28=19868;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FDisplay.cpp;0;4 -FILE_NAME_29=1853;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBaseUnit.cpp;0;4 -FILE_NAME_30=1182;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBaseUnit.h;0;4 -FILE_NAME_31=1373;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FUnit.h;0;4 -FILE_NAME_32=2363;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FUnit.cpp;0;4 -FILE_NAME_33=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBarracksSpr.i;0;4 -FILE_NAME_34=937;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMouseSpr.i;0;4 -FILE_NAME_35=225;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPeasantSpr.i;0;4 -FILE_NAME_36=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSoldierSpr.i;0;4 -FILE_NAME_37=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FTowerSpr.i;0;4 -FILE_NAME_38=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FTownCentre.i;0;4 +current_page=37 +FILE_NAME_0=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2Fmain.cpp;0;4 +FILE_NAME_1=3821;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMenu.cpp;0;4 +FILE_NAME_2=549;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPad.cpp;0;4 +FILE_NAME_3=136;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCamera.h;0;4 +FILE_NAME_4=299;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMenu.h;0;4 +FILE_NAME_5=611;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPad.h;0;4 +FILE_NAME_6=1102;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPlayer.h;0;4 +FILE_NAME_7=453;Make;0;EUTF-8;1;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMakefile;0;4 +FILE_NAME_8=2168;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSystem.cpp;0;4 +FILE_NAME_9=1739;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayer.h;0;4 +FILE_NAME_10=1827;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPlayer.cpp;0;4 +FILE_NAME_11=2960;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGame.cpp;0;4 +FILE_NAME_12=571;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FGame.h;0;4 +FILE_NAME_13=2317;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCamera.cpp;0;4 +FILE_NAME_14=1129;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSprite.h;0;4 +FILE_NAME_15=1743;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSprite.cpp;0;4 +FILE_NAME_16=575;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSystem.h;0;4 +FILE_NAME_17=2863;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FDisplay.h;0;4 +FILE_NAME_18=7987;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FGamebuino.cpp;0;4 +FILE_NAME_19=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FGamebuino.h;0;4 +FILE_NAME_20=3497;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FButtons.cpp;0;4 +FILE_NAME_21=1135;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FButtons.h;0;4 +FILE_NAME_22=3441;C;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2Fsettings.c;0;4 +FILE_NAME_23=19868;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FLibs%2Flibgamebuino%2FDisplay.cpp;0;4 +FILE_NAME_24=1492;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBaseUnit.cpp;0;4 +FILE_NAME_25=1230;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBaseUnit.h;0;4 +FILE_NAME_26=1511;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FUnit.h;0;4 +FILE_NAME_27=1197;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FUnit.cpp;0;4 +FILE_NAME_28=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FBarracksSpr.i;0;4 +FILE_NAME_29=937;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FMouseSpr.i;0;4 +FILE_NAME_30=225;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FPeasantSpr.i;0;4 +FILE_NAME_31=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FSoldierSpr.i;0;4 +FILE_NAME_32=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FTowerSpr.i;0;4 +FILE_NAME_33=0;None;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FTownCentre.i;0;4 +FILE_NAME_34=2402;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCursor.cpp;0;4 +FILE_NAME_35=1300;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FCursor.h;0;4 +FILE_NAME_36=3153;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayer.cpp;0;4 +FILE_NAME_37=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fxavier%2FPocketEmpires%2Fsrc%2FHumanPlayerBtn.cpp;0;4 [VTE] last_dir=/home/xavier/PocketEmpires/src @@ -60,23 +60,12 @@ _y(0) /*****************************************************************//** * - * \brief Reportedly, this function updates X/Y coordinates for - * a Sprite object. + * \brief This function draws a \ref Sprite object on the screen. * - * \param x - * X position, relative to screen coordinates origin. - * - * \param y - * Y position, relative to screen coordinates origin. + * \remarks If \ref Sprite object must be followed by a \ref Camera + * object, X and Y coordinates are automatically adjusted. * *********************************************************************/ -void Sprite::setPos(const uint8_t x, const uint8_t y) -{ - /* Update coords according to input parameters. */ - _x = x; - _y = y; -} - void Sprite::draw(void) { gb.display.setColor(_colour, WHITE); @@ -86,10 +75,36 @@ void Sprite::draw(void) const uint8_t x = _followCam ? _cam->getX(_x) : _x; const uint8_t y = _followCam ? _cam->getY(_y) : _y; - gb.display.drawBitmap(x, y, _pu8SprData); + if (_pu8SprData != NULL) + { + gb.display.drawBitmap(x, y, _pu8SprData); + } + else + { + /* Undefined sprite data. */ + } } else { /* Error: uninitialized camera. */ } } + +/*****************************************************************//** + * + * \brief Reportedly, this function updates X/Y coordinates for + * a Sprite object. + * + * \param x + * X position, relative to screen coordinates origin. + * + * \param y + * Y position, relative to screen coordinates origin. + * + *********************************************************************/ +void Sprite::setPos(const uint8_t x, const uint8_t y) +{ + /* Update coords according to input parameters. */ + _x = x; + _y = y; +} @@ -19,8 +19,6 @@ * Global Variables * * **************************************/ -/* Gamebuino object is only visible for - * and accessed by C++ source files. */ extern Gamebuino gb; /* ************************************** @@ -99,8 +99,6 @@ void Unit::handler(void) { /* Execute base class handler. */ BaseUnit::handler(); - - drawHandler(); } /*****************************************************************//** @@ -44,9 +44,9 @@ class Unit : public BaseUnit explicit Unit(const Unit::tUnitID eUnitID = UNIT_ID_NONE); void create(const enum Unit::tUnitID eUnitID, const uint16_t x, const uint16_t y); void handler(void); + void drawHandler(void); private: - void drawHandler(void); enum tUnitID _eUnitID; }; |
