diff --git a/firmware/bootloader/Prometheus/bootloader_generated.hxx b/firmware/bootloader/Prometheus/bootloader_generated.hxx new file mode 100644 index 0000000000..05fc4d33a6 --- /dev/null +++ b/firmware/bootloader/Prometheus/bootloader_generated.hxx @@ -0,0 +1,943 @@ +// This file was generated by Bin2Header +// Mon Jan 22 23:46:06 EET 2018 +#ifndef BOOTLOADER_GENERATED_HXX_ +#define BOOTLOADER_GENERATED_HXX_ + +static const volatile uint8_t bootloader_code[] BOOTLOADER_SECTION = { + 0x00, 0x10, 0x00, 0x20, 0xd1, 0x01, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xd1, 0x0f, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0x41, 0x1c, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0x11, 0x14, 0x00, 0x08, + 0x41, 0x14, 0x00, 0x08, 0x81, 0x14, 0x00, 0x08, 0xc1, 0x14, 0x00, 0x08, 0x01, 0x15, 0x00, 0x08, + 0x31, 0x15, 0x00, 0x08, 0x71, 0x15, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xb1, 0x15, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0x31, 0x1e, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x15, 0x00, 0x08, 0x21, 0x16, 0x00, 0x08, 0x61, 0x16, 0x00, 0x08, 0xa1, 0x16, 0x00, 0x08, + 0xe1, 0x16, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0x11, 0x17, 0x00, 0x08, 0x51, 0x17, 0x00, 0x08, 0x91, 0x17, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, 0xf1, 0x04, 0x00, 0x08, + 0x61, 0x29, 0x00, 0x08, 0xb1, 0x2a, 0x00, 0x08, 0xb1, 0x2b, 0x00, 0x08, 0xe1, 0x31, 0x00, 0x08, + 0x72, 0xb6, 0x34, 0x48, 0x80, 0xf3, 0x09, 0x88, 0x40, 0xf2, 0x00, 0x00, 0xcc, 0xf2, 0x00, 0x00, + 0x4e, 0xf6, 0x34, 0x71, 0xce, 0xf2, 0x00, 0x01, 0x08, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, + 0x6f, 0x8f, 0x40, 0xf2, 0x00, 0x00, 0xc0, 0xf2, 0xf0, 0x00, 0x4e, 0xf6, 0x88, 0x51, 0xce, 0xf2, + 0x00, 0x01, 0x08, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0x4f, 0xf0, 0x00, 0x00, + 0xe1, 0xee, 0x10, 0x0a, 0x4e, 0xf6, 0x3c, 0x71, 0xce, 0xf2, 0x00, 0x01, 0x08, 0x60, 0x06, 0x20, + 0x80, 0xf3, 0x14, 0x88, 0xbf, 0xf3, 0x6f, 0x8f, 0x00, 0xf0, 0x1a, 0xf9, 0x01, 0xf0, 0x88, 0xff, + 0x4f, 0xf0, 0x55, 0x30, 0x1c, 0x49, 0x1d, 0x4a, 0x91, 0x42, 0x3c, 0xbf, 0x41, 0xf8, 0x04, 0x0b, + 0xfa, 0xe7, 0x1b, 0x49, 0x17, 0x4a, 0x91, 0x42, 0x3c, 0xbf, 0x41, 0xf8, 0x04, 0x0b, 0xfa, 0xe7, + 0x18, 0x49, 0x19, 0x4a, 0x19, 0x4b, 0x9a, 0x42, 0x3e, 0xbf, 0x51, 0xf8, 0x04, 0x0b, 0x42, 0xf8, + 0x04, 0x0b, 0xf8, 0xe7, 0x00, 0x20, 0x16, 0x49, 0x16, 0x4a, 0x91, 0x42, 0x3c, 0xbf, 0x41, 0xf8, + 0x04, 0x0b, 0xfa, 0xe7, 0x00, 0xf0, 0x0c, 0xf9, 0x00, 0xf0, 0xfa, 0xf8, 0x12, 0x4c, 0x13, 0x4d, + 0xac, 0x42, 0x03, 0xda, 0x54, 0xf8, 0x04, 0x1b, 0x88, 0x47, 0xf9, 0xe7, 0x02, 0xf0, 0x80, 0xff, + 0x0f, 0x4c, 0x10, 0x4d, 0xac, 0x42, 0x03, 0xda, 0x54, 0xf8, 0x04, 0x1b, 0x88, 0x47, 0xf9, 0xe7, + 0x00, 0xf0, 0xee, 0xb8, 0x00, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, + 0x00, 0x10, 0x00, 0x20, 0x18, 0x3a, 0x00, 0x08, 0x00, 0x16, 0x00, 0x20, 0x34, 0x16, 0x00, 0x20, + 0x38, 0x16, 0x00, 0x20, 0xbc, 0xba, 0x00, 0x20, 0xc0, 0x01, 0x00, 0x08, 0xd0, 0x01, 0x00, 0x08, + 0xd0, 0x01, 0x00, 0x08, 0xd0, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x4f, 0x2d, 0xed, 0x10, 0x8a, 0xc1, 0xf8, 0x0c, 0xd0, 0xc3, 0x68, 0x9d, 0x46, + 0xbd, 0xec, 0x10, 0x8a, 0xbd, 0xe8, 0xf0, 0x8f, 0x00, 0xf0, 0xda, 0xf9, 0x00, 0x23, 0x83, 0xf3, + 0x11, 0x88, 0x28, 0x46, 0xa0, 0x47, 0x00, 0x20, 0x00, 0xf0, 0xb2, 0xfc, 0x00, 0xf0, 0xc0, 0xf9, + 0x00, 0xf0, 0xee, 0xfb, 0x00, 0xf0, 0xcc, 0xf9, 0x00, 0xdf, 0xfe, 0xe7, 0x00, 0x00, 0x00, 0x00, + 0x84, 0x46, 0x41, 0xea, 0x00, 0x03, 0x13, 0xf0, 0x03, 0x03, 0x6d, 0xd1, 0x40, 0x3a, 0x41, 0xd3, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x40, 0x3a, 0xbd, 0xd2, 0x30, 0x32, 0x11, 0xd3, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x10, 0x3a, 0xed, 0xd2, 0x0c, 0x32, 0x05, 0xd3, + 0x51, 0xf8, 0x04, 0x3b, 0x40, 0xf8, 0x04, 0x3b, 0x04, 0x3a, 0xf9, 0xd2, 0x04, 0x32, 0x08, 0xd0, + 0xd2, 0x07, 0x1c, 0xbf, 0x11, 0xf8, 0x01, 0x3b, 0x00, 0xf8, 0x01, 0x3b, 0x01, 0xd3, 0x0b, 0x88, + 0x03, 0x80, 0x60, 0x46, 0x70, 0x47, 0x00, 0xbf, 0x08, 0x2a, 0x13, 0xd3, 0x8b, 0x07, 0x8d, 0xd0, + 0x10, 0xf0, 0x03, 0x03, 0x8a, 0xd0, 0xc3, 0xf1, 0x04, 0x03, 0xd2, 0x1a, 0xdb, 0x07, 0x1c, 0xbf, + 0x11, 0xf8, 0x01, 0x3b, 0x00, 0xf8, 0x01, 0x3b, 0x80, 0xd3, 0x31, 0xf8, 0x02, 0x3b, 0x20, 0xf8, + 0x02, 0x3b, 0x7b, 0xe7, 0x04, 0x3a, 0xd9, 0xd3, 0x01, 0x3a, 0x11, 0xf8, 0x01, 0x3b, 0x00, 0xf8, + 0x01, 0x3b, 0xf9, 0xd2, 0x0b, 0x78, 0x03, 0x70, 0x4b, 0x78, 0x43, 0x70, 0x8b, 0x78, 0x83, 0x70, + 0x60, 0x46, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfe, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xb5, 0x12, 0x4f, 0x12, 0x4d, 0x13, 0x4c, 0x13, 0x4b, 0x14, 0x49, 0x07, 0xf1, 0x80, 0x0e, + 0x00, 0x26, 0x9c, 0x42, 0x11, 0xd9, 0x04, 0x39, 0x1a, 0x46, 0x51, 0xf8, 0x04, 0x0f, 0x42, 0xf8, + 0x04, 0x0b, 0x94, 0x42, 0xf9, 0xd8, 0xda, 0x43, 0x14, 0x44, 0x24, 0xf0, 0x03, 0x04, 0x04, 0x34, + 0x23, 0x44, 0x9d, 0x42, 0x03, 0xd9, 0x43, 0xf8, 0x04, 0x6b, 0x9d, 0x42, 0xfb, 0xd8, 0x10, 0x37, + 0x77, 0x45, 0x02, 0xd2, 0x97, 0xe8, 0x3a, 0x00, 0xe3, 0xe7, 0xf0, 0xbd, 0x90, 0x32, 0x00, 0x08, + 0xbc, 0xba, 0x00, 0x20, 0xbc, 0xba, 0x00, 0x20, 0xbc, 0xba, 0x00, 0x20, 0x4c, 0x3a, 0x00, 0x08, + 0xfe, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfe, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x4b, 0x22, 0x4a, 0x22, 0x48, 0xf0, 0xb5, 0x00, 0x24, 0x9c, 0x60, 0xd9, 0x68, 0x21, 0x4e, + 0x21, 0x4d, 0x4f, 0xf6, 0xff, 0x07, 0x39, 0x40, 0x0a, 0x43, 0xda, 0x60, 0xf2, 0x68, 0x42, 0xf0, + 0x80, 0x72, 0xf2, 0x60, 0x02, 0x68, 0x20, 0x21, 0x42, 0xf0, 0x01, 0x02, 0x10, 0x26, 0x02, 0x60, + 0x83, 0xb0, 0xde, 0x77, 0x83, 0xf8, 0x22, 0x10, 0x00, 0xf0, 0xb2, 0xf9, 0x00, 0xf0, 0x50, 0xf9, + 0x00, 0xf0, 0x3e, 0xfc, 0x00, 0xf0, 0xf4, 0xfc, 0x00, 0xf0, 0x2a, 0xfd, 0x40, 0x21, 0x28, 0x46, + 0x00, 0xf0, 0xd6, 0xfa, 0xa5, 0xf1, 0x38, 0x07, 0x01, 0x26, 0x06, 0x77, 0xb8, 0x61, 0x00, 0xf0, + 0x7f, 0xf8, 0x84, 0xf3, 0x11, 0x88, 0x62, 0xb6, 0xbb, 0x69, 0x0c, 0x4a, 0x9a, 0x61, 0x05, 0xf1, + 0x50, 0x00, 0x32, 0x46, 0x00, 0x94, 0x0a, 0x4b, 0x40, 0xf6, 0x18, 0x01, 0x00, 0xf0, 0x28, 0xfb, + 0x08, 0x4b, 0x83, 0x61, 0x03, 0xb0, 0xf0, 0xbd, 0x00, 0xed, 0x00, 0xe0, 0x00, 0x03, 0xfa, 0x05, + 0x00, 0x10, 0x00, 0xe0, 0xf0, 0xed, 0x00, 0xe0, 0x70, 0x16, 0x00, 0x20, 0x80, 0x34, 0x00, 0x08, + 0x01, 0x05, 0x00, 0x08, 0x30, 0x33, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0xb5, 0x04, 0x46, 0x72, 0xb6, 0xb1, 0x22, 0x02, 0x49, 0x02, 0xf0, 0xf9, 0xfa, 0x02, 0x4b, + 0xdc, 0x62, 0xfe, 0xe7, 0x10, 0x33, 0x00, 0x08, 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0xe9, 0xf8, 0x43, 0x16, 0x4e, 0x00, 0xf0, 0xe3, 0xf8, 0xb2, 0x69, 0x93, 0x7f, 0x0b, 0xb1, + 0x01, 0x3b, 0x93, 0x77, 0x00, 0xf0, 0xdc, 0xf8, 0x12, 0x4f, 0xb3, 0x6a, 0xf4, 0x69, 0x01, 0x33, + 0xbc, 0x42, 0xb3, 0x62, 0x19, 0xd0, 0xa5, 0x68, 0x01, 0x3d, 0xa5, 0x60, 0xad, 0xb9, 0x4f, 0xf0, + 0x20, 0x09, 0x23, 0x68, 0xd4, 0xf8, 0x0c, 0x80, 0xe5, 0x60, 0x5f, 0x60, 0xf3, 0x61, 0x00, 0xf0, + 0x77, 0xf8, 0x85, 0xf3, 0x11, 0x88, 0x20, 0x69, 0xc0, 0x47, 0x89, 0xf3, 0x11, 0x88, 0x00, 0xf0, + 0x57, 0xf8, 0xf4, 0x69, 0xa3, 0x68, 0x00, 0x2b, 0xeb, 0xd0, 0xbd, 0xe8, 0xf8, 0x83, 0x00, 0xbf, + 0x38, 0x16, 0x00, 0x20, 0x54, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x4b, 0x1a, 0x6b, 0x0a, 0xb9, 0x5b, 0x6b, 0x13, 0xb1, 0x03, 0x48, 0xff, 0xf7, 0xb0, 0xbf, + 0x70, 0x47, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0x40, 0x33, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x4b, 0x1a, 0x6b, 0x0a, 0xb9, 0x5b, 0x6b, 0x13, 0xb1, 0x03, 0x48, 0xff, 0xf7, 0xa0, 0xbf, + 0x70, 0x47, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0x50, 0x33, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0x23, 0x6b, 0x0b, 0xb9, 0x63, 0x6b, 0x13, 0xb1, 0x03, 0x48, 0xff, 0xf7, + 0x8f, 0xff, 0x01, 0x23, 0x63, 0x63, 0x10, 0xbd, 0x38, 0x16, 0x00, 0x20, 0x80, 0x33, 0x00, 0x08, + 0x10, 0xb5, 0x07, 0x4c, 0x23, 0x6b, 0x2b, 0xb9, 0x63, 0x6b, 0x00, 0x2b, 0x02, 0xdd, 0x00, 0x23, + 0x63, 0x63, 0x10, 0xbd, 0x03, 0x48, 0xff, 0xf7, 0x7b, 0xff, 0x00, 0x23, 0x63, 0x63, 0x10, 0xbd, + 0x38, 0x16, 0x00, 0x20, 0xd0, 0x33, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x06, 0x4c, 0x23, 0x6b, 0x00, 0x2b, 0x01, 0xdd, 0x63, 0x6b, 0x13, 0xb1, 0x04, 0x48, + 0xff, 0xf7, 0x66, 0xff, 0x01, 0x23, 0x63, 0x63, 0x10, 0xbd, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, + 0xa0, 0x33, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x08, 0x4c, 0x23, 0x6b, 0x00, 0x2b, 0x05, 0xdd, 0x63, 0x6b, 0x00, 0x2b, 0x02, 0xdd, + 0x00, 0x23, 0x63, 0x63, 0x10, 0xbd, 0x04, 0x48, 0xff, 0xf7, 0x4a, 0xff, 0x00, 0x23, 0x63, 0x63, + 0x10, 0xbd, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0xe0, 0x33, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0x0a, 0x4c, 0x23, 0x6b, 0x00, 0x2b, 0x01, 0xdb, + 0x62, 0x6b, 0x1a, 0xb1, 0x08, 0x48, 0xff, 0xf7, 0x33, 0xff, 0x23, 0x6b, 0x07, 0x4a, 0x11, 0x68, + 0x01, 0x33, 0x8b, 0x42, 0x23, 0x63, 0xc8, 0xbf, 0x13, 0x60, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, + 0x10, 0xbd, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0x60, 0x33, 0x00, 0x08, 0x58, 0x32, 0x00, 0x20, + 0x10, 0xb5, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0x07, 0x4c, 0x23, 0x6b, 0x00, 0x2b, 0x01, 0xdd, + 0x62, 0x6b, 0x1a, 0xb1, 0x05, 0x48, 0xff, 0xf7, 0x13, 0xff, 0x23, 0x6b, 0x01, 0x3b, 0x23, 0x63, + 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0x10, 0xbd, 0x38, 0x16, 0x00, 0x20, 0x70, 0x33, 0x00, 0x08, + 0x05, 0x4b, 0x1a, 0x6b, 0x00, 0x2a, 0x03, 0xdb, 0x5b, 0x6b, 0x00, 0x2b, 0x00, 0xdd, 0x70, 0x47, + 0x02, 0x48, 0xff, 0xf7, 0xfd, 0xbe, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0xf0, 0x33, 0x00, 0x08, + 0x04, 0x4b, 0x1a, 0x6b, 0x1a, 0xb9, 0x5b, 0x6b, 0x00, 0x2b, 0x00, 0xdd, 0x70, 0x47, 0x02, 0x48, + 0xff, 0xf7, 0xee, 0xbe, 0x38, 0x16, 0x00, 0x20, 0x20, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x4b, 0x4f, 0xf0, 0xff, 0x30, 0x03, 0xf1, 0x1c, 0x02, 0x00, 0x21, 0x58, 0x62, 0x99, 0x62, + 0xda, 0x61, 0x1a, 0x62, 0x70, 0x47, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xb5, 0x05, 0x46, 0x0c, 0x46, 0x16, 0x46, 0x1f, 0x46, 0xff, 0xf7, 0xc9, 0xff, 0xd5, 0xb1, + 0xce, 0xb1, 0xc4, 0xb1, 0x0e, 0x48, 0x2f, 0x61, 0xc3, 0x69, 0xee, 0x60, 0x9a, 0x68, 0x94, 0x42, + 0x04, 0xd9, 0x1b, 0x68, 0xa4, 0x1a, 0x9a, 0x68, 0xa2, 0x42, 0xfa, 0xd3, 0x5a, 0x68, 0x6a, 0x60, + 0x2b, 0x60, 0x15, 0x60, 0x5d, 0x60, 0xac, 0x60, 0x99, 0x68, 0x4f, 0xf0, 0xff, 0x32, 0x09, 0x1b, + 0x99, 0x60, 0x42, 0x62, 0xf8, 0xbd, 0x03, 0x48, 0xff, 0xf7, 0xb2, 0xfe, 0xe2, 0xe7, 0x00, 0xbf, + 0x38, 0x16, 0x00, 0x20, 0x30, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x9c, 0xff, 0x7c, 0xb1, 0x23, 0x68, 0xa5, 0x68, 0x9a, 0x68, + 0x61, 0x68, 0x08, 0x48, 0x2a, 0x44, 0x9a, 0x60, 0x0b, 0x60, 0x25, 0x68, 0x00, 0x22, 0x4f, 0xf0, + 0xff, 0x33, 0x69, 0x60, 0xe2, 0x60, 0x43, 0x62, 0x38, 0xbd, 0x03, 0x48, 0xff, 0xf7, 0x90, 0xfe, + 0xeb, 0xe7, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0x40, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x4b, 0x00, 0x22, 0x1b, 0x60, 0x5b, 0x60, 0x1b, 0x61, 0x5b, 0x61, 0x9a, 0x60, 0x70, 0x47, + 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x6c, 0xff, 0x74, 0xb1, 0x00, 0x22, 0xa1, 0x68, 0x08, 0x4b, + 0x22, 0x77, 0x1b, 0x68, 0x9a, 0x68, 0x8a, 0x42, 0xfb, 0xd2, 0x5a, 0x68, 0x62, 0x60, 0x23, 0x60, + 0x20, 0x46, 0x14, 0x60, 0x5c, 0x60, 0x10, 0xbd, 0x02, 0x48, 0xff, 0xf7, 0x61, 0xfe, 0xec, 0xe7, + 0x38, 0x16, 0x00, 0x20, 0x50, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0xb5, 0x04, 0x46, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xff, 0xf7, 0xe1, 0xfe, 0x23, 0x7f, + 0x07, 0x2b, 0x10, 0xd8, 0xdf, 0xe8, 0x03, 0xf0, 0x15, 0x0f, 0x0f, 0x1b, 0x0a, 0x04, 0x0f, 0x0a, + 0x25, 0x6a, 0xff, 0xf7, 0x3d, 0xff, 0xab, 0x68, 0x01, 0x33, 0xab, 0x60, 0x94, 0xe8, 0x0c, 0x00, + 0x1a, 0x60, 0x22, 0x68, 0x53, 0x60, 0x4f, 0xf0, 0xff, 0x33, 0x23, 0x62, 0x20, 0x46, 0xff, 0xf7, + 0xbf, 0xff, 0xff, 0xf7, 0xdd, 0xfe, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0x38, 0xbd, 0x23, 0x6a, + 0x00, 0x22, 0x1a, 0x60, 0x4f, 0xf0, 0xff, 0x33, 0x23, 0x62, 0x20, 0x46, 0xff, 0xf7, 0xb0, 0xff, + 0xef, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x24, 0xff, 0x08, 0x4b, 0x99, 0x69, 0x1a, 0x68, 0x0c, 0x77, + 0x14, 0x20, 0x88, 0x77, 0x10, 0x68, 0x18, 0x60, 0x01, 0x24, 0x43, 0x60, 0x14, 0x77, 0x10, 0x46, + 0xbd, 0xe8, 0x10, 0x40, 0x9a, 0x61, 0xff, 0xf7, 0x9b, 0xbc, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, + 0x70, 0xb5, 0x0c, 0x46, 0x86, 0xb0, 0x06, 0x46, 0xff, 0xf7, 0x0a, 0xff, 0x63, 0x1c, 0x14, 0xd0, + 0x0e, 0x4d, 0x0f, 0x4a, 0xab, 0x69, 0x21, 0x46, 0x01, 0xa8, 0xff, 0xf7, 0x21, 0xff, 0x30, 0x46, + 0xff, 0xf7, 0xd6, 0xff, 0xff, 0xf7, 0xec, 0xfe, 0x04, 0x9b, 0x13, 0xb1, 0x01, 0xa8, 0xff, 0xf7, + 0x47, 0xff, 0xab, 0x69, 0x18, 0x6a, 0x06, 0xb0, 0x70, 0xbd, 0x04, 0x4d, 0x30, 0x46, 0xff, 0xf7, + 0xc7, 0xff, 0xab, 0x69, 0x18, 0x6a, 0x06, 0xb0, 0x70, 0xbd, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, + 0x11, 0x09, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xb5, 0x0d, 0x4d, 0x04, 0x46, 0x0e, 0x46, 0xff, 0xf7, 0xda, 0xfe, 0xa8, 0x69, 0x26, 0x62, + 0x83, 0x68, 0xa2, 0x68, 0x9a, 0x42, 0x0a, 0xd9, 0xff, 0xf7, 0x52, 0xff, 0x01, 0x23, 0x23, 0x77, + 0x01, 0x46, 0xac, 0x61, 0x20, 0x46, 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0x51, 0xbc, 0x20, 0x46, + 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0x44, 0xbf, 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x4a, 0x93, 0x69, 0x11, 0x68, 0x9a, 0x7f, 0x88, 0x68, 0x9b, 0x68, 0x22, 0xb9, 0x98, 0x42, + 0x34, 0xbf, 0x00, 0x20, 0x01, 0x20, 0x70, 0x47, 0x98, 0x42, 0x94, 0xbf, 0x00, 0x20, 0x01, 0x20, + 0x70, 0x47, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xb5, 0x0a, 0x4c, 0x23, 0x68, 0xa5, 0x69, 0x1a, 0x68, 0x22, 0x60, 0x14, 0x21, 0x01, 0x26, + 0x54, 0x60, 0x28, 0x46, 0x1e, 0x77, 0xa9, 0x77, 0xa3, 0x61, 0xff, 0xf7, 0x19, 0xff, 0x29, 0x46, + 0xa0, 0x69, 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0x1b, 0xbc, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, + 0x0d, 0x4a, 0x10, 0x68, 0x70, 0xb4, 0x03, 0x68, 0x94, 0x69, 0x13, 0x60, 0x01, 0x26, 0x00, 0x25, + 0xa1, 0x68, 0x5a, 0x60, 0x06, 0x77, 0x90, 0x61, 0x25, 0x77, 0x00, 0xe0, 0x1b, 0x68, 0x9a, 0x68, + 0x91, 0x42, 0xfb, 0xd3, 0x5a, 0x68, 0x62, 0x60, 0x23, 0x60, 0x21, 0x46, 0x14, 0x60, 0x5c, 0x60, + 0x70, 0xbc, 0xff, 0xf7, 0xfd, 0xbb, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x4b, 0x9b, 0x69, 0x9b, 0x7f, 0x0b, 0xb1, 0xff, 0xf7, 0xda, 0xbf, 0xff, 0xf7, 0xc0, 0xbf, + 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xb5, 0x0d, 0x4c, 0xc1, 0x63, 0x65, 0x69, 0x81, 0x60, 0x00, 0x22, 0x00, 0xf1, 0x28, 0x01, + 0x4f, 0xf0, 0x02, 0x0e, 0x14, 0x27, 0x00, 0xf1, 0x24, 0x06, 0x45, 0x61, 0x04, 0x61, 0x80, 0xf8, + 0x1c, 0xe0, 0x87, 0x77, 0x42, 0x77, 0x82, 0x63, 0x42, 0x63, 0x82, 0x61, 0x28, 0x61, 0x60, 0x61, + 0x46, 0x62, 0x81, 0x62, 0xc1, 0x62, 0xf0, 0xbd, 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0xe9, 0xf8, 0x43, 0x04, 0x46, 0x0d, 0x46, 0x90, 0x46, 0x99, 0x46, 0xff, 0xf7, 0x28, 0xfe, + 0x14, 0xb1, 0xb5, 0xf5, 0x83, 0x6f, 0x29, 0xd2, 0x18, 0x48, 0xff, 0xf7, 0x29, 0xfd, 0xa5, 0xf1, + 0x64, 0x01, 0x21, 0x44, 0x16, 0x4f, 0x08, 0x9b, 0x7e, 0x69, 0x16, 0x4a, 0xe1, 0x60, 0x02, 0x25, + 0x4b, 0x64, 0x14, 0x20, 0x00, 0x23, 0x0a, 0x66, 0xc1, 0xf8, 0x40, 0x90, 0x04, 0xf1, 0x28, 0x02, + 0xa0, 0x77, 0x04, 0xf1, 0x24, 0x01, 0x25, 0x77, 0x63, 0x77, 0xc4, 0xf8, 0x08, 0x80, 0x27, 0x61, + 0x66, 0x61, 0xc4, 0xf8, 0x3c, 0x80, 0xa3, 0x63, 0x63, 0x63, 0xa3, 0x61, 0x20, 0x46, 0x34, 0x61, + 0x7c, 0x61, 0x61, 0x62, 0xa2, 0x62, 0xe2, 0x62, 0xbd, 0xe8, 0xf8, 0x83, 0xb8, 0xf1, 0x7f, 0x0f, + 0xd2, 0xd8, 0xb9, 0xf1, 0x00, 0x0f, 0xd2, 0xd1, 0xce, 0xe7, 0x00, 0xbf, 0x60, 0x34, 0x00, 0x08, + 0x38, 0x16, 0x00, 0x20, 0xf9, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x41, 0x82, 0xb0, 0x98, 0x46, 0x04, 0x46, 0x0d, 0x46, 0x16, 0x46, 0x08, 0x9f, + 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xff, 0xf7, 0x4b, 0xfd, 0x43, 0x46, 0x32, 0x46, 0x29, 0x46, + 0x00, 0x97, 0x20, 0x46, 0xff, 0xf7, 0xa4, 0xff, 0x00, 0x21, 0x04, 0x46, 0xff, 0xf7, 0x00, 0xff, + 0xff, 0xf7, 0x4e, 0xfd, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0x20, 0x46, 0x02, 0xb0, 0xbd, 0xe8, + 0xf0, 0x81, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0xb5, 0x0e, 0x4b, 0x9c, 0x69, 0x63, 0x6a, 0x20, 0x62, 0x04, 0xf1, 0x24, 0x05, 0x9d, 0x42, + 0x07, 0xd0, 0x1a, 0x68, 0x62, 0x62, 0x18, 0x46, 0xff, 0xf7, 0x42, 0xfe, 0x63, 0x6a, 0xab, 0x42, + 0xf7, 0xd1, 0x63, 0x7f, 0x9b, 0x07, 0x04, 0xd1, 0x63, 0x69, 0x22, 0x69, 0x1a, 0x61, 0x22, 0x69, + 0x53, 0x61, 0x0f, 0x20, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0x8a, 0xbe, 0x38, 0x16, 0x00, 0x20, + 0x10, 0xb5, 0x20, 0x23, 0x04, 0x46, 0x83, 0xf3, 0x11, 0x88, 0xff, 0xf7, 0x09, 0xfd, 0x20, 0x46, + 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xd4, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x46, 0xb8, 0xb1, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xff, 0xf7, 0xf8, 0xfc, + 0x23, 0x7f, 0x0f, 0x2b, 0x07, 0xd0, 0x0a, 0x4b, 0x62, 0x6a, 0x9b, 0x69, 0x09, 0x20, 0x1a, 0x60, + 0x63, 0x62, 0xff, 0xf7, 0x65, 0xfe, 0x24, 0x6a, 0xff, 0xf7, 0xfa, 0xfc, 0x00, 0x23, 0x83, 0xf3, + 0x11, 0x88, 0x20, 0x46, 0x10, 0xbd, 0x03, 0x48, 0xff, 0xf7, 0x7a, 0xfc, 0xe3, 0xe7, 0x00, 0xbf, + 0x38, 0x16, 0x00, 0x20, 0x70, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x4b, 0x02, 0x46, 0x9b, 0x69, 0x21, 0xb1, 0x03, 0x60, 0x03, 0x20, 0x1a, 0x62, 0xff, 0xf7, + 0x5f, 0xbe, 0x4f, 0xf0, 0xff, 0x30, 0x70, 0x47, 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x68, 0x2b, 0xb1, 0x00, 0x22, 0x02, 0x60, 0x18, 0x46, 0x19, 0x62, 0xff, 0xf7, 0xe0, 0xbd, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x69, 0xb1, 0x08, 0x4b, 0x10, 0xb4, 0x02, 0x46, 0x44, 0x68, 0x9b, 0x69, 0x04, 0x20, 0x83, 0xe8, + 0x14, 0x00, 0x23, 0x60, 0x53, 0x60, 0x5d, 0xf8, 0x04, 0x4b, 0xff, 0xf7, 0x39, 0xbe, 0x4f, 0xf0, + 0xff, 0x30, 0x70, 0x47, 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x68, 0x90, 0x42, 0x0a, 0xd0, 0x10, 0xb4, 0x14, 0x68, 0x04, 0x60, 0x03, 0x46, 0x63, 0x60, + 0x11, 0x62, 0x10, 0x46, 0x5d, 0xf8, 0x04, 0x4b, 0xff, 0xf7, 0xb2, 0xbd, 0x70, 0x47, 0x00, 0xbf, + 0x01, 0x4b, 0x5b, 0x68, 0x83, 0x60, 0x70, 0x47, 0x00, 0x10, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x4b, 0x0f, 0x4a, 0x5b, 0x68, 0xc1, 0x68, 0xf0, 0xb4, 0x87, 0x68, 0xd2, 0xf8, 0x80, 0x60, + 0x42, 0x68, 0xd0, 0xe9, 0x04, 0x45, 0xdb, 0x1b, 0x9b, 0x1b, 0xe4, 0x18, 0x45, 0xf1, 0x00, 0x05, + 0x93, 0x42, 0x02, 0x68, 0x88, 0xbf, 0x43, 0x60, 0x01, 0x31, 0x93, 0x42, 0xc0, 0xe9, 0x04, 0x45, + 0xc1, 0x60, 0x83, 0x60, 0x38, 0xbf, 0x03, 0x60, 0xf0, 0xbc, 0x70, 0x47, 0x00, 0x10, 0x00, 0xe0, + 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd0, 0xb5, 0x0d, 0x4c, 0x86, 0xb0, 0x00, 0x23, 0x4f, 0xf0, 0xff, 0x32, 0x68, 0x46, 0x00, 0x26, + 0x00, 0x27, 0xc4, 0xf8, 0x80, 0x30, 0x01, 0x93, 0x02, 0x93, 0x03, 0x93, 0x00, 0x92, 0xcd, 0xe9, + 0x04, 0x67, 0xff, 0xf7, 0xbd, 0xff, 0x68, 0x46, 0xff, 0xf7, 0xc2, 0xff, 0x02, 0x9b, 0xc4, 0xf8, + 0x80, 0x30, 0x06, 0xb0, 0xd0, 0xbd, 0x00, 0xbf, 0x38, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x46, 0x20, 0xb1, 0x00, 0x23, 0x24, 0x60, 0x64, 0x60, 0xa3, 0x60, 0x10, 0xbd, + 0x01, 0x48, 0xff, 0xf7, 0xcd, 0xfb, 0xf6, 0xe7, 0xa0, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x30, 0xb4, 0x02, 0x9c, 0x04, 0x62, 0x00, 0x25, 0x0a, 0x44, 0x85, 0x60, 0x02, 0x61, 0x00, 0x60, + 0x40, 0x60, 0xc1, 0x60, 0x81, 0x61, 0x41, 0x61, 0xc3, 0x61, 0x30, 0xbc, 0x70, 0x47, 0x00, 0xbf, + 0x38, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0xff, 0xf7, 0xab, 0xfc, 0xff, 0xf7, 0xa9, 0xfc, 0x63, 0x69, + 0xa2, 0x69, 0x93, 0x42, 0x11, 0xd0, 0xa2, 0x68, 0x59, 0x1c, 0x01, 0x32, 0xa2, 0x60, 0x61, 0x61, + 0x1d, 0x70, 0x62, 0x69, 0x23, 0x69, 0x9a, 0x42, 0x01, 0xd3, 0xe3, 0x68, 0x63, 0x61, 0x20, 0x46, + 0x00, 0x21, 0xff, 0xf7, 0x65, 0xff, 0x00, 0x20, 0x38, 0xbd, 0xa2, 0x68, 0x00, 0x2a, 0xea, 0xd0, + 0x6f, 0xf0, 0x03, 0x00, 0x38, 0xbd, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x4f, 0x04, 0x46, 0x83, 0xb0, 0x89, 0x46, 0x1d, 0x46, 0xd0, 0xf8, 0x1c, 0x80, + 0x92, 0x46, 0x00, 0x2a, 0x3b, 0xd0, 0x20, 0x27, 0x87, 0xf3, 0x11, 0x88, 0x00, 0x26, 0xff, 0xf7, + 0xe7, 0xfb, 0xb3, 0x46, 0x01, 0x97, 0xb8, 0xf1, 0x00, 0x0f, 0x05, 0xd0, 0x20, 0x46, 0xc0, 0x47, + 0x02, 0xe0, 0xff, 0xf7, 0x25, 0xff, 0x10, 0xbb, 0xff, 0xf7, 0x6a, 0xfc, 0xa7, 0x68, 0x29, 0x46, + 0x20, 0x46, 0x00, 0x2f, 0xf5, 0xd0, 0xa2, 0x69, 0xa3, 0x68, 0x51, 0x1c, 0x01, 0x3b, 0xa1, 0x61, + 0xa3, 0x60, 0x13, 0x78, 0x09, 0xf8, 0x01, 0x3b, 0x23, 0x69, 0xa2, 0x69, 0x9a, 0x42, 0x24, 0xbf, + 0xe3, 0x68, 0xa3, 0x61, 0xff, 0xf7, 0xd4, 0xfb, 0x8b, 0xf3, 0x11, 0x88, 0x01, 0x36, 0xb2, 0x45, + 0x09, 0xd0, 0x01, 0x9b, 0x83, 0xf3, 0x11, 0x88, 0xff, 0xf7, 0xba, 0xfb, 0xd3, 0xe7, 0xff, 0xf7, + 0xc7, 0xfb, 0x87, 0xf3, 0x11, 0x88, 0x30, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x02, 0x48, + 0xff, 0xf7, 0x46, 0xfb, 0xbf, 0xe7, 0x00, 0xbf, 0xb0, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x4b, 0x04, 0x49, 0x04, 0x4a, 0x0b, 0x60, 0x03, 0xf5, 0x00, 0x63, 0x13, 0x60, 0x70, 0x47, + 0xd8, 0x1e, 0x00, 0x20, 0xdc, 0x26, 0x00, 0x20, 0xd8, 0x26, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x20, 0x23, 0x04, 0x46, 0x83, 0xf3, 0x11, 0x88, 0xff, 0xf7, 0x91, 0xfb, 0xff, 0xf7, + 0x1f, 0xfc, 0x0a, 0x49, 0x0a, 0x4b, 0x08, 0x68, 0x1a, 0x68, 0xe3, 0x1d, 0x23, 0xf0, 0x07, 0x03, + 0x12, 0x1a, 0x93, 0x42, 0x9d, 0xbf, 0x1b, 0x18, 0x0b, 0x60, 0x04, 0x46, 0x00, 0x24, 0xff, 0xf7, + 0x8f, 0xfb, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0x20, 0x46, 0x10, 0xbd, 0xdc, 0x26, 0x00, 0x20, + 0xd8, 0x26, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x4b, 0x05, 0x4a, 0x1a, 0x60, 0x03, 0xf1, 0x10, 0x00, 0x00, 0x22, 0x9a, 0x60, 0xda, 0x60, + 0xff, 0xf7, 0x26, 0xbf, 0xe0, 0x26, 0x00, 0x20, 0x61, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xb4, 0x09, 0x4a, 0x53, 0x68, 0x23, 0xf0, 0x01, 0x03, 0x00, 0xaf, 0x53, 0x60, 0xef, 0xf3, + 0x09, 0x83, 0x68, 0x33, 0x83, 0xf3, 0x09, 0x88, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xbd, 0x46, + 0x5d, 0xf8, 0x04, 0x7b, 0x70, 0x47, 0x00, 0xbf, 0x30, 0xef, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x98, 0xb5, 0x20, 0x23, 0x00, 0xaf, 0x83, 0xf3, 0x11, 0x88, 0x11, 0x4b, 0x5b, 0x68, 0x13, 0xf4, + 0x00, 0x63, 0x02, 0xd1, 0x83, 0xf3, 0x11, 0x88, 0x98, 0xbd, 0xf1, 0xee, 0x10, 0x3a, 0xef, 0xf3, + 0x09, 0x84, 0x0c, 0x4b, 0x4f, 0xf0, 0x80, 0x72, 0xdb, 0x68, 0x44, 0xf8, 0x08, 0x3c, 0x44, 0xf8, + 0x4c, 0x2c, 0xa4, 0xf1, 0x68, 0x03, 0x83, 0xf3, 0x09, 0x88, 0xff, 0xf7, 0x09, 0xfd, 0x18, 0xb1, + 0x05, 0x4b, 0x44, 0xf8, 0x50, 0x3c, 0x98, 0xbd, 0x04, 0x4b, 0x44, 0xf8, 0x50, 0x3c, 0x98, 0xbd, + 0x00, 0xed, 0x00, 0xe0, 0x30, 0xef, 0x00, 0xe0, 0x0d, 0x03, 0x00, 0x08, 0x18, 0x03, 0x00, 0x08, + 0x08, 0xb5, 0x00, 0xf0, 0x1d, 0xf9, 0x08, 0x48, 0x00, 0xf0, 0x3a, 0xfc, 0x00, 0xf0, 0x18, 0xf8, + 0x00, 0xf0, 0x2e, 0xf8, 0x00, 0xf0, 0x0c, 0xf8, 0x00, 0xf0, 0xd2, 0xf8, 0x01, 0xf0, 0x68, 0xf8, + 0xbd, 0xe8, 0x08, 0x40, 0x00, 0xf0, 0x1c, 0xb8, 0x30, 0x36, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x96, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x23, 0x01, 0x22, 0x02, 0x70, 0x43, 0x60, 0x83, 0x60, 0x0c, 0x30, 0xff, 0xf7, 0xa8, 0xbe, + 0x00, 0xf0, 0xd6, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x2e, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x23, 0x01, 0x22, 0x02, 0x70, 0x43, 0x70, 0x83, 0x70, 0x43, 0x60, 0x03, 0x72, 0xc3, 0x60, + 0x03, 0x61, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0xb5, 0x0d, 0x46, 0x04, 0x46, 0x88, 0xb1, 0x81, 0xb1, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, + 0xff, 0xf7, 0xbe, 0xfa, 0x20, 0x46, 0x65, 0x60, 0x00, 0xf0, 0x22, 0xff, 0x02, 0x23, 0x23, 0x70, + 0xff, 0xf7, 0xc6, 0xfa, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0x38, 0xbd, 0x01, 0x48, 0xff, 0xf7, + 0x47, 0xfa, 0xea, 0xe7, 0xc0, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x34, 0xfb, 0x54, 0xb1, 0x63, 0x78, 0x01, 0x2b, 0x01, 0xd0, + 0x00, 0x20, 0x10, 0xbd, 0x20, 0x46, 0x00, 0xf0, 0xbb, 0xff, 0x00, 0x23, 0x63, 0x70, 0x10, 0xbd, + 0x01, 0x48, 0xff, 0xf7, 0x2d, 0xfa, 0xf0, 0xe7, 0xd0, 0x34, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xb5, 0x0d, 0x46, 0x16, 0x46, 0x04, 0x46, 0x00, 0xb1, 0xa1, 0xb9, 0x0b, 0x48, 0xff, 0xf7, + 0x1f, 0xfa, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xff, 0xf7, 0x82, 0xfa, 0x32, 0x46, 0x29, 0x46, + 0x20, 0x46, 0x00, 0xf0, 0xad, 0xff, 0x01, 0x23, 0xa3, 0x70, 0xff, 0xf7, 0x89, 0xfa, 0x00, 0x23, + 0x83, 0xf3, 0x11, 0x88, 0x70, 0xbd, 0x00, 0x2a, 0xeb, 0xd1, 0xe7, 0xe7, 0xe0, 0x34, 0x00, 0x08, + 0x2d, 0xe9, 0xf0, 0x41, 0x0d, 0x46, 0x17, 0x46, 0x98, 0x46, 0x04, 0x46, 0x08, 0xb1, 0x0b, 0x68, + 0x13, 0xbb, 0x13, 0x48, 0xff, 0xf7, 0xfc, 0xf9, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0x01, 0x26, + 0xff, 0xf7, 0x5e, 0xfa, 0x3a, 0x46, 0x26, 0x72, 0x29, 0x68, 0x20, 0x46, 0x00, 0xf0, 0x58, 0xff, + 0x66, 0x70, 0x41, 0x46, 0x04, 0xf1, 0x10, 0x00, 0xff, 0xf7, 0x7a, 0xfd, 0x06, 0x46, 0x18, 0xb1, + 0x20, 0x46, 0xff, 0xf7, 0xa5, 0xff, 0x28, 0x60, 0xff, 0xf7, 0x5a, 0xfa, 0x00, 0x23, 0x83, 0xf3, + 0x11, 0x88, 0x30, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x00, 0x2a, 0xdd, 0xd1, 0xd9, 0xe7, 0x00, 0xbf, + 0x00, 0x35, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x43, 0x09, 0x10, 0xb4, 0x9b, 0x00, 0x00, 0xf1, 0x60, 0x44, 0x04, 0xf5, 0x61, 0x44, 0x03, 0xf1, + 0x60, 0x43, 0x09, 0x01, 0x03, 0xf5, 0x61, 0x43, 0x00, 0xf0, 0x1f, 0x00, 0x01, 0x22, 0xc9, 0xb2, + 0x84, 0xf8, 0x00, 0x13, 0x02, 0xfa, 0x00, 0xf0, 0xc3, 0xf8, 0x80, 0x01, 0x5d, 0xf8, 0x04, 0x4b, + 0x18, 0x60, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0b, 0x28, 0x38, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0x02, 0xd9, 0x05, 0x48, 0xff, 0xf7, 0xa0, 0xf9, + 0x04, 0xf1, 0x60, 0x40, 0x00, 0xf5, 0x6d, 0x40, 0x2d, 0x01, 0xed, 0xb2, 0x05, 0x76, 0x38, 0xbd, + 0x10, 0x35, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x4b, 0x4f, 0xf0, 0xff, 0x31, 0x1a, 0x69, 0x00, 0x22, 0x10, 0xb4, 0x19, 0x61, 0x1a, 0x61, + 0x58, 0x69, 0x59, 0x61, 0x5a, 0x61, 0x18, 0x6a, 0x12, 0x4c, 0x60, 0xf0, 0x80, 0x50, 0x18, 0x62, + 0x1a, 0x62, 0x58, 0x6a, 0x59, 0x62, 0x5a, 0x62, 0x19, 0x6c, 0x41, 0xf0, 0x80, 0x51, 0x19, 0x64, + 0x21, 0x68, 0x41, 0xf4, 0x80, 0x71, 0x21, 0x60, 0x19, 0x6f, 0x01, 0xf4, 0x40, 0x71, 0xb1, 0xf5, + 0x40, 0x7f, 0x03, 0xd0, 0x4f, 0xf4, 0x80, 0x31, 0x19, 0x67, 0x1a, 0x67, 0x05, 0x4a, 0x5d, 0xf8, + 0x04, 0x4b, 0x53, 0x68, 0x23, 0xf4, 0x00, 0x73, 0x53, 0x60, 0x00, 0xf0, 0x69, 0xba, 0x00, 0xbf, + 0x00, 0x38, 0x02, 0x40, 0x00, 0x70, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x4a, 0x34, 0x4b, 0x4f, 0xf0, 0x80, 0x50, 0x4f, 0xf4, 0x40, 0x41, 0x10, 0x64, 0x19, 0x60, + 0x13, 0x68, 0x43, 0xf0, 0x01, 0x03, 0x13, 0x60, 0x13, 0x68, 0x99, 0x07, 0xfc, 0xd5, 0x93, 0x68, + 0x2b, 0x49, 0x23, 0xf0, 0x03, 0x03, 0x93, 0x60, 0x93, 0x68, 0x93, 0x60, 0x8b, 0x68, 0x13, 0xf0, + 0x0c, 0x03, 0xfb, 0xd1, 0x0a, 0x68, 0x26, 0x48, 0x02, 0xf0, 0xf9, 0x02, 0x0a, 0x60, 0x8b, 0x60, + 0x0b, 0x68, 0x43, 0xf4, 0x80, 0x33, 0x0b, 0x60, 0x03, 0x68, 0x9b, 0x03, 0xfc, 0xd5, 0x43, 0x6f, + 0x1f, 0x4a, 0x43, 0xf0, 0x01, 0x03, 0x43, 0x67, 0x53, 0x6f, 0x99, 0x07, 0xfc, 0xd5, 0x1e, 0x4b, + 0x53, 0x60, 0x13, 0x68, 0x1b, 0x49, 0x43, 0xf0, 0x80, 0x73, 0x13, 0x60, 0x4b, 0x68, 0x5a, 0x04, + 0xfc, 0xd5, 0x17, 0x4a, 0x13, 0x68, 0x9b, 0x01, 0xfc, 0xd5, 0x18, 0x49, 0x91, 0x60, 0x18, 0x4b, + 0x00, 0x21, 0xc2, 0xf8, 0x8c, 0x10, 0x1a, 0x68, 0x16, 0x4b, 0x9a, 0x42, 0x16, 0xd0, 0x16, 0x4b, + 0x40, 0xf2, 0x05, 0x72, 0x1a, 0x60, 0x0e, 0x4a, 0x93, 0x68, 0x43, 0xf0, 0x02, 0x03, 0x93, 0x60, + 0x93, 0x68, 0x03, 0xf0, 0x0c, 0x03, 0x08, 0x2b, 0xfa, 0xd1, 0x53, 0x6c, 0x43, 0xf4, 0x80, 0x43, + 0x53, 0x64, 0x53, 0x6e, 0x43, 0xf4, 0x80, 0x43, 0x53, 0x66, 0x70, 0x47, 0x0b, 0x4a, 0x0c, 0x4b, + 0x12, 0x68, 0x9a, 0x42, 0xe3, 0xd1, 0x08, 0x4b, 0x40, 0xf2, 0x05, 0x12, 0x1a, 0x60, 0xe2, 0xe7, + 0x00, 0x38, 0x02, 0x40, 0x00, 0x70, 0x00, 0x40, 0x08, 0x54, 0x40, 0x07, 0x00, 0x94, 0x88, 0x38, + 0x00, 0x20, 0x04, 0xe0, 0x11, 0x64, 0x00, 0x20, 0x00, 0x3c, 0x02, 0x40, 0x00, 0xed, 0x00, 0xe0, + 0x41, 0xc2, 0x0f, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0xb5, 0xff, 0xf7, 0x95, 0xf9, 0x08, 0x4b, 0x08, 0x4a, 0x19, 0x68, 0x01, 0xf0, 0x3d, 0x01, + 0x99, 0x60, 0x13, 0x68, 0x0b, 0xb1, 0x50, 0x68, 0x98, 0x47, 0xff, 0xf7, 0xa9, 0xf9, 0xbd, 0xe8, + 0x08, 0x40, 0xff, 0xf7, 0xe5, 0xbd, 0x00, 0xbf, 0x00, 0x60, 0x02, 0x40, 0x00, 0x27, 0x00, 0x20, + 0x10, 0xb5, 0xff, 0xf7, 0x7d, 0xf9, 0x09, 0x4b, 0x09, 0x48, 0x19, 0x68, 0x82, 0x68, 0x89, 0x09, + 0x01, 0xf0, 0x3d, 0x01, 0x8c, 0x01, 0x9c, 0x60, 0x0a, 0xb1, 0xc0, 0x68, 0x90, 0x47, 0xff, 0xf7, + 0x8f, 0xf9, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xcb, 0xbd, 0x00, 0xbf, 0x00, 0x60, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0x5d, 0xf9, 0x09, 0x4b, 0x09, 0x48, 0x19, 0x68, 0x02, 0x69, 0x09, 0x0c, + 0x01, 0xf0, 0x3d, 0x01, 0x0c, 0x04, 0x9c, 0x60, 0x0a, 0xb1, 0x40, 0x69, 0x90, 0x47, 0xff, 0xf7, + 0x6f, 0xf9, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xab, 0xbd, 0x00, 0xbf, 0x00, 0x60, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0x3d, 0xf9, 0x09, 0x4b, 0x09, 0x48, 0x19, 0x68, 0x82, 0x69, 0x89, 0x0d, + 0x01, 0xf0, 0x3d, 0x01, 0x8c, 0x05, 0x9c, 0x60, 0x0a, 0xb1, 0xc0, 0x69, 0x90, 0x47, 0xff, 0xf7, + 0x4f, 0xf9, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x8b, 0xbd, 0x00, 0xbf, 0x00, 0x60, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0xb5, 0xff, 0xf7, 0x1d, 0xf9, 0x08, 0x4b, 0x08, 0x48, 0x59, 0x68, 0x02, 0x6a, 0x01, 0xf0, + 0x3d, 0x01, 0xd9, 0x60, 0x0a, 0xb1, 0x40, 0x6a, 0x90, 0x47, 0xff, 0xf7, 0x31, 0xf9, 0xbd, 0xe8, + 0x08, 0x40, 0xff, 0xf7, 0x6d, 0xbd, 0x00, 0xbf, 0x00, 0x60, 0x02, 0x40, 0x00, 0x27, 0x00, 0x20, + 0x10, 0xb5, 0xff, 0xf7, 0x05, 0xf9, 0x09, 0x4b, 0x09, 0x48, 0x59, 0x68, 0x82, 0x6a, 0x89, 0x09, + 0x01, 0xf0, 0x3d, 0x01, 0x8c, 0x01, 0xdc, 0x60, 0x0a, 0xb1, 0xc0, 0x6a, 0x90, 0x47, 0xff, 0xf7, + 0x17, 0xf9, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x53, 0xbd, 0x00, 0xbf, 0x00, 0x60, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0xe5, 0xf8, 0x09, 0x4b, 0x09, 0x48, 0x59, 0x68, 0x02, 0x6b, 0x09, 0x0c, + 0x01, 0xf0, 0x3d, 0x01, 0x0c, 0x04, 0xdc, 0x60, 0x0a, 0xb1, 0x40, 0x6b, 0x90, 0x47, 0xff, 0xf7, + 0xf7, 0xf8, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x33, 0xbd, 0x00, 0xbf, 0x00, 0x60, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0xc5, 0xf8, 0x09, 0x4b, 0x09, 0x48, 0x59, 0x68, 0x82, 0x6b, 0x89, 0x0d, + 0x01, 0xf0, 0x3d, 0x01, 0x8c, 0x05, 0xdc, 0x60, 0x0a, 0xb1, 0xc0, 0x6b, 0x90, 0x47, 0xff, 0xf7, + 0xd7, 0xf8, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x13, 0xbd, 0x00, 0xbf, 0x00, 0x60, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0xb5, 0xff, 0xf7, 0xa5, 0xf8, 0x08, 0x4b, 0x08, 0x48, 0x19, 0x68, 0x02, 0x6c, 0x01, 0xf0, + 0x3d, 0x01, 0x99, 0x60, 0x0a, 0xb1, 0x40, 0x6c, 0x90, 0x47, 0xff, 0xf7, 0xb9, 0xf8, 0xbd, 0xe8, + 0x08, 0x40, 0xff, 0xf7, 0xf5, 0xbc, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x40, 0x00, 0x27, 0x00, 0x20, + 0x10, 0xb5, 0xff, 0xf7, 0x8d, 0xf8, 0x09, 0x4b, 0x09, 0x48, 0x19, 0x68, 0x82, 0x6c, 0x89, 0x09, + 0x01, 0xf0, 0x3d, 0x01, 0x8c, 0x01, 0x9c, 0x60, 0x0a, 0xb1, 0xc0, 0x6c, 0x90, 0x47, 0xff, 0xf7, + 0x9f, 0xf8, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xdb, 0xbc, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0x6d, 0xf8, 0x09, 0x4b, 0x09, 0x48, 0x19, 0x68, 0x02, 0x6d, 0x09, 0x0c, + 0x01, 0xf0, 0x3d, 0x01, 0x0c, 0x04, 0x9c, 0x60, 0x0a, 0xb1, 0x40, 0x6d, 0x90, 0x47, 0xff, 0xf7, + 0x7f, 0xf8, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xbb, 0xbc, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0x4d, 0xf8, 0x09, 0x4b, 0x09, 0x48, 0x19, 0x68, 0x82, 0x6d, 0x89, 0x0d, + 0x01, 0xf0, 0x3d, 0x01, 0x8c, 0x05, 0x9c, 0x60, 0x0a, 0xb1, 0xc0, 0x6d, 0x90, 0x47, 0xff, 0xf7, + 0x5f, 0xf8, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x9b, 0xbc, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0xb5, 0xff, 0xf7, 0x2d, 0xf8, 0x08, 0x4b, 0x08, 0x48, 0x59, 0x68, 0x02, 0x6e, 0x01, 0xf0, + 0x3d, 0x01, 0xd9, 0x60, 0x0a, 0xb1, 0x40, 0x6e, 0x90, 0x47, 0xff, 0xf7, 0x41, 0xf8, 0xbd, 0xe8, + 0x08, 0x40, 0xff, 0xf7, 0x7d, 0xbc, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x40, 0x00, 0x27, 0x00, 0x20, + 0x10, 0xb5, 0xff, 0xf7, 0x15, 0xf8, 0x09, 0x4b, 0x09, 0x48, 0x59, 0x68, 0x82, 0x6e, 0x89, 0x09, + 0x01, 0xf0, 0x3d, 0x01, 0x8c, 0x01, 0xdc, 0x60, 0x0a, 0xb1, 0xc0, 0x6e, 0x90, 0x47, 0xff, 0xf7, + 0x27, 0xf8, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x63, 0xbc, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0xfe, 0xf7, 0xf5, 0xff, 0x09, 0x4b, 0x09, 0x48, 0x59, 0x68, 0x02, 0x6f, 0x09, 0x0c, + 0x01, 0xf0, 0x3d, 0x01, 0x0c, 0x04, 0xdc, 0x60, 0x0a, 0xb1, 0x40, 0x6f, 0x90, 0x47, 0xff, 0xf7, + 0x07, 0xf8, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x43, 0xbc, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0xfe, 0xf7, 0xd5, 0xff, 0x09, 0x4b, 0x09, 0x48, 0x59, 0x68, 0x82, 0x6f, 0x89, 0x0d, + 0x01, 0xf0, 0x3d, 0x01, 0x8c, 0x05, 0xdc, 0x60, 0x0a, 0xb1, 0xc0, 0x6f, 0x90, 0x47, 0xfe, 0xf7, + 0xe7, 0xff, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x23, 0xbc, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x40, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x49, 0x0f, 0x4a, 0x0f, 0x48, 0x00, 0x23, 0x10, 0xb4, 0x0b, 0x60, 0x0e, 0x4c, 0x19, 0x46, + 0x01, 0xe0, 0x52, 0xf8, 0x0c, 0x0c, 0x01, 0x60, 0x44, 0xf8, 0x33, 0x10, 0x01, 0x33, 0x10, 0x2b, + 0x02, 0xf1, 0x0c, 0x02, 0xf5, 0xd1, 0x09, 0x49, 0x09, 0x4a, 0x5d, 0xf8, 0x04, 0x4b, 0x4f, 0xf0, + 0xff, 0x33, 0x8b, 0x60, 0xcb, 0x60, 0x93, 0x60, 0xd3, 0x60, 0x70, 0x47, 0x80, 0x27, 0x00, 0x20, + 0x5c, 0x35, 0x00, 0x08, 0x10, 0x60, 0x02, 0x40, 0x00, 0x27, 0x00, 0x20, 0x00, 0x60, 0x02, 0x40, + 0x00, 0x64, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xb5, 0x05, 0x46, 0x85, 0xb0, 0x00, 0x28, 0x3f, 0xd0, 0x24, 0x4c, 0x6f, 0x7a, 0xd4, 0xf8, + 0x00, 0xe0, 0x01, 0x20, 0x00, 0xfa, 0x07, 0xf6, 0x16, 0xea, 0x0e, 0x0f, 0x2a, 0xd1, 0x20, 0x48, + 0x46, 0xea, 0x0e, 0x06, 0x00, 0xeb, 0xc7, 0x0e, 0x16, 0xf0, 0xff, 0x0f, 0x26, 0x60, 0x40, 0xf8, + 0x37, 0x20, 0xce, 0xf8, 0x04, 0x30, 0x04, 0xd0, 0x1a, 0x48, 0x03, 0x6b, 0x43, 0xf4, 0x00, 0x13, + 0x03, 0x63, 0x16, 0xf4, 0x7f, 0x4f, 0x17, 0xd1, 0x2b, 0x68, 0x18, 0x68, 0x20, 0xf0, 0x1f, 0x00, + 0x18, 0x60, 0x1c, 0x68, 0x14, 0xf0, 0x01, 0x04, 0xfb, 0xd1, 0x2f, 0x7a, 0x6e, 0x68, 0x3d, 0x20, + 0xb8, 0x40, 0x21, 0x27, 0x30, 0x60, 0x1c, 0x60, 0x5f, 0x61, 0x5a, 0xb1, 0xa8, 0x7a, 0xff, 0xf7, + 0xc7, 0xfc, 0x20, 0x46, 0x05, 0xb0, 0xf0, 0xbd, 0x0a, 0x48, 0x03, 0x6b, 0x43, 0xf4, 0x80, 0x03, + 0x03, 0x63, 0xe1, 0xe7, 0x10, 0x46, 0x05, 0xb0, 0xf0, 0xbd, 0x07, 0x48, 0x03, 0x93, 0x02, 0x92, + 0x01, 0x91, 0xfe, 0xf7, 0x7d, 0xfe, 0x01, 0xa9, 0x0e, 0xc9, 0xb6, 0xe7, 0x80, 0x27, 0x00, 0x20, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x38, 0x02, 0x40, 0x30, 0x35, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xb5, 0x7f, 0x4d, 0x7f, 0x4c, 0x2f, 0x6b, 0x7f, 0x49, 0x80, 0x4a, 0x80, 0x4b, 0x40, 0xf2, + 0xff, 0x7e, 0x47, 0xea, 0x0e, 0x07, 0x2f, 0x63, 0x2e, 0x6d, 0x46, 0xea, 0x0e, 0x06, 0x2e, 0x65, + 0x45, 0x68, 0x65, 0x60, 0x85, 0x68, 0xa5, 0x60, 0xc5, 0x68, 0xe5, 0x60, 0x05, 0x69, 0x65, 0x61, + 0x45, 0x69, 0x25, 0x62, 0x85, 0x69, 0x65, 0x62, 0x05, 0x68, 0x25, 0x60, 0x04, 0x6a, 0x4c, 0x60, + 0x44, 0x6a, 0x8c, 0x60, 0x84, 0x6a, 0xcc, 0x60, 0xc4, 0x6a, 0x4c, 0x61, 0x04, 0x6b, 0x0c, 0x62, + 0x44, 0x6b, 0x4c, 0x62, 0xc4, 0x69, 0x0c, 0x60, 0xc1, 0x6b, 0x51, 0x60, 0x01, 0x6c, 0x91, 0x60, + 0x41, 0x6c, 0xd1, 0x60, 0x81, 0x6c, 0x51, 0x61, 0xc1, 0x6c, 0x11, 0x62, 0x01, 0x6d, 0x51, 0x62, + 0x81, 0x6b, 0x11, 0x60, 0x82, 0x6d, 0x5a, 0x60, 0xc2, 0x6d, 0x9a, 0x60, 0x02, 0x6e, 0xda, 0x60, + 0x42, 0x6e, 0x5a, 0x61, 0x82, 0x6e, 0x1a, 0x62, 0xc2, 0x6e, 0x5a, 0x62, 0x42, 0x6d, 0x1a, 0x60, + 0x42, 0x6f, 0xc3, 0xf8, 0x04, 0x24, 0x82, 0x6f, 0xc3, 0xf8, 0x08, 0x24, 0xc2, 0x6f, 0xc3, 0xf8, + 0x0c, 0x24, 0xd0, 0xf8, 0x80, 0x20, 0xc3, 0xf8, 0x14, 0x24, 0xd0, 0xf8, 0x84, 0x20, 0xc3, 0xf8, + 0x20, 0x24, 0xd0, 0xf8, 0x88, 0x20, 0xc3, 0xf8, 0x24, 0x24, 0x02, 0x6f, 0xc3, 0xf8, 0x00, 0x24, + 0x03, 0xf5, 0x00, 0x63, 0xd0, 0xf8, 0x90, 0x20, 0x5a, 0x60, 0xd0, 0xf8, 0x94, 0x20, 0x9a, 0x60, + 0xd0, 0xf8, 0x98, 0x20, 0xda, 0x60, 0xd0, 0xf8, 0x9c, 0x20, 0x5a, 0x61, 0xd0, 0xf8, 0xa0, 0x20, + 0x1a, 0x62, 0xd0, 0xf8, 0xa4, 0x20, 0x5a, 0x62, 0xd0, 0xf8, 0x8c, 0x20, 0x1a, 0x60, 0xd0, 0xf8, + 0xac, 0x20, 0xc3, 0xf8, 0x04, 0x24, 0xd0, 0xf8, 0xb0, 0x20, 0xc3, 0xf8, 0x08, 0x24, 0xd0, 0xf8, + 0xb4, 0x20, 0xc3, 0xf8, 0x0c, 0x24, 0xd0, 0xf8, 0xb8, 0x20, 0xc3, 0xf8, 0x14, 0x24, 0xd0, 0xf8, + 0xbc, 0x20, 0xc3, 0xf8, 0x20, 0x24, 0xd0, 0xf8, 0xc0, 0x20, 0xc3, 0xf8, 0x24, 0x24, 0xd0, 0xf8, + 0xa8, 0x20, 0xc3, 0xf8, 0x00, 0x24, 0xd0, 0xf8, 0xc8, 0x20, 0xc3, 0xf8, 0x04, 0x28, 0xd0, 0xf8, + 0xcc, 0x20, 0xc3, 0xf8, 0x08, 0x28, 0xd0, 0xf8, 0xd0, 0x20, 0xc3, 0xf8, 0x0c, 0x28, 0xd0, 0xf8, + 0xd4, 0x20, 0xc3, 0xf8, 0x14, 0x28, 0xd0, 0xf8, 0xd8, 0x20, 0xc3, 0xf8, 0x20, 0x28, 0xd0, 0xf8, + 0xdc, 0x20, 0xc3, 0xf8, 0x24, 0x28, 0xd0, 0xf8, 0xc4, 0x20, 0xc3, 0xf8, 0x00, 0x28, 0x03, 0xf5, + 0x40, 0x63, 0xd0, 0xf8, 0xe4, 0x20, 0x5a, 0x60, 0xd0, 0xf8, 0xe8, 0x20, 0x9a, 0x60, 0xd0, 0xf8, + 0xec, 0x20, 0xda, 0x60, 0xd0, 0xf8, 0xf0, 0x20, 0x5a, 0x61, 0xd0, 0xf8, 0xf4, 0x20, 0x1a, 0x62, + 0xd0, 0xf8, 0xf8, 0x20, 0x5a, 0x62, 0xd0, 0xf8, 0xe0, 0x20, 0x1a, 0x60, 0xd0, 0xf8, 0x00, 0x21, + 0xc3, 0xf8, 0x04, 0x24, 0xd0, 0xf8, 0x04, 0x21, 0xc3, 0xf8, 0x08, 0x24, 0xd0, 0xf8, 0x08, 0x21, + 0xc3, 0xf8, 0x0c, 0x24, 0xd0, 0xf8, 0x0c, 0x21, 0xc3, 0xf8, 0x14, 0x24, 0xd0, 0xf8, 0x10, 0x21, + 0xc3, 0xf8, 0x20, 0x24, 0xd0, 0xf8, 0x14, 0x21, 0xc3, 0xf8, 0x24, 0x24, 0xd0, 0xf8, 0xfc, 0x20, + 0xc3, 0xf8, 0x00, 0x24, 0xd0, 0xf8, 0x1c, 0x21, 0xc3, 0xf8, 0x04, 0x28, 0xd0, 0xf8, 0x20, 0x21, + 0xc3, 0xf8, 0x08, 0x28, 0xd0, 0xf8, 0x24, 0x21, 0xc3, 0xf8, 0x0c, 0x28, 0xd0, 0xf8, 0x28, 0x21, + 0xc3, 0xf8, 0x14, 0x28, 0xd0, 0xf8, 0x2c, 0x21, 0xc3, 0xf8, 0x20, 0x28, 0xd0, 0xf8, 0x30, 0x21, + 0xc3, 0xf8, 0x24, 0x28, 0xd0, 0xf8, 0x18, 0x21, 0xc3, 0xf8, 0x00, 0x28, 0xf0, 0xbd, 0x00, 0xbf, + 0x00, 0x38, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x04, 0x02, 0x40, 0x00, 0x08, 0x02, 0x40, + 0x00, 0x0c, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x4f, 0x02, 0xf0, 0x03, 0x0a, 0xc2, 0xf3, 0x80, 0x08, 0xc2, 0xf3, 0xc1, 0x0c, + 0xc2, 0xf3, 0x41, 0x1e, 0xd1, 0x46, 0xc2, 0xf3, 0xc3, 0x12, 0x00, 0x27, 0x4f, 0xf0, 0x0f, 0x0b, + 0x0f, 0xe0, 0x03, 0x6a, 0x23, 0xea, 0x04, 0x04, 0x25, 0x43, 0x05, 0x62, 0x49, 0x08, 0x39, 0xd0, + 0x4f, 0xea, 0x48, 0x08, 0x4f, 0xea, 0x8c, 0x0c, 0x4f, 0xea, 0x8e, 0x0e, 0x4f, 0xea, 0x89, 0x09, + 0x01, 0x37, 0xcb, 0x07, 0xf2, 0xd5, 0x43, 0x68, 0x01, 0x24, 0xbc, 0x40, 0x23, 0xea, 0x04, 0x03, + 0x43, 0xea, 0x08, 0x03, 0x43, 0x60, 0x03, 0x25, 0x7b, 0x00, 0x84, 0x68, 0x05, 0xfa, 0x03, 0xf3, + 0xdb, 0x43, 0x1c, 0x40, 0x44, 0xea, 0x0c, 0x04, 0x84, 0x60, 0xc5, 0x68, 0x07, 0xf0, 0x07, 0x04, + 0x1d, 0x40, 0x45, 0xea, 0x0e, 0x05, 0xa4, 0x00, 0xba, 0xf1, 0x02, 0x0f, 0xc5, 0x60, 0x02, 0xfa, + 0x04, 0xf5, 0x0b, 0xfa, 0x04, 0xf4, 0x0f, 0xd0, 0x06, 0x68, 0x33, 0x40, 0x43, 0xea, 0x09, 0x03, + 0x07, 0x2f, 0x03, 0x60, 0xc5, 0xd9, 0x43, 0x6a, 0x23, 0xea, 0x04, 0x04, 0x25, 0x43, 0x49, 0x08, + 0x45, 0x62, 0xc5, 0xd1, 0xbd, 0xe8, 0xf0, 0x8f, 0x07, 0x2f, 0x0a, 0xd8, 0x06, 0x6a, 0x26, 0xea, + 0x04, 0x04, 0x25, 0x43, 0x05, 0x62, 0x04, 0x68, 0x23, 0x40, 0x43, 0xea, 0x09, 0x03, 0x03, 0x60, + 0xb4, 0xe7, 0x46, 0x6a, 0x26, 0xea, 0x04, 0x04, 0x25, 0x43, 0x45, 0x62, 0xf3, 0xe7, 0x00, 0xbf, + 0x70, 0xb5, 0x11, 0x4e, 0x11, 0x4b, 0x12, 0x4c, 0x12, 0x4d, 0x4f, 0xf6, 0xff, 0x72, 0x30, 0x46, + 0x1a, 0x80, 0xff, 0xf7, 0x65, 0xfa, 0x10, 0x49, 0x10, 0x4a, 0x11, 0x4b, 0xf1, 0x61, 0x20, 0x46, + 0x05, 0xf1, 0x24, 0x01, 0x35, 0x62, 0x71, 0x62, 0xb2, 0x62, 0xf3, 0x62, 0xff, 0xf7, 0x58, 0xfa, + 0x0c, 0x49, 0x0d, 0x4a, 0x0d, 0x4b, 0xe1, 0x61, 0xa5, 0xf1, 0x60, 0x01, 0x0c, 0x3d, 0x21, 0x62, + 0x65, 0x62, 0xa2, 0x62, 0xe3, 0x62, 0x70, 0xbd, 0x84, 0x27, 0x00, 0x20, 0xe4, 0x27, 0x00, 0x20, + 0xb4, 0x27, 0x00, 0x20, 0xb0, 0x35, 0x00, 0x08, 0x00, 0x30, 0x01, 0x40, 0x16, 0x00, 0x01, 0x06, + 0x46, 0x00, 0x01, 0x06, 0x00, 0x3c, 0x00, 0x40, 0x16, 0x00, 0x01, 0x00, 0x46, 0x00, 0x01, 0x00, + 0x08, 0xb5, 0xfe, 0xf7, 0x7d, 0xfd, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xfe, 0xf7, 0x48, 0xfd, + 0xfe, 0xf7, 0xc6, 0xfc, 0xfe, 0xf7, 0x5c, 0xfd, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xfe, 0xf7, + 0x8f, 0xfd, 0xbd, 0xe8, 0x08, 0x40, 0xff, 0xf7, 0xcb, 0xb9, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x4b, 0x06, 0x4a, 0x5a, 0x60, 0x00, 0x21, 0x07, 0x22, 0x99, 0x60, 0x0b, 0x20, 0x08, 0x21, + 0x1a, 0x60, 0xff, 0xf7, 0xf5, 0xba, 0x00, 0xbf, 0x10, 0xe0, 0x00, 0xe0, 0x3f, 0x90, 0x02, 0x00, + 0xc1, 0x69, 0x0a, 0x68, 0x13, 0x68, 0x23, 0xf0, 0x1f, 0x03, 0x30, 0xb4, 0x13, 0x60, 0x13, 0x68, + 0xdb, 0x07, 0xfc, 0xd4, 0x0d, 0x7a, 0x04, 0x6a, 0x49, 0x68, 0x22, 0x68, 0x3d, 0x23, 0xab, 0x40, + 0x0b, 0x60, 0x13, 0x68, 0x23, 0xf0, 0x1f, 0x03, 0x13, 0x60, 0x13, 0x68, 0x13, 0xf0, 0x01, 0x03, + 0xfb, 0xd1, 0x25, 0x7a, 0x42, 0x69, 0x60, 0x68, 0x3d, 0x21, 0xa9, 0x40, 0x01, 0x60, 0x30, 0xbc, + 0xd3, 0x60, 0x13, 0x61, 0x53, 0x61, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0xf0, 0x0c, 0x0f, 0x38, 0xb5, 0x04, 0x46, 0x2c, 0xd1, 0x21, 0x6a, 0x0a, 0x68, 0x13, 0x68, + 0x23, 0xf0, 0x1f, 0x03, 0x13, 0x60, 0x13, 0x68, 0xdb, 0x07, 0xfc, 0xd4, 0x63, 0x68, 0x0d, 0x7a, + 0x48, 0x68, 0x1a, 0x68, 0x3d, 0x23, 0xab, 0x40, 0x02, 0x21, 0x03, 0x60, 0x61, 0x70, 0xb2, 0xb1, + 0x20, 0x46, 0x90, 0x47, 0x63, 0x78, 0x02, 0x2b, 0x11, 0xd0, 0x23, 0x7a, 0x73, 0xb1, 0x20, 0x23, + 0x83, 0xf3, 0x11, 0x88, 0xfe, 0xf7, 0xdc, 0xfc, 0x04, 0xf1, 0x10, 0x00, 0x00, 0x21, 0xfe, 0xf7, + 0xe7, 0xff, 0xfe, 0xf7, 0xed, 0xfc, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0x38, 0xbd, 0x00, 0x23, + 0x63, 0x70, 0xea, 0xe7, 0x01, 0x48, 0xfe, 0xf7, 0x3b, 0xfc, 0xce, 0xe7, 0x10, 0x36, 0x00, 0x08, + 0x11, 0xf0, 0x0c, 0x0f, 0x2d, 0xe9, 0xf0, 0x41, 0x0d, 0x46, 0x04, 0x46, 0x13, 0xd1, 0xa3, 0x78, + 0x43, 0xb9, 0x63, 0x68, 0xdb, 0x68, 0x63, 0xb1, 0xa1, 0x8c, 0x20, 0x46, 0x89, 0xb2, 0xbd, 0xe8, + 0xf0, 0x41, 0x18, 0x47, 0x61, 0x68, 0x4b, 0x6a, 0x4b, 0xb1, 0xe9, 0x06, 0x33, 0xd4, 0xaa, 0x06, + 0x2c, 0xd4, 0xbd, 0xe8, 0xf0, 0x81, 0x26, 0x48, 0xfe, 0xf7, 0x1a, 0xfc, 0xe7, 0xe7, 0xe0, 0x69, + 0x02, 0x68, 0x13, 0x68, 0x23, 0xf0, 0x1f, 0x03, 0x13, 0x60, 0x13, 0x68, 0xdb, 0x07, 0xfc, 0xd4, + 0x07, 0x7a, 0x46, 0x68, 0x8d, 0x68, 0x3d, 0x23, 0xbb, 0x40, 0x02, 0x20, 0x33, 0x60, 0xa0, 0x70, + 0x0d, 0xb3, 0x20, 0x46, 0xa8, 0x47, 0xa3, 0x78, 0x02, 0x2b, 0x19, 0xd0, 0x20, 0x23, 0x83, 0xf3, + 0x11, 0x88, 0xfe, 0xf7, 0x8d, 0xfc, 0x04, 0xf1, 0x0c, 0x00, 0x00, 0x21, 0xfe, 0xf7, 0x98, 0xff, + 0xfe, 0xf7, 0x9e, 0xfc, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xd2, 0xe7, 0x20, 0x46, 0x01, 0x21, + 0xbd, 0xe8, 0xf0, 0x41, 0x18, 0x47, 0x20, 0x46, 0x00, 0x21, 0xbd, 0xe8, 0xf0, 0x41, 0x18, 0x47, + 0xe3, 0x69, 0x61, 0x68, 0x1a, 0x68, 0xcb, 0x68, 0xa1, 0x69, 0x00, 0x2b, 0x14, 0xbf, 0x4f, 0xf4, + 0x88, 0x73, 0x4f, 0xf4, 0x80, 0x73, 0x0b, 0x43, 0x01, 0x20, 0x00, 0x25, 0x04, 0xf1, 0x24, 0x01, + 0xa5, 0x70, 0xd1, 0x60, 0x50, 0x60, 0x13, 0x60, 0x13, 0x68, 0x03, 0x43, 0x13, 0x60, 0xcd, 0xe7, + 0x10, 0x36, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xb5, 0x3b, 0x4e, 0xfe, 0xf7, 0x84, 0xfc, 0x74, 0x69, 0xe7, 0x68, 0x25, 0x68, 0x63, 0x68, + 0x40, 0xf2, 0x0f, 0x13, 0x1d, 0x42, 0x2c, 0xd0, 0x73, 0x68, 0x1a, 0x69, 0x6f, 0xf4, 0x80, 0x73, + 0x23, 0x60, 0xba, 0xb1, 0xab, 0xb2, 0x13, 0xf0, 0x08, 0x0f, 0x0c, 0xbf, 0x00, 0x21, 0x10, 0x21, + 0xd8, 0x07, 0x48, 0xbf, 0x41, 0xf0, 0x04, 0x01, 0x98, 0x07, 0x48, 0xbf, 0x41, 0xf0, 0x08, 0x01, + 0x58, 0x07, 0x48, 0xbf, 0x41, 0xf0, 0x20, 0x01, 0xdb, 0x05, 0x48, 0xbf, 0x41, 0xf0, 0x40, 0x01, + 0x27, 0x48, 0x90, 0x47, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xfe, 0xf7, 0x29, 0xfc, 0x6f, 0xf0, + 0x01, 0x01, 0x24, 0x48, 0xfe, 0xf7, 0x34, 0xff, 0xfe, 0xf7, 0x3a, 0xfc, 0x00, 0x23, 0x83, 0xf3, + 0x11, 0x88, 0x68, 0x06, 0x01, 0xd5, 0x79, 0x06, 0x1d, 0xd4, 0xea, 0x06, 0x15, 0xd5, 0xfb, 0x06, + 0x13, 0xd5, 0x73, 0x68, 0x1b, 0x6a, 0x0b, 0xb1, 0x19, 0x48, 0x98, 0x47, 0x20, 0x23, 0x83, 0xf3, + 0x11, 0x88, 0xfe, 0xf7, 0x0d, 0xfc, 0x4f, 0xf0, 0xff, 0x31, 0x16, 0x48, 0xfe, 0xf7, 0x18, 0xff, + 0xfe, 0xf7, 0x1e, 0xfc, 0x00, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xfe, 0xf7, 0x51, 0xfc, 0xbd, 0xe8, + 0xf8, 0x40, 0xff, 0xf7, 0x8d, 0xb8, 0x73, 0x68, 0x6f, 0xf0, 0x40, 0x01, 0x5a, 0x68, 0x21, 0x60, + 0x07, 0xea, 0x01, 0x03, 0xe3, 0x60, 0x0a, 0xb1, 0x09, 0x48, 0x90, 0x47, 0x34, 0x7a, 0x00, 0x2c, + 0xd3, 0xd1, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xfe, 0xf7, 0xea, 0xfb, 0x21, 0x46, 0x06, 0x48, + 0xfe, 0xf7, 0xf6, 0xfe, 0xfe, 0xf7, 0xfc, 0xfb, 0x84, 0xf3, 0x11, 0x88, 0xc5, 0xe7, 0x00, 0xbf, + 0xe8, 0x27, 0x00, 0x20, 0xf4, 0x27, 0x00, 0x20, 0xf8, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x07, 0x4c, 0x20, 0x46, 0xff, 0xf7, 0xd3, 0xf8, 0x06, 0x4b, 0x06, 0x4a, 0x62, 0x61, + 0x06, 0x21, 0x03, 0xf1, 0x18, 0x02, 0xa1, 0x61, 0xe3, 0x61, 0x22, 0x62, 0x10, 0xbd, 0x00, 0xbf, + 0xe8, 0x27, 0x00, 0x20, 0x68, 0x35, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xb5, 0x03, 0x78, 0x01, 0x2b, 0x04, 0x46, 0x45, 0xd0, 0x45, 0x69, 0x00, 0x23, 0xa3, 0x70, + 0x63, 0x70, 0x20, 0x46, 0xff, 0xf7, 0x8c, 0xfe, 0x63, 0x69, 0x3c, 0x4a, 0x93, 0x42, 0x4f, 0xd0, + 0x02, 0xf5, 0x80, 0x62, 0x93, 0x42, 0x4b, 0xd0, 0x63, 0x68, 0x39, 0x4a, 0x59, 0x69, 0xb2, 0xfb, + 0xf1, 0xf2, 0xaa, 0x60, 0x58, 0x8b, 0xd3, 0xf8, 0x0c, 0xe0, 0xd3, 0xf8, 0x20, 0xc0, 0x99, 0x8b, + 0x1f, 0x8b, 0xe3, 0x69, 0x2a, 0x68, 0x6a, 0x68, 0xa6, 0x69, 0x1b, 0x68, 0x40, 0xf0, 0x40, 0x00, + 0x80, 0xb2, 0x00, 0x22, 0x2a, 0x60, 0x28, 0x61, 0x42, 0xf2, 0x1c, 0x12, 0x42, 0xf2, 0x0c, 0x10, + 0xbc, 0xf1, 0x00, 0x0f, 0x08, 0xbf, 0x02, 0x46, 0xbe, 0xf1, 0x00, 0x0f, 0x41, 0xf0, 0xc1, 0x01, + 0x14, 0xbf, 0x4f, 0xf4, 0x88, 0x70, 0x4f, 0xf4, 0x80, 0x70, 0x3a, 0x43, 0x30, 0x43, 0x89, 0xb2, + 0x01, 0x26, 0x24, 0x34, 0x69, 0x61, 0xea, 0x60, 0xdc, 0x60, 0x5e, 0x60, 0x18, 0x60, 0x1a, 0x68, + 0x32, 0x43, 0x1a, 0x60, 0xf8, 0xbd, 0x1f, 0x4b, 0x98, 0x42, 0x1d, 0xd0, 0x63, 0x68, 0x1b, 0x8b, + 0x03, 0xf4, 0xa0, 0x53, 0xb3, 0xf5, 0x80, 0x5f, 0x11, 0xd0, 0xe2, 0x69, 0x23, 0x6a, 0x65, 0x69, + 0x10, 0x68, 0x19, 0x68, 0x00, 0x22, 0x2b, 0x1d, 0x83, 0x60, 0x8b, 0x60, 0xa2, 0x84, 0xa5, 0xe7, + 0x63, 0x68, 0x15, 0x4a, 0x59, 0x69, 0xb2, 0xfb, 0xf1, 0xf2, 0xaa, 0x60, 0xb2, 0xe7, 0xa3, 0x69, + 0x43, 0xf4, 0x20, 0x53, 0xa3, 0x61, 0xe8, 0xe7, 0x03, 0x46, 0x10, 0x4a, 0xc0, 0x69, 0x06, 0x21, + 0xff, 0xf7, 0xf6, 0xfb, 0x23, 0x46, 0x0e, 0x4a, 0x20, 0x6a, 0x06, 0x21, 0xff, 0xf7, 0xf0, 0xfb, + 0x0c, 0x4a, 0x13, 0x6c, 0x43, 0xf4, 0x00, 0x23, 0x13, 0x64, 0x06, 0x21, 0x34, 0x20, 0xff, 0xf7, + 0xe7, 0xf8, 0xa3, 0x69, 0x43, 0xf0, 0x00, 0x63, 0xa3, 0x61, 0xc7, 0xe7, 0x00, 0x10, 0x01, 0x40, + 0x80, 0xde, 0x80, 0x02, 0xe8, 0x27, 0x00, 0x20, 0x00, 0xbd, 0x01, 0x05, 0x51, 0x1d, 0x00, 0x08, + 0xe1, 0x1c, 0x00, 0x08, 0x00, 0x38, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0xb4, 0x03, 0x6a, 0x45, 0x68, 0x84, 0x69, 0x1b, 0x68, 0x6d, 0x68, 0xda, 0x60, 0x44, 0xf4, + 0x8a, 0x64, 0x59, 0x60, 0x1c, 0x60, 0x3d, 0xb1, 0x42, 0x69, 0x6f, 0xf0, 0x40, 0x01, 0x11, 0x60, + 0xd1, 0x68, 0x41, 0xf0, 0x40, 0x01, 0xd1, 0x60, 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x02, 0x1a, 0x60, + 0x30, 0xbc, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x6a, 0x0a, 0x68, 0x13, 0x68, 0x23, 0xf0, 0x1f, 0x03, 0x13, 0x60, 0x13, 0x68, 0xdb, 0x07, + 0xfc, 0xd4, 0x08, 0x7a, 0x49, 0x68, 0x3d, 0x23, 0x83, 0x40, 0x0b, 0x60, 0x50, 0x68, 0x70, 0x47, + 0xf0, 0xb4, 0xc5, 0x69, 0x2c, 0x68, 0x23, 0x68, 0x23, 0xf0, 0x1f, 0x03, 0x23, 0x60, 0x23, 0x68, + 0xdb, 0x07, 0xfc, 0xd4, 0x43, 0x68, 0x2f, 0x7a, 0x6e, 0x68, 0x5d, 0x6a, 0x3d, 0x23, 0xbb, 0x40, + 0x33, 0x60, 0x80, 0x69, 0xe2, 0x60, 0x00, 0x2d, 0x0c, 0xbf, 0x4f, 0xf4, 0x82, 0x63, 0x4f, 0xf4, + 0xa3, 0x63, 0x03, 0x43, 0x61, 0x60, 0x23, 0x60, 0x23, 0x68, 0x43, 0xf0, 0x01, 0x03, 0x23, 0x60, + 0xf0, 0xbc, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xf7, 0xe6, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x28, 0x02, 0xd8, 0x4f, 0xf4, 0x80, 0x40, 0x70, 0x47, 0xa0, 0xf1, 0x0c, 0x03, 0x03, 0x2b, + 0xf8, 0xd9, 0x04, 0x28, 0x07, 0xd0, 0x10, 0x28, 0x05, 0xd0, 0x43, 0x1f, 0x06, 0x2b, 0x05, 0xd8, + 0x4f, 0xf4, 0x00, 0x30, 0x70, 0x47, 0x4f, 0xf4, 0x80, 0x30, 0x70, 0x47, 0x11, 0x38, 0x06, 0x28, + 0x94, 0xbf, 0x4f, 0xf4, 0x00, 0x30, 0x00, 0x20, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, + 0x43, 0x4b, 0x1a, 0x69, 0x00, 0x2a, 0x76, 0xdb, 0x10, 0xb5, 0x41, 0x4a, 0xd3, 0x68, 0xdc, 0x03, + 0xfc, 0xd4, 0x13, 0x69, 0x23, 0xf4, 0x80, 0x73, 0x13, 0x61, 0x13, 0x69, 0x43, 0xf4, 0x00, 0x73, + 0x13, 0x61, 0x13, 0x69, 0xc1, 0x07, 0x23, 0xf0, 0xf8, 0x03, 0x13, 0x61, 0x03, 0xd5, 0x13, 0x69, + 0x43, 0xf0, 0x08, 0x03, 0x13, 0x61, 0x83, 0x07, 0x04, 0xd5, 0x35, 0x4a, 0x13, 0x69, 0x43, 0xf0, + 0x10, 0x03, 0x13, 0x61, 0x44, 0x07, 0x04, 0xd5, 0x31, 0x4a, 0x13, 0x69, 0x43, 0xf0, 0x20, 0x03, + 0x13, 0x61, 0x01, 0x07, 0x04, 0xd5, 0x2e, 0x4a, 0x13, 0x69, 0x43, 0xf0, 0x40, 0x03, 0x13, 0x61, + 0xc2, 0x06, 0x32, 0xd4, 0x2a, 0x4a, 0x13, 0x69, 0x43, 0xf0, 0x02, 0x03, 0x13, 0x61, 0x13, 0x69, + 0x43, 0xf4, 0x80, 0x33, 0x13, 0x61, 0xd3, 0x68, 0xdb, 0x03, 0xfc, 0xd4, 0x13, 0x69, 0x23, 0xf0, + 0x02, 0x03, 0x13, 0x61, 0x13, 0x69, 0x43, 0xf0, 0x00, 0x43, 0x04, 0x46, 0x13, 0x61, 0x00, 0x28, + 0x3b, 0xd0, 0x01, 0x46, 0x4f, 0xf0, 0x00, 0x62, 0x01, 0x39, 0xc9, 0xb2, 0x08, 0x46, 0xff, 0xf7, + 0x8f, 0xff, 0x02, 0x44, 0x00, 0x29, 0xf7, 0xd1, 0x20, 0x46, 0xff, 0xf7, 0x89, 0xff, 0x03, 0x28, + 0x05, 0xd8, 0x10, 0xe0, 0x04, 0x38, 0x03, 0x28, 0x02, 0xf1, 0x04, 0x02, 0x0b, 0xd9, 0x13, 0x68, + 0x01, 0x33, 0xf7, 0xd0, 0x6f, 0xf0, 0x0a, 0x00, 0x10, 0xbd, 0x11, 0x4a, 0x13, 0x69, 0x43, 0xf0, + 0x80, 0x03, 0x13, 0x61, 0xc6, 0xe7, 0x00, 0x28, 0xf6, 0xd0, 0x13, 0x78, 0xff, 0x2b, 0xf1, 0xd1, + 0x10, 0x44, 0x01, 0x32, 0x03, 0xe0, 0x12, 0xf8, 0x01, 0x3b, 0xff, 0x2b, 0xea, 0xd1, 0x82, 0x42, + 0xf9, 0xd1, 0x00, 0x20, 0x10, 0xbd, 0x07, 0x49, 0x07, 0x4a, 0x59, 0x60, 0x5a, 0x60, 0x1b, 0x69, + 0x00, 0x2b, 0x81, 0xda, 0x4f, 0xf0, 0xff, 0x30, 0x70, 0x47, 0x4f, 0xf0, 0x00, 0x62, 0xcb, 0xe7, + 0x00, 0x3c, 0x02, 0x40, 0x23, 0x01, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, 0x00, 0x00, 0x00, 0x00, + 0x08, 0xb5, 0x0b, 0x46, 0x01, 0x46, 0x18, 0x46, 0xfe, 0xf7, 0x2a, 0xf8, 0x00, 0x20, 0x08, 0xbd, + 0x2d, 0xe9, 0xf0, 0x43, 0x46, 0x4b, 0x1f, 0x69, 0x00, 0x2f, 0x83, 0xb0, 0x06, 0x46, 0x0d, 0x46, + 0x14, 0x46, 0x79, 0xdb, 0x42, 0x4f, 0xfb, 0x68, 0xdb, 0x03, 0xfc, 0xd4, 0x3b, 0x69, 0x23, 0xf4, + 0x80, 0x73, 0x3b, 0x61, 0x3b, 0x69, 0x43, 0xf4, 0x00, 0x73, 0x3b, 0x61, 0x16, 0xf0, 0x03, 0x03, + 0x2e, 0xd1, 0x03, 0x2c, 0x22, 0xd9, 0xa4, 0xf1, 0x04, 0x0e, 0x2e, 0xf0, 0x03, 0x07, 0x06, 0xf1, + 0x04, 0x0c, 0x37, 0x4a, 0x67, 0x44, 0x30, 0x46, 0x29, 0x1f, 0x13, 0x69, 0x51, 0xf8, 0x04, 0x6f, + 0x43, 0xf0, 0x01, 0x03, 0x13, 0x61, 0x40, 0xf8, 0x04, 0x6b, 0xd3, 0x68, 0xde, 0x03, 0xfc, 0xd4, + 0x13, 0x69, 0xb8, 0x42, 0x23, 0xf0, 0x01, 0x03, 0x13, 0x61, 0xee, 0xd1, 0x2e, 0xf0, 0x03, 0x00, + 0x03, 0x1d, 0x00, 0xeb, 0x0c, 0x06, 0x1d, 0x44, 0x04, 0xf0, 0x03, 0x04, 0x6c, 0xbb, 0x28, 0x4a, + 0x13, 0x69, 0x43, 0xf0, 0x00, 0x43, 0x13, 0x61, 0x00, 0x20, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, + 0xa6, 0xeb, 0x03, 0x09, 0x02, 0xa8, 0xc3, 0xf1, 0x04, 0x08, 0xd9, 0xf8, 0x00, 0x20, 0x40, 0xf8, + 0x04, 0x2d, 0xa0, 0x45, 0x28, 0xbf, 0xa0, 0x46, 0x18, 0x44, 0x42, 0x46, 0x29, 0x46, 0xfd, 0xf7, + 0xcf, 0xff, 0x3b, 0x69, 0x01, 0x99, 0x1a, 0x4a, 0x43, 0xf0, 0x01, 0x03, 0x3b, 0x61, 0xc9, 0xf8, + 0x00, 0x10, 0xd3, 0x68, 0xdf, 0x03, 0xfc, 0xd4, 0x13, 0x69, 0x23, 0xf0, 0x01, 0x03, 0x46, 0x44, + 0x45, 0x44, 0xa4, 0xeb, 0x08, 0x04, 0x13, 0x61, 0xab, 0xe7, 0x02, 0xa8, 0x33, 0x68, 0x40, 0xf8, + 0x04, 0x3d, 0x22, 0x46, 0x29, 0x46, 0xfd, 0xf7, 0xb3, 0xff, 0x0d, 0x4a, 0x01, 0x99, 0x13, 0x69, + 0x43, 0xf0, 0x01, 0x03, 0x13, 0x61, 0x31, 0x60, 0xd3, 0x68, 0xdb, 0x03, 0xfc, 0xd4, 0x13, 0x69, + 0x23, 0xf0, 0x01, 0x03, 0x13, 0x61, 0xba, 0xe7, 0x06, 0x49, 0x07, 0x4a, 0x59, 0x60, 0x5a, 0x60, + 0x1b, 0x69, 0x00, 0x2b, 0xbf, 0xf6, 0x7e, 0xaf, 0x4f, 0xf0, 0xff, 0x30, 0xb5, 0xe7, 0x00, 0xbf, + 0x00, 0x3c, 0x02, 0x40, 0x23, 0x01, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xb5, 0x23, 0x4d, 0x23, 0x4c, 0x4f, 0xf4, 0x80, 0x61, 0x0e, 0x46, 0x4f, 0xf4, 0x00, 0x77, + 0x28, 0x46, 0x01, 0x22, 0xff, 0xf7, 0x74, 0xfb, 0x28, 0x46, 0x01, 0x22, 0x39, 0x46, 0xae, 0x61, + 0xff, 0xf7, 0x6e, 0xfb, 0x28, 0x46, 0x01, 0x22, 0x4f, 0xf4, 0x80, 0x71, 0xaf, 0x61, 0xff, 0xf7, + 0x67, 0xfb, 0x4f, 0xf4, 0x80, 0x73, 0xab, 0x61, 0x28, 0x46, 0x01, 0x22, 0x4f, 0xf4, 0x00, 0x61, + 0xff, 0xf7, 0x5e, 0xfb, 0x4f, 0xf4, 0x00, 0x63, 0x39, 0x46, 0xab, 0x61, 0x20, 0x46, 0x01, 0x22, + 0xff, 0xf7, 0x56, 0xfb, 0x4f, 0xf0, 0x00, 0x73, 0xa3, 0x61, 0x20, 0x46, 0x01, 0x22, 0x4f, 0xf4, + 0x00, 0x41, 0xff, 0xf7, 0x4d, 0xfb, 0x4f, 0xf0, 0x00, 0x43, 0x31, 0x46, 0xa3, 0x61, 0x20, 0x46, + 0x01, 0x22, 0xff, 0xf7, 0x45, 0xfb, 0x4f, 0xf0, 0x80, 0x63, 0xa3, 0x61, 0x20, 0x46, 0x01, 0x22, + 0x4f, 0xf4, 0x80, 0x41, 0xff, 0xf7, 0x3c, 0xfb, 0x4f, 0xf0, 0x80, 0x43, 0xa3, 0x61, 0xf8, 0xbd, + 0x00, 0x00, 0x02, 0x40, 0x00, 0x0c, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb4, 0x0e, 0x4b, 0x0e, 0x49, 0x1a, 0x68, 0x92, 0xf8, 0x79, 0x31, 0x43, 0xf0, 0x01, 0x03, + 0x82, 0xf8, 0x79, 0x31, 0x0b, 0x68, 0x00, 0x24, 0x01, 0x20, 0x4f, 0xf4, 0xe1, 0x31, 0xc3, 0xf8, + 0x7c, 0x47, 0xc3, 0xf8, 0x84, 0x47, 0xc3, 0xf8, 0x80, 0x07, 0xc3, 0xf8, 0x88, 0x07, 0x5d, 0xf8, + 0x04, 0x4b, 0xc2, 0xf8, 0x44, 0x11, 0xc3, 0xf8, 0x9c, 0x18, 0x70, 0x47, 0x28, 0x16, 0x00, 0x20, + 0x2c, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0x4b, 0x0b, 0x4a, 0x1b, 0x68, 0x11, 0x68, 0x93, 0xf8, 0x78, 0x21, 0x01, 0x20, 0x02, 0x43, + 0x83, 0xf8, 0x78, 0x21, 0xc1, 0xf8, 0xe0, 0x0a, 0x93, 0xf8, 0x78, 0x21, 0x02, 0x21, 0x42, 0xf0, + 0x08, 0x02, 0xc3, 0xf8, 0x3c, 0x11, 0x83, 0xf8, 0x78, 0x21, 0x70, 0x47, 0x28, 0x16, 0x00, 0x20, + 0x2c, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x41, 0x20, 0x23, 0x83, 0xf3, 0x11, 0x88, 0xfe, 0xf7, 0xd1, 0xf8, 0x12, 0x4b, + 0x12, 0x4f, 0xdb, 0x69, 0x1b, 0x68, 0x5e, 0x68, 0x3b, 0x6a, 0x3d, 0x6a, 0xc6, 0xf1, 0x20, 0x06, + 0x9e, 0x42, 0xb8, 0xbf, 0x20, 0x36, 0xae, 0x42, 0x0e, 0xdd, 0xdf, 0xf8, 0x34, 0x80, 0x2c, 0x46, + 0x03, 0xe0, 0xa6, 0x42, 0x04, 0xf0, 0x1f, 0x05, 0x06, 0xd0, 0x79, 0x5d, 0x40, 0x46, 0xfe, 0xf7, + 0x6f, 0xfc, 0x01, 0x34, 0x00, 0x28, 0xf4, 0xd0, 0x3d, 0x62, 0xfe, 0xf7, 0xc9, 0xf8, 0x00, 0x23, + 0x83, 0xf3, 0x11, 0x88, 0xbd, 0xe8, 0xf0, 0x81, 0xe8, 0x27, 0x00, 0x20, 0x10, 0x28, 0x00, 0x20, + 0xe4, 0x29, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xf7, 0xc6, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xf7, 0xbe, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xb5, 0x1f, 0x4c, 0x23, 0x68, 0x93, 0xf8, 0x79, 0x31, 0x13, 0xf0, 0x01, 0x03, 0x82, 0xb0, + 0x02, 0xd1, 0x03, 0x60, 0x02, 0xb0, 0x70, 0xbd, 0x1a, 0x4e, 0x1b, 0x48, 0x1b, 0x4d, 0x00, 0xf0, + 0xf7, 0xfa, 0x33, 0x68, 0x1a, 0x48, 0xd3, 0xf8, 0x80, 0x17, 0x40, 0xf2, 0x02, 0x42, 0x00, 0xf0, + 0x17, 0xfa, 0x33, 0x68, 0x17, 0x48, 0xd3, 0xf8, 0x7c, 0x17, 0x40, 0xf2, 0x02, 0x42, 0x00, 0xf0, + 0x0f, 0xfa, 0x00, 0x26, 0x14, 0x48, 0x00, 0xf0, 0xe3, 0xfa, 0x05, 0xf1, 0x24, 0x01, 0x05, 0xf5, + 0xea, 0x70, 0x33, 0x46, 0x4f, 0xf4, 0xd7, 0x72, 0x00, 0x96, 0xfe, 0xf7, 0x09, 0xfc, 0x23, 0x68, + 0x0e, 0x49, 0xd3, 0xf8, 0x44, 0x31, 0x0e, 0x48, 0x4b, 0x61, 0xfe, 0xf7, 0x69, 0xfd, 0x0c, 0x48, + 0x2e, 0x62, 0x2a, 0x46, 0x20, 0x21, 0x02, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xfe, 0xf7, 0x98, 0xbd, + 0x28, 0x16, 0x00, 0x20, 0x2c, 0x16, 0x00, 0x20, 0x70, 0x37, 0x00, 0x08, 0x10, 0x28, 0x00, 0x20, + 0x88, 0x37, 0x00, 0x08, 0x98, 0x37, 0x00, 0x08, 0xa8, 0x37, 0x00, 0x08, 0x00, 0x16, 0x00, 0x20, + 0xe8, 0x27, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x82, 0xb0, 0x02, 0xa8, 0x14, 0x46, 0x40, 0xf8, 0x04, 0x2d, 0x4f, 0xf4, 0x7a, 0x73, + 0x0a, 0x46, 0x01, 0x46, 0x06, 0x48, 0xfe, 0xf7, 0x93, 0xfd, 0x01, 0x9a, 0x94, 0x42, 0x04, 0xd0, + 0x23, 0x46, 0x04, 0x49, 0x04, 0x48, 0x00, 0xf0, 0xa3, 0xfa, 0x02, 0xb0, 0x10, 0xbd, 0x00, 0xbf, + 0xe8, 0x27, 0x00, 0x20, 0xc0, 0x37, 0x00, 0x08, 0xb8, 0xb9, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x48, 0xfe, 0xf7, 0xf5, 0xbb, 0x00, 0xbf, 0xe4, 0x29, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x23, 0x7c, 0x49, 0x03, 0x60, 0xf0, 0xb5, 0xff, 0x25, 0x03, 0x71, 0xc3, 0x60, 0x03, 0x74, + 0x83, 0x61, 0x03, 0x77, 0x43, 0x62, 0x80, 0xf8, 0x28, 0x30, 0x03, 0x63, 0x80, 0xf8, 0x34, 0x30, + 0xc3, 0x63, 0x80, 0xf8, 0x40, 0x30, 0x83, 0x64, 0x80, 0xf8, 0x4c, 0x30, 0x43, 0x65, 0x80, 0xf8, + 0x58, 0x30, 0x45, 0x71, 0x45, 0x74, 0x45, 0x77, 0x80, 0xf8, 0x29, 0x50, 0x80, 0xf8, 0x35, 0x50, + 0x80, 0xf8, 0x41, 0x50, 0x80, 0xf8, 0x4d, 0x50, 0x81, 0x60, 0x41, 0x61, 0x01, 0x62, 0xc1, 0x62, + 0x81, 0x63, 0x41, 0x64, 0x01, 0x65, 0xc1, 0x65, 0x1a, 0x46, 0x80, 0xf8, 0x59, 0x50, 0x2c, 0x46, + 0x03, 0x66, 0x80, 0xf8, 0x64, 0x30, 0x80, 0xf8, 0x65, 0x50, 0xc3, 0x66, 0x80, 0xf8, 0x70, 0x30, + 0x80, 0xf8, 0x71, 0x50, 0x83, 0x67, 0x80, 0xf8, 0x7c, 0x30, 0x80, 0xf8, 0x7d, 0x50, 0xc0, 0xf8, + 0x84, 0x30, 0x80, 0xf8, 0x88, 0x30, 0x80, 0xf8, 0x89, 0x50, 0xc0, 0xf8, 0x90, 0x30, 0x80, 0xf8, + 0x94, 0x30, 0x80, 0xf8, 0x95, 0x50, 0xc0, 0xf8, 0xa0, 0x30, 0x80, 0xf8, 0xa4, 0x30, 0x80, 0xf8, + 0xa5, 0x50, 0xc0, 0xf8, 0xb0, 0x30, 0x80, 0xf8, 0xb4, 0x30, 0x80, 0xf8, 0xb5, 0x50, 0xc0, 0xf8, + 0xbc, 0x30, 0x80, 0xf8, 0xc0, 0x30, 0x80, 0xf8, 0xc1, 0x50, 0x81, 0x66, 0x41, 0x67, 0xc0, 0xf8, + 0x80, 0x10, 0xc0, 0xf8, 0x8c, 0x10, 0xc0, 0xf8, 0x98, 0x10, 0xc0, 0xf8, 0xa8, 0x10, 0xc0, 0xf8, + 0xb8, 0x10, 0xc0, 0xf8, 0xc4, 0x10, 0x00, 0xf1, 0xc8, 0x03, 0x00, 0xf5, 0xc4, 0x75, 0x99, 0x60, + 0x1a, 0x60, 0x1a, 0x71, 0x5c, 0x71, 0x0c, 0x33, 0xab, 0x42, 0xf8, 0xd1, 0xc0, 0xf8, 0x88, 0x21, + 0x80, 0xf8, 0x8c, 0x21, 0x80, 0xf8, 0x8d, 0x41, 0xc0, 0xf8, 0x94, 0x21, 0x80, 0xf8, 0x98, 0x21, + 0x80, 0xf8, 0x99, 0x41, 0xc0, 0xf8, 0xa0, 0x21, 0x80, 0xf8, 0xa4, 0x21, 0x80, 0xf8, 0xa5, 0x41, + 0xc0, 0xf8, 0xac, 0x21, 0x80, 0xf8, 0xb0, 0x21, 0x80, 0xf8, 0xb1, 0x41, 0xc0, 0xf8, 0x90, 0x11, + 0xc0, 0xf8, 0x9c, 0x11, 0xc0, 0xf8, 0xa8, 0x11, 0xc0, 0xf8, 0xb4, 0x11, 0x00, 0xf5, 0xdc, 0x73, + 0x00, 0xf5, 0x4e, 0x75, 0x00, 0x22, 0xff, 0x24, 0x00, 0x26, 0x00, 0x27, 0x99, 0x60, 0x1a, 0x60, + 0x1a, 0x71, 0x5c, 0x71, 0xda, 0x60, 0xc3, 0xe9, 0x04, 0x67, 0x5a, 0x76, 0x9a, 0x76, 0x1c, 0x76, + 0x20, 0x33, 0xab, 0x42, 0xf2, 0xd1, 0x00, 0xf5, 0x8b, 0x64, 0x00, 0x22, 0xff, 0x25, 0x99, 0x60, + 0x1a, 0x60, 0x1a, 0x71, 0x5d, 0x71, 0xda, 0x60, 0x1a, 0x75, 0x1a, 0x61, 0x18, 0x33, 0xa3, 0x42, + 0xf5, 0xd1, 0x21, 0x4b, 0xdf, 0xf8, 0xa0, 0xe0, 0x20, 0x4f, 0xc0, 0xf8, 0x60, 0x14, 0xc0, 0xf8, + 0x58, 0x24, 0x80, 0xf8, 0x5c, 0x24, 0x80, 0xf8, 0x5d, 0x54, 0xc0, 0xf8, 0x64, 0x24, 0xc0, 0xf8, + 0x70, 0x14, 0xc0, 0xf8, 0x68, 0x24, 0x80, 0xf8, 0x6c, 0x24, 0x80, 0xf8, 0x6d, 0x54, 0xc0, 0xf8, + 0x74, 0x24, 0x17, 0x4c, 0xc0, 0xf8, 0xac, 0xe0, 0x03, 0xf5, 0x90, 0x75, 0x1e, 0x46, 0x1a, 0x46, + 0x14, 0x49, 0xc0, 0xf8, 0x9c, 0x70, 0x01, 0xe0, 0x54, 0xf8, 0x04, 0x1f, 0xc2, 0xf8, 0x44, 0x13, + 0x18, 0x32, 0xaa, 0x42, 0xf8, 0xd1, 0x10, 0x4c, 0x10, 0x49, 0x00, 0x22, 0x01, 0xe0, 0x54, 0xf8, + 0x04, 0x1f, 0x83, 0xf8, 0xd0, 0x21, 0x01, 0x32, 0x0c, 0x2a, 0xc3, 0xf8, 0xc4, 0x11, 0x03, 0xf1, + 0x20, 0x03, 0xf4, 0xd1, 0x0a, 0x4a, 0x0b, 0x4b, 0xc6, 0xf8, 0x64, 0x24, 0xc6, 0xf8, 0x74, 0x34, + 0xf0, 0xbd, 0x00, 0xbf, 0x08, 0x2a, 0x00, 0x20, 0x10, 0x2a, 0x00, 0x20, 0x90, 0x38, 0x00, 0x08, + 0x20, 0x38, 0x00, 0x08, 0x80, 0x38, 0x00, 0x08, 0x50, 0x38, 0x00, 0x08, 0x84, 0x38, 0x00, 0x08, + 0x98, 0x38, 0x00, 0x08, 0x9c, 0x38, 0x00, 0x08, 0x88, 0x38, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x4b, 0x98, 0x42, 0x1b, 0xd0, 0x03, 0xf5, 0x80, 0x63, 0x98, 0x42, 0x19, 0xd0, 0x03, 0xf5, + 0x80, 0x63, 0x98, 0x42, 0x17, 0xd0, 0x03, 0xf5, 0x80, 0x63, 0x98, 0x42, 0x15, 0xd0, 0x03, 0xf5, + 0x80, 0x63, 0x98, 0x42, 0x13, 0xd0, 0x03, 0xf5, 0x40, 0x63, 0x98, 0x42, 0x11, 0xd0, 0x0b, 0x49, + 0x0b, 0x4b, 0x0c, 0x4a, 0x88, 0x42, 0x0c, 0xbf, 0x18, 0x46, 0x10, 0x46, 0x70, 0x47, 0x0a, 0x48, + 0x70, 0x47, 0x0a, 0x48, 0x70, 0x47, 0x0a, 0x48, 0x70, 0x47, 0x0a, 0x48, 0x70, 0x47, 0x0a, 0x48, + 0x70, 0x47, 0x0a, 0x48, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x02, 0x40, 0x00, 0x14, 0x02, 0x40, + 0x08, 0x38, 0x00, 0x08, 0x0c, 0x38, 0x00, 0x08, 0xf0, 0x37, 0x00, 0x08, 0xf4, 0x37, 0x00, 0x08, + 0xf8, 0x37, 0x00, 0x08, 0xfc, 0x37, 0x00, 0x08, 0x00, 0x38, 0x00, 0x08, 0x04, 0x38, 0x00, 0x08, + 0x01, 0x48, 0xff, 0xf7, 0xad, 0xbe, 0x00, 0xbf, 0x10, 0x2a, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x4b, 0x1b, 0x68, 0x3e, 0x20, 0x3d, 0x21, 0x11, 0x22, 0xc3, 0xf8, 0x90, 0x08, 0xc3, 0xf8, + 0x94, 0x18, 0xc3, 0xf8, 0x98, 0x28, 0xff, 0xf7, 0x3b, 0xbd, 0x00, 0xbf, 0x2c, 0x16, 0x00, 0x20, + 0x30, 0xb4, 0x0f, 0x4b, 0x0f, 0x49, 0x1a, 0x68, 0x92, 0xf8, 0x79, 0x31, 0x43, 0xf0, 0x21, 0x03, + 0x82, 0xf8, 0x79, 0x31, 0x0b, 0x68, 0x2a, 0x20, 0x2b, 0x21, 0x4f, 0xf4, 0x16, 0x45, 0x4f, 0xf4, + 0xe1, 0x34, 0xc3, 0xf8, 0x7c, 0x07, 0xc3, 0xf8, 0x84, 0x07, 0xc3, 0xf8, 0x80, 0x17, 0xc3, 0xf8, + 0x88, 0x17, 0xc2, 0xf8, 0x44, 0x51, 0xc3, 0xf8, 0x9c, 0x48, 0x30, 0xbc, 0xff, 0xf7, 0x68, 0xbd, + 0x28, 0x16, 0x00, 0x20, 0x2c, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0b, 0x4b, 0x0c, 0x4a, 0x1b, 0x68, 0x11, 0x68, 0x93, 0xf8, 0x78, 0x21, 0x03, 0x20, 0x42, 0xf0, + 0x04, 0x02, 0x83, 0xf8, 0x78, 0x21, 0xc1, 0xf8, 0xe0, 0x0a, 0x93, 0xf8, 0x78, 0x21, 0x34, 0x21, + 0x42, 0xf0, 0x08, 0x02, 0xc3, 0xf8, 0x3c, 0x11, 0x83, 0xf8, 0x78, 0x21, 0xff, 0xf7, 0x70, 0xbd, + 0x28, 0x16, 0x00, 0x20, 0x2c, 0x16, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x29, 0x38, 0xd0, 0xf0, 0xb5, 0x17, 0x46, 0x83, 0xb0, 0x05, 0x46, 0x0c, 0x46, 0x21, 0xd8, + 0x19, 0x4b, 0x0a, 0x11, 0x01, 0xf0, 0x0f, 0x04, 0x53, 0xf8, 0x22, 0x60, 0x7e, 0xb1, 0x30, 0x46, + 0xff, 0xf7, 0x4e, 0xff, 0x2a, 0x46, 0x03, 0x46, 0x14, 0x49, 0x15, 0x48, 0x00, 0x94, 0x00, 0xf0, + 0xc7, 0xf8, 0x2a, 0x46, 0x21, 0x46, 0x30, 0x46, 0x00, 0xf0, 0x6a, 0xf8, 0x08, 0xb1, 0x03, 0xb0, + 0xf0, 0xbd, 0x01, 0x21, 0x3a, 0x46, 0x30, 0x46, 0xa1, 0x40, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, + 0xff, 0xf7, 0x46, 0xb8, 0x0b, 0x46, 0x02, 0x46, 0x0a, 0x49, 0x41, 0xf2, 0xf2, 0x70, 0x00, 0xf0, + 0xb7, 0xf8, 0x08, 0x49, 0x23, 0x46, 0x2a, 0x46, 0x41, 0xf2, 0xf2, 0x70, 0x03, 0xb0, 0xbd, 0xe8, + 0xf0, 0x40, 0x00, 0xf0, 0xad, 0xb8, 0x70, 0x47, 0x30, 0x39, 0x00, 0x08, 0x50, 0x39, 0x00, 0x08, + 0x88, 0x2e, 0x00, 0x20, 0x10, 0x39, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x49, 0x02, 0x48, 0x00, 0xf0, 0xa4, 0xb8, 0x00, 0x39, 0x00, 0x08, 0x88, 0x2e, 0x00, 0x20, + 0x08, 0xb5, 0x18, 0x4b, 0x98, 0x42, 0x1f, 0xd0, 0x03, 0xf5, 0x80, 0x63, 0x98, 0x42, 0x1d, 0xd0, + 0x03, 0xf5, 0x80, 0x63, 0x98, 0x42, 0x11, 0xd0, 0x03, 0xf5, 0x80, 0x63, 0x98, 0x42, 0x0f, 0xd0, + 0x03, 0xf5, 0x80, 0x63, 0x98, 0x42, 0x0d, 0xd0, 0x03, 0xf5, 0x80, 0x63, 0x98, 0x42, 0x0f, 0xd0, + 0x03, 0xf5, 0x00, 0x63, 0x98, 0x42, 0x0d, 0xd1, 0x06, 0x20, 0x08, 0xbd, 0x02, 0x20, 0x08, 0xbd, + 0x03, 0x20, 0x08, 0xbd, 0x04, 0x20, 0x08, 0xbd, 0x00, 0x20, 0x08, 0xbd, 0x01, 0x20, 0x08, 0xbd, + 0x05, 0x20, 0x08, 0xbd, 0x04, 0x49, 0x41, 0xf2, 0xf4, 0x70, 0x00, 0xf0, 0x69, 0xf8, 0x4f, 0xf0, + 0xff, 0x30, 0x08, 0xbd, 0x00, 0x00, 0x02, 0x40, 0xb0, 0x39, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x41, 0x19, 0x4b, 0x1c, 0x68, 0x82, 0xb0, 0x2c, 0xb3, 0x0d, 0x46, 0x17, 0x46, + 0x80, 0x46, 0xff, 0xf7, 0xbd, 0xff, 0x16, 0x4c, 0x05, 0xeb, 0x00, 0x16, 0x54, 0xf8, 0x26, 0x00, + 0x88, 0xb1, 0x40, 0x46, 0xff, 0xf7, 0xc4, 0xfe, 0x54, 0xf8, 0x26, 0x30, 0x01, 0x93, 0x02, 0x46, + 0x00, 0x97, 0x2b, 0x46, 0x0f, 0x49, 0x41, 0xf2, 0xf5, 0x70, 0x00, 0xf0, 0x41, 0xf8, 0x01, 0x20, + 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x0c, 0x4a, 0x44, 0xf8, 0x26, 0x70, 0x13, 0x68, 0x01, 0x33, + 0x13, 0x60, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x08, 0x49, 0x41, 0xf2, 0xf3, 0x70, 0x00, 0xf0, + 0x2f, 0xf8, 0x20, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x00, 0xbf, 0x4c, 0x31, 0x00, 0x20, + 0x8c, 0x2f, 0x00, 0x20, 0x8c, 0x39, 0x00, 0x08, 0x50, 0x31, 0x00, 0x20, 0x70, 0x39, 0x00, 0x08, + 0x01, 0x49, 0x02, 0x48, 0x00, 0xf0, 0x24, 0xb8, 0x60, 0x39, 0x00, 0x08, 0x54, 0x31, 0x00, 0x20, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xb4, 0x04, 0xb0, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0xb4, 0x03, 0xb0, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0xb4, 0x03, 0xb0, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0xb5, 0x16, 0x4b, 0x83, 0xb0, 0x04, 0x46, 0x1b, 0x68, 0x15, 0x48, 0x05, 0x22, 0x69, 0x46, + 0xff, 0xf7, 0x46, 0xfd, 0x05, 0x28, 0x02, 0xd0, 0x00, 0x20, 0x03, 0xb0, 0x30, 0xbd, 0x9d, 0xf8, + 0x00, 0x30, 0x9d, 0xf8, 0x01, 0x50, 0x9d, 0xf8, 0x02, 0x00, 0x9d, 0xf8, 0x03, 0x10, 0x9d, 0xf8, + 0x04, 0x20, 0x6b, 0x40, 0x43, 0x40, 0x4b, 0x40, 0x9a, 0x42, 0xed, 0xd1, 0x00, 0x9b, 0x1b, 0xba, + 0x03, 0xf1, 0x78, 0x42, 0xb2, 0xf5, 0x00, 0x4f, 0x38, 0xbf, 0x06, 0x4a, 0x4f, 0xf0, 0x01, 0x00, + 0x38, 0xbf, 0x9b, 0x18, 0x23, 0x60, 0x03, 0xb0, 0x30, 0xbd, 0x00, 0xbf, 0x30, 0x16, 0x00, 0x20, + 0x5c, 0x32, 0x00, 0x20, 0x18, 0x34, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0xb5, 0x04, 0x46, 0x00, 0xaf, 0x72, 0xb6, 0xfd, 0xf7, 0xe2, 0xfc, 0x0f, 0x4a, 0x60, 0x68, + 0x53, 0x68, 0x23, 0xf0, 0x80, 0x53, 0x53, 0x60, 0x00, 0x22, 0x93, 0x00, 0x03, 0xf1, 0x60, 0x43, + 0x03, 0xf5, 0x61, 0x43, 0x01, 0x32, 0xd3, 0xf8, 0x00, 0x12, 0xc3, 0xf8, 0x80, 0x10, 0x08, 0x2a, + 0xf3, 0xd1, 0x00, 0x23, 0x83, 0xf3, 0x14, 0x88, 0x23, 0x68, 0x83, 0xf3, 0x08, 0x88, 0x80, 0x47, + 0x03, 0x48, 0xbd, 0x46, 0xbd, 0xe8, 0x98, 0x40, 0xfd, 0xf7, 0x7a, 0xbc, 0x00, 0xed, 0x00, 0xe0, + 0xc0, 0x39, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x4f, 0x89, 0xb0, 0x08, 0xa9, 0xc6, 0x48, 0xc7, 0x4d, 0xdf, 0xf8, 0x28, 0x83, + 0xc6, 0x4f, 0x79, 0x23, 0x01, 0xf8, 0x1d, 0x3d, 0x01, 0x22, 0xc8, 0x23, 0x04, 0x46, 0x2b, 0x60, + 0xff, 0xf7, 0xb6, 0xfc, 0x4f, 0xf4, 0x00, 0x42, 0x4f, 0xf0, 0x00, 0x61, 0x40, 0x46, 0xfd, 0xf7, + 0x07, 0xfb, 0x4f, 0xf0, 0x00, 0x09, 0x01, 0x22, 0x2b, 0x68, 0x0d, 0xeb, 0x02, 0x01, 0x20, 0x46, + 0xff, 0xf7, 0xc6, 0xfc, 0x01, 0x28, 0x40, 0xd0, 0xb9, 0xf1, 0x00, 0x0f, 0x4a, 0xd0, 0x0d, 0xf1, + 0x02, 0x06, 0x01, 0x22, 0x2b, 0x68, 0x0d, 0xeb, 0x02, 0x01, 0x20, 0x46, 0xff, 0xf7, 0xb8, 0xfc, + 0x01, 0x28, 0xf6, 0xd1, 0x02, 0x46, 0x2b, 0x68, 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xb0, 0xfc, + 0x01, 0x28, 0x18, 0xd0, 0x08, 0xa9, 0x1f, 0x23, 0x01, 0xf8, 0x1c, 0x3d, 0x01, 0x22, 0x20, 0x46, + 0xff, 0xf7, 0x86, 0xfc, 0x2b, 0x68, 0x01, 0x22, 0x0d, 0xeb, 0x02, 0x01, 0x20, 0x46, 0xff, 0xf7, + 0x9f, 0xfc, 0x01, 0x28, 0xdd, 0xd1, 0x2b, 0x68, 0x01, 0x22, 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, + 0x97, 0xfc, 0x01, 0x28, 0xe6, 0xd1, 0x81, 0x46, 0x9d, 0xf8, 0x01, 0x30, 0x9d, 0xf8, 0x02, 0x20, + 0xdb, 0x43, 0xdb, 0xb2, 0x9a, 0x42, 0x08, 0xa9, 0x18, 0xd0, 0x1f, 0x23, 0x01, 0xf8, 0x1b, 0x3d, + 0x01, 0x22, 0x20, 0x46, 0xff, 0xf7, 0x64, 0xfc, 0xb5, 0xe7, 0x0d, 0xf1, 0x02, 0x06, 0x02, 0x46, + 0x31, 0x46, 0x2b, 0x68, 0x20, 0x46, 0xff, 0xf7, 0x7b, 0xfc, 0x01, 0x28, 0xe4, 0xd0, 0xb9, 0xf1, + 0x00, 0x0f, 0xc7, 0xd1, 0x00, 0x20, 0x09, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x4f, 0xf0, 0x79, 0x09, + 0x01, 0x22, 0x01, 0xf8, 0x1a, 0x9d, 0x20, 0x46, 0xff, 0xf7, 0x4a, 0xfc, 0x9d, 0xf8, 0x01, 0x20, + 0x4f, 0xf4, 0x7a, 0x73, 0x11, 0x2a, 0x2b, 0x60, 0x7a, 0xd0, 0x09, 0xd9, 0x31, 0x2a, 0x6a, 0xd0, + 0x44, 0x2a, 0x00, 0xf0, 0x83, 0x80, 0x21, 0x2a, 0x35, 0xd0, 0x4f, 0xf4, 0x7a, 0x73, 0xb2, 0xe7, + 0x00, 0x2a, 0x41, 0xd0, 0x02, 0x2a, 0xf8, 0xd1, 0x81, 0x4b, 0x08, 0xa9, 0x4f, 0xf0, 0x01, 0x0a, + 0x1b, 0x68, 0x01, 0xf8, 0x16, 0xad, 0x52, 0x46, 0x20, 0x46, 0xc3, 0xf3, 0x0b, 0x0b, 0xff, 0xf7, + 0x27, 0xfc, 0x08, 0xa9, 0x4f, 0xea, 0x1b, 0x23, 0x01, 0xf8, 0x15, 0x3d, 0x52, 0x46, 0x20, 0x46, + 0xff, 0xf7, 0x1e, 0xfc, 0x08, 0xa9, 0x52, 0x46, 0x01, 0xf8, 0x14, 0xbd, 0x20, 0x46, 0xff, 0xf7, + 0x17, 0xfc, 0x08, 0xa9, 0x52, 0x46, 0x01, 0xf8, 0x13, 0x9d, 0x20, 0x46, 0xff, 0xf7, 0x10, 0xfc, + 0x52, 0x46, 0x2b, 0x68, 0x0d, 0xeb, 0x0a, 0x01, 0x20, 0x46, 0xff, 0xf7, 0x29, 0xfc, 0x50, 0x45, + 0x7f, 0xf4, 0x67, 0xaf, 0x87, 0xe7, 0x07, 0xa8, 0xff, 0xf7, 0xd2, 0xfe, 0x08, 0xa9, 0x00, 0x28, + 0x00, 0xf0, 0xc3, 0x80, 0x20, 0x46, 0x01, 0x22, 0x01, 0xf8, 0x12, 0x9d, 0xff, 0xf7, 0xf8, 0xfb, + 0x07, 0x98, 0xff, 0xf7, 0xfd, 0xfe, 0x6d, 0xe7, 0x08, 0xa9, 0x06, 0x23, 0xdf, 0xf8, 0x8c, 0x91, + 0x01, 0xf8, 0x18, 0x3d, 0x01, 0x22, 0x20, 0x46, 0xff, 0xf7, 0xea, 0xfb, 0x09, 0xf1, 0x06, 0x0a, + 0x31, 0x23, 0x01, 0xe0, 0x19, 0xf8, 0x01, 0x3b, 0x8d, 0xf8, 0x09, 0x30, 0x01, 0x22, 0x0d, 0xf1, + 0x09, 0x01, 0x20, 0x46, 0xff, 0xf7, 0xdc, 0xfb, 0xca, 0x45, 0xf3, 0xd1, 0x08, 0xa9, 0x79, 0x23, + 0x01, 0xf8, 0x19, 0x3d, 0x4a, 0xe7, 0x07, 0xa8, 0xff, 0xf7, 0xa2, 0xfe, 0x08, 0xa9, 0x90, 0xbb, + 0x1f, 0x23, 0x01, 0xf8, 0x07, 0x3d, 0x01, 0x22, 0x20, 0x46, 0xff, 0xf7, 0xc9, 0xfb, 0x41, 0xe7, + 0x07, 0xa8, 0xff, 0xf7, 0x95, 0xfe, 0x08, 0xa9, 0x00, 0x28, 0x5c, 0xd1, 0x1f, 0x23, 0x01, 0xf8, + 0x0b, 0x3d, 0x01, 0x22, 0x20, 0x46, 0xff, 0xf7, 0xbb, 0xfb, 0x33, 0xe7, 0x01, 0x22, 0x43, 0x49, + 0x20, 0x46, 0xff, 0xf7, 0xd5, 0xfb, 0x01, 0x28, 0x81, 0x46, 0x7f, 0xf4, 0x2b, 0xaf, 0x02, 0x46, + 0x2b, 0x68, 0x40, 0x49, 0x20, 0x46, 0xff, 0xf7, 0xcb, 0xfb, 0x01, 0x28, 0x02, 0x46, 0x7f, 0xd0, + 0x4a, 0x46, 0x2b, 0x68, 0x0d, 0xf1, 0x01, 0x01, 0x20, 0x46, 0xff, 0xf7, 0xc1, 0xfb, 0x01, 0x28, + 0x7f, 0xf4, 0xff, 0xae, 0x1f, 0xe7, 0x01, 0x22, 0x01, 0xf8, 0x08, 0x9d, 0x20, 0x46, 0xff, 0xf7, + 0x97, 0xfb, 0x2b, 0x68, 0x31, 0x49, 0x01, 0x22, 0x20, 0x46, 0xff, 0xf7, 0xb1, 0xfb, 0x01, 0x28, + 0x83, 0x46, 0x7f, 0xf4, 0x07, 0xaf, 0x97, 0xf8, 0x00, 0x90, 0x2b, 0x68, 0x2d, 0x49, 0x09, 0xf1, + 0x02, 0x0a, 0x52, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xa3, 0xfb, 0x82, 0x45, 0x7f, 0xf4, 0xfa, 0xae, + 0x5f, 0xfa, 0x8a, 0xf1, 0x01, 0x29, 0x3a, 0x78, 0x07, 0xdd, 0x5b, 0x46, 0xf8, 0x5c, 0x01, 0x33, + 0xdb, 0xb2, 0x99, 0x42, 0x82, 0xea, 0x00, 0x02, 0xf8, 0xdc, 0x17, 0xf8, 0x0a, 0x30, 0x93, 0x42, + 0x00, 0xf0, 0xa8, 0x80, 0x08, 0xa9, 0x1f, 0x23, 0x01, 0xf8, 0x09, 0x3d, 0x01, 0x22, 0x20, 0x46, + 0xff, 0xf7, 0x66, 0xfb, 0xde, 0xe6, 0x01, 0x22, 0x01, 0xf8, 0x0c, 0x9d, 0x20, 0x46, 0xff, 0xf7, + 0x5f, 0xfb, 0x01, 0x22, 0x2b, 0x68, 0x04, 0xa9, 0x20, 0x46, 0xff, 0xf7, 0x79, 0xfb, 0x01, 0x28, + 0x02, 0x46, 0x7f, 0xf4, 0xcf, 0xae, 0x2b, 0x68, 0x0d, 0xf1, 0x11, 0x01, 0x20, 0x46, 0xff, 0xf7, + 0x6f, 0xfb, 0x01, 0x28, 0x02, 0x46, 0x7f, 0xf4, 0xc5, 0xae, 0x9d, 0xf8, 0x10, 0x30, 0x9d, 0xf8, + 0x11, 0x00, 0xd9, 0x43, 0xc9, 0xb2, 0x88, 0x42, 0x08, 0xa9, 0x67, 0xd0, 0x1f, 0x23, 0x01, 0xf8, + 0x0d, 0x3d, 0x20, 0x46, 0xff, 0xf7, 0x3c, 0xfb, 0xb4, 0xe6, 0x1f, 0x23, 0x01, 0xf8, 0x11, 0x3d, + 0xac, 0xe6, 0x00, 0xbf, 0x5c, 0x32, 0x00, 0x20, 0x30, 0x16, 0x00, 0x20, 0x18, 0xb4, 0x00, 0x20, + 0x00, 0x20, 0x04, 0xe0, 0x19, 0xb4, 0x00, 0x20, 0x18, 0x34, 0x00, 0x20, 0xe1, 0x39, 0x00, 0x08, + 0x39, 0x78, 0x7b, 0x78, 0x43, 0xea, 0x01, 0x23, 0x4f, 0xf6, 0xff, 0x71, 0x8b, 0x42, 0x7d, 0xd0, + 0x01, 0x33, 0x4f, 0xea, 0x43, 0x0a, 0x0a, 0xf1, 0x01, 0x09, 0x4a, 0x46, 0x2b, 0x68, 0x43, 0x49, + 0x20, 0x46, 0xff, 0xf7, 0x35, 0xfb, 0x81, 0x45, 0x7f, 0xf4, 0x8c, 0xae, 0x09, 0xf1, 0x01, 0x01, + 0xc9, 0xb2, 0x01, 0x29, 0x3b, 0x78, 0x0a, 0xf1, 0x02, 0x0a, 0x07, 0xd9, 0x01, 0x22, 0xb8, 0x5c, + 0x01, 0x32, 0xd2, 0xb2, 0x8a, 0x42, 0x83, 0xea, 0x00, 0x03, 0xf8, 0xdb, 0x17, 0xf8, 0x0a, 0x20, + 0x9a, 0x42, 0x56, 0xd1, 0xb9, 0xf1, 0x01, 0x0f, 0x4e, 0xdd, 0xa9, 0xf1, 0x02, 0x09, 0x29, 0xf0, + 0x01, 0x09, 0x09, 0xf1, 0x02, 0x09, 0xdf, 0xf8, 0xd0, 0xa0, 0xb9, 0x44, 0x05, 0xe0, 0xff, 0xf7, + 0x87, 0xf8, 0x0a, 0xf1, 0x02, 0x0a, 0xd1, 0x45, 0x3e, 0xd0, 0x9a, 0xf8, 0x02, 0x20, 0x9a, 0xf8, + 0x03, 0x30, 0x43, 0xea, 0x02, 0x23, 0x18, 0xb2, 0x01, 0x2b, 0xc0, 0xb2, 0xef, 0xd8, 0x4f, 0xf4, + 0x00, 0x42, 0xff, 0x21, 0x40, 0x46, 0x00, 0xf0, 0x9b, 0xf8, 0xea, 0xe7, 0x01, 0xf8, 0x0e, 0x9d, + 0x20, 0x46, 0x03, 0xf1, 0x01, 0x09, 0xff, 0xf7, 0xd3, 0xfa, 0x07, 0x99, 0x41, 0x45, 0x19, 0xd3, + 0x1f, 0x4b, 0x99, 0x42, 0x16, 0xd2, 0x4a, 0x46, 0x38, 0x46, 0xfd, 0xf7, 0x21, 0xf9, 0x4a, 0x46, + 0x39, 0x46, 0x3c, 0xe6, 0x07, 0x98, 0x40, 0x45, 0x09, 0xf1, 0x01, 0x02, 0x10, 0xd3, 0x18, 0x4b, + 0x98, 0x42, 0x0d, 0xd2, 0x17, 0x49, 0xfd, 0xf7, 0x13, 0xf9, 0x08, 0xa9, 0x79, 0x23, 0x01, 0xf8, + 0x0a, 0x3d, 0x2b, 0xe6, 0x08, 0x46, 0x4a, 0x46, 0x39, 0x46, 0xff, 0xf7, 0xd9, 0xf8, 0xe6, 0xe7, + 0x10, 0x49, 0xff, 0xf7, 0xdd, 0xf8, 0xf0, 0xe7, 0x08, 0xa9, 0x79, 0x23, 0x01, 0xf8, 0x06, 0x3d, + 0x1c, 0xe6, 0x08, 0xa9, 0x1f, 0x23, 0x01, 0xf8, 0x05, 0x3d, 0x17, 0xe6, 0x2b, 0x68, 0x07, 0x49, + 0x20, 0x46, 0xff, 0xf7, 0xbd, 0xfa, 0x01, 0x28, 0x81, 0x46, 0x7f, 0xf4, 0x13, 0xae, 0x3b, 0x78, + 0x7a, 0x78, 0x4f, 0xf0, 0x02, 0x0a, 0x53, 0x40, 0x90, 0xe7, 0x00, 0xbf, 0x1a, 0xb4, 0x00, 0x20, + 0x18, 0xb4, 0x00, 0x20, 0x19, 0xb4, 0x00, 0x20, 0x18, 0xb4, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x48, 0x70, 0x47, 0x5c, 0x32, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0xb5, 0x05, 0x4b, 0x05, 0x4a, 0x9b, 0x69, 0x9a, 0x61, 0xff, 0xf7, 0xb1, 0xfd, 0x00, 0x20, + 0xbd, 0xe8, 0x08, 0x40, 0xfd, 0xf7, 0x74, 0xbd, 0x38, 0x16, 0x00, 0x20, 0x00, 0x3a, 0x00, 0x08, + 0x10, 0xb5, 0x82, 0xb0, 0xfd, 0xf7, 0x64, 0xff, 0x00, 0x24, 0xfd, 0xf7, 0xb9, 0xf9, 0xff, 0xf7, + 0xe7, 0xfb, 0xff, 0xf7, 0xf5, 0xfb, 0xff, 0xf7, 0x1b, 0xfc, 0xff, 0xf7, 0xd9, 0xff, 0xff, 0xf7, + 0x07, 0xfa, 0x08, 0x4b, 0x00, 0x94, 0x40, 0x22, 0x4f, 0xf4, 0x93, 0x61, 0x06, 0x48, 0xfd, 0xf7, + 0x0f, 0xfd, 0xfd, 0xf7, 0x65, 0xfd, 0x05, 0x48, 0xff, 0xf7, 0x5a, 0xfd, 0x20, 0x46, 0x02, 0xb0, + 0x10, 0xbd, 0x00, 0xbf, 0x71, 0x31, 0x00, 0x08, 0x20, 0xb5, 0x00, 0x20, 0x00, 0x80, 0x00, 0x08, + 0x01, 0x49, 0x02, 0x48, 0xff, 0xf7, 0x0c, 0xbd, 0xf0, 0x39, 0x00, 0x08, 0xb8, 0xb9, 0x00, 0x20, + 0x70, 0xb4, 0x86, 0x07, 0x46, 0xd0, 0x54, 0x1e, 0x00, 0x2a, 0x41, 0xd0, 0xca, 0xb2, 0x03, 0x46, + 0x02, 0xe0, 0x14, 0xf1, 0xff, 0x34, 0x3b, 0xd3, 0x03, 0xf8, 0x01, 0x2b, 0x9d, 0x07, 0xf8, 0xd1, + 0x03, 0x2c, 0x2e, 0xd9, 0xcd, 0xb2, 0x45, 0xea, 0x05, 0x25, 0x0f, 0x2c, 0x45, 0xea, 0x05, 0x45, + 0x19, 0xd9, 0x03, 0xf1, 0x10, 0x02, 0x26, 0x46, 0x10, 0x3e, 0x0f, 0x2e, 0x42, 0xf8, 0x10, 0x5c, + 0x42, 0xf8, 0x0c, 0x5c, 0x42, 0xf8, 0x08, 0x5c, 0x42, 0xf8, 0x04, 0x5c, 0x02, 0xf1, 0x10, 0x02, + 0xf2, 0xd8, 0xa4, 0xf1, 0x10, 0x02, 0x22, 0xf0, 0x0f, 0x02, 0x04, 0xf0, 0x0f, 0x04, 0x10, 0x32, + 0x03, 0x2c, 0x13, 0x44, 0x0d, 0xd9, 0x1e, 0x46, 0x22, 0x46, 0x04, 0x3a, 0x03, 0x2a, 0x46, 0xf8, + 0x04, 0x5b, 0xfa, 0xd8, 0x22, 0x1f, 0x22, 0xf0, 0x03, 0x02, 0x04, 0x32, 0x13, 0x44, 0x04, 0xf0, + 0x03, 0x04, 0x2c, 0xb1, 0xc9, 0xb2, 0x1c, 0x44, 0x03, 0xf8, 0x01, 0x1b, 0x9c, 0x42, 0xfb, 0xd1, + 0x70, 0xbc, 0x70, 0x47, 0x14, 0x46, 0x03, 0x46, 0xc2, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, + 0x4c, 0x3a, 0x00, 0x08, 0xbc, 0xba, 0x00, 0x20, 0xbc, 0xba, 0x00, 0x20, 0xbc, 0xba, 0x00, 0x20, + 0x4c, 0x3a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, + 0x4c, 0x3a, 0x00, 0x08, 0x00, 0x80, 0x02, 0x20, 0x00, 0x80, 0x02, 0x20, 0x00, 0x80, 0x02, 0x20, + 0x4c, 0x3a, 0x00, 0x08, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x03, 0x20, + 0x4c, 0x3a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, + 0x4c, 0x3a, 0x00, 0x08, 0x00, 0x40, 0x02, 0x40, 0x00, 0x40, 0x02, 0x40, 0x00, 0x40, 0x02, 0x40, + 0x4c, 0x3a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4c, 0x3a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x2e, 0x2f, 0x43, 0x68, 0x69, 0x62, 0x69, 0x4f, 0x53, 0x33, 0x2f, 0x6f, 0x73, 0x2f, 0x72, + 0x74, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x63, 0x68, 0x73, 0x79, 0x73, 0x2e, 0x63, 0x00, 0x00, 0x00, + 0x69, 0x64, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x34, 0x20, 0x6d, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x63, + 0x68, 0x53, 0x79, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x28, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x36, 0x20, 0x6d, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x63, + 0x68, 0x53, 0x79, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x53, 0x52, 0x28, + 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x31, 0x30, 0x20, 0x6d, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, + 0x49, 0x2d, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x23, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x68, 0x56, 0x54, 0x44, 0x6f, 0x53, 0x65, 0x74, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x68, 0x56, 0x54, 0x44, 0x6f, 0x52, 0x65, 0x73, 0x65, 0x74, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x68, 0x53, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x79, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x68, 0x54, 0x68, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x68, 0x54, 0x68, 0x64, 0x57, 0x61, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x16, 0x80, 0x18, 0x04, 0x04, 0x48, 0x08, 0x0c, 0x10, 0x14, 0x18, + 0x00, 0x1c, 0x1d, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x68, 0x4d, 0x74, 0x78, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x00, + 0x63, 0x68, 0x49, 0x51, 0x52, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x00, + 0x75, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x75, 0x61, 0x72, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x00, 0x00, 0x00, + 0x75, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x75, 0x61, 0x72, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x00, + 0x6e, 0x76, 0x69, 0x63, 0x53, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x48, 0x61, 0x6e, + 0x64, 0x6c, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x6d, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x60, 0x02, 0x40, 0x08, 0x60, 0x02, 0x40, 0x00, 0x00, 0x0b, 0x00, 0x28, 0x60, 0x02, 0x40, + 0x08, 0x60, 0x02, 0x40, 0x06, 0x01, 0x0c, 0x00, 0x40, 0x60, 0x02, 0x40, 0x08, 0x60, 0x02, 0x40, + 0x10, 0x02, 0x0d, 0x00, 0x58, 0x60, 0x02, 0x40, 0x08, 0x60, 0x02, 0x40, 0x16, 0x03, 0x0e, 0x00, + 0x70, 0x60, 0x02, 0x40, 0x0c, 0x60, 0x02, 0x40, 0x00, 0x04, 0x0f, 0x00, 0x88, 0x60, 0x02, 0x40, + 0x0c, 0x60, 0x02, 0x40, 0x06, 0x05, 0x10, 0x00, 0xa0, 0x60, 0x02, 0x40, 0x0c, 0x60, 0x02, 0x40, + 0x10, 0x06, 0x11, 0x00, 0xb8, 0x60, 0x02, 0x40, 0x0c, 0x60, 0x02, 0x40, 0x16, 0x07, 0x2f, 0x00, + 0x10, 0x64, 0x02, 0x40, 0x08, 0x64, 0x02, 0x40, 0x00, 0x08, 0x38, 0x00, 0x28, 0x64, 0x02, 0x40, + 0x08, 0x64, 0x02, 0x40, 0x06, 0x09, 0x39, 0x00, 0x40, 0x64, 0x02, 0x40, 0x08, 0x64, 0x02, 0x40, + 0x10, 0x0a, 0x3a, 0x00, 0x58, 0x64, 0x02, 0x40, 0x08, 0x64, 0x02, 0x40, 0x16, 0x0b, 0x3b, 0x00, + 0x70, 0x64, 0x02, 0x40, 0x0c, 0x64, 0x02, 0x40, 0x00, 0x0c, 0x3c, 0x00, 0x88, 0x64, 0x02, 0x40, + 0x0c, 0x64, 0x02, 0x40, 0x06, 0x0d, 0x44, 0x00, 0xa0, 0x64, 0x02, 0x40, 0x0c, 0x64, 0x02, 0x40, + 0x10, 0x0e, 0x45, 0x00, 0xb8, 0x64, 0x02, 0x40, 0x0c, 0x64, 0x02, 0x40, 0x16, 0x0f, 0x46, 0x00, + 0x53, 0x54, 0x4d, 0x33, 0x32, 0x5f, 0x55, 0x41, 0x52, 0x54, 0x5f, 0x44, 0x4d, 0x41, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x48, 0x4f, 0x4f, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xaa, 0xa0, 0x2a, 0x00, 0x00, 0x00, 0x00, 0xff, 0xab, 0xff, 0xff, 0x54, 0x00, 0x01, 0x40, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x56, 0x55, 0x00, 0xaa, 0x0a, 0x00, 0x80, 0x20, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x15, 0x85, 0xaa, 0xaa, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xa8, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x55, 0x50, 0x55, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0x75, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x20, 0x6f, 0x76, 0x65, 0x72, + 0x20, 0x55, 0x53, 0x41, 0x52, 0x54, 0x00, 0x00, 0x74, 0x75, 0x6e, 0x65, 0x72, 0x73, 0x74, 0x75, + 0x64, 0x69, 0x6f, 0x20, 0x72, 0x78, 0x00, 0x00, 0x74, 0x75, 0x6e, 0x65, 0x72, 0x73, 0x74, 0x75, + 0x64, 0x69, 0x6f, 0x20, 0x74, 0x78, 0x00, 0x00, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x55, 0x41, + 0x52, 0x54, 0x2d, 0x44, 0x4d, 0x41, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x21, 0x21, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x45, 0x44, + 0x20, 0x25, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x25, 0x64, 0x20, 0x21, 0x21, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x41, 0x00, 0x00, 0x50, 0x42, 0x00, 0x00, 0x50, 0x43, 0x00, 0x00, 0x50, 0x44, 0x00, 0x00, + 0x50, 0x45, 0x00, 0x00, 0x50, 0x48, 0x00, 0x00, 0x50, 0x46, 0x00, 0x00, 0x75, 0x6e, 0x6b, 0x6e, + 0x6f, 0x77, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x38, 0x00, 0x08, 0xcc, 0x38, 0x00, 0x08, 0xd0, 0x38, 0x00, 0x08, 0xd4, 0x38, 0x00, 0x08, + 0xd8, 0x38, 0x00, 0x08, 0xdc, 0x38, 0x00, 0x08, 0xe0, 0x38, 0x00, 0x08, 0xe4, 0x38, 0x00, 0x08, + 0xe8, 0x38, 0x00, 0x08, 0xec, 0x38, 0x00, 0x08, 0xf0, 0x38, 0x00, 0x08, 0xf4, 0x38, 0x00, 0x08, + 0x84, 0x38, 0x00, 0x08, 0xa0, 0x38, 0x00, 0x08, 0xa4, 0x38, 0x00, 0x08, 0xa8, 0x38, 0x00, 0x08, + 0xac, 0x38, 0x00, 0x08, 0xb0, 0x38, 0x00, 0x08, 0xb4, 0x38, 0x00, 0x08, 0xb8, 0x38, 0x00, 0x08, + 0xbc, 0x38, 0x00, 0x08, 0xc0, 0x38, 0x00, 0x08, 0xc4, 0x38, 0x00, 0x08, 0xc8, 0x38, 0x00, 0x08, + 0x63, 0x31, 0x00, 0x00, 0x69, 0x31, 0x00, 0x00, 0x64, 0x69, 0x7a, 0x7a, 0x79, 0x00, 0x00, 0x00, + 0x74, 0x61, 0x63, 0x68, 0x00, 0x00, 0x00, 0x00, 0x61, 0x31, 0x00, 0x00, 0x61, 0x32, 0x00, 0x00, + 0x69, 0x32, 0x00, 0x00, 0x69, 0x33, 0x00, 0x00, 0x69, 0x34, 0x00, 0x00, 0x69, 0x35, 0x00, 0x00, + 0x69, 0x36, 0x00, 0x00, 0x69, 0x37, 0x00, 0x00, 0x69, 0x38, 0x00, 0x00, 0x6a, 0x39, 0x00, 0x00, + 0x69, 0x41, 0x00, 0x00, 0x69, 0x42, 0x00, 0x00, 0x69, 0x43, 0x00, 0x00, 0x63, 0x32, 0x00, 0x00, + 0x63, 0x33, 0x00, 0x00, 0x63, 0x34, 0x00, 0x00, 0x63, 0x35, 0x00, 0x00, 0x63, 0x36, 0x00, 0x00, + 0x63, 0x37, 0x00, 0x00, 0x63, 0x38, 0x00, 0x00, 0x63, 0x39, 0x00, 0x00, 0x63, 0x41, 0x00, 0x00, + 0x63, 0x42, 0x00, 0x00, 0x63, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x69, 0x6f, 0x5f, 0x70, 0x69, 0x6e, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x73, 0x3a, 0x20, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x62, 0x72, 0x61, 0x69, + 0x6e, 0x5f, 0x70, 0x69, 0x6e, 0x5f, 0x65, 0x3a, 0x20, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x40, 0x00, 0x04, 0x02, 0x40, 0x00, 0x08, 0x02, 0x40, 0x00, 0x0c, 0x02, 0x40, + 0x00, 0x10, 0x02, 0x40, 0x00, 0x14, 0x02, 0x40, 0x00, 0x18, 0x02, 0x40, 0x00, 0x1c, 0x02, 0x40, + 0x25, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x25, 0x73, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x00, 0x00, 0x25, 0x73, 0x25, 0x64, + 0x20, 0x72, 0x65, 0x71, 0x20, 0x62, 0x79, 0x20, 0x25, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, + 0x62, 0x79, 0x20, 0x25, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x66, 0x75, 0x4a, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x20, 0x46, 0x41, 0x49, + 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x02, 0x11, 0x21, 0x31, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x25, 0x00, 0x08, 0xa1, 0x25, 0x00, 0x08, + 0x68, 0x02, 0x00, 0x10, 0x08, 0x00, 0x00, 0x10, 0xc8, 0x00, 0x00, 0x00, +}; + +#endif /* BOOTLOADER_GENERATED_HXX_ */ + diff --git a/firmware/config/boards/Prometheus/STM32F469xI.ld b/firmware/config/boards/Prometheus/STM32F469xI.ld new file mode 100644 index 0000000000..40acd222bc --- /dev/null +++ b/firmware/config/boards/Prometheus/STM32F469xI.ld @@ -0,0 +1,100 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * ST32F469xI memory setup. + * Note: Use of ram1, ram2 and ram3 is mutually exclusive with use of ram0. + */ +MEMORY +{ + bl : org = 0x08000000, len = 16k /* bootloader section */ + flash : org = DEFINED(BOOTLOADER) ? 0x08008000 : 0x08000000, len = DEFINED(BOOTLOADER) ? 864k : 896k /* change address & length if bootloader */ + flash0 : org = DEFINED(BOOTLOADER) ? 0x08008000 : 0x08000000, len = DEFINED(BOOTLOADER) ? 864k : 896k /* change address & length if bootloader */ + flash1 : org = 0x00000000, len = 0 + flash2 : org = 0x00000000, len = 0 + flash3 : org = 0x00000000, len = 0 + flash4 : org = 0x00000000, len = 0 + flash5 : org = 0x00000000, len = 0 + flash6 : org = 0x00000000, len = 0 + flash7 : org = 0x00000000, len = 0 + ram0 : org = 0x20000000, len = 384k /* SRAM1 + SRAM2 + SRAM3 */ + ram1 : org = 0x20000000, len = 160k /* SRAM1 */ + ram2 : org = 0x20028000, len = 32k /* SRAM2 */ + ram3 : org = 0x20030000, len = 128k /* SRAM3 */ + ram4 : org = 0x10000000, len = 64k /* CCM SRAM */ + ram5 : org = 0x40024000, len = 4k /* BCKP SRAM */ + ram6 : org = 0x00000000, len = 0 + ram7 : org = 0x00000000, len = 0 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash0); +REGION_ALIAS("XTORS_FLASH_LMA", flash0); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash0); +REGION_ALIAS("TEXT_FLASH_LMA", flash0); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash0); +REGION_ALIAS("RODATA_FLASH_LMA", flash0); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash0); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash0); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash0); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +/* Bootloader section */ +SECTIONS +{ +.bl : ALIGN(4) + { + . = ALIGN(4); + *(.bl) + *(.bl.*) + . = ALIGN(4); + } > bl AT > bl +} + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/firmware/config/boards/Prometheus/board.c b/firmware/config/boards/Prometheus/board.c new file mode 100644 index 0000000000..fc483ff746 --- /dev/null +++ b/firmware/config/boards/Prometheus/board.c @@ -0,0 +1,156 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * This file has been automatically generated using ChibiStudio board + * generator plugin. Do not edit manually. + */ + +#include "hal.h" + +#if HAL_USE_PAL || defined(__DOXYGEN__) +/** + * @brief PAL setup. + * @details Digital I/O ports static configuration as defined in @p board.h. + * This variable is used by the HAL when initializing the PAL driver. + */ +const PALConfig pal_default_config = { +#if STM32_HAS_GPIOA + {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, + VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH}, +#endif +#if STM32_HAS_GPIOB + {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR, + VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH}, +#endif +#if STM32_HAS_GPIOC + {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR, + VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH}, +#endif +#if STM32_HAS_GPIOD + {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR, + VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH}, +#endif +#if STM32_HAS_GPIOE + {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR, + VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH}, +#endif +#if STM32_HAS_GPIOF + {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR, + VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH}, +#endif +#if STM32_HAS_GPIOG + {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR, + VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH}, +#endif +#if STM32_HAS_GPIOH + {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR, + VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH}, +#endif +#if STM32_HAS_GPIOI + {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, + VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}, +#endif +#if STM32_HAS_GPIOJ + {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR, + VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH}, +#endif +#if STM32_HAS_GPIOK + {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR, + VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH} +#endif +}; +#endif + +/** + * @brief Early initialization code. + * @details This initialization must be performed just after stack setup + * and before any other initialization. + */ +void __early_init(void) { + + stm32_clock_init(); +} + +#if HAL_USE_SDC || defined(__DOXYGEN__) +/** + * @brief SDC card detection. + */ +bool sdc_lld_is_card_inserted(SDCDriver *sdcp) { + + (void)sdcp; + /* TODO: Fill the implementation.*/ + return true; +} + +/** + * @brief SDC card write protection detection. + */ +bool sdc_lld_is_write_protected(SDCDriver *sdcp) { + + (void)sdcp; + /* TODO: Fill the implementation.*/ + return false; +} +#endif /* HAL_USE_SDC */ + +#if HAL_USE_MMC_SPI || defined(__DOXYGEN__) +/** + * @brief MMC_SPI card detection. + */ +bool mmc_lld_is_card_inserted(MMCDriver *mmcp) { + + (void)mmcp; + /* TODO: Fill the implementation.*/ + return true; +} + +/** + * @brief MMC_SPI card write protection detection. + */ +bool mmc_lld_is_write_protected(MMCDriver *mmcp) { + + (void)mmcp; + /* TODO: Fill the implementation.*/ + return false; +} +#endif + +/** + * @brief Board-specific initialization code. + * @todo Add your board-specific code, if any. + */ +void boardInit(void) { +} + + +#define PROMETHEUS_LED 13 + +// BLIIINK!!!!!!!!!! +void BLIIINK(int t) { + int i, j; + palSetPadMode(GPIOA, PROMETHEUS_LED, PAL_MODE_OUTPUT_PUSHPULL); + //while (true) { + for (j = 0; j < 2; j++) { + palClearPad(GPIOA, PROMETHEUS_LED); + for (i = 0; i < 2*t; i++) { + palTogglePad(GPIOA, PROMETHEUS_LED); + chThdSleepMilliseconds(250); + } + chThdSleepMilliseconds(1000); + } +} + diff --git a/firmware/config/boards/Prometheus/board.h b/firmware/config/boards/Prometheus/board.h new file mode 100644 index 0000000000..27e10f35fd --- /dev/null +++ b/firmware/config/boards/Prometheus/board.h @@ -0,0 +1,1638 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * This file has been automatically generated using ChibiStudio board + * generator plugin. Do not edit manually. + */ + +#ifndef BOARD_H +#define BOARD_H + + +/* + * Setup for STMicroelectronics STM32F4-Discovery board. + */ + +/* + * Board identifier. + */ +#define BOARD_ST_STM32F4_DISCOVERY +#define BOARD_NAME "Prometheus/STM32F469 for RusEFI" + +/* + * Board oscillators-related settings. + * NOTE: LSE not fitted. + */ +#if !defined(STM32_LSECLK) +#define STM32_LSECLK 32768U +#endif + +#if !defined(STM32_HSECLK) +#define STM32_HSECLK 8000000U +#endif + +/* + * Board voltages. + * Required for performance limits calculation. + */ +#define STM32_VDD 300U + +/* + * MCU type as defined in the ST header. + * this declaration would cause stm32_registry.h to define STM32F40_41xxx and STM32F4XX automatically + * + * See also STM32F4xx_MCUCONF is defined in mcuconf.h + */ +#ifdef STM32F469xx +#undef STM32F405xx +#endif +#ifndef STM32F405xx +#ifndef STM32F469xx +#define STM32F469xx +#endif +#endif + +/* + * IO pins assignments. + */ +#define GPIOA_BUTTON 0 +#define GPIOA_PIN1 1 +#define GPIOA_PIN2 2 +#define GPIOA_PIN3 3 +#define GPIOA_LRCK 4 +#define GPIOA_SPC 5 +#define GPIOA_SDO 6 +#define GPIOA_SDI 7 +#define GPIOA_PIN8 8 +#define GPIOA_VBUS_FS 9 +#define GPIOA_OTG_FS_ID 10 +#define GPIOA_OTG_FS_DM 11 +#define GPIOA_OTG_FS_DP 12 +#define GPIOA_SWDIO 13 +#define GPIOA_SWCLK 14 +#define GPIOA_PIN15 15 + +#define GPIOB_PIN0 0 +#define GPIOB_PIN1 1 +#define GPIOB_PIN2 2 +#define GPIOB_SWO 3 +#define GPIOB_PIN4 4 +#define GPIOB_PIN5 5 +#define GPIOB_SCL 6 +#define GPIOB_PIN7 7 +#define GPIOB_PIN8 8 +#define GPIOB_PIN9 9 +#define GPIOB_PIN10 10 +#define GPIOB_PIN11 11 +#define GPIOB_PIN12 12 +#define GPIOB_PIN13 13 +#define GPIOB_PIN14 14 +#define GPIOB_PIN15 15 + +#define GPIOC_OTG_FS_POWER_ON 0 +#define GPIOC_PIN1 1 +#define GPIOC_PIN2 2 +#define GPIOC_PIN3 3 +#define GPIOC_PIN4 4 +#define GPIOC_PIN5 5 +#define GPIOC_PIN6 6 +#define GPIOC_PIN7 7 +#define GPIOC_PIN8 8 +#define GPIOC_PIN9 9 +#define GPIOC_PIN10 10 +#define GPIOC_PIN11 11 +#define GPIOC_PIN12 12 +#define GPIOC_PIN13 13 +#define GPIOC_PIN14 14 +#define GPIOC_PIN15 15 + +#define GPIOD_PIN0 0 +#define GPIOD_PIN1 1 +#define GPIOD_PIN2 2 +#define GPIOD_PIN3 3 +#define GPIOD_RESET 4 +#define GPIOD_OVER_CURRENT 5 +#define GPIOD_PIN6 6 +#define GPIOD_PIN7 7 +#define GPIOD_PIN8 8 +#define GPIOD_PIN9 9 +#define GPIOD_PIN10 10 +#define GPIOD_PIN11 11 +#define GPIOD_LED4 12 +#define GPIOD_LED3 13 +#define GPIOD_LED5 14 +#define GPIOD_LED6 15 + +#define GPIOE_PIN0 0 +#define GPIOE_PIN1 1 +#define GPIOE_PIN2 2 +#define GPIOE_PIN3 3 +#define GPIOE_PIN4 4 +#define GPIOE_PIN5 5 +#define GPIOE_PIN6 6 +#define GPIOE_PIN7 7 +#define GPIOE_PIN8 8 +#define GPIOE_PIN9 9 +#define GPIOE_PIN10 10 +#define GPIOE_PIN11 11 +#define GPIOE_PIN12 12 +#define GPIOE_PIN13 13 +#define GPIOE_PIN14 14 +#define GPIOE_PIN15 15 + +#define GPIOF_PIN0 0 +#define GPIOF_PIN1 1 +#define GPIOF_PIN2 2 +#define GPIOF_PIN3 3 +#define GPIOF_PIN4 4 +#define GPIOF_PIN5 5 +#define GPIOF_PIN6 6 +#define GPIOF_PIN7 7 +#define GPIOF_PIN8 8 +#define GPIOF_PIN9 9 +#define GPIOF_PIN10 10 +#define GPIOF_PIN11 11 +#define GPIOF_PIN12 12 +#define GPIOF_PIN13 13 +#define GPIOF_PIN14 14 +#define GPIOF_PIN15 15 + +#define GPIOG_PIN0 0 +#define GPIOG_PIN1 1 +#define GPIOG_PIN2 2 +#define GPIOG_PIN3 3 +#define GPIOG_PIN4 4 +#define GPIOG_PIN5 5 +#define GPIOG_PIN6 6 +#define GPIOG_PIN7 7 +#define GPIOG_PIN8 8 +#define GPIOG_PIN9 9 +#define GPIOG_PIN10 10 +#define GPIOG_PIN11 11 +#define GPIOG_PIN12 12 +#define GPIOG_PIN13 13 +#define GPIOG_PIN14 14 +#define GPIOG_PIN15 15 + +#define GPIOH_OSC_IN 0 +#define GPIOH_OSC_OUT 1 +#define GPIOH_PIN2 2 +#define GPIOH_PIN3 3 +#define GPIOH_PIN4 4 +#define GPIOH_PIN5 5 +#define GPIOH_PIN6 6 +#define GPIOH_PIN7 7 +#define GPIOH_PIN8 8 +#define GPIOH_PIN9 9 +#define GPIOH_PIN10 10 +#define GPIOH_PIN11 11 +#define GPIOH_PIN12 12 +#define GPIOH_PIN13 13 +#define GPIOH_PIN14 14 +#define GPIOH_PIN15 15 + +#define GPIOI_PIN0 0 +#define GPIOI_PIN1 1 +#define GPIOI_PIN2 2 +#define GPIOI_PIN3 3 +#define GPIOI_PIN4 4 +#define GPIOI_PIN5 5 +#define GPIOI_PIN6 6 +#define GPIOI_PIN7 7 +#define GPIOI_PIN8 8 +#define GPIOI_PIN9 9 +#define GPIOI_PIN10 10 +#define GPIOI_PIN11 11 +#define GPIOI_PIN12 12 +#define GPIOI_PIN13 13 +#define GPIOI_PIN14 14 +#define GPIOI_PIN15 15 + +#define GPIOJ_PIN0 0U +#define GPIOJ_PIN1 1U +#define GPIOJ_DSI_TE 2U +#define GPIOJ_PIN3 3U +#define GPIOJ_PIN4 4U +#define GPIOJ_LCD_INT 5U +#define GPIOJ_PIN6 6U +#define GPIOJ_PIN7 7U +#define GPIOJ_PIN8 8U +#define GPIOJ_PIN9 9U +#define GPIOJ_PIN10 10U +#define GPIOJ_PIN11 11U +#define GPIOJ_PIN12 12U +#define GPIOJ_PIN13 13U +#define GPIOJ_PIN14 14U +#define GPIOJ_PIN15 15U + +#define GPIOK_PIN0 0U +#define GPIOK_PIN1 1U +#define GPIOK_PIN2 2U +#define GPIOK_LED4 3U +#define GPIOK_PIN4 4U +#define GPIOK_PIN5 5U +#define GPIOK_PIN6 6U +#define GPIOK_PIN7 7U +#define GPIOK_PIN8 8U +#define GPIOK_PIN9 9U +#define GPIOK_PIN10 10U +#define GPIOK_PIN11 11U +#define GPIOK_PIN12 12U +#define GPIOK_PIN13 13U +#define GPIOK_PIN14 14U +#define GPIOK_PIN15 15U + +/* + * IO lines assignments. + */ +#define LINE_BUTTON PAL_LINE(GPIOA, 0U) +#define LINE_LRCK PAL_LINE(GPIOA, 4U) +#define LINE_SPC PAL_LINE(GPIOA, 5U) +#define LINE_SDO PAL_LINE(GPIOA, 6U) +#define LINE_SDI PAL_LINE(GPIOA, 7U) +#define LINE_VBUS_FS PAL_LINE(GPIOA, 9U) +#define LINE_OTG_FS_ID PAL_LINE(GPIOA, 10U) +#define LINE_OTG_FS_DM PAL_LINE(GPIOA, 11U) +#define LINE_OTG_FS_DP PAL_LINE(GPIOA, 12U) +#define LINE_SWDIO PAL_LINE(GPIOA, 13U) +#define LINE_SWCLK PAL_LINE(GPIOA, 14U) + +#define LINE_SWO PAL_LINE(GPIOB, 3U) +#define LINE_SCL PAL_LINE(GPIOB, 6U) +#define LINE_SDA PAL_LINE(GPIOB, 9U) +#define LINE_CLK_IN PAL_LINE(GPIOB, 10U) + +#define LINE_OTG_FS_POWER_ON PAL_LINE(GPIOC, 0U) +#define LINE_PDM_OUT PAL_LINE(GPIOC, 3U) +#define LINE_MCLK PAL_LINE(GPIOC, 7U) +#define LINE_SCLK PAL_LINE(GPIOC, 10U) +#define LINE_SDIN PAL_LINE(GPIOC, 12U) + +#define LINE_RESET PAL_LINE(GPIOD, 4U) +#define LINE_OVER_CURRENT PAL_LINE(GPIOD, 5U) +#define LINE_LED4 PAL_LINE(GPIOD, 12U) +#define LINE_LED3 PAL_LINE(GPIOD, 13U) +#define LINE_LED5 PAL_LINE(GPIOD, 14U) +#define LINE_LED6 PAL_LINE(GPIOD, 15U) + +#define LINE_INT1 PAL_LINE(GPIOE, 0U) +#define LINE_INT2 PAL_LINE(GPIOE, 1U) +#define LINE_CS_SPI PAL_LINE(GPIOE, 3U) + +#define LINE_OSC_IN PAL_LINE(GPIOH, 0U) +#define LINE_OSC_OUT PAL_LINE(GPIOH, 1U) +#define LINE_SDCKE0 PAL_LINE(GPIOH, 2U) +#define LINE_SDNE0 PAL_LINE(GPIOH, 3U) +#define LINE_I2C2_SCL PAL_LINE(GPIOH, 4U) +#define LINE_I2C2_SDA PAL_LINE(GPIOH, 5U) +#define LINE_ARD_D10 PAL_LINE(GPIOH, 6U) +#define LINE_SPI2_NSS PAL_LINE(GPIOH, 6U) +#define LINE_LCD_RESET PAL_LINE(GPIOH, 7U) + +#define LINE_FMC_NBL2 PAL_LINE(GPIOI, 4U) +#define LINE_FMC_NBL3 PAL_LINE(GPIOI, 5U) + +#define LINE_DSI_TE PAL_LINE(GPIOJ, 2U) +#define LINE_LCD_INT PAL_LINE(GPIOJ, 5U) + +/* + * I/O ports initial setup, this configuration is established soon after reset + * in the initialization code. + * Please refer to the STM32 Reference Manual for details. + */ +#define PIN_MODE_INPUT(n) (0U << ((n) * 2U)) +#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U)) +#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U)) +#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U)) +#define PIN_ODR_LOW(n) (0U << (n)) +#define PIN_ODR_HIGH(n) (1U << (n)) +#define PIN_OTYPE_PUSHPULL(n) (0U << (n)) +#define PIN_OTYPE_OPENDRAIN(n) (1U << (n)) +#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U)) +#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U)) +#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U)) +#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U)) +#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U)) +#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U)) +#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U)) +#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U)) + +// See https://github.com/rusefi/rusefi/issues/397 +#define DEFAULT_GPIO_SPEED PIN_OSPEED_HIGH + +/* + * GPIOA setup: + * + * PA0 - BUTTON (input floating). + * PA1 - PIN1 (input pullup). + * PA2 - PIN2 (input pullup). + * PA3 - PIN3 (input pullup). + * PA4 - LRCK (alternate 6). + * PA5 - SPC (alternate 5). + * PA6 - SDO (alternate 5). + * PA7 - SDI (alternate 5). + * PA8 - PIN8 (input pullup). + * PA9 - VBUS_FS (input floating). + * PA10 - OTG_FS_ID (alternate 10). + * PA11 - OTG_FS_DM (alternate 10). + * PA12 - OTG_FS_DP (alternate 10). + * PA13 - SWDIO (alternate 0). + * PA14 - SWCLK (alternate 0). + * PA15 - PIN15 (input pullup). + */ +#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_BUTTON) | \ + PIN_MODE_INPUT(GPIOA_PIN1) | \ + PIN_MODE_INPUT(GPIOA_PIN2) | \ + PIN_MODE_INPUT(GPIOA_PIN3) | \ + PIN_MODE_ALTERNATE(GPIOA_LRCK) | \ + PIN_MODE_ALTERNATE(GPIOA_SPC) | \ + PIN_MODE_ALTERNATE(GPIOA_SDO) | \ + PIN_MODE_ALTERNATE(GPIOA_SDI) | \ + PIN_MODE_INPUT(GPIOA_PIN8) | \ + PIN_MODE_INPUT(GPIOA_VBUS_FS) | \ + PIN_MODE_ALTERNATE(GPIOA_OTG_FS_ID) | \ + PIN_MODE_ALTERNATE(GPIOA_OTG_FS_DM) | \ + PIN_MODE_ALTERNATE(GPIOA_OTG_FS_DP) | \ + PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \ + PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \ + PIN_MODE_INPUT(GPIOA_PIN15)) +#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_BUTTON) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOA_LRCK) | \ + PIN_OTYPE_PUSHPULL(GPIOA_SPC) | \ + PIN_OTYPE_PUSHPULL(GPIOA_SDO) | \ + PIN_OTYPE_PUSHPULL(GPIOA_SDI) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOA_VBUS_FS) | \ + PIN_OTYPE_PUSHPULL(GPIOA_OTG_FS_ID) | \ + PIN_OTYPE_PUSHPULL(GPIOA_OTG_FS_DM) | \ + PIN_OTYPE_PUSHPULL(GPIOA_OTG_FS_DP) | \ + PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \ + PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN15)) +#define VAL_GPIOA_OSPEEDR (DEFAULT_GPIO_SPEED(GPIOA_BUTTON) | \ + DEFAULT_GPIO_SPEED(GPIOA_PIN1) | \ + DEFAULT_GPIO_SPEED(GPIOA_PIN2) | \ + DEFAULT_GPIO_SPEED(GPIOA_PIN3) | \ + DEFAULT_GPIO_SPEED(GPIOA_LRCK) | \ + PIN_OSPEED_MEDIUM(GPIOA_SPC) | \ + PIN_OSPEED_MEDIUM(GPIOA_SDO) | \ + PIN_OSPEED_MEDIUM(GPIOA_SDI) | \ + DEFAULT_GPIO_SPEED(GPIOA_PIN8) | \ + DEFAULT_GPIO_SPEED(GPIOA_VBUS_FS) | \ + DEFAULT_GPIO_SPEED(GPIOA_OTG_FS_ID) | \ + DEFAULT_GPIO_SPEED(GPIOA_OTG_FS_DM) | \ + DEFAULT_GPIO_SPEED(GPIOA_OTG_FS_DP) | \ + DEFAULT_GPIO_SPEED(GPIOA_SWDIO) | \ + DEFAULT_GPIO_SPEED(GPIOA_SWCLK) | \ + DEFAULT_GPIO_SPEED(GPIOA_PIN15)) +#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_BUTTON) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN1) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN2) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOA_LRCK) | \ + PIN_PUPDR_FLOATING(GPIOA_SPC) | \ + PIN_PUPDR_FLOATING(GPIOA_SDO) | \ + PIN_PUPDR_FLOATING(GPIOA_SDI) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOA_VBUS_FS) | \ + PIN_PUPDR_FLOATING(GPIOA_OTG_FS_ID) | \ + PIN_PUPDR_FLOATING(GPIOA_OTG_FS_DM) | \ + PIN_PUPDR_FLOATING(GPIOA_OTG_FS_DP) | \ + PIN_PUPDR_FLOATING(GPIOA_SWDIO) | \ + PIN_PUPDR_FLOATING(GPIOA_SWCLK) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN15)) +#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_BUTTON) | \ + PIN_ODR_HIGH(GPIOA_PIN1) | \ + PIN_ODR_HIGH(GPIOA_PIN2) | \ + PIN_ODR_HIGH(GPIOA_PIN3) | \ + PIN_ODR_HIGH(GPIOA_LRCK) | \ + PIN_ODR_HIGH(GPIOA_SPC) | \ + PIN_ODR_HIGH(GPIOA_SDO) | \ + PIN_ODR_HIGH(GPIOA_SDI) | \ + PIN_ODR_HIGH(GPIOA_PIN8) | \ + PIN_ODR_HIGH(GPIOA_VBUS_FS) | \ + PIN_ODR_HIGH(GPIOA_OTG_FS_ID) | \ + PIN_ODR_HIGH(GPIOA_OTG_FS_DM) | \ + PIN_ODR_HIGH(GPIOA_OTG_FS_DP) | \ + PIN_ODR_HIGH(GPIOA_SWDIO) | \ + PIN_ODR_HIGH(GPIOA_SWCLK) | \ + PIN_ODR_HIGH(GPIOA_PIN15)) +#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_BUTTON, 0U) | \ + PIN_AFIO_AF(GPIOA_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOA_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOA_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOA_LRCK, 6U) | \ + PIN_AFIO_AF(GPIOA_SPC, 5U) | \ + PIN_AFIO_AF(GPIOA_SDO, 5U) | \ + PIN_AFIO_AF(GPIOA_SDI, 5U)) +#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOA_VBUS_FS, 0U) | \ + PIN_AFIO_AF(GPIOA_OTG_FS_ID, 10U) | \ + PIN_AFIO_AF(GPIOA_OTG_FS_DM, 10U) | \ + PIN_AFIO_AF(GPIOA_OTG_FS_DP, 10U) | \ + PIN_AFIO_AF(GPIOA_SWDIO, 0U) | \ + PIN_AFIO_AF(GPIOA_SWCLK, 0U) | \ + PIN_AFIO_AF(GPIOA_PIN15, 0U)) + +/* + * GPIOB setup: + * + * PB0 - PIN0 (input pullup). + * PB1 - PIN1 (input pullup). + * PB2 - PIN2 (input pullup). + * PB3 - SWO (alternate 0). + * PB4 - PIN4 (input pullup). + * PB5 - PIN5 (input pullup). + * PB6 - SCL (alternate 4). + * PB7 - PIN7 (input pullup). + * PB8 - PIN8 (input pullup). + * PB9 - SDA (alternate 4). + * PB10 - CLK_IN (input pullup). + * PB11 - PIN11 (input pullup). + * PB12 - PIN12 (input pullup). + * PB13 - PIN13 (input pullup). + * PB14 - PIN14 (input pullup). + * PB15 - PIN15 (input pullup). + */ +#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \ + PIN_MODE_INPUT(GPIOB_PIN1) | \ + PIN_MODE_INPUT(GPIOB_PIN2) | \ + PIN_MODE_ALTERNATE(GPIOB_SWO) | \ + PIN_MODE_INPUT(GPIOB_PIN4) | \ + PIN_MODE_INPUT(GPIOB_PIN5) | \ + PIN_MODE_ALTERNATE(GPIOB_SCL) | \ + PIN_MODE_INPUT(GPIOB_PIN7) | \ + PIN_MODE_INPUT(GPIOB_PIN8) | \ + PIN_MODE_INPUT(GPIOB_PIN9) | \ + PIN_MODE_INPUT(GPIOB_PIN10) | \ + PIN_MODE_INPUT(GPIOB_PIN11) | \ + PIN_MODE_INPUT(GPIOB_PIN12) | \ + PIN_MODE_INPUT(GPIOB_PIN13) | \ + PIN_MODE_INPUT(GPIOB_PIN14) | \ + PIN_MODE_INPUT(GPIOB_PIN15)) +#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOB_SWO) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \ + PIN_OTYPE_OPENDRAIN(GPIOB_SCL) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN15)) +#define VAL_GPIOB_OSPEEDR (DEFAULT_GPIO_SPEED(GPIOB_PIN0) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN1) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN2) | \ + DEFAULT_GPIO_SPEED(GPIOB_SWO) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN4) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN5) | \ + DEFAULT_GPIO_SPEED(GPIOB_SCL) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN7) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN8) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN9) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN10) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN11) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN12) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN13) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN14) | \ + DEFAULT_GPIO_SPEED(GPIOB_PIN15)) +#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN1) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOB_SWO) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN4) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOB_SCL) | \ + PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \ + PIN_PUPDR_PULLDOWN(GPIOB_PIN8) | \ + PIN_PUPDR_PULLDOWN(GPIOB_PIN9) | \ + PIN_PUPDR_PULLDOWN(GPIOB_PIN10) | \ + PIN_PUPDR_PULLDOWN(GPIOB_PIN11) | \ + PIN_PUPDR_PULLDOWN(GPIOB_PIN12) | \ + PIN_PUPDR_PULLDOWN(GPIOB_PIN13) | \ + PIN_PUPDR_PULLDOWN(GPIOB_PIN14) | \ + PIN_PUPDR_PULLDOWN(GPIOB_PIN15)) +#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \ + PIN_ODR_HIGH(GPIOB_PIN1) | \ + PIN_ODR_HIGH(GPIOB_PIN2) | \ + PIN_ODR_HIGH(GPIOB_SWO) | \ + PIN_ODR_HIGH(GPIOB_PIN4) | \ + PIN_ODR_HIGH(GPIOB_PIN5) | \ + PIN_ODR_HIGH(GPIOB_SCL) | \ + PIN_ODR_HIGH(GPIOB_PIN7) | \ + PIN_ODR_HIGH(GPIOB_PIN8) | \ + PIN_ODR_HIGH(GPIOB_PIN9) | \ + PIN_ODR_HIGH(GPIOB_PIN10) | \ + PIN_ODR_HIGH(GPIOB_PIN11) | \ + PIN_ODR_HIGH(GPIOB_PIN12) | \ + PIN_ODR_HIGH(GPIOB_PIN13) | \ + PIN_ODR_HIGH(GPIOB_PIN14) | \ + PIN_ODR_HIGH(GPIOB_PIN15)) +#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOB_SWO, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOB_SCL, 4U) | \ + PIN_AFIO_AF(GPIOB_PIN7, 0U)) +#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOB_PIN15, 0U)) + +/* + * GPIOC setup: + * + * PC0 - OTG_FS_POWER_ON (output pushpull maximum). + * PC1 - PIN1 (input pullup). + * PC2 - PIN2 (input pullup). + * PC3 - PDM_OUT (input pullup). + * PC4 - PIN4 (input pullup). + * PC5 - PIN5 (input pullup). + * PC6 - PIN6 (input pullup). + * PC7 - MCLK (alternate 6). + * PC8 - PIN8 (input pullup). + * PC9 - PIN9 (input pullup). + * PC10 - SCLK (alternate 6). + * PC11 - PIN11 (input pullup). + * PC12 - SDIN (alternate 6). + * PC13 - PIN13 (input pullup). + * PC14 - PIN14 (input pullup). + * PC15 - PIN15 (input pullup). + */ +#define VAL_GPIOC_MODER (PIN_MODE_OUTPUT(GPIOC_OTG_FS_POWER_ON) |\ + PIN_MODE_INPUT(GPIOC_PIN1) | \ + PIN_MODE_INPUT(GPIOC_PIN2) | \ + PIN_MODE_INPUT(GPIOC_PIN3) | \ + PIN_MODE_INPUT(GPIOC_PIN4) | \ + PIN_MODE_INPUT(GPIOC_PIN5) | \ + PIN_MODE_INPUT(GPIOC_PIN6) | \ + PIN_MODE_INPUT(GPIOC_PIN7) | \ + PIN_MODE_INPUT(GPIOC_PIN8) | \ + PIN_MODE_INPUT(GPIOC_PIN9) | \ + PIN_MODE_INPUT(GPIOC_PIN10) | \ + PIN_MODE_INPUT(GPIOC_PIN11) | \ + PIN_MODE_INPUT(GPIOC_PIN12) | \ + PIN_MODE_INPUT(GPIOC_PIN13) | \ + PIN_MODE_INPUT(GPIOC_PIN14) | \ + PIN_MODE_INPUT(GPIOC_PIN15)) +#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_OTG_FS_POWER_ON) |\ + PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN15)) +#define VAL_GPIOC_OSPEEDR (DEFAULT_GPIO_SPEED(GPIOC_OTG_FS_POWER_ON) |\ + DEFAULT_GPIO_SPEED(GPIOC_PIN1) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN2) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN3) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN4) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN5) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN6) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN7) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN8) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN9) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN10) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN11) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN12) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN13) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN14) | \ + DEFAULT_GPIO_SPEED(GPIOC_PIN15)) +#define VAL_GPIOC_PUPDR (PIN_PUPDR_FLOATING(GPIOC_OTG_FS_POWER_ON) |\ + PIN_PUPDR_PULLDOWN(GPIOC_PIN1) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN2) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN3) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN4) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN5) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN6) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN7) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN8) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN9) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN10) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN11) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN12) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN13) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN14) | \ + PIN_PUPDR_PULLDOWN(GPIOC_PIN15)) +#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_OTG_FS_POWER_ON) | \ + PIN_ODR_HIGH(GPIOC_PIN1) | \ + PIN_ODR_HIGH(GPIOC_PIN2) | \ + PIN_ODR_HIGH(GPIOC_PIN3) | \ + PIN_ODR_HIGH(GPIOC_PIN4) | \ + PIN_ODR_HIGH(GPIOC_PIN5) | \ + PIN_ODR_HIGH(GPIOC_PIN6) | \ + PIN_ODR_HIGH(GPIOC_PIN7) | \ + PIN_ODR_HIGH(GPIOC_PIN8) | \ + PIN_ODR_HIGH(GPIOC_PIN9) | \ + PIN_ODR_HIGH(GPIOC_PIN10) | \ + PIN_ODR_HIGH(GPIOC_PIN11) | \ + PIN_ODR_HIGH(GPIOC_PIN12) | \ + PIN_ODR_HIGH(GPIOC_PIN13) | \ + PIN_ODR_HIGH(GPIOC_PIN14) | \ + PIN_ODR_HIGH(GPIOC_PIN15)) +#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_OTG_FS_POWER_ON, 0U) |\ + PIN_AFIO_AF(GPIOC_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN7, 0U)) +#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN15, 0U)) + +/* + * GPIOD setup: + * + * PD0 - PIN0 (input pullup). + * PD1 - PIN1 (input pullup). + * PD2 - PIN2 (input pullup). + * PD3 - PIN3 (input pullup). + * PD4 - RESET (output pushpull maximum). + * PD5 - OVER_CURRENT (input floating). + * PD6 - PIN6 (input pullup). + * PD7 - PIN7 (input pullup). + * PD8 - PIN8 (input pullup). + * PD9 - PIN9 (input pullup). + * PD10 - PIN10 (input pullup). + * PD11 - PIN11 (input pullup). + * PD12 - LED4 (output pushpull maximum). + * PD13 - LED3 (output pushpull maximum). + * PD14 - LED5 (output pushpull maximum). + * PD15 - LED6 (output pushpull maximum). + */ +#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \ + PIN_MODE_INPUT(GPIOD_PIN1) | \ + PIN_MODE_INPUT(GPIOD_PIN2) | \ + PIN_MODE_INPUT(GPIOD_PIN3) | \ + PIN_MODE_OUTPUT(GPIOD_RESET) | \ + PIN_MODE_INPUT(GPIOD_OVER_CURRENT) | \ + PIN_MODE_INPUT(GPIOD_PIN6) | \ + PIN_MODE_INPUT(GPIOD_PIN7) | \ + PIN_MODE_INPUT(GPIOD_PIN8) | \ + PIN_MODE_INPUT(GPIOD_PIN9) | \ + PIN_MODE_INPUT(GPIOD_PIN10) | \ + PIN_MODE_INPUT(GPIOD_PIN11) | \ + PIN_MODE_OUTPUT(GPIOD_LED4) | \ + PIN_MODE_OUTPUT(GPIOD_LED3) | \ + PIN_MODE_OUTPUT(GPIOD_LED5) | \ + PIN_MODE_OUTPUT(GPIOD_LED6)) +#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOD_RESET) | \ + PIN_OTYPE_PUSHPULL(GPIOD_OVER_CURRENT) |\ + PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOD_LED4) | \ + PIN_OTYPE_PUSHPULL(GPIOD_LED3) | \ + PIN_OTYPE_PUSHPULL(GPIOD_LED5) | \ + PIN_OTYPE_PUSHPULL(GPIOD_LED6)) +#define VAL_GPIOD_OSPEEDR (DEFAULT_GPIO_SPEED(GPIOD_PIN0) | \ + DEFAULT_GPIO_SPEED(GPIOD_PIN1) | \ + DEFAULT_GPIO_SPEED(GPIOD_PIN2) | \ + DEFAULT_GPIO_SPEED(GPIOD_PIN3) | \ + DEFAULT_GPIO_SPEED(GPIOD_RESET) | \ + DEFAULT_GPIO_SPEED(GPIOD_OVER_CURRENT) | \ + DEFAULT_GPIO_SPEED(GPIOD_PIN6) | \ + DEFAULT_GPIO_SPEED(GPIOD_PIN7) | \ + DEFAULT_GPIO_SPEED(GPIOD_PIN8) | \ + DEFAULT_GPIO_SPEED(GPIOD_PIN9) | \ + DEFAULT_GPIO_SPEED(GPIOD_PIN10) | \ + DEFAULT_GPIO_SPEED(GPIOD_PIN11) | \ + DEFAULT_GPIO_SPEED(GPIOD_LED4) | \ + DEFAULT_GPIO_SPEED(GPIOD_LED3) | \ + DEFAULT_GPIO_SPEED(GPIOD_LED5) | \ + DEFAULT_GPIO_SPEED(GPIOD_LED6)) +#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \ + PIN_PUPDR_PULLUP(GPIOD_PIN1) | \ + PIN_PUPDR_PULLUP(GPIOD_PIN2) | \ + PIN_PUPDR_PULLUP(GPIOD_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOD_RESET) | \ + PIN_PUPDR_FLOATING(GPIOD_OVER_CURRENT) |\ + PIN_PUPDR_PULLUP(GPIOD_PIN6) | \ + PIN_PUPDR_PULLUP(GPIOD_PIN7) | \ + PIN_PUPDR_PULLUP(GPIOD_PIN8) | \ + PIN_PUPDR_PULLUP(GPIOD_PIN9) | \ + PIN_PUPDR_PULLUP(GPIOD_PIN10) | \ + PIN_PUPDR_PULLUP(GPIOD_PIN11) | \ + PIN_PUPDR_FLOATING(GPIOD_LED4) | \ + PIN_PUPDR_FLOATING(GPIOD_LED3) | \ + PIN_PUPDR_FLOATING(GPIOD_LED5) | \ + PIN_PUPDR_FLOATING(GPIOD_LED6)) +#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \ + PIN_ODR_HIGH(GPIOD_PIN1) | \ + PIN_ODR_HIGH(GPIOD_PIN2) | \ + PIN_ODR_HIGH(GPIOD_PIN3) | \ + PIN_ODR_HIGH(GPIOD_RESET) | \ + PIN_ODR_HIGH(GPIOD_OVER_CURRENT) | \ + PIN_ODR_HIGH(GPIOD_PIN6) | \ + PIN_ODR_HIGH(GPIOD_PIN7) | \ + PIN_ODR_HIGH(GPIOD_PIN8) | \ + PIN_ODR_HIGH(GPIOD_PIN9) | \ + PIN_ODR_HIGH(GPIOD_PIN10) | \ + PIN_ODR_HIGH(GPIOD_PIN11) | \ + PIN_ODR_LOW(GPIOD_LED4) | \ + PIN_ODR_LOW(GPIOD_LED3) | \ + PIN_ODR_LOW(GPIOD_LED5) | \ + PIN_ODR_LOW(GPIOD_LED6)) +#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOD_RESET, 0U) | \ + PIN_AFIO_AF(GPIOD_OVER_CURRENT, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN7, 0U)) +#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOD_LED4, 0U) | \ + PIN_AFIO_AF(GPIOD_LED3, 0U) | \ + PIN_AFIO_AF(GPIOD_LED5, 0U) | \ + PIN_AFIO_AF(GPIOD_LED6, 0U)) + +/* + * GPIOE setup: + * + * PE0 - INT1 (input floating). + * PE1 - INT2 (input floating). + * PE2 - PIN2 (input floating). + * PE3 - CS_SPI (output pushpull maximum). + * PE4 - PIN4 (input floating). + * PE5 - PIN5 (input floating). + * PE6 - PIN6 (input floating). + * PE7 - PIN7 (input floating). + * PE8 - PIN8 (input floating). + * PE9 - PIN9 (input floating). + * PE10 - PIN10 (input floating). + * PE11 - PIN11 (input floating). + * PE12 - PIN12 (input floating). + * PE13 - PIN13 (input floating). + * PE14 - PIN14 (input floating). + * PE15 - PIN15 (input floating). + */ +#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \ + PIN_MODE_INPUT(GPIOE_PIN1) | \ + PIN_MODE_INPUT(GPIOE_PIN2) | \ + PIN_MODE_INPUT(GPIOE_PIN3) | \ + PIN_MODE_INPUT(GPIOE_PIN4) | \ + PIN_MODE_INPUT(GPIOE_PIN5) | \ + PIN_MODE_INPUT(GPIOE_PIN6) | \ + PIN_MODE_INPUT(GPIOE_PIN7) | \ + PIN_MODE_INPUT(GPIOE_PIN8) | \ + PIN_MODE_INPUT(GPIOE_PIN9) | \ + PIN_MODE_INPUT(GPIOE_PIN10) | \ + PIN_MODE_INPUT(GPIOE_PIN11) | \ + PIN_MODE_INPUT(GPIOE_PIN12) | \ + PIN_MODE_INPUT(GPIOE_PIN13) | \ + PIN_MODE_INPUT(GPIOE_PIN14) | \ + PIN_MODE_INPUT(GPIOE_PIN15)) +#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN15)) +#define VAL_GPIOE_OSPEEDR (DEFAULT_GPIO_SPEED(GPIOE_PIN0) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN1) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN2) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN3) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN4) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN5) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN6) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN7) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN8) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN9) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN10) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN11) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN12) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN13) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN14) | \ + DEFAULT_GPIO_SPEED(GPIOE_PIN15)) +#define VAL_GPIOE_PUPDR (PIN_PUPDR_FLOATING(GPIOE_PIN0) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN1) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN4) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN6) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN9) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN10) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN11) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN12) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN14) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN15)) +#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \ + PIN_ODR_HIGH(GPIOE_PIN1) | \ + PIN_ODR_HIGH(GPIOE_PIN2) | \ + PIN_ODR_HIGH(GPIOE_PIN3) | \ + PIN_ODR_HIGH(GPIOE_PIN4) | \ + PIN_ODR_HIGH(GPIOE_PIN5) | \ + PIN_ODR_HIGH(GPIOE_PIN6) | \ + PIN_ODR_HIGH(GPIOE_PIN7) | \ + PIN_ODR_HIGH(GPIOE_PIN8) | \ + PIN_ODR_HIGH(GPIOE_PIN9) | \ + PIN_ODR_HIGH(GPIOE_PIN10) | \ + PIN_ODR_HIGH(GPIOE_PIN11) | \ + PIN_ODR_HIGH(GPIOE_PIN12) | \ + PIN_ODR_HIGH(GPIOE_PIN13) | \ + PIN_ODR_HIGH(GPIOE_PIN14) | \ + PIN_ODR_HIGH(GPIOE_PIN15)) +#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN7, 0U)) +#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN15, 0U)) + +/* + * GPIOF setup: + * + * PF0 - PIN0 (input floating). + * PF1 - PIN1 (input floating). + * PF2 - PIN2 (input floating). + * PF3 - PIN3 (input floating). + * PF4 - PIN4 (input floating). + * PF5 - PIN5 (input floating). + * PF6 - PIN6 (input floating). + * PF7 - PIN7 (input floating). + * PF8 - PIN8 (input floating). + * PF9 - PIN9 (input floating). + * PF10 - PIN10 (input floating). + * PF11 - PIN11 (input floating). + * PF12 - PIN12 (input floating). + * PF13 - PIN13 (input floating). + * PF14 - PIN14 (input floating). + * PF15 - PIN15 (input floating). + */ +#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_PIN0) | \ + PIN_MODE_INPUT(GPIOF_PIN1) | \ + PIN_MODE_INPUT(GPIOF_PIN2) | \ + PIN_MODE_INPUT(GPIOF_PIN3) | \ + PIN_MODE_INPUT(GPIOF_PIN4) | \ + PIN_MODE_INPUT(GPIOF_PIN5) | \ + PIN_MODE_INPUT(GPIOF_PIN6) | \ + PIN_MODE_INPUT(GPIOF_PIN7) | \ + PIN_MODE_INPUT(GPIOF_PIN8) | \ + PIN_MODE_INPUT(GPIOF_PIN9) | \ + PIN_MODE_INPUT(GPIOF_PIN10) | \ + PIN_MODE_INPUT(GPIOF_PIN11) | \ + PIN_MODE_INPUT(GPIOF_PIN12) | \ + PIN_MODE_INPUT(GPIOF_PIN13) | \ + PIN_MODE_INPUT(GPIOF_PIN14) | \ + PIN_MODE_INPUT(GPIOF_PIN15)) +#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN15)) +#define VAL_GPIOF_OSPEEDR (DEFAULT_GPIO_SPEED(GPIOF_PIN0) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN1) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN2) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN3) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN4) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN5) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN6) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN7) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN8) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN9) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN10) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN11) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN12) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN13) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN14) | \ + DEFAULT_GPIO_SPEED(GPIOF_PIN15)) +#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_PIN0) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN1) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN4) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN6) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN9) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN10) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN11) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN12) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN14) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN15)) +#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_PIN0) | \ + PIN_ODR_HIGH(GPIOF_PIN1) | \ + PIN_ODR_HIGH(GPIOF_PIN2) | \ + PIN_ODR_HIGH(GPIOF_PIN3) | \ + PIN_ODR_HIGH(GPIOF_PIN4) | \ + PIN_ODR_HIGH(GPIOF_PIN5) | \ + PIN_ODR_HIGH(GPIOF_PIN6) | \ + PIN_ODR_HIGH(GPIOF_PIN7) | \ + PIN_ODR_HIGH(GPIOF_PIN8) | \ + PIN_ODR_HIGH(GPIOF_PIN9) | \ + PIN_ODR_HIGH(GPIOF_PIN10) | \ + PIN_ODR_HIGH(GPIOF_PIN11) | \ + PIN_ODR_HIGH(GPIOF_PIN12) | \ + PIN_ODR_HIGH(GPIOF_PIN13) | \ + PIN_ODR_HIGH(GPIOF_PIN14) | \ + PIN_ODR_HIGH(GPIOF_PIN15)) +#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_PIN0, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN7, 0U)) +#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN15, 0U)) + +/* + * GPIOG setup: + * + * PG0 - PIN0 (input floating). + * PG1 - PIN1 (input floating). + * PG2 - PIN2 (input floating). + * PG3 - PIN3 (input floating). + * PG4 - PIN4 (input floating). + * PG5 - PIN5 (input floating). + * PG6 - PIN6 (input floating). + * PG7 - PIN7 (input floating). + * PG8 - PIN8 (input floating). + * PG9 - PIN9 (input floating). + * PG10 - PIN10 (input floating). + * PG11 - PIN11 (input floating). + * PG12 - PIN12 (input floating). + * PG13 - PIN13 (input floating). + * PG14 - PIN14 (input floating). + * PG15 - PIN15 (input floating). + */ +#define VAL_GPIOG_MODER (PIN_MODE_INPUT(GPIOG_PIN0) | \ + PIN_MODE_INPUT(GPIOG_PIN1) | \ + PIN_MODE_INPUT(GPIOG_PIN2) | \ + PIN_MODE_INPUT(GPIOG_PIN3) | \ + PIN_MODE_INPUT(GPIOG_PIN4) | \ + PIN_MODE_INPUT(GPIOG_PIN5) | \ + PIN_MODE_INPUT(GPIOG_PIN6) | \ + PIN_MODE_INPUT(GPIOG_PIN7) | \ + PIN_MODE_INPUT(GPIOG_PIN8) | \ + PIN_MODE_INPUT(GPIOG_PIN9) | \ + PIN_MODE_INPUT(GPIOG_PIN10) | \ + PIN_MODE_INPUT(GPIOG_PIN11) | \ + PIN_MODE_INPUT(GPIOG_PIN12) | \ + PIN_MODE_INPUT(GPIOG_PIN13) | \ + PIN_MODE_INPUT(GPIOG_PIN14) | \ + PIN_MODE_INPUT(GPIOG_PIN15)) +#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOG_PIN15)) +#define VAL_GPIOG_OSPEEDR (DEFAULT_GPIO_SPEED(GPIOG_PIN0) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN1) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN2) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN3) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN4) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN5) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN6) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN7) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN8) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN9) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN10) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN11) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN12) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN13) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN14) | \ + DEFAULT_GPIO_SPEED(GPIOG_PIN15)) +#define VAL_GPIOG_PUPDR (PIN_PUPDR_FLOATING(GPIOG_PIN0) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN1) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN4) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN6) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN9) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN10) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN11) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN12) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN14) | \ + PIN_PUPDR_FLOATING(GPIOG_PIN15)) +#define VAL_GPIOG_ODR (PIN_ODR_HIGH(GPIOG_PIN0) | \ + PIN_ODR_HIGH(GPIOG_PIN1) | \ + PIN_ODR_HIGH(GPIOG_PIN2) | \ + PIN_ODR_HIGH(GPIOG_PIN3) | \ + PIN_ODR_HIGH(GPIOG_PIN4) | \ + PIN_ODR_HIGH(GPIOG_PIN5) | \ + PIN_ODR_HIGH(GPIOG_PIN6) | \ + PIN_ODR_HIGH(GPIOG_PIN7) | \ + PIN_ODR_HIGH(GPIOG_PIN8) | \ + PIN_ODR_HIGH(GPIOG_PIN9) | \ + PIN_ODR_HIGH(GPIOG_PIN10) | \ + PIN_ODR_HIGH(GPIOG_PIN11) | \ + PIN_ODR_HIGH(GPIOG_PIN12) | \ + PIN_ODR_HIGH(GPIOG_PIN13) | \ + PIN_ODR_HIGH(GPIOG_PIN14) | \ + PIN_ODR_HIGH(GPIOG_PIN15)) +#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN7, 0U)) +#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOG_PIN15, 0U)) + +/* + * GPIOH setup: + * + * PH0 - OSC_IN (input floating). + * PH1 - OSC_OUT (input floating). + * PH2 - PIN2 (input floating). + * PH3 - PIN3 (input floating). + * PH4 - PIN4 (input floating). + * PH5 - PIN5 (input floating). + * PH6 - PIN6 (input floating). + * PH7 - PIN7 (input floating). + * PH8 - PIN8 (input floating). + * PH9 - PIN9 (input floating). + * PH10 - PIN10 (input floating). + * PH11 - PIN11 (input floating). + * PH12 - PIN12 (input floating). + * PH13 - PIN13 (input floating). + * PH14 - PIN14 (input floating). + * PH15 - PIN15 (input floating). + */ +#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_OSC_IN) | \ + PIN_MODE_INPUT(GPIOH_OSC_OUT) | \ + PIN_MODE_INPUT(GPIOH_PIN2) | \ + PIN_MODE_INPUT(GPIOH_PIN3) | \ + PIN_MODE_INPUT(GPIOH_PIN4) | \ + PIN_MODE_INPUT(GPIOH_PIN5) | \ + PIN_MODE_INPUT(GPIOH_PIN6) | \ + PIN_MODE_INPUT(GPIOH_PIN7) | \ + PIN_MODE_INPUT(GPIOH_PIN8) | \ + PIN_MODE_INPUT(GPIOH_PIN9) | \ + PIN_MODE_INPUT(GPIOH_PIN10) | \ + PIN_MODE_INPUT(GPIOH_PIN11) | \ + PIN_MODE_INPUT(GPIOH_PIN12) | \ + PIN_MODE_INPUT(GPIOH_PIN13) | \ + PIN_MODE_INPUT(GPIOH_PIN14) | \ + PIN_MODE_INPUT(GPIOH_PIN15)) +#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_OSC_IN) | \ + PIN_OTYPE_PUSHPULL(GPIOH_OSC_OUT) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOH_PIN15)) +#define VAL_GPIOH_OSPEEDR (DEFAULT_GPIO_SPEED(GPIOH_OSC_IN) | \ + DEFAULT_GPIO_SPEED(GPIOH_OSC_OUT) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN2) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN3) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN4) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN5) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN6) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN7) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN8) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN9) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN10) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN11) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN12) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN13) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN14) | \ + DEFAULT_GPIO_SPEED(GPIOH_PIN15)) +#define VAL_GPIOH_PUPDR (PIN_PUPDR_FLOATING(GPIOH_OSC_IN) | \ + PIN_PUPDR_FLOATING(GPIOH_OSC_OUT) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN4) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN6) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN9) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN10) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN11) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN12) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN14) | \ + PIN_PUPDR_FLOATING(GPIOH_PIN15)) +#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_OSC_IN) | \ + PIN_ODR_HIGH(GPIOH_OSC_OUT) | \ + PIN_ODR_HIGH(GPIOH_PIN2) | \ + PIN_ODR_HIGH(GPIOH_PIN3) | \ + PIN_ODR_HIGH(GPIOH_PIN4) | \ + PIN_ODR_HIGH(GPIOH_PIN5) | \ + PIN_ODR_HIGH(GPIOH_PIN6) | \ + PIN_ODR_HIGH(GPIOH_PIN7) | \ + PIN_ODR_HIGH(GPIOH_PIN8) | \ + PIN_ODR_HIGH(GPIOH_PIN9) | \ + PIN_ODR_HIGH(GPIOH_PIN10) | \ + PIN_ODR_HIGH(GPIOH_PIN11) | \ + PIN_ODR_HIGH(GPIOH_PIN12) | \ + PIN_ODR_HIGH(GPIOH_PIN13) | \ + PIN_ODR_HIGH(GPIOH_PIN14) | \ + PIN_ODR_HIGH(GPIOH_PIN15)) +#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_OSC_IN, 0U) | \ + PIN_AFIO_AF(GPIOH_OSC_OUT, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN7, 0U)) +#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOH_PIN15, 0U)) + +/* + * GPIOI setup: + * + * PI0 - PIN0 (input floating). + * PI1 - PIN1 (input floating). + * PI2 - PIN2 (input floating). + * PI3 - PIN3 (input floating). + * PI4 - PIN4 (input floating). + * PI5 - PIN5 (input floating). + * PI6 - PIN6 (input floating). + * PI7 - PIN7 (input floating). + * PI8 - PIN8 (input floating). + * PI9 - PIN9 (input floating). + * PI10 - PIN10 (input floating). + * PI11 - PIN11 (input floating). + * PI12 - PIN12 (input floating). + * PI13 - PIN13 (input floating). + * PI14 - PIN14 (input floating). + * PI15 - PIN15 (input floating). + */ +#define VAL_GPIOI_MODER (PIN_MODE_INPUT(GPIOI_PIN0) | \ + PIN_MODE_INPUT(GPIOI_PIN1) | \ + PIN_MODE_INPUT(GPIOI_PIN2) | \ + PIN_MODE_INPUT(GPIOI_PIN3) | \ + PIN_MODE_INPUT(GPIOI_PIN4) | \ + PIN_MODE_INPUT(GPIOI_PIN5) | \ + PIN_MODE_INPUT(GPIOI_PIN6) | \ + PIN_MODE_INPUT(GPIOI_PIN7) | \ + PIN_MODE_INPUT(GPIOI_PIN8) | \ + PIN_MODE_INPUT(GPIOI_PIN9) | \ + PIN_MODE_INPUT(GPIOI_PIN10) | \ + PIN_MODE_INPUT(GPIOI_PIN11) | \ + PIN_MODE_INPUT(GPIOI_PIN12) | \ + PIN_MODE_INPUT(GPIOI_PIN13) | \ + PIN_MODE_INPUT(GPIOI_PIN14) | \ + PIN_MODE_INPUT(GPIOI_PIN15)) +#define VAL_GPIOI_OTYPER (PIN_OTYPE_PUSHPULL(GPIOI_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOI_PIN15)) +#define VAL_GPIOI_OSPEEDR (DEFAULT_GPIO_SPEED(GPIOI_PIN0) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN1) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN2) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN3) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN4) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN5) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN6) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN7) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN8) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN9) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN10) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN11) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN12) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN13) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN14) | \ + DEFAULT_GPIO_SPEED(GPIOI_PIN15)) +#define VAL_GPIOI_PUPDR (PIN_PUPDR_FLOATING(GPIOI_PIN0) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN1) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN4) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN6) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN9) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN10) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN11) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN12) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN14) | \ + PIN_PUPDR_FLOATING(GPIOI_PIN15)) +#define VAL_GPIOI_ODR (PIN_ODR_HIGH(GPIOI_PIN0) | \ + PIN_ODR_HIGH(GPIOI_PIN1) | \ + PIN_ODR_HIGH(GPIOI_PIN2) | \ + PIN_ODR_HIGH(GPIOI_PIN3) | \ + PIN_ODR_HIGH(GPIOI_PIN4) | \ + PIN_ODR_HIGH(GPIOI_PIN5) | \ + PIN_ODR_HIGH(GPIOI_PIN6) | \ + PIN_ODR_HIGH(GPIOI_PIN7) | \ + PIN_ODR_HIGH(GPIOI_PIN8) | \ + PIN_ODR_HIGH(GPIOI_PIN9) | \ + PIN_ODR_HIGH(GPIOI_PIN10) | \ + PIN_ODR_HIGH(GPIOI_PIN11) | \ + PIN_ODR_HIGH(GPIOI_PIN12) | \ + PIN_ODR_HIGH(GPIOI_PIN13) | \ + PIN_ODR_HIGH(GPIOI_PIN14) | \ + PIN_ODR_HIGH(GPIOI_PIN15)) +#define VAL_GPIOI_AFRL (PIN_AFIO_AF(GPIOI_PIN0, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN7, 0U)) +#define VAL_GPIOI_AFRH (PIN_AFIO_AF(GPIOI_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOI_PIN15, 0U)) + +/* + * GPIOJ setup: + * + * PJ0 - PIN0 (input pullup). + * PJ1 - PIN1 (input pullup). + * PJ2 - DSI_TE (alternate 13). + * PJ3 - PIN3 (input pullup). + * PJ4 - PIN4 (input pullup). + * PJ5 - LCD_INT (input pullup). + * PJ6 - PIN6 (input pullup). + * PJ7 - PIN7 (input pullup). + * PJ8 - PIN8 (input pullup). + * PJ9 - PIN9 (input pullup). + * PJ10 - PIN10 (input pullup). + * PJ11 - PIN11 (input pullup). + * PJ12 - PIN12 (input pullup). + * PJ13 - PIN13 (input pullup). + * PJ14 - PIN14 (input pullup). + * PJ15 - PIN15 (input pullup). + */ +#define VAL_GPIOJ_MODER (PIN_MODE_INPUT(GPIOJ_PIN0) | \ + PIN_MODE_INPUT(GPIOJ_PIN1) | \ + PIN_MODE_ALTERNATE(GPIOJ_DSI_TE) | \ + PIN_MODE_INPUT(GPIOJ_PIN3) | \ + PIN_MODE_INPUT(GPIOJ_PIN4) | \ + PIN_MODE_INPUT(GPIOJ_LCD_INT) | \ + PIN_MODE_INPUT(GPIOJ_PIN6) | \ + PIN_MODE_INPUT(GPIOJ_PIN7) | \ + PIN_MODE_INPUT(GPIOJ_PIN8) | \ + PIN_MODE_INPUT(GPIOJ_PIN9) | \ + PIN_MODE_INPUT(GPIOJ_PIN10) | \ + PIN_MODE_INPUT(GPIOJ_PIN11) | \ + PIN_MODE_INPUT(GPIOJ_PIN12) | \ + PIN_MODE_INPUT(GPIOJ_PIN13) | \ + PIN_MODE_INPUT(GPIOJ_PIN14) | \ + PIN_MODE_INPUT(GPIOJ_PIN15)) +#define VAL_GPIOJ_OTYPER (PIN_OTYPE_PUSHPULL(GPIOJ_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_DSI_TE) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_LCD_INT) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOJ_PIN15)) +#define VAL_GPIOJ_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOJ_PIN0) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN1) | \ + PIN_OSPEED_HIGH(GPIOJ_DSI_TE) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN3) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN4) | \ + PIN_OSPEED_VERYLOW(GPIOJ_LCD_INT) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN6) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN7) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN8) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN9) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN10) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN11) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN12) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN13) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN14) | \ + PIN_OSPEED_VERYLOW(GPIOJ_PIN15)) +#define VAL_GPIOJ_PUPDR (PIN_PUPDR_PULLUP(GPIOJ_PIN0) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN1) | \ + PIN_PUPDR_FLOATING(GPIOJ_DSI_TE) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN3) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN4) | \ + PIN_PUPDR_PULLUP(GPIOJ_LCD_INT) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN6) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN7) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN8) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN9) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN10) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN11) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN12) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN13) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN14) | \ + PIN_PUPDR_PULLUP(GPIOJ_PIN15)) +#define VAL_GPIOJ_ODR (PIN_ODR_HIGH(GPIOJ_PIN0) | \ + PIN_ODR_HIGH(GPIOJ_PIN1) | \ + PIN_ODR_HIGH(GPIOJ_DSI_TE) | \ + PIN_ODR_HIGH(GPIOJ_PIN3) | \ + PIN_ODR_HIGH(GPIOJ_PIN4) | \ + PIN_ODR_HIGH(GPIOJ_LCD_INT) | \ + PIN_ODR_HIGH(GPIOJ_PIN6) | \ + PIN_ODR_HIGH(GPIOJ_PIN7) | \ + PIN_ODR_HIGH(GPIOJ_PIN8) | \ + PIN_ODR_HIGH(GPIOJ_PIN9) | \ + PIN_ODR_HIGH(GPIOJ_PIN10) | \ + PIN_ODR_HIGH(GPIOJ_PIN11) | \ + PIN_ODR_HIGH(GPIOJ_PIN12) | \ + PIN_ODR_HIGH(GPIOJ_PIN13) | \ + PIN_ODR_HIGH(GPIOJ_PIN14) | \ + PIN_ODR_HIGH(GPIOJ_PIN15)) +#define VAL_GPIOJ_AFRL (PIN_AFIO_AF(GPIOJ_PIN0, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN1, 0) | \ + PIN_AFIO_AF(GPIOJ_DSI_TE, 13) | \ + PIN_AFIO_AF(GPIOJ_PIN3, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN4, 0) | \ + PIN_AFIO_AF(GPIOJ_LCD_INT, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN6, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN7, 0)) +#define VAL_GPIOJ_AFRH (PIN_AFIO_AF(GPIOJ_PIN8, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN9, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN10, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN11, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN12, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN13, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN14, 0) | \ + PIN_AFIO_AF(GPIOJ_PIN15, 0)) + +/* + * GPIOK setup: + * + * PK0 - PIN0 (input pullup). + * PK1 - PIN1 (input pullup). + * PK2 - PIN2 (input pullup). + * PK3 - LED4 (output pushpull maximum). + * PK4 - PIN4 (input pullup). + * PK5 - PIN5 (input pullup). + * PK6 - PIN6 (input pullup). + * PK7 - PIN7 (input pullup). + * PK8 - PIN8 (input pullup). + * PK9 - PIN9 (input pullup). + * PK10 - PIN10 (input pullup). + * PK11 - PIN11 (input pullup). + * PK12 - PIN12 (input pullup). + * PK13 - PIN13 (input pullup). + * PK14 - PIN14 (input pullup). + * PK15 - PIN15 (input pullup). + */ +#define VAL_GPIOK_MODER (PIN_MODE_INPUT(GPIOK_PIN0) | \ + PIN_MODE_INPUT(GPIOK_PIN1) | \ + PIN_MODE_INPUT(GPIOK_PIN2) | \ + PIN_MODE_OUTPUT(GPIOK_LED4) | \ + PIN_MODE_INPUT(GPIOK_PIN4) | \ + PIN_MODE_INPUT(GPIOK_PIN5) | \ + PIN_MODE_INPUT(GPIOK_PIN6) | \ + PIN_MODE_INPUT(GPIOK_PIN7) | \ + PIN_MODE_INPUT(GPIOK_PIN8) | \ + PIN_MODE_INPUT(GPIOK_PIN9) | \ + PIN_MODE_INPUT(GPIOK_PIN10) | \ + PIN_MODE_INPUT(GPIOK_PIN11) | \ + PIN_MODE_INPUT(GPIOK_PIN12) | \ + PIN_MODE_INPUT(GPIOK_PIN13) | \ + PIN_MODE_INPUT(GPIOK_PIN14) | \ + PIN_MODE_INPUT(GPIOK_PIN15)) +#define VAL_GPIOK_OTYPER (PIN_OTYPE_PUSHPULL(GPIOK_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOK_LED4) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOK_PIN15)) +#define VAL_GPIOK_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOK_PIN0) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN1) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN2) | \ + PIN_OSPEED_HIGH(GPIOK_LED4) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN4) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN5) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN6) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN7) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN8) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN9) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN10) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN11) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN12) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN13) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN14) | \ + PIN_OSPEED_VERYLOW(GPIOK_PIN15)) +#define VAL_GPIOK_PUPDR (PIN_PUPDR_PULLUP(GPIOK_PIN0) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN1) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOK_LED4) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN4) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN5) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN6) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN7) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN8) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN9) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN10) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN11) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN12) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN13) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN14) | \ + PIN_PUPDR_PULLUP(GPIOK_PIN15)) +#define VAL_GPIOK_ODR (PIN_ODR_HIGH(GPIOK_PIN0) | \ + PIN_ODR_HIGH(GPIOK_PIN1) | \ + PIN_ODR_HIGH(GPIOK_PIN2) | \ + PIN_ODR_HIGH(GPIOK_LED4) | \ + PIN_ODR_HIGH(GPIOK_PIN4) | \ + PIN_ODR_HIGH(GPIOK_PIN5) | \ + PIN_ODR_HIGH(GPIOK_PIN6) | \ + PIN_ODR_HIGH(GPIOK_PIN7) | \ + PIN_ODR_HIGH(GPIOK_PIN8) | \ + PIN_ODR_HIGH(GPIOK_PIN9) | \ + PIN_ODR_HIGH(GPIOK_PIN10) | \ + PIN_ODR_HIGH(GPIOK_PIN11) | \ + PIN_ODR_HIGH(GPIOK_PIN12) | \ + PIN_ODR_HIGH(GPIOK_PIN13) | \ + PIN_ODR_HIGH(GPIOK_PIN14) | \ + PIN_ODR_HIGH(GPIOK_PIN15)) +#define VAL_GPIOK_AFRL (PIN_AFIO_AF(GPIOK_PIN0, 0) | \ + PIN_AFIO_AF(GPIOK_PIN1, 0) | \ + PIN_AFIO_AF(GPIOK_PIN2, 0) | \ + PIN_AFIO_AF(GPIOK_LED4, 0) | \ + PIN_AFIO_AF(GPIOK_PIN4, 0) | \ + PIN_AFIO_AF(GPIOK_PIN5, 0) | \ + PIN_AFIO_AF(GPIOK_PIN6, 0) | \ + PIN_AFIO_AF(GPIOK_PIN7, 0)) +#define VAL_GPIOK_AFRH (PIN_AFIO_AF(GPIOK_PIN8, 0) | \ + PIN_AFIO_AF(GPIOK_PIN9, 0) | \ + PIN_AFIO_AF(GPIOK_PIN10, 0) | \ + PIN_AFIO_AF(GPIOK_PIN11, 0) | \ + PIN_AFIO_AF(GPIOK_PIN12, 0) | \ + PIN_AFIO_AF(GPIOK_PIN13, 0) | \ + PIN_AFIO_AF(GPIOK_PIN14, 0) | \ + PIN_AFIO_AF(GPIOK_PIN15, 0)) + +#if !defined(_FROM_ASM_) +#ifdef __cplusplus +extern "C" { +#endif + void boardInit(void); + void setBoardConfigurationOverrides(void); + void setPinConfigurationOverrides(void); + void setSerialConfigurationOverrides(void); + void setSdCardConfigurationOverrides(void); +#ifdef __cplusplus +} +#endif +#endif /* _FROM_ASM_ */ + +#endif /* BOARD_H */ diff --git a/firmware/config/boards/Prometheus/board.mk b/firmware/config/boards/Prometheus/board.mk new file mode 100644 index 0000000000..c59b67e9b6 --- /dev/null +++ b/firmware/config/boards/Prometheus/board.mk @@ -0,0 +1,17 @@ +# List of all the board related files. +BOARDSRC = $(PROJECT_DIR)/config/boards/Prometheus/board.c +BOARDSRC_CPP = $(PROJECT_DIR)/config/boards/Prometheus/board_configuration.cpp + +# Required include directories +BOARDINC = $(PROJECT_DIR)/config/boards/Prometheus + +# Override LD script +ifeq ($(USE_BOOTLOADER),yes) + # include Prometheus bootloader code + BOOTLOADERINC= $(PROJECT_DIR)/bootloader/Prometheus +endif + +LDSCRIPT= $(PROJECT_DIR)/config/boards/Prometheus/STM32F469xI.ld + +# Override DEFAULT_ENGINE_TYPE +DDEFS += -DDEFAULT_ENGINE_TYPE=PROMETHEUS_DEFAULTS -DSTM32F469xx diff --git a/firmware/config/boards/Prometheus/board_configuration.cpp b/firmware/config/boards/Prometheus/board_configuration.cpp new file mode 100644 index 0000000000..7db0b11065 --- /dev/null +++ b/firmware/config/boards/Prometheus/board_configuration.cpp @@ -0,0 +1,279 @@ +/** + * @file boards/Prometheus/board_configuration.h + * + * @brief In this file we can override engine_configuration.cpp. + * + * @date Apr 22, 2017 + * @author andreika, (c) 2017 + */ + +#include "main.h" +#include "engine.h" +#include "engine_math.h" +#include "allsensors.h" +#include "fsio_impl.h" +#include "engine_configuration.h" + +EXTERN_ENGINE; + +#ifdef STM32F469xx +static bool is469 = true; +#else +static bool is469 = false; +#endif + + +static void setPrometheusDefaults(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + setOperationMode(engineConfiguration, FOUR_STROKE_CRANK_SENSOR/*FOUR_STROKE_CAM_SENSOR*/); + engineConfiguration->trigger.type = TT_TOOTHED_WHEEL_60_2; + //engineConfiguration->useOnlyRisingEdgeForTrigger = true; + setAlgorithm(LM_SPEED_DENSITY PASS_ENGINE_PARAMETER_SUFFIX); + + engineConfiguration->specs.cylindersCount = 4; + engineConfiguration->specs.firingOrder = FO_1_3_4_2; + + engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK + engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; + engineConfiguration->injectionMode = IM_SIMULTANEOUS;//IM_BATCH;// IM_SEQUENTIAL; + + engineConfiguration->globalTriggerAngleOffset = 114; // the end of 19th tooth? + + engineConfiguration->specs.displacement = 1.645; + engineConfiguration->injector.flow = 200; + + engineConfiguration->cranking.baseFuel = 5; // ??? + engineConfiguration->crankingChargeAngle = 70; + engineConfiguration->cranking.rpm = 600; + + engineConfiguration->rpmHardLimit = 8500; // yes, 3k. let's play it safe for now + + engineConfiguration->map.sensor.type = MT_MPX4250; + + engineConfiguration->idleStepperReactionTime = 10; + engineConfiguration->stepperDirectionPinMode = OM_INVERTED; + engineConfiguration->useLinearCltSensor = true; + + //engineConfiguration->canNbcType = CAN_BUS_NBC_BMW; + engineConfiguration->canNbcType = CAN_BUS_MAZDA_RX8; + engineConfiguration->canReadEnabled = true; + engineConfiguration->canWriteEnabled = false; + + engineConfiguration->tpsMin = convertVoltageTo10bitADC(0.250); + engineConfiguration->tpsMax = convertVoltageTo10bitADC(4.538); + engineConfiguration->tpsErrorDetectionTooLow = -10; // -10% open + engineConfiguration->tpsErrorDetectionTooHigh = 110; // 110% open + + boardConfiguration->mapMinBufferLength = 4; + +} + +void setPinConfigurationOverrides(void) { +#if 0 + boardConfiguration->injectionPins[0] = is469 ? GPIOD_9 : GPIOB_14; // #1 + boardConfiguration->injectionPins[1] = is469 ? GPIOD_15 : GPIOC_7; // #2 + boardConfiguration->injectionPins[2] = is469 ? GPIOD_10 : GPIOB_15; // #3 + boardConfiguration->injectionPins[3] = is469 ? GPIOD_14 : GPIOC_6; // #4 + + boardConfiguration->ignitionPins[0] = GPIOA_10; + boardConfiguration->ignitionPins[1] = GPIOA_9; + boardConfiguration->ignitionPins[2] = GPIOA_8; + boardConfiguration->ignitionPins[3] = GPIOA_11; + boardConfiguration->ignitionPinMode = OM_INVERTED; + + enginePins.startInjectionPins(); + enginePins.startIgnitionPins(); + + for (int i = 0; i < 4; i++) { + enginePins.injectors[i].setLow(); + enginePins.coils[i].setLow(); + } +#else + palSetPadMode(GPIOA, 10, PAL_MODE_OUTPUT_PUSHPULL); + palWritePad(GPIOA, 10, true); + palSetPadMode(GPIOA, 9, PAL_MODE_OUTPUT_PUSHPULL); + palWritePad(GPIOA, 9, true); + palSetPadMode(GPIOA, 8, PAL_MODE_OUTPUT_PUSHPULL); + palWritePad(GPIOA, 8, true); + palSetPadMode(GPIOA, 11, PAL_MODE_OUTPUT_PUSHPULL); + palWritePad(GPIOA, 11, true); + + palSetPadMode(GPIOD, 9, PAL_MODE_OUTPUT_PUSHPULL); + palWritePad(GPIOD, 9, false); + palSetPadMode(GPIOD, 15, PAL_MODE_OUTPUT_PUSHPULL); + palWritePad(GPIOD, 15, false); + palSetPadMode(GPIOD, 10, PAL_MODE_OUTPUT_PUSHPULL); + palWritePad(GPIOD, 10, false); + palSetPadMode(GPIOD, 14, PAL_MODE_OUTPUT_PUSHPULL); + palWritePad(GPIOD, 14, false); +#endif +} + +void setSerialConfigurationOverrides(void) { + boardConfiguration->useSerialPort = true; + engineConfiguration->binarySerialTxPin = GPIOA_0; + engineConfiguration->binarySerialRxPin = GPIOA_1; + engineConfiguration->consoleSerialTxPin = GPIOA_0; + engineConfiguration->consoleSerialRxPin = GPIOA_1; + boardConfiguration->tunerStudioSerialSpeed = SERIAL_SPEED; + engineConfiguration->uartConsoleSerialSpeed = SERIAL_SPEED; +} + +void setSdCardConfigurationOverrides(void) { + boardConfiguration->is_enabled_spi_1 = true; + engineConfiguration->sdCardSpiDevice = SPI_DEVICE_1; + boardConfiguration->sdCardCsPin = GPIOA_2; + boardConfiguration->isSdCardEnabled = true; +} + +/** + * @brief Board-specific configuration code overrides. + * @todo Add your board-specific code, if any. + */ +void setBoardConfigurationOverrides(void) { + // give a chance to trigger SWD programmer... Wait for 2 secs (=2000 ms). + // TODO: remove it when the bootloader is ready + Delay(2000); + + setSerialConfigurationOverrides(); + + engineConfiguration->vbattAdcChannel = EFI_ADC_13; + engineConfiguration->tpsAdcChannel = is469 ? EFI_ADC_7 : EFI_ADC_14; + engineConfiguration->map.sensor.hwChannel = is469 ? EFI_ADC_8 : EFI_ADC_15; + engineConfiguration->clt.adcChannel = EFI_ADC_3; + engineConfiguration->iat.adcChannel = EFI_ADC_4; + engineConfiguration->afr.hwChannel = is469 ? EFI_ADC_9 : EFI_ADC_8; + + engineConfiguration->adcVcc = ADC_VCC; + + engineConfiguration->baroSensor.hwChannel = EFI_ADC_NONE; + engineConfiguration->pedalPositionChannel = EFI_ADC_NONE; + + boardConfiguration->injectionPins[0] = is469 ? GPIOD_9 : GPIOB_14; // #1 + boardConfiguration->injectionPins[1] = is469 ? GPIOD_15 : GPIOC_7; // #2 + boardConfiguration->injectionPins[2] = is469 ? GPIOD_10 : GPIOB_15; // #3 + boardConfiguration->injectionPins[3] = is469 ? GPIOD_14 : GPIOC_6; // #4 + + boardConfiguration->ignitionPins[0] = GPIOA_10; + boardConfiguration->ignitionPins[1] = GPIOA_9; + boardConfiguration->ignitionPins[2] = GPIOA_8; + boardConfiguration->ignitionPins[3] = GPIOA_11; + boardConfiguration->ignitionPinMode = OM_INVERTED; + + engineConfiguration->vbattDividerCoeff = ((float) (2 + 10)) / 2; + engineConfiguration->clt.config.bias_resistor = 2700; + engineConfiguration->iat.config.bias_resistor = 2700; + + boardConfiguration->useStepperIdle = true; + boardConfiguration->idle.stepperDirectionPin = is469 ? GPIOB_14 : GPIOB_12; + boardConfiguration->idle.stepperStepPin = is469 ? GPIOB_15 : GPIOB_13; + engineConfiguration->stepperEnablePin = GPIO_UNASSIGNED; + engineConfiguration->stepperEnablePinMode = OM_DEFAULT; + + engineConfiguration->communicationPin = GPIO_UNASSIGNED;// GPIOA_13; // yellow LED + engineConfiguration->runningPin = GPIOA_13; //GPIOA_13; // yellow LED + engineConfiguration->fatalErrorPin = GPIOA_13; + engineConfiguration->warninigPin = GPIO_UNASSIGNED; + engineConfiguration->configResetPin = GPIO_UNASSIGNED; + + boardConfiguration->triggerInputPins[0] = is469 ? GPIOA_5 : GPIOA_5; + boardConfiguration->triggerInputPins[1] = GPIO_UNASSIGNED; + boardConfiguration->triggerInputPins[2] = GPIO_UNASSIGNED; + engineConfiguration->camInput = is469 ? GPIOE_9 : GPIOA_6; + + boardConfiguration->tachOutputPin = GPIOC_8; + boardConfiguration->tachOutputPinMode = OM_DEFAULT; + boardConfiguration->fuelPumpPin = is469 ? GPIOD_6 : GPIOB_7; + boardConfiguration->fuelPumpPinMode = OM_DEFAULT; + boardConfiguration->mainRelayPin = is469 ? GPIOB_11 : GPIOB_2; + boardConfiguration->mainRelayPinMode = OM_DEFAULT; + boardConfiguration->fanPin = GPIOC_9; + boardConfiguration->fanPinMode = OM_DEFAULT; + boardConfiguration->malfunctionIndicatorPin = GPIOC_1; + boardConfiguration->malfunctionIndicatorPinMode = OM_DEFAULT; + + // starter block + setFsio(0, (is469 ? GPIOB_10 : GPIOB_1), STARTER_BLOCK PASS_ENGINE_PARAMETER_SUFFIX); + + + // debug pad + boardConfiguration->triggerSimulatorPins[0] = GPIOD_8; + boardConfiguration->triggerSimulatorPinModes[0] = OM_DEFAULT; + + // not used + engineConfiguration->dizzySparkOutputPin = GPIO_UNASSIGNED; + engineConfiguration->externalKnockSenseAdc = EFI_ADC_NONE; + engineConfiguration->displayMode = DM_NONE; + boardConfiguration->HD44780_rs = GPIO_UNASSIGNED; + boardConfiguration->HD44780_e = GPIO_UNASSIGNED; + boardConfiguration->HD44780_db4 = GPIO_UNASSIGNED; + boardConfiguration->HD44780_db5 = GPIO_UNASSIGNED; + boardConfiguration->HD44780_db6 = GPIO_UNASSIGNED; + boardConfiguration->HD44780_db7 = GPIO_UNASSIGNED; + boardConfiguration->digitalPotentiometerChipSelect[0] = GPIO_UNASSIGNED; + boardConfiguration->digitalPotentiometerChipSelect[1] = GPIO_UNASSIGNED; + boardConfiguration->digitalPotentiometerChipSelect[2] = GPIO_UNASSIGNED; + boardConfiguration->digitalPotentiometerChipSelect[3] = GPIO_UNASSIGNED; + boardConfiguration->triggerSimulatorPins[1] = GPIO_UNASSIGNED; + boardConfiguration->triggerSimulatorPins[2] = GPIO_UNASSIGNED; + boardConfiguration->triggerSimulatorPinModes[1] = OM_DEFAULT; + boardConfiguration->triggerSimulatorPinModes[2] = OM_DEFAULT; + boardConfiguration->vehicleSpeedSensorInputPin = GPIO_UNASSIGNED; + boardConfiguration->boardTestModeJumperPin = GPIO_UNASSIGNED; + boardConfiguration->acRelayPin = GPIO_UNASSIGNED; + boardConfiguration->digitalPotentiometerSpiDevice = SPI_NONE; + boardConfiguration->max31855spiDevice = SPI_NONE; + + ///////////////////////////////////////////////////////// + + boardConfiguration->is_enabled_spi_1 = true; + boardConfiguration->is_enabled_spi_2 = false; + boardConfiguration->is_enabled_spi_3 = true; + + boardConfiguration->spi1mosiPin = GPIOB_5; + engineConfiguration->spi1MosiMode = 0; // PAL_STM32_OTYPE_PUSHPULL + boardConfiguration->spi1misoPin = GPIOB_4; + engineConfiguration->spi1MisoMode = 0; // PAL_STM32_OTYPE_PUSHPULL + boardConfiguration->spi1sckPin = GPIOB_3; + engineConfiguration->spi1SckMode = 0; // PAL_STM32_OTYPE_PUSHPULL + + boardConfiguration->spi3mosiPin = GPIOC_12; + engineConfiguration->spi3MosiMode = PAL_STM32_OTYPE_OPENDRAIN; // 4 + boardConfiguration->spi3misoPin = GPIOC_11; + engineConfiguration->spi3MisoMode = PAL_STM32_PUPDR_PULLUP; // 32 + boardConfiguration->spi3sckPin = GPIOC_10; + engineConfiguration->spi3SckMode = PAL_STM32_OTYPE_OPENDRAIN; // 4 + + engineConfiguration->hip9011SpiDevice = SPI_DEVICE_3; + boardConfiguration->hip9011CsPin = is469 ? GPIOD_1 : GPIOD_2; + boardConfiguration->hip9011CsPinMode = OM_OPENDRAIN; + boardConfiguration->hip9011IntHoldPin = GPIOC_14; + boardConfiguration->hip9011IntHoldPinMode = OM_OPENDRAIN; + engineConfiguration->hipOutputChannel = EFI_ADC_10; // PC0 + boardConfiguration->isHip9011Enabled = true; + + engineConfiguration->cj125SpiDevice = SPI_DEVICE_3; + engineConfiguration->cj125ua = is469 ? EFI_ADC_9 : EFI_ADC_8; + engineConfiguration->cj125ur = EFI_ADC_12; + boardConfiguration->cj125CsPin = GPIOA_15; + engineConfiguration->cj125CsPinMode = OM_OPENDRAIN; + boardConfiguration->wboHeaterPin = GPIOC_13; + boardConfiguration->o2heaterPin = GPIOC_13; + //boardConfiguration->isCJ125Enabled = true; + boardConfiguration->isCJ125Enabled = false; + + boardConfiguration->canDeviceMode = CD_USE_CAN1; + boardConfiguration->canTxPin = GPIOB_9; + boardConfiguration->canRxPin = GPIOB_8; + + //!!!!!!!!!!!!!!! +#if 1 + setPrometheusDefaults(PASS_ENGINE_PARAMETER_SIGNATURE); +#endif + + //!!!!!!!!!!!!!!!!!!! + //engineConfiguration->silentTriggerError = true; + + //!!!!!!!!!!!!! + //engineConfiguration->isEngineChartEnabled = false; +} + diff --git a/firmware/config/boards/Prometheus/efifeatures.h b/firmware/config/boards/Prometheus/efifeatures.h new file mode 100644 index 0000000000..8b323fc324 --- /dev/null +++ b/firmware/config/boards/Prometheus/efifeatures.h @@ -0,0 +1,115 @@ +/** + * @file boards/Prometheus/efifeatures.h + * + * @brief In this header we can override efifeatures.h. + * + * @date Apr 22, 2017 + * @author andreika, (c) 2017 + */ + +#include "../../stm32f4ems/efifeatures.h" + +#ifndef EFIFEATURES_PROMETHEUS_H_ +#define EFIFEATURES_PROMETHEUS_H_ + +#undef EFI_RTC +#define EFI_RTC FALSE + +#undef EFI_POTENTIOMETER +#define EFI_POTENTIOMETER FALSE + +#undef EFI_MAX_31855 +#define EFI_MAX_31855 FALSE + +#undef EFI_HD44780_LCD +#define EFI_HD44780_LCD FALSE + +#undef EFI_USB_SERIAL +#define EFI_USB_SERIAL FALSE + +#undef MMC_CARD_SPI +#define MMC_CARD_SPI SPID1 + +#define ADC_CHANNEL_VREF ADC_CHANNEL_IN14 + +#undef EFI_CONSOLE_UART_DEVICE +//#define EFI_CONSOLE_UART_DEVICE (&SD4) + +#undef EFI_UART_GPS +#define EFI_UART_GPS FALSE + +//!!!!!!!!!!!!!!!!! +#undef TS_UART_DMA_MODE +#define TS_UART_DMA_MODE TRUE + +#undef TS_DMA_UART_DEVICE +#define TS_DMA_UART_DEVICE (&UARTD4) + +#undef TS_SERIAL_UART_DEVICE +#define TS_SERIAL_UART_DEVICE (&SD4) + +#undef EFI_BLUETOOTH_SETUP +#define EFI_BLUETOOTH_SETUP TRUE + +#undef SERIAL_SPEED +#define SERIAL_SPEED 115200 + +#undef EFI_CONSOLE_TX_PORT +#define EFI_CONSOLE_TX_PORT GPIOA +#undef EFI_CONSOLE_TX_PIN +#define EFI_CONSOLE_TX_PIN 0 +#undef EFI_CONSOLE_RX_PORT +#define EFI_CONSOLE_RX_PORT GPIOA +#undef EFI_CONSOLE_RX_PIN +#define EFI_CONSOLE_RX_PIN 1 +#undef EFI_CONSOLE_AF +#define EFI_CONSOLE_AF 8 + +#undef TS_SERIAL_AF +#define TS_SERIAL_AF 8 + +#undef LED_WARNING_BRAIN_PIN +#define LED_WARNING_BRAIN_PIN GPIOA_13 + +#undef LED_ERROR_BRAIN_PIN +#define LED_ERROR_BRAIN_PIN GPIOA_13 +#undef LED_ERROR_PORT +#define LED_ERROR_PORT GPIOA +#undef LED_ERROR_PIN +#define LED_ERROR_PIN 13 + +#undef EFI_WARNING_LED +#define EFI_WARNING_LED FALSE + +#undef CONSOLE_MODE_SWITCH_PORT +#define CONSOLE_MODE_SWITCH_PORT GPIOE // ??? + +#undef CONFIG_RESET_SWITCH_PORT +#define CONFIG_RESET_SWITCH_PORT GPIOE // ??? + +//!!!!!!!!!!!!!!! +//#undef EFI_INTERNAL_ADC +//#define EFI_INTERNAL_ADC FALSE + +#undef ADC_VCC +#define ADC_VCC 3.275f + +#undef EFI_MAIN_RELAY_CONTROL +#define EFI_MAIN_RELAY_CONTROL TRUE + +#undef EFI_MEMS +#define EFI_MEMS FALSE + +#undef EFI_IDLE_INCREMENTAL_PID_CIC +#define EFI_IDLE_INCREMENTAL_PID_CIC TRUE + +#undef EFI_CJ125_DIRECTLY_CONNECTED_UR +#define EFI_CJ125_DIRECTLY_CONNECTED_UR TRUE + +#define RPM_LOW_THRESHOLD 60 + +#define EFI_PRINT_ERRORS_AS_WARNINGS TRUE + +#define EFI_NARROW_EGO_AVERAGING TRUE + +#endif /* EFIFEATURES_PROMETHEUS_H_ */ diff --git a/firmware/config/boards/Prometheus/halconf.h b/firmware/config/boards/Prometheus/halconf.h new file mode 100644 index 0000000000..f0e63d6a75 --- /dev/null +++ b/firmware/config/boards/Prometheus/halconf.h @@ -0,0 +1,38 @@ +/** + * @file boards/Prometheus/halconf.h + * + * @brief In this header we can override halconf.h. + * + * @date Apr 22, 2017 + * @author andreika, (c) 2017 + */ + +#include "mcuconf.h" +#include "../../stm32f4ems/halconf.h" + +#ifndef _HALCONF_PROMETHEUS_H_ +#define _HALCONF_PROMETHEUS_H_ + +#undef HAL_USE_I2C +#define HAL_USE_I2C FALSE + +#undef HAL_USE_SERIAL_USB +#define HAL_USE_SERIAL_USB FALSE + +#undef HAL_USE_SERIAL +#define HAL_USE_SERIAL FALSE + +#undef HAL_USE_UART +#if TS_UART_DMA_MODE +#define HAL_USE_UART TRUE +#else +#define HAL_USE_UART FALSE +#endif + +#undef HAL_USE_USB +#define HAL_USE_USB FALSE + +#undef HAL_USE_USB_MSD +#define HAL_USE_USB_MSD FALSE + +#endif /* _HALCONF_PROMETHEUS_H_ */ diff --git a/firmware/config/boards/Prometheus/mcuconf.h b/firmware/config/boards/Prometheus/mcuconf.h new file mode 100644 index 0000000000..8ec8244ccb --- /dev/null +++ b/firmware/config/boards/Prometheus/mcuconf.h @@ -0,0 +1,70 @@ +/** + * @file boards/Prometheus/mcuconf.h + * + * @brief In this header we can override mcuconf.h. + * + * @date Apr 22, 2017 + * @author andreika, (c) 2017 + */ + +#include "../../stm32f4ems/mcuconf.h" + +#ifndef _MCUCONF_PROMETHEUS_H_ +#define _MCUCONF_PROMETHEUS_H_ + +//#define STM32_ADC_ADCPRE ADC_CCR_ADCPRE_DIV2 // ADC_CCR_ADCPRE_DIV4 + +/* +#undef STM32_PLLN_VALUE +#define STM32_PLLN_VALUE 360 // 180 MHz + +#undef STM32_PLLI2SR_VALUE +#define STM32_PLLI2SR_VALUE 4 + +#undef STM32_PLLSAIP_VALUE +#define STM32_PLLSAIP_VALUE 4 +*/ + + +#undef STM32_LSE_ENABLED +#define STM32_LSE_ENABLED FALSE + +#undef STM32_RTCSEL +#define STM32_RTCSEL STM32_RTCSEL_HSEDIV // STM32_RTCSEL_LSI + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 FALSE + +#undef STM32_SERIAL_USE_USART2 +#define STM32_SERIAL_USE_USART2 FALSE + +#undef STM32_SERIAL_USE_USART3 +#define STM32_SERIAL_USE_USART3 FALSE + +#undef STM32_SERIAL_USE_UART4 +#if TS_UART_DMA_MODE +#define STM32_SERIAL_USE_UART4 FALSE +#else +#define STM32_SERIAL_USE_UART4 TRUE +#endif + +#undef STM32_UART_USE_USART3 +#define STM32_UART_USE_USART3 FALSE + +#undef STM32_UART_USE_UART4 +#define STM32_UART_USE_UART4 TRUE + +//#undef STM32_USB_USE_OTG1 +//#define STM32_USB_USE_OTG1 FALSE + +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 FALSE + +#undef STM32_SPI_USE_SPI2 +#define STM32_SPI_USE_SPI2 FALSE + + +//#undef STM32_CAN_CAN1_IRQ_PRIORITY +//#define STM32_CAN_CAN1_IRQ_PRIORITY 4 + +#endif /* _MCUCONF_PROMETHEUS_H_ */ diff --git a/firmware/config/boards/Prometheus/readme.txt b/firmware/config/boards/Prometheus/readme.txt new file mode 100644 index 0000000000..7f966e80d8 --- /dev/null +++ b/firmware/config/boards/Prometheus/readme.txt @@ -0,0 +1,4 @@ +Prometheus board. + +http://rusefi.com/forum/viewtopic.php?f=4&t=1215 +https://github.com/andreika-git/rusefi/ diff --git a/firmware/config/boards/Prometheus/rules.ld b/firmware/config/boards/Prometheus/rules.ld new file mode 100644 index 0000000000..30e3da7e9c --- /dev/null +++ b/firmware/config/boards/Prometheus/rules.ld @@ -0,0 +1,8 @@ +/* Stack rules inclusion.*/ +INCLUDE rules_stacks.ld + +/* Code rules inclusion.*/ +INCLUDE rules_code.ld + +/* Data rules inclusion.*/ +INCLUDE rules_data.ld diff --git a/firmware/config/boards/Prometheus/rules_code.ld b/firmware/config/boards/Prometheus/rules_code.ld new file mode 100644 index 0000000000..542aa68788 --- /dev/null +++ b/firmware/config/boards/Prometheus/rules_code.ld @@ -0,0 +1,77 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +ENTRY(Reset_Handler) + +SECTIONS +{ + .vectors : ALIGN(16) + { + KEEP(*(.vectors)) + } > VECTORS_FLASH AT > VECTORS_FLASH_LMA + + .xtors : ALIGN(4) + { + __init_array_start = .; + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + __init_array_end = .; + __fini_array_start = .; + KEEP(*(.fini_array)) + KEEP(*(SORT(.fini_array.*))) + __fini_array_end = .; + } > XTORS_FLASH AT > XTORS_FLASH_LMA + + .text ALIGN(16) : ALIGN(16) + { + *(.text) + *(.text.*) + *(.glue_7t) + *(.glue_7) + *(.gcc*) + } > TEXT_FLASH AT > TEXT_FLASH_LMA + + .rodata : ALIGN(4) + { + . = ALIGN(4); + __rodata_base__ = .; + *(.rodata) + *(.rodata.*) + . = ALIGN(4); + __rodata_end__ = .; + } > RODATA_FLASH AT > RODATA_FLASH_LMA + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > VARIOUS_FLASH AT > VARIOUS_FLASH_LMA + + .ARM.exidx : { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > VARIOUS_FLASH AT > VARIOUS_FLASH_LMA + + .eh_frame_hdr : + { + *(.eh_frame_hdr) + } > VARIOUS_FLASH AT > VARIOUS_FLASH_LMA + + .eh_frame : ONLY_IF_RO + { + *(.eh_frame) + } > VARIOUS_FLASH AT > VARIOUS_FLASH_LMA +} diff --git a/firmware/config/boards/Prometheus/rules_data.ld b/firmware/config/boards/Prometheus/rules_data.ld new file mode 100644 index 0000000000..1d1e38fdb8 --- /dev/null +++ b/firmware/config/boards/Prometheus/rules_data.ld @@ -0,0 +1,273 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +__ram0_start__ = ORIGIN(ram0); +__ram0_size__ = LENGTH(ram0); +__ram0_end__ = __ram0_start__ + __ram0_size__; +__ram1_start__ = ORIGIN(ram1); +__ram1_size__ = LENGTH(ram1); +__ram1_end__ = __ram1_start__ + __ram1_size__; +__ram2_start__ = ORIGIN(ram2); +__ram2_size__ = LENGTH(ram2); +__ram2_end__ = __ram2_start__ + __ram2_size__; +__ram3_start__ = ORIGIN(ram3); +__ram3_size__ = LENGTH(ram3); +__ram3_end__ = __ram3_start__ + __ram3_size__; +__ram4_start__ = ORIGIN(ram4); +__ram4_size__ = LENGTH(ram4); +__ram4_end__ = __ram4_start__ + __ram4_size__; +__ram5_start__ = ORIGIN(ram5); +__ram5_size__ = LENGTH(ram5); +__ram5_end__ = __ram5_start__ + __ram5_size__; +__ram6_start__ = ORIGIN(ram6); +__ram6_size__ = LENGTH(ram6); +__ram6_end__ = __ram6_start__ + __ram6_size__; +__ram7_start__ = ORIGIN(ram7); +__ram7_size__ = LENGTH(ram7); +__ram7_end__ = __ram7_start__ + __ram7_size__; + +ENTRY(Reset_Handler) + +SECTIONS +{ + .data : ALIGN(4) + { + . = ALIGN(4); + PROVIDE(_textdata = LOADADDR(.data)); + PROVIDE(_data = .); + _textdata_start = LOADADDR(.data); + _data_start = .; + *(.data) + *(.data.*) + *(.ramtext) + . = ALIGN(4); + PROVIDE(_edata = .); + _data_end = .; + } > DATA_RAM AT > DATA_RAM_LMA + + .bss (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + _bss_start = .; + *(.bss) + *(.bss.*) + *(COMMON) + . = ALIGN(4); + _bss_end = .; + PROVIDE(end = .); + } > BSS_RAM + + .ram0_init : ALIGN(4) + { + . = ALIGN(4); + __ram0_init_text__ = LOADADDR(.ram0_init); + __ram0_init__ = .; + KEEP(*(.ram0_init)) + KEEP(*(.ram0_init.*)) + . = ALIGN(4); + } > ram0 AT > RAM_INIT_FLASH_LMA + + .ram0 (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + __ram0_clear__ = .; + *(.ram0_clear) + *(.ram0_clear.*) + . = ALIGN(4); + __ram0_noinit__ = .; + *(.ram0) + *(.ram0.*) + . = ALIGN(4); + __ram0_free__ = .; + } > ram0 + + .ram1_init : ALIGN(4) + { + . = ALIGN(4); + __ram1_init_text__ = LOADADDR(.ram1_init); + __ram1_init__ = .; + KEEP(*(.ram1_init)) + KEEP(*(.ram1_init.*)) + . = ALIGN(4); + } > ram1 AT > RAM_INIT_FLASH_LMA + + .ram1 (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + __ram1_clear__ = .; + *(.ram1_clear) + *(.ram1_clear.*) + . = ALIGN(4); + __ram1_noinit__ = .; + *(.ram1) + *(.ram1.*) + . = ALIGN(4); + __ram1_free__ = .; + } > ram1 + + .ram2_init : ALIGN(4) + { + . = ALIGN(4); + __ram2_init_text__ = LOADADDR(.ram2_init); + __ram2_init__ = .; + KEEP(*(.ram2_init)) + KEEP(*(.ram2_init.*)) + . = ALIGN(4); + } > ram2 AT > RAM_INIT_FLASH_LMA + + .ram2 (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + __ram2_clear__ = .; + *(.ram2_clear) + *(.ram2_clear.*) + . = ALIGN(4); + __ram2_noinit__ = .; + *(.ram2) + *(.ram2.*) + . = ALIGN(4); + __ram2_free__ = .; + } > ram2 + + .ram3_init : ALIGN(4) + { + . = ALIGN(4); + __ram3_init_text__ = LOADADDR(.ram3_init); + __ram3_init__ = .; + KEEP(*(.ram3_init)) + KEEP(*(.ram3_init.*)) + . = ALIGN(4); + } > ram3 AT > RAM_INIT_FLASH_LMA + + .ram3 (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + __ram3_clear__ = .; + *(.ram3_clear) + *(.ram3_clear.*) + . = ALIGN(4); + __ram3_noinit__ = .; + *(.ram3) + *(.ram3.*) + . = ALIGN(4); + __ram3_free__ = .; + } > ram3 + + .ram4_init : ALIGN(4) + { + . = ALIGN(4); + __ram4_init_text__ = LOADADDR(.ram4_init); + __ram4_init__ = .; + KEEP(*(.ram4_init)) + KEEP(*(.ram4_init.*)) + . = ALIGN(4); + } > ram4 AT > RAM_INIT_FLASH_LMA + + .ram4 (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + __ram4_clear__ = .; + *(.ram4_clear) + *(.ram4_clear.*) + . = ALIGN(4); + __ram4_noinit__ = .; + *(.ram4) + *(.ram4.*) + . = ALIGN(4); + __ram4_free__ = .; + } > ram4 + + .ram5_init : ALIGN(4) + { + . = ALIGN(4); + __ram5_init_text__ = LOADADDR(.ram5_init); + __ram5_init__ = .; + KEEP(*(.ram5_init)) + KEEP(*(.ram5_init.*)) + . = ALIGN(4); + } > ram5 AT > RAM_INIT_FLASH_LMA + + .ram5 (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + __ram5_clear__ = .; + *(.ram5_clear) + *(.ram5_clear.*) + . = ALIGN(4); + __ram5_noinit__ = .; + *(.ram5) + *(.ram5.*) + . = ALIGN(4); + __ram5_free__ = .; + } > ram5 + + .ram6_init : ALIGN(4) + { + . = ALIGN(4); + __ram6_init_text__ = LOADADDR(.ram6_init); + __ram6_init__ = .; + KEEP(*(.ram6_init)) + KEEP(*(.ram6_init.*)) + . = ALIGN(4); + } > ram6 AT > RAM_INIT_FLASH_LMA + + .ram6 (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + __ram6_clear__ = .; + *(.ram6_clear) + *(.ram6_clear.*) + . = ALIGN(4); + __ram6_noinit__ = .; + *(.ram6) + *(.ram6.*) + . = ALIGN(4); + __ram6_free__ = .; + } > ram6 + + .ram7_init : ALIGN(4) + { + . = ALIGN(4); + __ram7_init_text__ = LOADADDR(.ram7_init); + __ram7_init__ = .; + KEEP(*(.ram7_init)) + KEEP(*(.ram7_init.*)) + . = ALIGN(4); + } > ram7 AT > RAM_INIT_FLASH_LMA + + .ram7 (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + __ram7_clear__ = .; + *(.ram7_clear) + *(.ram7_clear.*) + . = ALIGN(4); + __ram7_noinit__ = .; + *(.ram7) + *(.ram7.*) + . = ALIGN(4); + __ram7_free__ = .; + } > ram7 + + /* The default heap uses the (statically) unused part of a RAM section.*/ + .heap (NOLOAD) : + { + . = ALIGN(8); + __heap_base__ = .; + . = ORIGIN(HEAP_RAM) + LENGTH(HEAP_RAM); + __heap_end__ = .; + } > HEAP_RAM +} diff --git a/firmware/config/boards/Prometheus/rules_stacks.ld b/firmware/config/boards/Prometheus/rules_stacks.ld new file mode 100644 index 0000000000..2d1c6907dc --- /dev/null +++ b/firmware/config/boards/Prometheus/rules_stacks.ld @@ -0,0 +1,38 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +SECTIONS +{ + /* Special section for exceptions stack.*/ + .mstack : + { + . = ALIGN(8); + __main_stack_base__ = .; + . += __main_stack_size__; + . = ALIGN(8); + __main_stack_end__ = .; + } > MAIN_STACK_RAM + + /* Special section for process stack.*/ + .pstack : + { + __process_stack_base__ = .; + __main_thread_stack_base__ = .; + . += __process_stack_size__; + . = ALIGN(8); + __process_stack_end__ = .; + __main_thread_stack_end__ = .; + } > PROCESS_STACK_RAM +}