diff --git a/board-package-source/libraries/ArdVoice/LICENSE.md b/board-package-source/libraries/ArdVoice/LICENSE.md
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/LICENSE.md
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
diff --git a/board-package-source/libraries/ArdVoice/README.md b/board-package-source/libraries/ArdVoice/README.md
new file mode 100644
index 0000000..aa66002
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/README.md
@@ -0,0 +1,47 @@
+# ArdVoice: A library to play audio (voices) on the Arduboy
+By @igvina
+## Features:
+### Voice library:
+* Play compressed audio (works better with voices)
+* Good speed but can cause slowdowns on 60 fps games
+* Configurable speed (from 0.8 to 1.4)
+
+### Voice compressor (vocoder):
+* Works with wav (only 8000 Hz, mono, 1 byte PCM_UNSIGNED). I recommend Audacity to convert to this format
+* Configurable quality (from 0 to 10), default is 4
+* Good compression (from 88 bytes/s to 530 bytes/s)
+
+## Video:
+
+
+
+## Usage:
+### Vocoder (v0.2):
+* Syntax: java -jar vocoder0.2.jar audio.wav [-options]
+ * options:
+ * -q VALUE Quality (0 - 10) default: 4
+ * -gs SKETCH_FOLDER Generate sketch code
+ * -v Play compressed voice
+ * -anp PREFIX Array name prefix
+ * -ver Show vocoder version
+
+ * examples:
+
+ "java -jar vocoder.jar dog.wav -gs DOG -v -q 6"
+ "java -jar vocoder.jar merry.wav -v"
+
+### Voice library (v0.1):
+
+* Install the ArdVoice library in the Arduino IDE.
+* Add in .ino file:
+ * `#include `
+ * `ArdVoice ardvoice;`
+* To play voice call function: ardvoice.playVoice (...).
+
+#### Methods:
+* `void playVoice(const char *audio);`
+* `void playVoice(const char *audio, uint16_t startTime, uint16_t endTime, float speed);`
+* `void stopVoice();`
+* `boolean isVoicePlaying();`
diff --git a/board-package-source/libraries/ArdVoice/examples/Sample1-Basic/Sample1-Basic.ino b/board-package-source/libraries/ArdVoice/examples/Sample1-Basic/Sample1-Basic.ino
new file mode 100644
index 0000000..895aa10
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/examples/Sample1-Basic/Sample1-Basic.ino
@@ -0,0 +1,27 @@
+#include
+#include
+#include "voices.h"
+
+Arduboy2 arduboy;
+ArdVoice ardvoice;
+
+void setup() {
+ arduboy.begin();
+ arduboy.setFrameRate(30);
+ ardvoice.playVoice(merry_q6);
+}
+
+
+void loop() {
+ if (!(arduboy.nextFrame()))
+ return;
+
+ if (arduboy.pressed(B_BUTTON)){
+ ardvoice.playVoice(merry_q6);
+ }
+
+ if (arduboy.pressed(A_BUTTON)){
+ ardvoice.stopVoice();
+ }
+}
+
diff --git a/board-package-source/libraries/ArdVoice/examples/Sample1-Basic/voices.h b/board-package-source/libraries/ArdVoice/examples/Sample1-Basic/voices.h
new file mode 100644
index 0000000..22fe661
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/examples/Sample1-Basic/voices.h
@@ -0,0 +1,534 @@
+const uint8_t merry_q6[] PROGMEM ={
+0x1c, 0x64, 0x12, 0x00, 0x42, 0x39, 0x42, 0x38, 0x37, 0x43, 0x19, 0x00, 0x2b, 0x33, 0x43, 0x3f,
+0x3d, 0x35, 0x7e, 0x00, 0x2c, 0x3e, 0x37, 0x47, 0x40, 0x41, 0x00, 0x00, 0x27, 0x3a, 0x46, 0x3d,
+0x47, 0x46, 0x07, 0x0c, 0x92, 0xf3, 0x0e, 0x6e, 0x20, 0x51, 0x07, 0x1d, 0x89, 0x7f, 0x19, 0x65,
+0x27, 0x54, 0x22, 0x19, 0x80, 0x65, 0x27, 0x5a, 0x37, 0x4a, 0x18, 0x0b, 0x8e, 0x7c, 0x17, 0x69,
+0x29, 0x4d, 0x2f, 0x03, 0x9a, 0xf0, 0x18, 0x69, 0x1a, 0x50, 0x02, 0x02, 0x9d, 0xe5, 0x01, 0x6e,
+0x21, 0x4b, 0x01, 0x01, 0x8f, 0x6a, 0x33, 0x4c, 0x38, 0x43, 0x07, 0x02, 0x85, 0x6d, 0x27, 0x59,
+0x27, 0x56, 0x07, 0x27, 0x81, 0x7c, 0x13, 0x6c, 0x1e, 0x5b, 0x23, 0x44, 0x83, 0x73, 0x20, 0x62,
+0x27, 0x58, 0x23, 0x22, 0x8d, 0xfd, 0x0e, 0x67, 0x2d, 0x52, 0x18, 0x09, 0x9b, 0xe9, 0x0f, 0x4b,
+0x4b, 0x3a, 0x17, 0x07, 0x96, 0xfa, 0x20, 0x5e, 0x2f, 0x47, 0x17, 0x00, 0x97, 0xfe, 0x1b, 0x66,
+0x2d, 0x41, 0x03, 0x01, 0x95, 0xf9, 0x21, 0x51, 0x3d, 0x43, 0x07, 0x02, 0x94, 0xf6, 0x15, 0x5a,
+0x36, 0x4a, 0x0c, 0x11, 0x95, 0xe7, 0x91, 0xf8, 0x16, 0x55, 0x3d, 0x37, 0x89, 0x7f, 0x10, 0x69,
+0x23, 0x51, 0x3d, 0x43, 0x8b, 0x79, 0x14, 0x66, 0x25, 0x52, 0x3d, 0x41, 0x8b, 0x76, 0x18, 0x66,
+0x1c, 0x57, 0x3d, 0x36, 0x87, 0x6d, 0x1b, 0x64, 0x23, 0x53, 0x3d, 0x33, 0x8e, 0x7c, 0x13, 0x68,
+0x27, 0x4a, 0x3d, 0x34, 0x88, 0x76, 0x12, 0x6f, 0x1f, 0x50, 0x3d, 0x2d, 0x8b, 0xfe, 0x07, 0x77,
+0x1b, 0x50, 0x3e, 0x37, 0x83, 0x70, 0x11, 0x71, 0x1f, 0x55, 0x3e, 0x2f, 0x82, 0x68, 0x1b, 0x62,
+0x2d, 0x51, 0x3d, 0x4a, 0x85, 0x6b, 0x1b, 0x63, 0x31, 0x4c, 0x3d, 0x3c, 0x86, 0x6f, 0x19, 0x66,
+0x2c, 0x4d, 0x3d, 0x21, 0x90, 0x7f, 0x10, 0x71, 0x20, 0x4c, 0x3e, 0x13, 0x90, 0xff, 0x0c, 0x74,
+0x15, 0x56, 0x3e, 0x0a, 0x95, 0xef, 0x8a, 0x79, 0x1c, 0x50, 0x08, 0x08, 0x92, 0x71, 0x33, 0x46,
+0x3d, 0x43, 0x08, 0x24, 0x94, 0xfe, 0x20, 0x57, 0x34, 0x47, 0x5a, 0x31, 0x91, 0xfc, 0x17, 0x68,
+0x1d, 0x54, 0x10, 0x41, 0x8b, 0x65, 0x30, 0x61, 0x1b, 0x52, 0x07, 0x3b, 0x8e, 0x68, 0x31, 0x63,
+0x1f, 0x4c, 0x59, 0x3f, 0x8f, 0x6f, 0x2d, 0x5f, 0x2a, 0x45, 0x59, 0x4f, 0x8e, 0x75, 0x29, 0x56,
+0x34, 0x42, 0x59, 0x4d, 0x8a, 0x6e, 0x2b, 0x55, 0x34, 0x48, 0x59, 0x54, 0x86, 0x6a, 0x2b, 0x53,
+0x37, 0x46, 0x59, 0x3e, 0x8a, 0x6e, 0x1c, 0x63, 0x31, 0x47, 0x07, 0x2b, 0x87, 0x6c, 0x18, 0x6b,
+0x2a, 0x4a, 0x59, 0x37, 0x90, 0x77, 0x1f, 0x66, 0x23, 0x4d, 0x10, 0x38, 0x92, 0xfb, 0x1e, 0x5e,
+0x27, 0x4d, 0x10, 0x21, 0x94, 0x7e, 0x25, 0x58, 0x2f, 0x45, 0x1a, 0x0f, 0x91, 0x78, 0x2e, 0x45,
+0x3e, 0x44, 0x09, 0x0b, 0x91, 0x72, 0x2b, 0x54, 0x33, 0x49, 0x09, 0x17, 0x99, 0xf4, 0x25, 0x4f,
+0x2f, 0x4b, 0x36, 0x1f, 0x97, 0xf2, 0x19, 0x58, 0x34, 0x47, 0x09, 0x35, 0x96, 0xf8, 0x1e, 0x55,
+0x33, 0x47, 0x09, 0x34, 0x96, 0xf1, 0x0a, 0x64, 0x2d, 0x49, 0x36, 0x34, 0x94, 0xf8, 0x0d, 0x6f,
+0x22, 0x4d, 0x09, 0x42, 0x94, 0xf4, 0x0f, 0x64, 0x2d, 0x48, 0x35, 0x39, 0x90, 0x78, 0x24, 0x59,
+0x33, 0x46, 0x09, 0x3a, 0x8c, 0x6e, 0x29, 0x59, 0x2c, 0x4d, 0x35, 0x36, 0x91, 0xfe, 0x1b, 0x68,
+0x21, 0x4f, 0x08, 0x35, 0x92, 0xfc, 0x17, 0x62, 0x29, 0x4a, 0x09, 0x2d, 0x94, 0xf8, 0x16, 0x58,
+0x35, 0x47, 0x09, 0x18, 0x99, 0xe7, 0x84, 0x69, 0x31, 0x45, 0x10, 0x13, 0x9a, 0xe8, 0x83, 0x6a,
+0x29, 0x48, 0x35, 0x0c, 0x96, 0xf5, 0x18, 0x58, 0x33, 0x45, 0x0e, 0x03, 0x92, 0xfe, 0x11, 0x61,
+0x2a, 0x4b, 0x09, 0x03, 0x8e, 0x6f, 0x26, 0x53, 0x29, 0x53, 0x07, 0x1a, 0x98, 0xef, 0x03, 0x6f,
+0x23, 0x49, 0x07, 0x54, 0x92, 0xf4, 0x0f, 0x5b, 0x32, 0x43, 0x07, 0x5f, 0x89, 0x7d, 0x16, 0x60,
+0x2e, 0x47, 0x22, 0x5c, 0x88, 0x79, 0x1a, 0x56, 0x2f, 0x48, 0x22, 0x43, 0x8f, 0xf8, 0x10, 0x57,
+0x31, 0x46, 0x07, 0x3c, 0x8c, 0x7f, 0x16, 0x5e, 0x26, 0x4d, 0x07, 0x30, 0x86, 0x6a, 0x24, 0x60,
+0x28, 0x4a, 0x07, 0x2d, 0x8d, 0x7e, 0x12, 0x5e, 0x31, 0x49, 0x07, 0x1b, 0x97, 0xef, 0x03, 0x67,
+0x28, 0x4e, 0x22, 0x13, 0x97, 0xf6, 0x1b, 0x46, 0x4c, 0x3b, 0x59, 0x0d, 0x97, 0x7f, 0x3a, 0x37,
+0x46, 0x3e, 0x23, 0x07, 0x9c, 0xe8, 0x0a, 0x4b, 0x4b, 0x3a, 0x5a, 0x04, 0x95, 0x7f, 0x1e, 0x49,
+0x47, 0x40, 0x67, 0x03, 0x9a, 0xf3, 0x14, 0x5d, 0x33, 0x45, 0x63, 0x02, 0x95, 0x7c, 0x1c, 0x65,
+0x22, 0x50, 0x07, 0x02, 0x94, 0xfa, 0x15, 0x5c, 0x29, 0x4b, 0x08, 0x14, 0x94, 0xee, 0x87, 0x72,
+0x1f, 0x51, 0x5b, 0x1b, 0x92, 0xf2, 0x84, 0x71, 0x1e, 0x53, 0x00, 0x17, 0x94, 0xf9, 0x16, 0x57,
+0x30, 0x4b, 0x23, 0x19, 0x90, 0x71, 0x28, 0x58, 0x2e, 0x48, 0x5a, 0x0f, 0x9a, 0xe7, 0x85, 0x6e,
+0x28, 0x49, 0x23, 0x0c, 0x9d, 0xe3, 0x91, 0x7f, 0x1d, 0x4b, 0x23, 0x05, 0x9f, 0xde, 0x96, 0x77,
+0x29, 0x48, 0x3f, 0x05, 0x9e, 0xe1, 0x8f, 0x71, 0x2a, 0x46, 0x23, 0x0c, 0x89, 0x70, 0x08, 0xfc,
+0x18, 0x50, 0x23, 0x02, 0x98, 0xef, 0x0d, 0x6b, 0x24, 0x4d, 0x23, 0x01, 0x97, 0xf8, 0x1e, 0x57,
+0x36, 0x45, 0x22, 0x00, 0x97, 0xef, 0x0e, 0x5e, 0x34, 0x47, 0x17, 0x00, 0x8c, 0x71, 0x38, 0x3f,
+0x39, 0x4b, 0x23, 0x00, 0x84, 0x6e, 0x31, 0x44, 0x3a, 0x49, 0x22, 0x00, 0x00, 0x64, 0x34, 0x45,
+0x3c, 0x48, 0x08, 0x04, 0x08, 0xf7, 0x20, 0x5d, 0x3f, 0x43, 0x15, 0x30, 0x19, 0x73, 0x29, 0x55,
+0x35, 0x4b, 0x07, 0x36, 0x03, 0x6d, 0x18, 0x61, 0x25, 0x59, 0x23, 0x2b, 0x8d, 0x7e, 0x17, 0x6b,
+0x1d, 0x56, 0x3e, 0x12, 0x97, 0xf1, 0x14, 0x5b, 0x2d, 0x4c, 0x3d, 0x05, 0x99, 0xef, 0x0f, 0x58,
+0x3c, 0x3f, 0x00, 0x01, 0x91, 0xff, 0x13, 0x50, 0x44, 0x40, 0x3d, 0x01, 0x85, 0x76, 0x15, 0x50,
+0x3b, 0x3d, 0x07, 0x24, 0x05, 0x74, 0x29, 0x4c, 0x3c, 0x48, 0x4c, 0x59, 0x01, 0x75, 0x20, 0x56,
+0x37, 0x48, 0x0c, 0x4f, 0x82, 0x72, 0x20, 0x5c, 0x29, 0x51, 0x22, 0x32, 0x80, 0x73, 0x17, 0x60,
+0x26, 0x56, 0x0c, 0x1a, 0x87, 0x7a, 0x15, 0x56, 0x33, 0x50, 0x0c, 0x07, 0x94, 0xf2, 0x13, 0x49,
+0x47, 0x41, 0x30, 0x02, 0x89, 0x75, 0x18, 0x50, 0x34, 0x49, 0x0c, 0x04, 0x91, 0x7d, 0x1a, 0x67,
+0x1e, 0x50, 0x0c, 0x34, 0x85, 0x6f, 0x2d, 0x4e, 0x35, 0x4c, 0x14, 0x76, 0x09, 0x66, 0x17, 0x5f,
+0x2c, 0x4b, 0x65, 0x60, 0x8c, 0xf9, 0x02, 0x6c, 0x23, 0x4e, 0x65, 0x71, 0x88, 0x72, 0x25, 0x47,
+0x3c, 0x44, 0x64, 0x85, 0x03, 0x61, 0x34, 0x54, 0x23, 0x4d, 0x65, 0x7e, 0x87, 0x77, 0x13, 0x71,
+0x13, 0x53, 0x65, 0x6c, 0x88, 0x73, 0x28, 0x57, 0x2b, 0x4c, 0x28, 0x66, 0x00, 0x5b, 0x32, 0x55,
+0x33, 0x49, 0x0a, 0x55, 0x06, 0x54, 0x42, 0x4c, 0x26, 0x55, 0x29, 0x58, 0x0c, 0x57, 0x35, 0x56,
+0x29, 0x4b, 0x65, 0x4d, 0x15, 0x46, 0x3b, 0x59, 0x31, 0x4d, 0x28, 0x49, 0x22, 0x4b, 0x2b, 0x53,
+0x39, 0x51, 0x28, 0x44, 0x1d, 0x57, 0x2e, 0x52, 0x31, 0x48, 0x10, 0x31, 0x27, 0x5c, 0x39, 0x50,
+0x30, 0x3f, 0x04, 0x16, 0x13, 0x73, 0x26, 0x4f, 0x37, 0x3e, 0x04, 0x09, 0x84, 0x70, 0x2c, 0x4c,
+0x37, 0x49, 0x29, 0x1e, 0x86, 0x70, 0x24, 0x50, 0x34, 0x4f, 0x0b, 0x66, 0x00, 0x71, 0x1c, 0x60,
+0x2b, 0x4e, 0x0b, 0x73, 0x06, 0x66, 0x2e, 0x4b, 0x36, 0x4d, 0x0b, 0x6a, 0x09, 0x63, 0x28, 0x4d,
+0x36, 0x51, 0x2b, 0x4c, 0x10, 0x5d, 0x2e, 0x4d, 0x37, 0x4e, 0x23, 0x3a, 0x0c, 0x6f, 0x25, 0x53,
+0x30, 0x53, 0x1a, 0x22, 0x18, 0x65, 0x36, 0x4b, 0x37, 0x57, 0x11, 0x0f, 0x11, 0x75, 0x20, 0x60,
+0x2e, 0x4b, 0x0b, 0x3b, 0x1f, 0x66, 0x2a, 0x57, 0x29, 0x49, 0x29, 0x60, 0x09, 0x6a, 0x25, 0x5b,
+0x20, 0x56, 0x47, 0x77, 0x06, 0x67, 0x1e, 0x60, 0x27, 0x54, 0x0a, 0x48, 0x04, 0x6a, 0x23, 0x59,
+0x25, 0x59, 0x0a, 0x07, 0x8d, 0x71, 0x27, 0x50, 0x1e, 0x5c, 0x17, 0x06, 0x12, 0x56, 0x37, 0x55,
+0x20, 0x4f, 0x22, 0x40, 0x1a, 0x6b, 0x2e, 0x53, 0x3a, 0x44, 0x22, 0x7f, 0x09, 0x68, 0x28, 0x5c,
+0x27, 0x50, 0x22, 0xb5, 0x04, 0x69, 0x2a, 0x58, 0x2e, 0x4b, 0x59, 0xbc, 0x04, 0x5e, 0x36, 0x57,
+0x2f, 0x4a, 0x11, 0x98, 0x84, 0x60, 0x34, 0x56, 0x32, 0x44, 0x59, 0x8b, 0x8a, 0x76, 0x22, 0x56,
+0x36, 0x43, 0x59, 0x55, 0x93, 0xf7, 0x1a, 0x4f, 0x41, 0x3c, 0x59, 0x33, 0x93, 0xf9, 0x15, 0x67,
+0x1d, 0x51, 0x58, 0x1c, 0x92, 0x7d, 0x18, 0x69, 0x16, 0x57, 0x59, 0x14, 0x93, 0xfd, 0x16, 0x72,
+0x09, 0x5e, 0x59, 0x0d, 0x92, 0x76, 0x36, 0x43, 0x2a, 0x52, 0x23, 0x0b, 0x93, 0x7f, 0x29, 0x4a,
+0x33, 0x48, 0x57, 0x07, 0x8e, 0x77, 0x18, 0x5f, 0x28, 0x50, 0x58, 0x07, 0x8a, 0x68, 0x23, 0x63,
+0x28, 0x4b, 0x22, 0x06, 0x8f, 0x6d, 0x36, 0x4f, 0x33, 0x47, 0x23, 0x06, 0x83, 0x64, 0x2c, 0x5c,
+0x2b, 0x49, 0x01, 0x09, 0x82, 0xf5, 0x11, 0x75, 0x17, 0x5f, 0x15, 0x4c, 0x84, 0xf9, 0x07, 0x70,
+0x1e, 0x58, 0x24, 0x66, 0x09, 0x6a, 0x22, 0x5d, 0x21, 0x5b, 0x3d, 0x78, 0x0d, 0x6e, 0x21, 0x60,
+0x22, 0x54, 0x3d, 0x81, 0x0c, 0x68, 0x21, 0x60, 0x26, 0x56, 0x3d, 0x7d, 0x05, 0x68, 0x29, 0x5c,
+0x1a, 0x5f, 0x3d, 0x9d, 0x08, 0x61, 0x2e, 0x55, 0x27, 0x57, 0x3e, 0x8b, 0x09, 0x63, 0x2f, 0x5a,
+0x25, 0x57, 0x3e, 0x75, 0x06, 0x67, 0x29, 0x5f, 0x1e, 0x5c, 0x3e, 0x83, 0x0c, 0x61, 0x2a, 0x5c,
+0x28, 0x53, 0x3e, 0x6c, 0x07, 0x64, 0x27, 0x5f, 0x2b, 0x4f, 0x3d, 0x69, 0x04, 0x65, 0x29, 0x5d,
+0x29, 0x4f, 0x3d, 0x5c, 0x02, 0x63, 0x2b, 0x5b, 0x27, 0x51, 0x3d, 0x4a, 0x83, 0x72, 0x18, 0x66,
+0x1e, 0x55, 0x3d, 0x39, 0x82, 0x73, 0x15, 0x64, 0x1f, 0x53, 0x3d, 0x3c, 0x03, 0x69, 0x1f, 0x5b,
+0x20, 0x55, 0x3e, 0x3b, 0x05, 0x64, 0x24, 0x5c, 0x27, 0x4d, 0x3e, 0x2c, 0x85, 0x7a, 0x0e, 0x69,
+0x25, 0x4d, 0x3e, 0x32, 0x87, 0x79, 0x14, 0x66, 0x25, 0x53, 0x3e, 0x28, 0x8d, 0xf8, 0x08, 0x6f,
+0x23, 0x52, 0x3e, 0x1e, 0x8f, 0xf3, 0x04, 0x73, 0x1c, 0x55, 0x3d, 0x14, 0x95, 0xe7, 0x8f, 0xfa,
+0x11, 0x5b, 0x3e, 0x12, 0x91, 0xef, 0x83, 0x78, 0x1b, 0x56, 0x3e, 0x12, 0x90, 0xf5, 0x0a, 0x65,
+0x25, 0x55, 0x3e, 0x11, 0x8f, 0xf2, 0x84, 0x78, 0x1e, 0x51, 0x3e, 0x0c, 0x91, 0xee, 0x88, 0x7a,
+0x14, 0x58, 0x3e, 0x0f, 0x8f, 0xf1, 0x83, 0x7a, 0x17, 0x56, 0x3e, 0x0a, 0x91, 0xee, 0x87, 0xfe,
+0x10, 0x5d, 0x3d, 0x07, 0x91, 0xf4, 0x0d, 0x65, 0x1c, 0x5c, 0x3d, 0x04, 0x8f, 0xf3, 0x08, 0x6c,
+0x16, 0x61, 0x3d, 0x03, 0x86, 0x7f, 0x11, 0x68, 0x0f, 0x63, 0x3d, 0x02, 0x84, 0x76, 0x1b, 0x5b,
+0x14, 0x60, 0x3d, 0x01, 0x8b, 0x78, 0x22, 0x55, 0x21, 0x56, 0x28, 0x01, 0x91, 0x75, 0x13, 0x6e,
+0x0b, 0x5c, 0x2a, 0x01, 0x85, 0x5b, 0x21, 0x5a, 0x2e, 0x47, 0x2e, 0x03, 0x8e, 0x7c, 0x18, 0x52,
+0x2b, 0x4c, 0x31, 0x0a, 0x89, 0xfc, 0x12, 0x54, 0x35, 0x3d, 0x30, 0x1a, 0x0f, 0x6b, 0x1a, 0x4c,
+0x2a, 0x47, 0x22, 0x28, 0x20, 0x55, 0x23, 0x3b, 0x2d, 0x4d, 0x22, 0x2c, 0x1a, 0x55, 0x24, 0x3a,
+0x3e, 0x40, 0x23, 0x26, 0x15, 0x54, 0x22, 0x40, 0x39, 0x45, 0x22, 0x22, 0x17, 0x4d, 0x21, 0x3e,
+0x3f, 0x47, 0x22, 0x1f, 0x12, 0x49, 0x27, 0x46, 0x34, 0x4b, 0x22, 0x1a, 0x0c, 0x4b, 0x2f, 0x40,
+0x37, 0x4a, 0x22, 0x1e, 0x05, 0x55, 0x22, 0x51, 0x30, 0x4a, 0x22, 0x12, 0x83, 0x5c, 0x24, 0x4f,
+0x30, 0x4c, 0x20, 0x11, 0x83, 0x5f, 0x1a, 0x54, 0x2a, 0x55, 0x22, 0x10, 0x06, 0x47, 0x38, 0x3a,
+0x31, 0x57, 0x22, 0x0b, 0x84, 0x57, 0x32, 0x37, 0x39, 0x54, 0x22, 0x07, 0x80, 0x57, 0x28, 0x3d,
+0x38, 0x53, 0x24, 0x03, 0x8c, 0x57, 0x37, 0x47, 0x3d, 0x41, 0x22, 0x03, 0x8d, 0x4e, 0x4b, 0x44,
+0x26, 0x52, 0x1d, 0x07, 0x85, 0x41, 0x4b, 0x36, 0x4c, 0x3f, 0x19, 0x31, 0x2c, 0x1b, 0x3a, 0x30,
+0x4b, 0x57, 0x16, 0x71, 0x2f, 0x26, 0x35, 0x25, 0x54, 0x5c, 0x13, 0xd5, 0x28, 0x2c, 0x44, 0x24,
+0x4f, 0x59, 0x13, 0xd1, 0x1a, 0x3b, 0x42, 0x22, 0x52, 0x52, 0x14, 0x71, 0x00, 0x62, 0x2d, 0x3a,
+0x4b, 0x40, 0x50, 0x34, 0x81, 0x5c, 0x35, 0x42, 0x3c, 0x4b, 0x3d, 0x4c, 0x23, 0x28, 0x54, 0x40,
+0x30, 0x56, 0x3e, 0x3f, 0x29, 0x22, 0x5a, 0x42, 0x36, 0x4d, 0x3e, 0x2c, 0x2d, 0x1d, 0x5c, 0x47,
+0x35, 0x4c, 0x3d, 0x21, 0x2b, 0x1a, 0x5d, 0x42, 0x2b, 0x5b, 0x3d, 0x1b, 0x36, 0x17, 0x50, 0x4c,
+0x34, 0x51, 0x80, 0x18, 0x4c, 0x16, 0x39, 0x4f, 0x45, 0x4c, 0x80, 0x12, 0x54, 0x0f, 0x35, 0x4d,
+0x40, 0x4c, 0x80, 0x0f, 0x53, 0x1a, 0x34, 0x48, 0x42, 0x4d, 0x80, 0x0b, 0x69, 0x22, 0x10, 0x3c,
+0x5b, 0x4f, 0x80, 0x09, 0x6e, 0x27, 0x08, 0x31, 0x58, 0x55, 0x18, 0x05, 0x48, 0x1b, 0x10, 0x34,
+0x53, 0x55, 0x18, 0x07, 0x32, 0x32, 0x05, 0x36, 0x42, 0x67, 0x17, 0x0e, 0x37, 0x30, 0x06, 0x30,
+0x46, 0x67, 0x16, 0x29, 0x27, 0x3a, 0x1e, 0x2a, 0x4a, 0x59, 0x14, 0x29, 0x0f, 0x4b, 0x2a, 0x38,
+0x3c, 0x51, 0x14, 0x2f, 0x04, 0x54, 0x2c, 0x43, 0x29, 0x58, 0x14, 0x3a, 0x04, 0x55, 0x2f, 0x41,
+0x2e, 0x53, 0x13, 0x3b, 0x07, 0x41, 0x42, 0x3c, 0x2f, 0x59, 0x12, 0x4d, 0x14, 0x24, 0x56, 0x3c,
+0x34, 0x59, 0x12, 0xa1, 0x18, 0x26, 0x53, 0x40, 0x3a, 0x4e, 0x11, 0xd8, 0x12, 0x34, 0x57, 0x3f,
+0x3a, 0x45, 0x10, 0xf3, 0x18, 0x33, 0x56, 0x46, 0x33, 0x46, 0x10, 0xdd, 0x16, 0x3e, 0x3f, 0x52,
+0x3c, 0x3e, 0x10, 0x7f, 0x12, 0x3c, 0x42, 0x46, 0x42, 0x44, 0x11, 0x30, 0x1b, 0x3c, 0x2c, 0x3c,
+0x41, 0x4b, 0x12, 0x31, 0x20, 0x2f, 0x2e, 0x39, 0x4a, 0x4b, 0x14, 0x16, 0x1d, 0x2a, 0x36, 0x30,
+0x4b, 0x51, 0x15, 0x33, 0x23, 0x2d, 0x31, 0x39, 0x45, 0x4f, 0x15, 0xc5, 0x2b, 0x32, 0x3d, 0x36,
+0x3c, 0x52, 0x15, 0xdb, 0x27, 0x34, 0x45, 0x30, 0x3e, 0x5b, 0x3d, 0xf0, 0x25, 0x3c, 0x39, 0x3a,
+0x42, 0x57, 0x3d, 0xfc, 0x20, 0x3f, 0x39, 0x3e, 0x40, 0x57, 0x15, 0xaa, 0x17, 0x4a, 0x2e, 0x3f,
+0x43, 0x52, 0x3e, 0x77, 0x8c, 0x7c, 0x19, 0x46, 0x43, 0x47, 0x16, 0x48, 0x83, 0x69, 0x21, 0x3f,
+0x4d, 0x42, 0x17, 0x4d, 0x80, 0x61, 0x24, 0x4d, 0x3a, 0x4c, 0x17, 0x7c, 0x14, 0x4e, 0x26, 0x40,
+0x47, 0x4d, 0x17, 0x7e, 0x2a, 0x3b, 0x32, 0x36, 0x40, 0x4f, 0x17, 0x6e, 0x2b, 0x38, 0x29, 0x38,
+0x4f, 0x49, 0x17, 0x47, 0x14, 0x53, 0x26, 0x40, 0x5b, 0x30, 0x22, 0x11, 0x86, 0x64, 0x3d, 0x46,
+0x37, 0x4b, 0x22, 0x09, 0x8c, 0x75, 0x2c, 0x4f, 0x35, 0x4a, 0x22, 0x06, 0x83, 0x62, 0x30, 0x4e,
+0x41, 0x3e, 0x2d, 0x05, 0x11, 0x5d, 0x4d, 0x31, 0x3f, 0x3c, 0x0b, 0x05, 0x21, 0x50, 0x52, 0x3f,
+0x3e, 0x3d, 0x0d, 0x0d, 0x1d, 0x5f, 0x35, 0x3e, 0x3d, 0x39, 0x1d, 0x1e, 0x80, 0x54, 0x3c, 0x3a,
+0x39, 0x4a, 0x1d, 0x5b, 0x06, 0x51, 0x37, 0x36, 0x40, 0x4f, 0x1c, 0x64, 0x0a, 0x52, 0x34, 0x3f,
+0x3e, 0x4b, 0x49, 0x6d, 0x08, 0x52, 0x36, 0x35, 0x4d, 0x43, 0x1c, 0x48, 0x0e, 0x4b, 0x36, 0x33,
+0x54, 0x3d, 0x1c, 0x10, 0x0d, 0x47, 0x3f, 0x31, 0x4b, 0x41, 0x1c, 0x06, 0x10, 0x3f, 0x42, 0x3d,
+0x45, 0x47, 0x29, 0x03, 0x05, 0x4e, 0x35, 0x42, 0x4d, 0x3a, 0x29, 0x04, 0x07, 0x59, 0x35, 0x40,
+0x44, 0x3d, 0x04, 0x03, 0x14, 0x54, 0x3d, 0x47, 0x35, 0x3b, 0x1c, 0x01, 0x21, 0x4c, 0x35, 0x47,
+0x3d, 0x46, 0x2f, 0x02, 0x28, 0x41, 0x40, 0x3e, 0x3e, 0x31, 0x2e, 0x01, 0x2c, 0x38, 0x4b, 0x45,
+0x36, 0x3b, 0x06, 0x01, 0x31, 0x2a, 0x48, 0x3c, 0x3b, 0x46, 0x15, 0x01, 0x3c, 0x17, 0x38, 0x4f,
+0x2b, 0x4a, 0x1e, 0x01, 0x81, 0x3b, 0x39, 0x47, 0x4d, 0x3c, 0x1e, 0x04, 0x87, 0x55, 0x20, 0x54,
+0x46, 0x3b, 0x1c, 0x17, 0x8b, 0x58, 0x41, 0x50, 0x1b, 0x57, 0x1c, 0x38, 0x05, 0x46, 0x49, 0x40,
+0x36, 0x51, 0x1c, 0x40, 0x81, 0x51, 0x52, 0x33, 0x3f, 0x4a, 0x1c, 0x57, 0x81, 0x50, 0x4f, 0x33,
+0x3c, 0x49, 0x1d, 0x27, 0x84, 0x4e, 0x49, 0x3b, 0x3a, 0x4b, 0x29, 0x0b, 0x8f, 0x6f, 0x1d, 0x5d,
+0x37, 0x41, 0x2a, 0x07, 0x8d, 0x61, 0x33, 0x4b, 0x3e, 0x43, 0x0b, 0x05, 0x87, 0x55, 0x46, 0x45,
+0x37, 0x49, 0x29, 0x04, 0x89, 0x57, 0x4e, 0x3d, 0x33, 0x4c, 0x29, 0x04, 0x08, 0x41, 0x4b, 0x4b,
+0x32, 0x47, 0x29, 0x02, 0x12, 0x32, 0x58, 0x4d, 0x22, 0x51, 0x1d, 0x01, 0x2e, 0x1c, 0x52, 0x4f,
+0x3c, 0x45, 0x04, 0x01, 0x33, 0x1e, 0x55, 0x53, 0x2a, 0x49, 0x1d, 0x00, 0x00, 0x3a, 0x54, 0x41,
+0x22, 0x55, 0x22, 0x00, 0x8a, 0x47, 0x45, 0x44, 0x3d, 0x44, 0x23, 0x01, 0x85, 0x36, 0x52, 0x46,
+0x33, 0x4a, 0x22, 0x01, 0x8a, 0x4c, 0x50, 0x39, 0x30, 0x4d, 0x1e, 0x0e, 0x15, 0x35, 0x45, 0x3f,
+0x30, 0x4c, 0x1d, 0x27, 0x1f, 0x4c, 0x23, 0x39, 0x48, 0x3f, 0x1d, 0x1e, 0x11, 0x60, 0x12, 0x4a,
+0x3c, 0x46, 0x1d, 0x1e, 0x15, 0x59, 0x0f, 0x4c, 0x3b, 0x48, 0x1d, 0x1f, 0x1c, 0x4e, 0x1b, 0x41,
+0x45, 0x43, 0x1d, 0x1e, 0x1e, 0x46, 0x23, 0x36, 0x4c, 0x46, 0x1d, 0x1c, 0x17, 0x46, 0x28, 0x35,
+0x55, 0x3d, 0x1c, 0x1d, 0x14, 0x51, 0x21, 0x37, 0x55, 0x3c, 0x1c, 0x18, 0x1c, 0x43, 0x28, 0x34,
+0x57, 0x3d, 0x1c, 0x15, 0x19, 0x41, 0x32, 0x28, 0x54, 0x46, 0x1c, 0x0d, 0x17, 0x2e, 0x47, 0x25,
+0x45, 0x56, 0x1c, 0x07, 0x02, 0x36, 0x5c, 0x25, 0x40, 0x50, 0x1d, 0x03, 0x82, 0x3e, 0x44, 0x3c,
+0x4a, 0x41, 0x1d, 0x02, 0x86, 0x48, 0x3b, 0x3c, 0x54, 0x3a, 0x1d, 0x02, 0x90, 0x5c, 0x30, 0x53,
+0x41, 0x3a, 0x1b, 0x06, 0x85, 0x43, 0x44, 0x44, 0x49, 0x38, 0x18, 0x37, 0x18, 0x35, 0x3a, 0x32,
+0x52, 0x47, 0x3d, 0x8b, 0x24, 0x38, 0x32, 0x33, 0x51, 0x4b, 0x11, 0xbe, 0x20, 0x3f, 0x2e, 0x39,
+0x55, 0x48, 0x33, 0xd8, 0x24, 0x3a, 0x3a, 0x33, 0x4f, 0x4f, 0x34, 0x8c, 0x20, 0x3b, 0x2d, 0x42,
+0x5b, 0x3d, 0x11, 0x48, 0x16, 0x4a, 0x30, 0x39, 0x4b, 0x48, 0x1d, 0x33, 0x1f, 0x31, 0x3c, 0x41,
+0x47, 0x46, 0x1d, 0x30, 0x3b, 0x1d, 0x40, 0x58, 0x44, 0x41, 0x35, 0x24, 0x41, 0x23, 0x41, 0x50,
+0x49, 0x45, 0x80, 0x1f, 0x40, 0x26, 0x4f, 0x4b, 0x3e, 0x4d, 0x80, 0x13, 0x47, 0x15, 0x4a, 0x59,
+0x44, 0x40, 0x80, 0x0f, 0x4f, 0x16, 0x33, 0x5c, 0x51, 0x41, 0x80, 0x09, 0x5a, 0x22, 0x21, 0x49,
+0x54, 0x4a, 0x80, 0x0b, 0x74, 0x33, 0x24, 0x3c, 0x42, 0x49, 0x80, 0x05, 0x72, 0x3b, 0x23, 0x3d,
+0x51, 0x55, 0x14, 0x07, 0x55, 0x15, 0x13, 0x2f, 0x48, 0x5b, 0x15, 0x0b, 0x3d, 0x28, 0x0c, 0x33,
+0x4d, 0x5a, 0x13, 0x2e, 0x2a, 0x40, 0x16, 0x36, 0x3b, 0x5e, 0x11, 0x47, 0x16, 0x54, 0x11, 0x45,
+0x3c, 0x50, 0x11, 0x3c, 0x19, 0x48, 0x18, 0x45, 0x40, 0x4e, 0x35, 0x2f, 0x14, 0x42, 0x26, 0x47,
+0x3a, 0x4e, 0x35, 0x1c, 0x08, 0x45, 0x27, 0x4c, 0x44, 0x42, 0x11, 0x1b, 0x02, 0x51, 0x1d, 0x50,
+0x49, 0x3e, 0x10, 0x42, 0x11, 0x39, 0x34, 0x44, 0x49, 0x42, 0x10, 0x69, 0x1c, 0x31, 0x31, 0x45,
+0x54, 0x47, 0x0e, 0x89, 0x13, 0x38, 0x45, 0x43, 0x3c, 0x51, 0x0d, 0xc1, 0x15, 0x49, 0x38, 0x46,
+0x44, 0x42, 0x0c, 0x96, 0x19, 0x49, 0x2c, 0x4b, 0x40, 0x52, 0x2d, 0xb3, 0x1f, 0x3f, 0x37, 0x49,
+0x40, 0x4a, 0x0d, 0xa3, 0x1d, 0x3a, 0x3f, 0x48, 0x3b, 0x49, 0x0f, 0x18, 0x09, 0x48, 0x2e, 0x43,
+0x4a, 0x3f, 0x35, 0x0e, 0x2a, 0x22, 0x27, 0x3c, 0x45, 0x58, 0x11, 0x16, 0x25, 0x2f, 0x20, 0x3b,
+0x46, 0x58, 0x10, 0x7e, 0x36, 0x1f, 0x27, 0x43, 0x51, 0x51, 0x10, 0xff, 0x27, 0x32, 0x30, 0x4b,
+0x49, 0x41, 0x35, 0xff, 0x2b, 0x38, 0x38, 0x47, 0x42, 0x41, 0x35, 0xe5, 0x26, 0x33, 0x3e, 0x47,
+0x41, 0x48, 0x35, 0xd2, 0x1b, 0x48, 0x30, 0x4a, 0x44, 0x4b, 0x11, 0x9e, 0x14, 0x55, 0x2a, 0x4b,
+0x38, 0x51, 0x12, 0x65, 0x81, 0x69, 0x1f, 0x49, 0x3f, 0x4c, 0x14, 0x34, 0x83, 0x5c, 0x33, 0x42,
+0x3c, 0x4c, 0x14, 0x4d, 0x15, 0x51, 0x1d, 0x49, 0x3c, 0x55, 0x14, 0x82, 0x1e, 0x4b, 0x25, 0x46,
+0x3d, 0x4e, 0x15, 0x7f, 0x26, 0x42, 0x31, 0x42, 0x44, 0x40, 0x15, 0x63, 0x2c, 0x3b, 0x34, 0x34,
+0x4f, 0x3d, 0x1a, 0x2f, 0x1e, 0x4c, 0x2c, 0x38, 0x56, 0x31, 0x34, 0x08, 0x07, 0x59, 0x3a, 0x4a,
+0x30, 0x4e, 0x16, 0x05, 0x1c, 0x48, 0x45, 0x3c, 0x37, 0x4c, 0x02, 0x06, 0x17, 0x44, 0x48, 0x49,
+0x3b, 0x49, 0x17, 0x10, 0x02, 0x62, 0x40, 0x49, 0x33, 0x4f, 0x17, 0x25, 0x0e, 0x61, 0x38, 0x44,
+0x37, 0x44, 0x17, 0x51, 0x81, 0x5d, 0x36, 0x46, 0x2a, 0x50, 0x17, 0x7a, 0x09, 0x4e, 0x3e, 0x47,
+0x2c, 0x53, 0x16, 0xab, 0x0b, 0x5c, 0x28, 0x44, 0x3d, 0x48, 0x16, 0x96, 0x03, 0x5b, 0x29, 0x43,
+0x47, 0x43, 0x17, 0x32, 0x85, 0x64, 0x26, 0x49, 0x44, 0x42, 0x23, 0x11, 0x8b, 0x78, 0x1a, 0x47,
+0x47, 0x37, 0x22, 0x07, 0x83, 0x6b, 0x2d, 0x47, 0x2a, 0x4b, 0x17, 0x05, 0x82, 0x64, 0x40, 0x3a,
+0x3e, 0x4a, 0x02, 0x05, 0x0e, 0x44, 0x53, 0x38, 0x35, 0x4b, 0x02, 0x04, 0x15, 0x2e, 0x61, 0x3e,
+0x34, 0x4f, 0x17, 0x03, 0x18, 0x36, 0x61, 0x43, 0x37, 0x56, 0x0c, 0x02, 0x29, 0x36, 0x56, 0x44,
+0x3a, 0x53, 0x02, 0x01, 0x32, 0x31, 0x4f, 0x45, 0x45, 0x4e, 0x17, 0x00, 0x14, 0x3c, 0x43, 0x47,
+0x32, 0x45, 0x23, 0x02, 0x92, 0x63, 0x34, 0x4a, 0x43, 0x39, 0x59, 0x0a, 0x97, 0xf5, 0x1b, 0x47,
+0x49, 0x39, 0x22, 0x15, 0x97, 0xf1, 0x11, 0x5a, 0x35, 0x43, 0x23, 0x26, 0x94, 0x7e, 0x32, 0x3b,
+0x44, 0x42, 0x23, 0x33, 0x8c, 0x6b, 0x3b, 0x41, 0x32, 0x51, 0x59, 0x2a, 0x89, 0x69, 0x3f, 0x31,
+0x46, 0x4c, 0x23, 0x19, 0x89, 0x6b, 0x41, 0x27, 0x55, 0x44, 0x59, 0x0c, 0x92, 0xf2, 0x10, 0x55,
+0x3c, 0x48, 0x2d, 0x09, 0x8b, 0x6a, 0x3f, 0x2d, 0x53, 0x3e, 0x58, 0x05, 0x04, 0x4b, 0x5f, 0x30,
+0x43, 0x4c, 0x17, 0x05, 0x11, 0x30, 0x5b, 0x48, 0x3a, 0x41, 0x22, 0x04, 0x30, 0x32, 0x50, 0x47,
+0x34, 0x4e, 0x0c, 0x04, 0x3f, 0x27, 0x53, 0x40, 0x32, 0x52, 0x02, 0x02, 0x3e, 0x23, 0x44, 0x5a,
+0x3a, 0x4b, 0x22, 0x01, 0x16, 0x27, 0x54, 0x4a, 0x26, 0x48, 0x29, 0x00, 0x85, 0x42, 0x47, 0x45,
+0x33, 0x4a, 0x2a, 0x00, 0x83, 0x3d, 0x4b, 0x46, 0x33, 0x49, 0x29, 0x00, 0x90, 0x5a, 0x4c, 0x38,
+0x32, 0x4b, 0x26, 0x02, 0x87, 0x50, 0x43, 0x44, 0x2f, 0x49, 0x23, 0x0c, 0x15, 0x3e, 0x38, 0x37,
+0x3e, 0x4a, 0x22, 0x14, 0x12, 0x5a, 0x1e, 0x3c, 0x4a, 0x3a, 0x22, 0x12, 0x0c, 0x62, 0x0c, 0x52,
+0x3d, 0x40, 0x21, 0x0f, 0x11, 0x59, 0x0e, 0x52, 0x3b, 0x47, 0x22, 0x0f, 0x0f, 0x5b, 0x10, 0x52,
+0x3e, 0x41, 0x22, 0x10, 0x14, 0x52, 0x0f, 0x4d, 0x45, 0x43, 0x59, 0x0d, 0x18, 0x4b, 0x0e, 0x47,
+0x4e, 0x45, 0x23, 0x0b, 0x1d, 0x42, 0x14, 0x3f, 0x56, 0x43, 0x22, 0x0b, 0x1a, 0x3d, 0x22, 0x37,
+0x56, 0x44, 0x22, 0x08, 0x0d, 0x39, 0x41, 0x30, 0x44, 0x4e, 0x21, 0x02, 0x0b, 0x29, 0x4e, 0x34,
+0x41, 0x4e, 0x22, 0x01, 0x8b, 0x4f, 0x39, 0x41, 0x4b, 0x3c, 0x23, 0x00, 0x8d, 0x52, 0x33, 0x49,
+0x43, 0x42, 0x23, 0x01, 0x92, 0x64, 0x23, 0x5d, 0x3b, 0x3d, 0x22, 0x01, 0x91, 0x53, 0x48, 0x44,
+0x3f, 0x3d, 0x1b, 0x07, 0x93, 0x70, 0x2b, 0x55, 0x2a, 0x46, 0x13, 0x58, 0x09, 0x40, 0x4b, 0x35,
+0x3c, 0x4d, 0x0d, 0x96, 0x11, 0x38, 0x53, 0x32, 0x41, 0x4c, 0x2d, 0xb8, 0x1a, 0x34, 0x44, 0x3e,
+0x4a, 0x42, 0x2d, 0xc9, 0x1e, 0x41, 0x2e, 0x3f, 0x55, 0x3b, 0x0e, 0x8b, 0x18, 0x4c, 0x29, 0x3a,
+0x46, 0x47, 0x13, 0x4d, 0x19, 0x46, 0x3f, 0x3f, 0x3b, 0x3e, 0x2c, 0x41, 0x33, 0x2a, 0x50, 0x42,
+0x36, 0x46, 0x18, 0x3e, 0x3d, 0x22, 0x5a, 0x51, 0x39, 0x46, 0x80, 0x23, 0x41, 0x15, 0x4f, 0x58,
+0x35, 0x41, 0x80, 0x1c, 0x53, 0x24, 0x49, 0x50, 0x2e, 0x3c, 0x80, 0x0f, 0x53, 0x24, 0x44, 0x4f,
+0x32, 0x3a, 0x80, 0x0d, 0x6a, 0x37, 0x39, 0x4d, 0x3e, 0x3a, 0x80, 0x0c, 0x6f, 0x38, 0x32, 0x46,
+0x40, 0x40, 0x80, 0x0c, 0xfe, 0x47, 0x2f, 0x49, 0x4b, 0x46, 0x80, 0x07, 0xff, 0x47, 0x31, 0x3e,
+0x4c, 0x4e, 0x80, 0x0b, 0x67, 0x29, 0x10, 0x28, 0x40, 0x53, 0x10, 0x09, 0x3a, 0x25, 0x10, 0x2e,
+0x42, 0x6d, 0x0f, 0x10, 0x31, 0x36, 0x02, 0x38, 0x40, 0x6c, 0x0e, 0x15, 0x31, 0x35, 0x04, 0x37,
+0x46, 0x66, 0x0d, 0x12, 0x29, 0x32, 0x0a, 0x40, 0x4b, 0x5c, 0x2d, 0x16, 0x0c, 0x3a, 0x39, 0x4b,
+0x1e, 0x62, 0x0c, 0x17, 0x0b, 0x2e, 0x4e, 0x47, 0x22, 0x5a, 0x0c, 0x1a, 0x86, 0x3d, 0x64, 0x44,
+0x0e, 0x5e, 0x0c, 0x18, 0x82, 0x3a, 0x51, 0x57, 0x19, 0x53, 0x0b, 0x46, 0x85, 0x49, 0x53, 0x48,
+0x20, 0x58, 0x0b, 0xe0, 0x02, 0x3f, 0x60, 0x38, 0x32, 0x52, 0x29, 0xc3, 0x0a, 0x4a, 0x2f, 0x5c,
+0x45, 0x39, 0x0a, 0xec, 0x13, 0x41, 0x32, 0x61, 0x41, 0x37, 0x0a, 0xf9, 0x18, 0x43, 0x2d, 0x65,
+0x3f, 0x38, 0x0a, 0xeb, 0x1e, 0x32, 0x3d, 0x58, 0x41, 0x3f, 0x0b, 0x53, 0x11, 0x31, 0x4e, 0x49,
+0x37, 0x4c, 0x2c, 0x15, 0x11, 0x3f, 0x22, 0x44, 0x5b, 0x3a, 0x0d, 0x32, 0x06, 0x55, 0x2c, 0x45,
+0x46, 0x3b, 0x06, 0x51, 0x11, 0x42, 0x37, 0x48, 0x3d, 0x43, 0x2c, 0xff, 0x22, 0x2f, 0x4c, 0x45,
+0x33, 0x56, 0x0c, 0xff, 0x23, 0x34, 0x2e, 0x55, 0x47, 0x4a, 0x2d, 0xff, 0x2c, 0x33, 0x30, 0x49,
+0x46, 0x54, 0x2d, 0xff, 0x25, 0x3b, 0x31, 0x49, 0x40, 0x54, 0x2e, 0xfa, 0x0f, 0x53, 0x37, 0x47,
+0x36, 0x55, 0x2f, 0x98, 0x04, 0x60, 0x2f, 0x45, 0x3f, 0x4f, 0x0e, 0x72, 0x86, 0x67, 0x30, 0x4a,
+0x2e, 0x55, 0x0f, 0x52, 0x0b, 0x53, 0x25, 0x52, 0x30, 0x5b, 0x0f, 0x52, 0x1d, 0x48, 0x1c, 0x48,
+0x42, 0x57, 0x10, 0x57, 0x29, 0x3d, 0x22, 0x3d, 0x43, 0x5a, 0x10, 0x3b, 0x31, 0x2f, 0x24, 0x39,
+0x54, 0x4b, 0x12, 0x21, 0x2a, 0x38, 0x22, 0x33, 0x5b, 0x3e, 0x1d, 0x05, 0x24, 0x3f, 0x28, 0x40,
+0x47, 0x41, 0x1d, 0x02, 0x33, 0x3c, 0x32, 0x3f, 0x49, 0x53, 0x1c, 0x09, 0x81, 0x5a, 0x42, 0x46,
+0x34, 0x4e, 0x4d, 0x22, 0x8f, 0xf5, 0x0c, 0x65, 0x27, 0x4f, 0x1c, 0x2b, 0x90, 0xf5, 0x08, 0x71,
+0x1a, 0x56, 0x1c, 0x39, 0x8e, 0x7e, 0x16, 0x65, 0x21, 0x50, 0x3b, 0x6d, 0x01, 0x56, 0x39, 0x4c,
+0x25, 0x58, 0x3b, 0xc8, 0x0c, 0x4d, 0x36, 0x42, 0x3a, 0x50, 0x13, 0xf7, 0x13, 0x44, 0x3e, 0x3d,
+0x3c, 0x52, 0x3c, 0x99, 0x07, 0x56, 0x32, 0x40, 0x3f, 0x4c, 0x1c, 0x45, 0x83, 0x5e, 0x39, 0x4a,
+0x2b, 0x50, 0x1c, 0x22, 0x87, 0x6d, 0x34, 0x4e, 0x28, 0x54, 0x0b, 0x19, 0x85, 0x70, 0x35, 0x4f,
+0x2b, 0x5a, 0x5c, 0x19, 0x82, 0x6d, 0x34, 0x51, 0x29, 0x59, 0x5c, 0x15, 0x82, 0x6d, 0x32, 0x51,
+0x2a, 0x59, 0x0b, 0x13, 0x86, 0x72, 0x32, 0x4c, 0x33, 0x51, 0x3d, 0x11, 0x06, 0x4e, 0x65, 0x26,
+0x43, 0x4f, 0x10, 0x05, 0x89, 0x75, 0x32, 0x50, 0x24, 0x5c, 0x16, 0x03, 0x93, 0x78, 0x31, 0x42,
+0x35, 0x4a, 0x54, 0x09, 0x91, 0xff, 0x16, 0x57, 0x30, 0x44, 0x1d, 0x1b, 0x89, 0x61, 0x38, 0x46,
+0x34, 0x49, 0x4e, 0x2a, 0x01, 0x3d, 0x52, 0x49, 0x27, 0x53, 0x1c, 0x3d, 0x85, 0x4d, 0x52, 0x3c,
+0x2c, 0x57, 0x1c, 0x33, 0x00, 0x4b, 0x4c, 0x39, 0x32, 0x57, 0x1c, 0x2a, 0x09, 0x43, 0x4f, 0x33,
+0x37, 0x51, 0x1e, 0x0e, 0x01, 0x44, 0x4b, 0x2f, 0x44, 0x47, 0x2c, 0x04, 0x83, 0x4a, 0x4c, 0x2a,
+0x49, 0x46, 0x0d, 0x02, 0x12, 0x3c, 0x43, 0x3f, 0x31, 0x4e, 0x4d, 0x01, 0x16, 0x35, 0x56, 0x3f,
+0x31, 0x48, 0x29, 0x01, 0x21, 0x30, 0x53, 0x45, 0x30, 0x4c, 0x1d, 0x01, 0x2f, 0x35, 0x48, 0x47,
+0x39, 0x48, 0x1e, 0x01, 0x35, 0x31, 0x49, 0x46, 0x37, 0x4b, 0x00, 0x00, 0x3f, 0x37, 0x52, 0x4b,
+0x38, 0x43, 0x16, 0x00, 0x0a, 0x3f, 0x42, 0x38, 0x40, 0x42, 0x1f, 0x04, 0x94, 0x77, 0x1d, 0x50,
+0x43, 0x40, 0x24, 0x05, 0x8f, 0x66, 0x36, 0x41, 0x3f, 0x45, 0x24, 0x0c, 0x8e, 0x70, 0x2d, 0x46,
+0x3a, 0x4e, 0x15, 0x12, 0x8d, 0x77, 0x26, 0x4b, 0x31, 0x54, 0x23, 0x1e, 0x8e, 0x78, 0x18, 0x62,
+0x20, 0x54, 0x20, 0x0c, 0x92, 0xfd, 0x14, 0x5b, 0x20, 0x55, 0x23, 0x04, 0x91, 0x7f, 0x01, 0x69,
+0x28, 0x4f, 0x23, 0x03, 0x82, 0x58, 0x1b, 0x50, 0x43, 0x43, 0x22, 0x18, 0x03, 0x5b, 0x30, 0x43,
+0x2f, 0x55, 0x23, 0x2b, 0x0a, 0x62, 0x24, 0x4d, 0x2f, 0x4e, 0x23, 0x39, 0x03, 0x6b, 0x18, 0x5d,
+0x28, 0x4f, 0x23, 0x43, 0x06, 0x63, 0x22, 0x54, 0x35, 0x4b, 0x29, 0x2a, 0x84, 0x6c, 0x23, 0x55,
+0x2a, 0x50, 0x29, 0x12, 0x8c, 0x7d, 0x18, 0x57, 0x2f, 0x4b, 0x2a, 0x09, 0x85, 0x67, 0x2d, 0x40,
+0x3c, 0x44, 0x2c, 0x05, 0x02, 0x65, 0x18, 0x4f, 0x31, 0x47, 0x26, 0x0a, 0x80, 0x5b, 0x30, 0x3b,
+0x3e, 0x45, 0x29, 0x1e, 0x03, 0x56, 0x3e, 0x3c, 0x44, 0x3e, 0x20, 0x3f, 0x01, 0x65, 0x26, 0x55,
+0x26, 0x54, 0x51, 0x59, 0x80, 0x6e, 0x22, 0x5d, 0x30, 0x52, 0x29, 0x48, 0x83, 0x6a, 0x21, 0x58,
+0x2b, 0x55, 0x1e, 0x61, 0x85, 0x7a, 0x1b, 0x67, 0x1c, 0x5c, 0x1d, 0x56, 0x86, 0x78, 0x25, 0x57,
+0x27, 0x5a, 0x1d, 0x5a, 0x87, 0x7e, 0x1e, 0x58, 0x31, 0x53, 0x1c, 0x6f, 0x03, 0x69, 0x32, 0x48,
+0x36, 0x50, 0x1c, 0x83, 0x0b, 0x56, 0x3f, 0x43, 0x3e, 0x50, 0x1c, 0x49, 0x0d, 0x47, 0x55, 0x31,
+0x3f, 0x54, 0x29, 0x26, 0x82, 0x5e, 0x34, 0x4f, 0x2f, 0x4f, 0x29, 0x23, 0x86, 0x74, 0x15, 0x6b,
+0x1e, 0x55, 0x29, 0x26, 0x84, 0x72, 0x1a, 0x63, 0x22, 0x58, 0x29, 0x25, 0x85, 0x72, 0x22, 0x51,
+0x2c, 0x53, 0x29, 0x1d, 0x06, 0x69, 0x22, 0x5d, 0x23, 0x55, 0x28, 0x08, 0x82, 0x66, 0x30, 0x51,
+0x23, 0x57, 0x16, 0x0b, 0x05, 0x64, 0x23, 0x57, 0x2a, 0x4e, 0x1a, 0x46, 0x08, 0x68, 0x14, 0x59,
+0x2e, 0x49, 0x11, 0x78, 0x0b, 0x59, 0x22, 0x56, 0x37, 0x43, 0x10, 0x60, 0x05, 0x66, 0x15, 0x69,
+0x26, 0x4a, 0x0f, 0x8f, 0x0d, 0x65, 0x0e, 0x68, 0x28, 0x4a, 0x11, 0x65, 0x05, 0x61, 0x0b, 0x65,
+0x34, 0x42, 0x10, 0x62, 0x0f, 0x54, 0x0d, 0x60, 0x39, 0x45, 0x0f, 0x4b, 0x10, 0x55, 0x0d, 0x68,
+0x31, 0x44, 0x0f, 0x44, 0x0b, 0x5c, 0x0d, 0x6a, 0x33, 0x41, 0x0f, 0x54, 0x0a, 0x58, 0x15, 0x68,
+0x34, 0x3f, 0x10, 0x3e, 0x0f, 0x58, 0x11, 0x65, 0x33, 0x3d, 0x10, 0x2e, 0x09, 0x5d, 0x0b, 0x6a,
+0x33, 0x3c, 0x10, 0x23, 0x09, 0x55, 0x0a, 0x6c, 0x37, 0x3e, 0x10, 0x12, 0x85, 0x6a, 0x82, 0x78,
+0x22, 0x4f, 0x10, 0x0a, 0x94, 0xf5, 0x8f, 0xfa, 0x11, 0x55, 0x11, 0x09, 0x86, 0x5a, 0x10, 0x6d,
+0x37, 0x3f, 0x12, 0x09, 0x8a, 0x5c, 0x18, 0x65, 0x34, 0x45, 0x17, 0x12, 0x39, 0x22, 0x0e, 0x42,
+0x49, 0x5a, 0x43, 0x48, 0x18, 0x47, 0x2e, 0x45, 0x3b, 0x4b, 0x23, 0x4e, 0x00, 0x5c, 0x32, 0x46,
+0x3d, 0x48, 0x18, 0x4f, 0x83, 0x63, 0x34, 0x3e, 0x40, 0x44, 0x16, 0x31, 0x85, 0x62, 0x34, 0x3d,
+0x3a, 0x4b, 0x17, 0x23, 0x86, 0x56, 0x46, 0x37, 0x33, 0x4f, 0x18, 0x1c, 0x8f, 0x6e, 0x2a, 0x49,
+0x3f, 0x3e, 0x19, 0x13, 0x8f, 0x61, 0x3f, 0x44, 0x42, 0x35, 0x19, 0x12, 0x8e, 0x56, 0x54, 0x36,
+0x40, 0x3c, 0x19, 0x10, 0x88, 0x47, 0x56, 0x41, 0x33, 0x41, 0x18, 0x0e, 0x89, 0x4f, 0x49, 0x3f,
+0x3e, 0x3e, 0x17, 0x14, 0x04, 0x43, 0x3a, 0x46, 0x46, 0x3a, 0x16, 0x1f, 0x07, 0x54, 0x21, 0x45,
+0x51, 0x39, 0x19, 0x1d, 0x10, 0x4e, 0x16, 0x4d, 0x56, 0x33, 0x45, 0x18, 0x17, 0x49, 0x12, 0x4b,
+0x53, 0x3c, 0x46, 0x11, 0x19, 0x40, 0x12, 0x4d, 0x51, 0x41, 0x18, 0x08, 0x24, 0x3b, 0x04, 0x44,
+0x4e, 0x53, 0x17, 0x0e, 0x2d, 0x38, 0x04, 0x3a, 0x52, 0x55, 0x3d, 0x39, 0x14, 0x57, 0x0e, 0x4f,
+0x46, 0x45, 0x3f, 0x42, 0x0d, 0x65, 0x09, 0x5a, 0x41, 0x42, 0x3e, 0x65, 0x03, 0x71, 0x09, 0x5b,
+0x3e, 0x42, 0x3d, 0x6f, 0x06, 0x6b, 0x11, 0x55, 0x40, 0x41, 0x3e, 0x86, 0x0e, 0x63, 0x1b, 0x47,
+0x4a, 0x3e, 0x3e, 0x72, 0x06, 0x64, 0x23, 0x49, 0x45, 0x42, 0x16, 0x7b, 0x12, 0x56, 0x2e, 0x40,
+0x45, 0x46, 0x3d, 0x6e, 0x0e, 0x59, 0x28, 0x41, 0x44, 0x45, 0x3f, 0x63, 0x16, 0x50, 0x28, 0x3e,
+0x45, 0x4c, 0x3d, 0x7f, 0x25, 0x47, 0x2e, 0x34, 0x42, 0x53, 0x14, 0x90, 0x21, 0x4c, 0x2c, 0x36,
+0x44, 0x4e, 0x14, 0x8c, 0x27, 0x3e, 0x31, 0x32, 0x3e, 0x59, 0x3e, 0x76, 0x1d, 0x43, 0x33, 0x36,
+0x3f, 0x58, 0x3e, 0x72, 0x19, 0x4c, 0x2d, 0x38, 0x45, 0x54, 0x06, 0x3e, 0x0c, 0x57, 0x2f, 0x37,
+0x46, 0x4f, 0x3e, 0x31, 0x04, 0x5c, 0x33, 0x37, 0x3f, 0x52, 0x3e, 0x21, 0x03, 0x5b, 0x32, 0x33,
+0x46, 0x4e, 0x3e, 0x16, 0x06, 0x50, 0x38, 0x37, 0x3b, 0x56, 0x3e, 0x0e, 0x83, 0x5c, 0x40, 0x2a,
+0x3d, 0x52, 0x15, 0x09, 0x86, 0x6a, 0x2e, 0x38, 0x39, 0x4d, 0x15, 0x07, 0x02, 0x64, 0x31, 0x44,
+0x2f, 0x53, 0x15, 0x04, 0x8b, 0x7d, 0x28, 0x44, 0x36, 0x4d, 0x15, 0x06, 0x02, 0x69, 0x39, 0x41,
+0x32, 0x50, 0x00, 0x04, 0x83, 0x72, 0x38, 0x3f, 0x37, 0x4f, 0x15, 0x03, 0x04, 0x74, 0x39, 0x4b,
+0x33, 0x58, 0x15, 0x02, 0x81, 0xf8, 0x26, 0x5a, 0x2f, 0x58, 0x15, 0x02, 0x01, 0xf8, 0x26, 0x5d,
+0x2f, 0x59, 0x15, 0x02, 0x83, 0xf8, 0x21, 0x5e, 0x2b, 0x5b, 0x00, 0x01, 0x08, 0x79, 0x33, 0x55,
+0x34, 0x57, 0x00, 0x01, 0x07, 0x78, 0x2f, 0x55, 0x3c, 0x52, 0x15, 0x01, 0x8c, 0xfd, 0x19, 0x50,
+0x2c, 0x4f, 0x29, 0x01, 0x89, 0x76, 0x28, 0x3c, 0x3a, 0x49, 0x29, 0x01, 0x88, 0x71, 0x2a, 0x3a,
+0x3f, 0x44, 0x29, 0x00, 0x87, 0x70, 0x2a, 0x37, 0x4a, 0x3d, 0x2a, 0x02, 0x11, 0x63, 0x25, 0x37,
+0x37, 0x4b, 0x2d, 0x02, 0x82, 0x67, 0x20, 0x32, 0x49, 0x48, 0x29, 0x04, 0x8a, 0x6e, 0x21, 0x36,
+0x47, 0x49, 0x26, 0x0b, 0x0e, 0x3d, 0x44, 0x27, 0x42, 0x55, 0x24, 0x11, 0x82, 0x4d, 0x4c, 0x24,
+0x45, 0x4c, 0x23, 0x15, 0x85, 0x4d, 0x54, 0x25, 0x39, 0x53, 0x22, 0x14, 0x03, 0x3a, 0x5c, 0x2b,
+0x2e, 0x5c, 0x22, 0x11, 0x04, 0x40, 0x4c, 0x2d, 0x3c, 0x54, 0x22, 0x10, 0x09, 0x2d, 0x5f, 0x2f,
+0x31, 0x59, 0x22, 0x11, 0x09, 0x37, 0x47, 0x38, 0x44, 0x4c, 0x22, 0x0e, 0x0b, 0x36, 0x4f, 0x28,
+0x43, 0x55, 0x22, 0x0b, 0x0a, 0x3d, 0x49, 0x21, 0x4b, 0x50, 0x23, 0x02, 0x83, 0x3c, 0x5c, 0x2c,
+0x4a, 0x3a, 0x22, 0x00, 0x8f, 0x61, 0x45, 0x38, 0x4c, 0x35, 0x59, 0x00, 0x93, 0x5a, 0x58, 0x2e,
+0x45, 0x3b, 0x22, 0x00, 0x8e, 0x56, 0x5a, 0x34, 0x39, 0x45, 0x22, 0x01, 0x16, 0x40, 0x30, 0x51,
+0x44, 0x3a, 0x23, 0x01, 0x2e, 0x31, 0x41, 0x25, 0x3c, 0x56, 0x01, 0x02, 0x41, 0x4c, 0x44, 0x22,
+0x39, 0x3d, 0x0a, 0x02, 0x3a, 0x45, 0x32, 0x26, 0x41, 0x3d, 0x1d, 0x13, 0x01, 0x66, 0x21, 0x43,
+0x43, 0x3a, 0x1b, 0x32, 0x05, 0x50, 0x47, 0x30, 0x4a, 0x3c, 0x1b, 0x43, 0x00, 0x4c, 0x51, 0x38,
+0x3e, 0x43, 0x1a, 0x49, 0x8d, 0x71, 0x38, 0x48, 0x2d, 0x4c, 0x18, 0x56, 0x83, 0x61, 0x40, 0x4c,
+0x2a, 0x4c, 0x18, 0x49, 0x8c, 0x6c, 0x3e, 0x4b, 0x30, 0x48, 0x17, 0x68, 0x89, 0x61, 0x47, 0x45,
+0x2d, 0x4a, 0x41, 0x9f, 0x05, 0x57, 0x4d, 0x46, 0x30, 0x49, 0x16, 0x94, 0x06, 0x54, 0x52, 0x42,
+0x37, 0x48, 0x16, 0xca, 0x0b, 0x54, 0x43, 0x48, 0x39, 0x41, 0x15, 0xfc, 0x0d, 0x54, 0x45, 0x44,
+0x3a, 0x43, 0x15, 0xe8, 0x13, 0x4b, 0x4d, 0x3a, 0x3d, 0x4d, 0x15, 0xff, 0x17, 0x4b, 0x43, 0x37,
+0x4a, 0x4a, 0x15, 0xe2, 0x1f, 0x44, 0x38, 0x33, 0x54, 0x4f, 0x15, 0xb0, 0x27, 0x3e, 0x33, 0x2b,
+0x53, 0x51, 0x15, 0x6f, 0x25, 0x3d, 0x37, 0x23, 0x52, 0x54, 0x15, 0x09, 0x08, 0x42, 0x3e, 0x38,
+0x5f, 0x2a, 0x17, 0x0a, 0x1d, 0x35, 0x34, 0x39, 0x4b, 0x43, 0x15, 0x31, 0x18, 0x49, 0x26, 0x37,
+0x55, 0x41, 0x15, 0x46, 0x1f, 0x44, 0x26, 0x35, 0x56, 0x45, 0x15, 0x44, 0x19, 0x44, 0x23, 0x41,
+0x52, 0x44, 0x3e, 0x39, 0x12, 0x3e, 0x2a, 0x4d, 0x59, 0x32, 0x3e, 0x27, 0x06, 0x48, 0x22, 0x5a,
+0x56, 0x2c, 0x3e, 0x13, 0x8c, 0x65, 0x16, 0x6c, 0x39, 0x38, 0x3d, 0x10, 0x91, 0x74, 0x08, 0x78,
+0x30, 0x39, 0x3d, 0x12, 0x91, 0x72, 0x0b, 0x72, 0x3a, 0x35, 0x3d, 0x0e, 0x96, 0xf4, 0x8b, 0xf9,
+0x22, 0x41, 0x15, 0x0c, 0x8d, 0x6f, 0x2c, 0x41, 0x53, 0x2d, 0x00, 0x09, 0x83, 0x5a, 0x42, 0x3e,
+0x4d, 0x39, 0x00, 0x0a, 0x83, 0x53, 0x46, 0x40, 0x4b, 0x39, 0x00, 0x03, 0x92, 0x64, 0x53, 0x2d,
+0x4c, 0x3b, 0x29, 0x03, 0x91, 0x62, 0x49, 0x41, 0x3f, 0x3e, 0x3e, 0x01, 0x92, 0x62, 0x44, 0x45,
+0x41, 0x39, 0x00, 0x02, 0x06, 0x2e, 0x60, 0x43, 0x3f, 0x3d, 0x00, 0x0a, 0x22, 0x14, 0x6c, 0x47,
+0x32, 0x4e, 0x0c, 0x15, 0x23, 0x22, 0x66, 0x41, 0x2c, 0x58, 0x17, 0x1a, 0x85, 0x58, 0x34, 0x3a,
+0x51, 0x3a, 0x15, 0x25, 0x07, 0x4c, 0x34, 0x35, 0x50, 0x40, 0x15, 0x2c, 0x0e, 0x42, 0x39, 0x38,
+0x43, 0x47, 0x15, 0x20, 0x0e, 0x37, 0x47, 0x40, 0x3d, 0x43, 0x3e, 0x1f, 0x0c, 0x3d, 0x41, 0x40,
+0x3d, 0x44, 0x3d, 0x1c, 0x01, 0x42, 0x4a, 0x3a, 0x41, 0x42, 0x3d, 0x19, 0x05, 0x3c, 0x4c, 0x3a,
+0x3a, 0x49, 0x3d, 0x19, 0x83, 0x49, 0x47, 0x37, 0x42, 0x42, 0x15, 0x1e, 0x0c, 0x33, 0x4e, 0x38,
+0x3b, 0x4a, 0x15, 0x27, 0x12, 0x3e, 0x3a, 0x38, 0x46, 0x47, 0x16, 0x26, 0x0a, 0x4a, 0x2d, 0x3c,
+0x53, 0x3c, 0x17, 0x25, 0x12, 0x4d, 0x23, 0x3c, 0x5b, 0x36, 0x17, 0x25, 0x1c, 0x3f, 0x25, 0x3b,
+0x5b, 0x39, 0x15, 0x1d, 0x19, 0x3e, 0x1e, 0x43, 0x57, 0x3c, 0x18, 0x14, 0x27, 0x3c, 0x0d, 0x36,
+0x52, 0x53, 0x17, 0x1b, 0x2b, 0x35, 0x1b, 0x2d, 0x54, 0x51, 0x17, 0x27, 0x27, 0x3c, 0x1f, 0x2c,
+0x4c, 0x54, 0x17, 0x20, 0x20, 0x3b, 0x26, 0x30, 0x4d, 0x4e, 0x17, 0x20, 0x15, 0x37, 0x35, 0x39,
+0x4c, 0x43, 0x17, 0x1e, 0x0d, 0x41, 0x2e, 0x40, 0x53, 0x3a, 0x17, 0x18, 0x05, 0x43, 0x34, 0x44,
+0x54, 0x34, 0x17, 0x1d, 0x06, 0x3a, 0x45, 0x3c, 0x4c, 0x3c, 0x16, 0x1b, 0x00, 0x3c, 0x58, 0x31,
+0x40, 0x44, 0x17, 0x12, 0x83, 0x42, 0x4a, 0x3e, 0x49, 0x39, 0x17, 0x0f, 0x82, 0x45, 0x39, 0x4a,
+0x4a, 0x37, 0x18, 0x0d, 0x87, 0x49, 0x3b, 0x4f, 0x3f, 0x3b, 0x18, 0x0a, 0x8a, 0x4b, 0x45, 0x49,
+0x3c, 0x3c, 0x17, 0x0c, 0x91, 0x61, 0x3c, 0x3f, 0x46, 0x3a, 0x17, 0x09, 0x8c, 0x58, 0x2a, 0x58,
+0x48, 0x30, 0x17, 0x05, 0x93, 0x68, 0x1f, 0x67, 0x3a, 0x36, 0x17, 0x05, 0x95, 0x68, 0x35, 0x57,
+0x32, 0x3e, 0x18, 0x04, 0x90, 0x5a, 0x41, 0x42, 0x44, 0x3b, 0x18, 0x08, 0x92, 0x65, 0x3a, 0x42,
+0x46, 0x38, 0x17, 0x03, 0x9b, 0xf2, 0x14, 0x5b, 0x3b, 0x39, 0x17, 0x03, 0x98, 0x7e, 0x22, 0x54,
+0x43, 0x34, 0x18, 0x04, 0x99, 0xf8, 0x24, 0x47, 0x46, 0x36, 0x18, 0x03, 0x98, 0xf7, 0x29, 0x3f,
+0x4d, 0x38, 0x59, 0x02, 0x98, 0xf3, 0x25, 0x43, 0x4c, 0x39, 0x59, 0x02, 0x9a, 0xec, 0x15, 0x50,
+0x44, 0x3c, 0x02, 0x02, 0x96, 0xf7, 0x23, 0x4b, 0x46, 0x3d, 0x59, 0x03, 0x91, 0x74, 0x38, 0x40,
+0x48, 0x3e, 0x59, 0x02, 0x95, 0xfe, 0x31, 0x38, 0x54, 0x39, 0x59, 0x02, 0x9a, 0xe9, 0x0e, 0x59,
+0x3a, 0x44, 0x59, 0x02, 0x9a, 0xe9, 0x0a, 0x5c, 0x3a, 0x42, 0x2d, 0x01, 0x9a, 0xec, 0x1b, 0x42,
+0x51, 0x39, 0x02, 0x01, 0x9b, 0xe8, 0x0f, 0x50, 0x48, 0x3c, 0x18, 0x02, 0x94, 0x72, 0x37, 0x42,
+0x47, 0x38, 0x59, 0x04, 0x95, 0x74, 0x34, 0x43, 0x43, 0x3a, 0x20, 0x07, 0x95, 0x62, 0x4f, 0x31,
+0x4d, 0x36, 0x19, 0x1a, 0x93, 0x5f, 0x59, 0x2d, 0x30, 0x51, 0x18, 0x42, 0x88, 0x5b, 0x44, 0x35,
+0x3d, 0x4b, 0x18, 0x4a, 0x06, 0x51, 0x2c, 0x45, 0x4d, 0x43, 0x17, 0x3c, 0x80, 0x5e, 0x20, 0x4f,
+0x46, 0x47, 0x17, 0x3b, 0x01, 0x56, 0x26, 0x51, 0x4c, 0x40, 0x43, 0x41, 0x05, 0x4d, 0x34, 0x4b,
+0x49, 0x44, 0x18, 0x39, 0x87, 0x63, 0x25, 0x55, 0x40, 0x47, 0x18, 0x49, 0x04, 0x4c, 0x3a, 0x45,
+0x47, 0x48, 0x18, 0x3e, 0x82, 0x5e, 0x26, 0x53, 0x3e, 0x4c, 0x18, 0x4c, 0x87, 0x75, 0x0d, 0x67,
+0x2c, 0x54, 0x17, 0x61, 0x08, 0x50, 0x32, 0x47, 0x45, 0x4a, 0x17, 0x73, 0x15, 0x43, 0x34, 0x43,
+0x4f, 0x43, 0x18, 0x66, 0x04, 0x5c, 0x26, 0x51, 0x36, 0x4c, 0x19, 0x1d, 0x93, 0xf7, 0x07, 0x69,
+0x28, 0x4d, 0x19, 0x1a, 0x8c, 0x74, 0x20, 0x53, 0x36, 0x43, 0x19, 0x1f, 0x91, 0x7d, 0x1b, 0x4d,
+0x39, 0x48, 0x18, 0x23, 0x90, 0xf3, 0x89, 0x71, 0x20, 0x53, 0x18, 0x3f, 0x81, 0x74, 0x11, 0x5e,
+0x22, 0x52, 0x17, 0x84, 0x10, 0x53, 0x34, 0x44, 0x31, 0x52, 0x17, 0x8b, 0x1b, 0x3f, 0x35, 0x42,
+0x47, 0x4e, 0x16, 0xae, 0x15, 0x54, 0x2b, 0x48, 0x3f, 0x51, 0x15, 0xaa, 0x21, 0x48, 0x2e, 0x47,
+0x4b, 0x46, 0x14, 0xae, 0x1e, 0x48, 0x2a, 0x4d, 0x46, 0x4a, 0x14, 0xb0, 0x15, 0x4d, 0x32, 0x48,
+0x3e, 0x4d, 0x13, 0xc7, 0x0e, 0x54, 0x37, 0x3f, 0x3d, 0x50, 0x14, 0x96, 0x0a, 0x57, 0x38, 0x44,
+0x3c, 0x51, 0x15, 0x84, 0x07, 0x5e, 0x28, 0x57, 0x34, 0x4f, 0x3f, 0x7b, 0x02, 0x65, 0x24, 0x57,
+0x35, 0x4c, 0x15, 0x51, 0x84, 0x69, 0x21, 0x5c, 0x31, 0x4d, 0x3e, 0x41, 0x86, 0x5d, 0x3e, 0x49,
+0x2c, 0x53, 0x15, 0x35, 0x8b, 0x6e, 0x33, 0x4b, 0x2d, 0x4e, 0x15, 0x18, 0x8d, 0x65, 0x3a, 0x44,
+0x37, 0x45, 0x15, 0x0c, 0x8a, 0x57, 0x43, 0x44, 0x43, 0x39, 0x52, 0x06, 0x8c, 0x63, 0x32, 0x4e,
+0x45, 0x36, 0x28, 0x05, 0x03, 0x4e, 0x33, 0x51, 0x3d, 0x3d, 0x18, 0x05, 0x08, 0x4a, 0x39, 0x48,
+0x42, 0x37, 0x1a, 0x0d, 0x04, 0x47, 0x46, 0x3e, 0x41, 0x3f, 0x18, 0x2e, 0x02, 0x52, 0x3b, 0x41,
+0x46, 0x38, 0x17, 0x49, 0x81, 0x55, 0x47, 0x3e, 0x34, 0x47, 0x17, 0x50, 0x05, 0x4c, 0x47, 0x44,
+0x2c, 0x4f, 0x17, 0x2b, 0x8b, 0x5b, 0x4e, 0x40, 0x22, 0x57, 0x18, 0x34, 0x87, 0x64, 0x33, 0x46,
+0x33, 0x4e, 0x18, 0x2c, 0x8c, 0x6c, 0x36, 0x3c, 0x39, 0x4b, 0x18, 0x23, 0x89, 0x54, 0x50, 0x41,
+0x1d, 0x5d, 0x18, 0x21, 0x8a, 0x58, 0x51, 0x32, 0x30, 0x55, 0x17, 0x32, 0x82, 0x59, 0x3f, 0x37,
+0x3a, 0x4f, 0x17, 0x3c, 0x12, 0x45, 0x3f, 0x39, 0x32, 0x59, 0x18, 0x2c, 0x12, 0x41, 0x3c, 0x35,
+0x43, 0x51, 0x19, 0x33, 0x10, 0x45, 0x3c, 0x3c, 0x57, 0x3f, 0x18, 0x1d, 0x25, 0x31, 0x30, 0x3f,
+0x53, 0x40, 0x19, 0x0d, 0x28, 0x27, 0x32, 0x48, 0x4d, 0x3d, 0x25, 0x06, 0x31, 0x23, 0x2a, 0x43,
+0x44, 0x49, 0x23, 0x09, 0x29, 0x25, 0x2e, 0x4f, 0x42, 0x45, 0x20, 0x10, 0x26, 0x34, 0x2d, 0x40,
+0x4a, 0x41, 0x1e, 0x1a, 0x25, 0x3e, 0x1e, 0x32, 0x52, 0x4c, 0x1d, 0x1d, 0x14, 0x3a, 0x37, 0x38,
+0x46, 0x49, 0x1c, 0x17, 0x16, 0x36, 0x3d, 0x37, 0x3d, 0x53, 0x1c, 0x10, 0x07, 0x3f, 0x43, 0x3a,
+0x42, 0x45, 0x1c, 0x0b, 0x88, 0x59, 0x2f, 0x49, 0x3b, 0x46, 0x1d, 0x0a, 0x8f, 0x62, 0x30, 0x4f,
+0x34, 0x47, 0x1d, 0x08, 0x93, 0x6e, 0x28, 0x58, 0x35, 0x3f, 0x1d, 0x08, 0x95, 0x75, 0x22, 0x5f,
+0x2e, 0x42, 0x1d, 0x09, 0x8f, 0x69, 0x30, 0x46, 0x45, 0x39, 0x1d, 0x0a, 0x8b, 0x60, 0x34, 0x44,
+0x45, 0x3c, 0x1e, 0x07, 0x94, 0x69, 0x40, 0x3b, 0x42, 0x3e, 0x1e, 0x0a, 0x8e, 0x5a, 0x40, 0x42,
+0x47, 0x36, 0x1f, 0x0a, 0x87, 0x3c, 0x65, 0x3b, 0x34, 0x42, 0x24, 0x07, 0x8d, 0x40, 0x6c, 0x3d,
+0x1f, 0x54, 0x24, 0x0a, 0x92, 0x56, 0x5d, 0x3e, 0x24, 0x53, 0x25, 0x0a, 0x8a, 0x49, 0x56, 0x44,
+0x30, 0x46, 0x26, 0x0e, 0x8c, 0x48, 0x64, 0x45, 0x1d, 0x52, 0x25, 0x17, 0x8c, 0x5e, 0x46, 0x4a,
+0x33, 0x43, 0x23, 0x2f, 0x0a, 0x3d, 0x5a, 0x50, 0x29, 0x45, 0x23, 0x30, 0x0d, 0x3a, 0x5c, 0x4d,
+0x2b, 0x41, 0x23, 0x28, 0x80, 0x43, 0x62, 0x45, 0x26, 0x48, 0x23, 0x2c, 0x06, 0x43, 0x56, 0x4b,
+0x31, 0x40, 0x24, 0x1b, 0x82, 0x55, 0x47, 0x48, 0x3e, 0x35, 0x24, 0x19, 0x81, 0x4a, 0x59, 0x46,
+0x2a, 0x46, 0x22, 0x21, 0x03, 0x3d, 0x6a, 0x40, 0x22, 0x4c, 0x21, 0x24, 0x04, 0x3e, 0x69, 0x3f,
+0x23, 0x4e, 0x21, 0x12, 0x90, 0x64, 0x56, 0x37, 0x2e, 0x4f, 0x23, 0x0c, 0x92, 0x76, 0x36, 0x39,
+0x48, 0x3d, 0x24, 0x0b, 0x8a, 0x57, 0x53, 0x37, 0x36, 0x4e, 0x24, 0x08, 0x88, 0x59, 0x51, 0x33,
+0x35, 0x50, 0x23, 0x08, 0x8d, 0x6b, 0x3e, 0x33, 0x45, 0x3e, 0x22, 0x06, 0x96, 0xfd, 0x33, 0x2d,
+0x51, 0x3e, 0x23, 0x03, 0x9b, 0xee, 0x1f, 0x3f, 0x4e, 0x37, 0x23, 0x03, 0x99, 0xf8, 0x2e, 0x41,
+0x41, 0x3d, 0x23, 0x03, 0x95, 0x70, 0x3d, 0x46, 0x3a, 0x3e, 0x23, 0x03, 0x97, 0x7e, 0x2f, 0x49,
+0x3f, 0x3b, 0x23, 0x03, 0x99, 0xf8, 0x2f, 0x42, 0x42, 0x3e, 0x23, 0x04, 0x94, 0x6d, 0x45, 0x38,
+0x45, 0x3e, 0x23, 0x03, 0x8a, 0x55, 0x4c, 0x4b, 0x2c, 0x4d, 0x07, 0x01, 0x0e, 0x3f, 0x46, 0x50,
+0x38, 0x42, 0x08, 0x01, 0x22, 0x43, 0x4b, 0x3f, 0x39, 0x57, 0x19, 0x00, 0x27, 0x45, 0x42, 0x46,
+0x38, 0x4e, 0x23, 0x00, 0x2a, 0x47, 0x4c, 0x4a, 0x38, 0x50, 0x08, 0x00, 0x29, 0x3e, 0x4d, 0x3a,
+0x3e, 0x47, 0x08, 0x00, 0x25, 0x46, 0x46, 0x40, 0x40, 0x4b, 0x42, 0x00, 0x23, 0x44, 0x3e, 0x43,
+0x42, 0x46, 0x08, 0x00, 0x1f, 0x41, 0x45, 0x47, 0x44, 0x39, 0x07, 0x00, 0x1a, 0x4e, 0x43, 0x47,
+0x3d, 0x3f, 0x13, 0x00, 0x18, 0x4a, 0x44, 0x52, 0x33, 0x3d, 0x24, 0x00, 0x23, 0x3f, 0x4a, 0x41,
+0x45, 0x41, 0x23, 0x00, 0x0e, 0x41, 0x3f, 0x3f, 0x35, 0x42, 0x28, 0x02, 0x13, 0x69, 0x1e, 0x34,
+0x39, 0x3d, 0x1e, 0x05, 0x15, 0x48, 0x34, 0x1d, 0x52, 0x45, 0x18, 0x0e, 0x80, 0x66, 0x0f, 0x45,
+0x44, 0x48, 0x14, 0x13, 0x87, 0x69, 0x0a, 0x55, 0x3f, 0x47, 0x12, 0x1e, 0x80, 0x50, 0x29, 0x47,
+0x3d, 0x4b, 0x12, 0x2d, 0x04, 0x4b, 0x2a, 0x47, 0x41, 0x48, 0x12, 0x32, 0x11, 0x3c, 0x30, 0x3e,
+0x4b, 0x46, 0x12, 0x51, 0x15, 0x36, 0x39, 0x3c, 0x46, 0x4c, 0x12, 0x4d, 0x83, 0x51, 0x3f, 0x3c,
+0x36, 0x50, 0x12, 0x81, 0x18, 0x32, 0x43, 0x36, 0x45, 0x4e, 0x11, 0x83, 0x24, 0x2a, 0x41, 0x32,
+0x43, 0x59, 0x11, 0x8b, 0x26, 0x33, 0x3d, 0x36, 0x41, 0x52, 0x12, 0x22, 0x19, 0x3c, 0x37, 0x45,
+0x46, 0x3f, 0x23, 0x09, 0x89, 0x63, 0x2e, 0x48, 0x4b, 0x39, 0x59, 0x08, 0x8f, 0x70, 0x2d, 0x4b,
+0x43, 0x3a, 0x5a, 0x0b, 0x8d, 0x6c, 0x34, 0x4b, 0x3c, 0x42, 0x07, 0x0a, 0x83, 0x5c, 0x47, 0x2e,
+0x56, 0x39, 0x22, 0x0d, 0x11, 0x4b, 0x36, 0x4d, 0x3d, 0x45, 0x22, 0x09, 0x1f, 0x2b, 0x4a, 0x49,
+0x52, 0x37, 0x0a, 0x0b, 0x2e, 0x53, 0x1f, 0x48, 0x3a, 0x44, 0x1c, 0x28, 0x0d, 0x55, 0x20, 0x4e,
+0x3e, 0x44, 0x14, 0x53, 0x03, 0x61, 0x27, 0x4f, 0x33, 0x49, 0x10, 0xae, 0x81, 0x5d, 0x31, 0x53,
+0x3a, 0x44, 0x0f, 0xfc, 0x0f, 0x4d, 0x3d, 0x52, 0x36, 0x4a, 0x30, 0xff, 0x10, 0x53, 0x36, 0x5c,
+0x34, 0x48, 0x0e, 0xf5, 0x0d, 0x5a, 0x2f, 0x67, 0x2e, 0x46, 0x0d, 0xed, 0x12, 0x59, 0x30, 0x67,
+0x2d, 0x46, 0x2d, 0xff, 0x0b, 0x68, 0x2a, 0x6c, 0x25, 0x4d, 0x0c, 0xff, 0x0c, 0x61, 0x35, 0x64,
+0x24, 0x4e, 0x0c, 0xff, 0x06, 0x69, 0x2b, 0x6b, 0x24, 0x4b, 0x0c, 0xff, 0x0e, 0x62, 0x2b, 0x64,
+0x32, 0x43, 0x0c, 0xff, 0x0e, 0x62, 0x31, 0x5c, 0x31, 0x45, 0x0c, 0xff, 0x05, 0x71, 0x2f, 0x5a,
+0x28, 0x55, 0x0c, 0xeb, 0x0f, 0x62, 0x30, 0x4c, 0x40, 0x4d, 0x2d, 0xe7, 0x1d, 0x56, 0x29, 0x43,
+0x43, 0x4e, 0x0d, 0xa4, 0x1b, 0x50, 0x20, 0x43, 0x47, 0x59, 0x0e, 0x92, 0x1b, 0x51, 0x1a, 0x48,
+0x3d, 0x5f, 0x08, 0x2c, 0x12, 0x53, 0x2d, 0x4c, 0x49, 0x3e, 0x13, 0x27, 0x08, 0x57, 0x2c, 0x46,
+0x4d, 0x42, 0x11, 0x88, 0x18, 0x50, 0x1e, 0x4b, 0x43, 0x45, 0x11, 0x70, 0x0d, 0x56, 0x1b, 0x50,
+0x44, 0x43, 0x35, 0x74, 0x0a, 0x55, 0x1f, 0x51, 0x4b, 0x3f, 0x10, 0x75, 0x0d, 0x47, 0x2d, 0x53,
+0x4e, 0x35, 0x11, 0x69, 0x0c, 0x50, 0x26, 0x53, 0x4f, 0x32, 0x11, 0x2f, 0x88, 0x6b, 0x1e, 0x5c,
+0x3a, 0x3a, 0x5a, 0x22, 0x8f, 0xff, 0x0d, 0x61, 0x30, 0x42, 0x11, 0x1c, 0x90, 0x7e, 0x10, 0x5e,
+0x32, 0x44, 0x11, 0x1b, 0x85, 0x64, 0x2a, 0x51, 0x3f, 0x3c, 0x5a, 0x22, 0x87, 0x6c, 0x3a, 0x43,
+0x40, 0x46, 0x5a, 0x10, 0x8e, 0x6e, 0x40, 0x37, 0x4d, 0x3b, 0x11, 0x0b, 0x0a, 0x31, 0x72, 0x3b,
+0x2b, 0x4f, 0x36, 0x07, 0x15, 0x43, 0x4b, 0x4c, 0x2a, 0x50, 0x4f, 0x04, 0x87, 0x70, 0x2a, 0x5e,
+0x20, 0x4f, 0x09, 0x09, 0x91, 0xf9, 0x12, 0x6b, 0x1c, 0x58, 0x09, 0x0f, 0x91, 0xf3, 0x00, 0x70,
+0x1e, 0x57, 0x26, 0x19, 0x91, 0x7b, 0x1a, 0x61, 0x2a, 0x4b, 0x17, 0x36, 0x8c, 0x5a, 0x3b, 0x5d,
+0x23, 0x4c, 0x17, 0x47, 0x90, 0x60, 0x3e, 0x65, 0x11, 0x52, 0x17, 0x47, 0x8a, 0x5a, 0x3b, 0x65,
+0x15, 0x4f, 0x16, 0x5e, 0x87, 0x5a, 0x3d, 0x64, 0x17, 0x52, 0x15, 0x60, 0x89, 0x5d, 0x3a, 0x64,
+0x16, 0x53, 0x15, 0x66, 0x87, 0x68, 0x2e, 0x60, 0x1f, 0x53, 0x15, 0x5c, 0x88, 0x5e, 0x3b, 0x59,
+0x1a, 0x59, 0x14, 0x4c, 0x8a, 0x62, 0x40, 0x4d, 0x1f, 0x57, 0x15, 0x2b, 0x8b, 0x68, 0x31, 0x52,
+0x22, 0x55, 0x10, 0x15, 0x81, 0x66, 0x26, 0x5e, 0x1d, 0x55, 0x35, 0x0e, 0x02, 0x60, 0x2b, 0x57,
+0x2a, 0x4f, 0x14, 0x06, 0x04, 0x64, 0x31, 0x49, 0x37, 0x44, 0x11, 0x04, 0x1b, 0x4e, 0x46, 0x3c,
+0x3c, 0x3e, 0x08, 0x0c, 0x16, 0x4f, 0x4d, 0x4e, 0x22, 0x5c, 0x07, 0x12, 0x05, 0x68, 0x29, 0x60,
+0x20, 0x5c, 0x10, 0x43, 0x84, 0x70, 0x1e, 0x55, 0x2d, 0x4c, 0x08, 0xb9, 0x0d, 0x5b, 0x2d, 0x47,
+0x30, 0x53, 0x22, 0xf4, 0x1c, 0x4f, 0x2c, 0x46, 0x33, 0x56, 0x21, 0xff, 0x2a, 0x48, 0x25, 0x49,
+0x49, 0x4e, 0x22, 0xcb, 0x24, 0x4b, 0x2d, 0x46, 0x43, 0x4a, 0x08, 0x8c, 0x22, 0x42, 0x30, 0x49,
+0x48, 0x40, 0x08, 0x34, 0x06, 0x5d, 0x30, 0x54, 0x30, 0x4a, 0x5a, 0x17, 0x8a, 0x6c, 0x28, 0x5b,
+0x2b, 0x49, 0x23, 0x14, 0x83, 0x61, 0x38, 0x49, 0x3b, 0x46, 0x59, 0x0e, 0x83, 0x6e, 0x23, 0x5f,
+0x28, 0x54, 0x23, 0x0e, 0x02, 0x60, 0x2a, 0x61, 0x26, 0x54, 0x15, 0x0b, 0x08, 0x5d, 0x33, 0x4d,
+0x2b, 0x51, 0x15, 0x0a, 0x14, 0x4d, 0x33, 0x40, 0x3c, 0x4b, 0x23, 0x05, 0x12, 0x44, 0x47, 0x33,
+0x34, 0x4e, 0x23, 0x01, 0x82, 0x53, 0x3b, 0x4c, 0x2e, 0x46, 0x25, 0x03, 0x91, 0x65, 0x2e, 0x55,
+0x3e, 0x38, 0x25, 0x06, 0x96, 0x74, 0x24, 0x5e, 0x38, 0x3a, 0x24, 0x08, 0x91, 0x65, 0x39, 0x4b,
+0x36, 0x49, 0x23, 0x11, 0x8d, 0x69, 0x36, 0x4a, 0x30, 0x4e, 0x22, 0x17, 0x8d, 0x6c, 0x33, 0x4f,
+0x2e, 0x4d, 0x23, 0x14, 0x8c, 0x71, 0x28, 0x4f, 0x2e, 0x51, 0x23, 0x0e, 0x80, 0x5d, 0x36, 0x3d,
+0x36, 0x4f, 0x23, 0x10, 0x81, 0x5c, 0x34, 0x4a, 0x34, 0x4b, 0x23, 0x07, 0x82, 0x56, 0x47, 0x36,
+0x42, 0x47, 0x3e, 0x03, 0x0c, 0x42, 0x5b, 0x34, 0x3c, 0x4d, 0x07, 0x02, 0x0d, 0x4d, 0x49, 0x3c,
+0x40, 0x42, 0x80, 0x01, 0x28, 0x35, 0x4f, 0x3a, 0x38, 0x43, 0x06, 0x00, 0x39, 0x36, 0x3e, 0x4d,
+0x42, 0x40, 0x08, 0x00, 0x35, 0x27, 0x51, 0x49, 0x37, 0x43, 0x08, 0x00, 0x31, 0x2c, 0x47, 0x47,
+0x3a, 0x4a, 0x36, 0x00, 0x3c, 0x2f, 0x50, 0x42, 0x35, 0x40, 0x1f, 0x00, 0x26, 0x2d, 0x4b, 0x3d,
+0x36, 0x4a, 0x20, 0x02, 0x91, 0x67, 0x3d, 0x47, 0x39, 0x3f, 0x16, 0x07, 0x92, 0x6a, 0x3b, 0x48,
+0x38, 0x3f, 0x15, 0x14, 0x8b, 0x70, 0x27, 0x4d, 0x3d, 0x40, 0x28, 0x1e, 0x80, 0x5d, 0x34, 0x4a,
+0x35, 0x4a, 0x27, 0x19, 0x01, 0x67, 0x27, 0x49, 0x36, 0x4c, 0x26, 0x0b, 0x88, 0x6d, 0x1c, 0x50,
+0x38, 0x4a, 0x28, 0x03, 0x87, 0x5c, 0x30, 0x46, 0x3e, 0x40, 0x25, 0x02, 0x83, 0x54, 0x23, 0x4e,
+0x3f, 0x46, 0x23, 0x07, 0x86, 0x57, 0x3c, 0x3f, 0x32, 0x53, 0x24, 0x14, 0x09, 0x4e, 0x34, 0x49,
+0x35, 0x48, 0x3e, 0x31, 0x05, 0x60, 0x25, 0x50, 0x2f, 0x4e, 0x23, 0x3b, 0x01, 0x6c, 0x21, 0x4f,
+0x33, 0x4c, 0x22, 0x41, 0x10, 0x56, 0x36, 0x47, 0x34, 0x4a, 0x28, 0x1d, 0x83, 0x70, 0x1e, 0x54,
+0x2f, 0x49, 0x28, 0x0e, 0x13, 0x4a, 0x34, 0x41, 0x3b, 0x3f, 0x2f, 0x0b, 0x28, 0x44, 0x28, 0x44,
+0x35, 0x3a, 0x30, 0x0b, 0x2b, 0x3c, 0x35, 0x35, 0x3e, 0x3a, 0x29, 0x21, 0x0b, 0x5a, 0x30, 0x40,
+0x3a, 0x43, 0x2a, 0x2d, 0x82, 0x70, 0x19, 0x55, 0x2e, 0x4a, 0x29, 0x4a, 0x87, 0x76, 0x16, 0x63,
+0x2a, 0x4f, 0x29, 0x66, 0x0d, 0x60, 0x28, 0x56, 0x29, 0x51, 0x29, 0x83, 0x13, 0x59, 0x37, 0x44,
+0x2f, 0x4f, 0x1d, 0x90, 0x0a, 0x53, 0x3f, 0x50, 0x2e, 0x52, 0x1d, 0x71, 0x09, 0x65, 0x2f, 0x59,
+0x2c, 0x55, 0x1d, 0x9a, 0x10, 0x5f, 0x34, 0x55, 0x2d, 0x50, 0x1c, 0x8d, 0x07, 0x6a, 0x2e, 0x58,
+0x2c, 0x54, 0x1c, 0x6b, 0x12, 0x52, 0x4a, 0x4c, 0x2f, 0x5b, 0x29, 0x76, 0x04, 0x5f, 0x29, 0x5b,
+0x33, 0x48, 0x0b, 0x66, 0x11, 0x49, 0x47, 0x41, 0x3a, 0x4c, 0x29, 0x30, 0x04, 0x5d, 0x34, 0x50,
+0x2a, 0x57, 0x29, 0x2f, 0x08, 0x58, 0x31, 0x50, 0x2d, 0x57, 0x29, 0x28, 0x0c, 0x5a, 0x27, 0x52,
+0x2a, 0x57, 0x28, 0x13, 0x80, 0x78, 0x09, 0x6e, 0x1c, 0x53, 0x10, 0x09, 0x8c, 0xff, 0x15, 0x61,
+0x23, 0x51, 0x35, 0x14, 0x82, 0x69, 0x2a, 0x4f, 0x3a, 0x4b, 0x47, 0x51, 0x81, 0x64, 0x26, 0x55,
+0x3c, 0x3f, 0x10, 0x7c, 0x03, 0x6a, 0x13, 0x64, 0x36, 0x43, 0x35, 0x98, 0x09, 0x58, 0x1f, 0x5d,
+0x3a, 0x3d, 0x11, 0xb3, 0x0a, 0x52, 0x22, 0x5b, 0x33, 0x44, 0x34, 0x7b, 0x07, 0x5b, 0x11, 0x61,
+0x36, 0x43, 0x36, 0x69, 0x0e, 0x56, 0x08, 0x65, 0x36, 0x48, 0x0c, 0x67, 0x16, 0x56, 0x02, 0x60,
+0x34, 0x4f, 0x0c, 0x63, 0x17, 0x53, 0x0a, 0x61, 0x3a, 0x47, 0x10, 0x4e, 0x14, 0x4e, 0x18, 0x5c,
+0x3e, 0x3d, 0x35, 0x46, 0x0d, 0x52, 0x15, 0x5e, 0x3a, 0x41, 0x10, 0x31, 0x08, 0x53, 0x14, 0x64,
+0x3a, 0x40, 0x10, 0x0f, 0x91, 0x72, 0x0f, 0x6e, 0x2c, 0x42, 0x11, 0x0a, 0x97, 0xfd, 0x0b, 0x72,
+0x1f, 0x4a, 0x38, 0x05, 0x93, 0x6f, 0x10, 0x72, 0x27, 0x47, 0x14, 0x05, 0x87, 0x57, 0x1d, 0x55,
+0x3c, 0x48, 0x18, 0x0c, 0x8c, 0x6e, 0x26, 0x50, 0x22, 0x51, 0x18, 0x36, 0x1d, 0x46, 0x37, 0x4d,
+0x21, 0x45, 0x18, 0x6d, 0x15, 0x45, 0x3a, 0x4e, 0x31, 0x46, 0x12, 0x6c, 0x12, 0x4f, 0x33, 0x47,
+0x2c, 0x4d, 0x11, 0x74, 0x01, 0x61, 0x2f, 0x49, 0x38, 0x45, 0x11, 0x5e, 0x81, 0x62, 0x28, 0x53,
+0x2e, 0x4b, 0x17, 0x32, 0x8b, 0x75, 0x19, 0x51, 0x35, 0x49, 0x17, 0x28, 0x05, 0x52, 0x35, 0x3d,
+0x3f, 0x45, 0x17, 0x1b, 0x02, 0x52, 0x36, 0x42, 0x33, 0x4c, 0x18, 0x0f, 0x0c, 0x42, 0x30, 0x39,
+0x49, 0x48, 0x17, 0x09, 0x81, 0x48, 0x3f, 0x40, 0x2f, 0x53, 0x17, 0x09, 0x16, 0x27, 0x42, 0x3c,
+0x39, 0x54, 0x17, 0x0b, 0x17, 0x2a, 0x3c, 0x3f, 0x38, 0x54, 0x16, 0x11, 0x26, 0x31, 0x20, 0x31,
+0x51, 0x50, 0x41, 0x0e, 0x2f, 0x37, 0x07, 0x33, 0x4f, 0x5a, 0x18, 0x0a, 0x38, 0x30, 0x81, 0x34,
+0x50, 0x61, 0x45, 0x08, 0x3d, 0x2c, 0x86, 0x31, 0x51, 0x65, 0x19, 0x17, 0x14, 0x59, 0x0f, 0x55,
+0x30, 0x45, 0x15, 0x34, 0x19, 0x61, 0x18, 0x4b, 0x2f, 0x3e, 0x3e, 0x60, 0x0e, 0x56, 0x23, 0x53,
+0x3a, 0x40, 0x3d, 0x6c, 0x07, 0x61, 0x19, 0x5b, 0x3a, 0x41, 0x3e, 0x71, 0x06, 0x64, 0x16, 0x56,
+0x43, 0x3c, 0x3e, 0x66, 0x88, 0xfe, 0x83, 0x6f, 0x2d, 0x43, 0x3e, 0x68, 0x84, 0x75, 0x0a, 0x65,
+0x35, 0x40, 0x3e, 0x76, 0x82, 0x76, 0x06, 0x69, 0x2f, 0x46, 0x3d, 0x6c, 0x85, 0x79, 0x09, 0x65,
+0x2c, 0x4a, 0x3e, 0x56, 0x8c, 0xfb, 0x05, 0x6a, 0x27, 0x4d, 0x3e, 0x5e, 0x87, 0x7e, 0x0a, 0x67,
+0x29, 0x4c, 0x15, 0x69, 0x82, 0x78, 0x0f, 0x60, 0x29, 0x4d, 0x15, 0x6c, 0x82, 0x7b, 0x04, 0x67,
+0x29, 0x4a, 0x3d, 0x65, 0x01, 0x73, 0x0e, 0x5c, 0x35, 0x41, 0x3d, 0x5e, 0x83, 0x7e, 0x00, 0x69,
+0x31, 0x43, 0x3f, 0x60, 0x84, 0x7a, 0x07, 0x66, 0x32, 0x47, 0x3d, 0x5b, 0x82, 0x7c, 0x03, 0x64,
+0x30, 0x47, 0x3e, 0x6e, 0x02, 0x6e, 0x0d, 0x5e, 0x31, 0x4b, 0x15, 0x57, 0x81, 0x6e, 0x13, 0x5b,
+0x31, 0x49, 0x3e, 0x64, 0x06, 0x6a, 0x11, 0x57, 0x3d, 0x41, 0x3e, 0x6d, 0x04, 0x6f, 0x0a, 0x5d,
+0x31, 0x4a, 0x3e, 0x56, 0x02, 0x70, 0x03, 0x62, 0x2f, 0x4d, 0x3f, 0x4e, 0x86, 0x7c, 0x80, 0x6b,
+0x2e, 0x48, 0x3e, 0x5c, 0x85, 0x79, 0x07, 0x65, 0x31, 0x43, 0x3e, 0x5b, 0x83, 0x7c, 0x06, 0x62,
+0x2d, 0x49, 0x3e, 0x42, 0x83, 0x73, 0x1b, 0x4a, 0x3c, 0x46, 0x3e, 0x57, 0x0c, 0x68, 0x1e, 0x47,
+0x3e, 0x42, 0x15, 0x4e, 0x0b, 0x66, 0x1c, 0x48, 0x3c, 0x46, 0x3e, 0x50, 0x84, 0xfb, 0x84, 0x67,
+0x2b, 0x48, 0x3e, 0x4b, 0x82, 0x7b, 0x0b, 0x58, 0x38, 0x42, 0x3e, 0x3e, 0x85, 0x7b, 0x10, 0x56,
+0x34, 0x48, 0x3e, 0x4a, 0x05, 0x6b, 0x1b, 0x50, 0x31, 0x4e, 0x3e, 0x3f, 0x8a, 0xfc, 0x0c, 0x59,
+0x30, 0x4c, 0x15, 0x39, 0x82, 0x73, 0x1e, 0x4b, 0x36, 0x4c, 0x3e, 0x36, 0x85, 0x7a, 0x13, 0x50,
+0x36, 0x4c, 0x3e, 0x31, 0x02, 0x68, 0x2b, 0x44, 0x36, 0x4d, 0x3f, 0x43, 0x05, 0x74, 0x14, 0x53,
+0x33, 0x47, 0x3e, 0x2f, 0x83, 0x71, 0x1d, 0x50, 0x34, 0x4a, 0x3e, 0x27, 0x87, 0x78, 0x0f, 0x5f,
+0x2a, 0x4d, 0x3e, 0x2b, 0x82, 0x6a, 0x1c, 0x59, 0x2c, 0x4f, 0x3d, 0x24, 0x82, 0x6b, 0x23, 0x53,
+0x26, 0x55, 0x3e, 0x1e, 0x81, 0x65, 0x38, 0x45, 0x2f, 0x54, 0x3e, 0x1b, 0x01, 0x68, 0x2f, 0x52,
+0x1e, 0x5a, 0x3e, 0x15, 0x81, 0x6b, 0x2c, 0x5b, 0x14, 0x64, 0x3e, 0x16, 0x8a, 0xf6, 0x0a, 0x69,
+0x23, 0x50, 0x3e, 0x12, 0x8d, 0xf2, 0x09, 0x6c, 0x1f, 0x55, 0x3d, 0x0f, 0x8a, 0xfa, 0x17, 0x64,
+0x1f, 0x5b, 0x3d, 0x11, 0x87, 0xfb, 0x16, 0x6a, 0x1f, 0x5b, 0x3d, 0x0f, 0x83, 0x7b, 0x21, 0x60,
+0x22, 0x5b, 0x3e, 0x0f, 0x8b, 0xf1, 0x03, 0x73, 0x1d, 0x56, 0x3e, 0x0b, 0x93, 0xe5, 0x91, 0xf8,
+0x12, 0x59, 0x3e, 0x08, 0x91, 0xec, 0x09, 0x67, 0x27, 0x54, 0x3e, 0x06, 0x90, 0xf6, 0x1d, 0x61,
+0x20, 0x5a, 0x3e, 0x06, 0x94, 0xe7, 0x8c, 0x7f, 0x1a, 0x55, 0x3d, 0x04, 0x96, 0xe5, 0x87, 0x6f,
+0x25, 0x53, 0x3d, 0x05, 0x8f, 0xee, 0x0c, 0x66, 0x25, 0x57, 0x3e, 0x04, 0x8c, 0xf6, 0x20, 0x54,
+0x2f, 0x55, 0x3e, 0x02, 0x95, 0xe7, 0x82, 0x6d, 0x27, 0x51, 0x3e, 0x01, 0x93, 0xe9, 0x01, 0x6f,
+0x24, 0x52, 0x15, 0x01, 0x8d, 0xfb, 0x2d, 0x4a, 0x35, 0x4f, 0x15, 0x01, 0x8d, 0x7e, 0x2d, 0x4e,
+0x32, 0x4e, 0x15, 0x00, 0x05, 0x65, 0x2b, 0x53, 0x39, 0x52, 0x15, 0x00, 0x01, 0x7c, 0x16, 0x59,
+0x39, 0x4a, 0x2a, 0x00, 0x06, 0x61, 0x38, 0x39, 0x3b, 0x38, 0x00, 0x00, 0x83, 0x5b, 0x3d, 0x35,
+0x43, 0x34, 0x15, 0x00, 0x10, 0x4e, 0x43, 0x3f, 0x37, 0x3d, 0x00, 0x00, 0x04, 0x53, 0x3f, 0x36,
+0x2d, 0x47, 0x00, 0x00, 0x05, 0x57, 0x36, 0x34, 0x3b, 0x3f, 0x01, 0x00, 0x29, 0x48, 0x38, 0x34,
+0x3e, 0x39, 0x15, 0x00, 0x2b, 0x5a, 0x38, 0x3f, 0x3c, 0x3c, 0x15, 0x00, 0x2b, 0x5a, 0x40, 0x47,
+0x3c, 0x3a, 0x15, 0x00, 0x2b, 0x5e, 0x3f, 0x43, 0x3f, 0x3f, 0x00, 0x00, 0x2c, 0x4c, 0x41, 0x37,
+0x3a, 0x42, 0x00, 0x00, 0x26, 0x4f, 0x32, 0x3d, 0x2f, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00,
+};
+
+//File: merry.wav
+//Time: 23670 ms
+//Size: 8418 bytes
+//Quality: 6
diff --git a/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/Sample2-Complex.ino b/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/Sample2-Complex.ino
new file mode 100644
index 0000000..8c09bc0
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/Sample2-Complex.ino
@@ -0,0 +1,135 @@
+#include
+#include
+#include "voices.h"
+#include "bitmaps.h"
+
+#define ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0]))
+
+Arduboy2 arduboy;
+ArdVoice ardvoice;
+#define ARDBITMAP_SBUF arduboy.getBuffer()
+#include
+ArdBitmap ardbitmap;
+unsigned long initTime;
+
+int voice_segment = 0;
+boolean onePlayed = false;
+boolean twoPlayed = false;
+boolean threePlayed = false;
+boolean merryPlayed = false;
+
+void setup() {
+ arduboy.begin();
+ arduboy.invert(!arduboy.audio.enabled());
+ arduboy.setFrameRate(60);
+ initTime = millis();
+}
+
+
+void loop() {
+ if (!(arduboy.nextFrame()))
+ return;
+
+ arduboy.clear();
+ unsigned long myTime = (millis()-initTime);
+ float resize1 = abs(sin((millis()-initTime)/ (1000.0/(PI))));
+ float resize2 = abs(sin((millis()-initTime - 3000)/ (4000.0/(PI))));
+ float resize3 = abs(sin((millis()-initTime - 7000)/ (8000.0/(PI))));
+
+ if (myTime < 7000){
+ setContrast((myTime > 3000 ? resize2 :resize1) * 255);
+ ardbitmap.drawCompressedResized(WIDTH / 2, HEIGHT / 2, myTime < 1000 ? NUMBER_3 :
+ myTime < 2000 ? NUMBER_2 :
+ myTime < 3000 ? NUMBER_1 :
+ MERRY_CHRISTMAS , WHITE, ALIGN_CENTER, MIRROR_NONE, myTime > 3000 ? resize2 :resize1);
+
+ } else {
+
+ int contrast = resize3 * 255;
+ setContrast(contrast);
+ ardbitmap.drawCompressedResized(WIDTH/2, HEIGHT, DOG[ (myTime/80)% ARRAY_LEN(DOG)], WHITE, ALIGN_H_CENTER | ALIGN_V_BOTTOM, MIRROR_NONE, resize3 );
+
+ }
+
+ //VOICES
+ if (myTime > 250 && !threePlayed){
+ threePlayed = true;
+ ardvoice.playVoice(three_q6);
+ }
+
+ if (myTime > 1250 && !twoPlayed){
+ twoPlayed = true;
+ ardvoice.playVoice(two_q6);
+ }
+
+ if (myTime > 2300 && !onePlayed){
+ onePlayed = true;
+ ardvoice.playVoice(one_q6);
+ }
+
+ if (myTime > 3200){
+
+ if(!ardvoice.isVoicePlaying()) {
+ switch(voice_segment){
+ case 0:
+ ardvoice.playVoice(merry_q6);
+ voice_segment++;
+ break;
+ case 1:
+ ardvoice.playVoice(merry_q6, 4400, 0, 1.0);
+ voice_segment++;
+ break;
+ case 2:
+ ardvoice.playVoice(merry_q6, 4400, 13500, 0.8);
+ voice_segment++;
+ break;
+ case 3:
+ ardvoice.playVoice(merry_q6, 4400, 11500, 1.3);
+ voice_segment++;
+ break;
+ case 4:
+ ardvoice.playVoice(merry_q6, 11500, 13500, 1.4);
+ voice_segment++;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ //Reset demo
+ if(arduboy.pressed(A_BUTTON) || arduboy.pressed(B_BUTTON)){
+ initTime = millis();
+ voice_segment = 0;
+ onePlayed = false;
+ twoPlayed = false;
+ threePlayed = false;
+ merryPlayed = false;
+ }
+ if(arduboy.pressed(UP_BUTTON)){
+ arduboy.audio.on();
+ arduboy.invert(false);
+ }
+ if(arduboy.pressed(DOWN_BUTTON)){
+ arduboy.audio.off();
+ arduboy.invert(true);
+ }
+
+ arduboy.display();
+}
+
+
+
+void setContrast(uint8_t contrast){
+
+ arduboy.LCDCommandMode();
+ SPI.transfer(0xd9);
+ SPI.transfer(0x2f);
+ SPI.transfer(0xdb);
+ SPI.transfer(0x00);
+
+ SPI.transfer(0x81); // contrast command
+ SPI.transfer(contrast);
+ arduboy.LCDDataMode();
+}
+
diff --git a/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/bitmaps.h b/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/bitmaps.h
new file mode 100644
index 0000000..1590592
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/bitmaps.h
@@ -0,0 +1,197 @@
+
+const uint8_t NUMBER_1[] PROGMEM ={
+0x3f, 0xbf, 0xff, 0x0c, 0x72, 0x1b, 0x87, 0xbd, 0xf7, 0xde, 0x7b, 0xff, 0x3b, 0xda, 0xfb, 0xb0,
+0x2e, 0xe3, 0xd6, 0xa3, 0x3f, 0xf7, 0xdf, 0x4f, 0x2e, 0xeb, 0xb2, 0x2e, 0xeb, 0x70, 0xc8, 0xef,
+0xfe, 0x77, 0xf8, 0xbb, 0xff, 0x1d, 0xfe, 0xee, 0x7f, 0x87, 0xbf, 0xfb, 0xdf, 0xe1, 0xef, 0xfe,
+0xa7, 0x78, 0x59, 0x97, 0x75, 0x59, 0x97, 0x75, 0x59, 0x97, 0x75, 0x59, 0xe3, 0xef, 0x03,
+};
+
+const uint8_t NUMBER_2[] PROGMEM ={
+0x3f, 0xff, 0x7f, 0x1f, 0x8e, 0xe3, 0x32, 0xf7, 0x9e, 0x97, 0x75, 0x59, 0x97, 0x75, 0x59, 0x87,
+0xbd, 0x0f, 0xeb, 0x94, 0x7f, 0x3b, 0x87, 0xfc, 0x8c, 0xec, 0xcb, 0x3a, 0xfc, 0xc4, 0xce, 0x7f,
+0x15, 0xd3, 0xab, 0x57, 0xaf, 0x5e, 0xbd, 0xbe, 0x1f, 0xfd, 0xbd, 0xff, 0xce, 0x38, 0x5d, 0xfc,
+0x9d, 0x1e, 0xfe, 0x51, 0x71, 0xdb, 0xfd, 0x99, 0xdc, 0x76, 0xff, 0x19, 0x71, 0xdb, 0xfd, 0x99,
+0x5e, 0x0e, 0xfd, 0x37, 0xb5, 0xfb, 0x93, 0x59, 0x71, 0xac, 0xcb, 0xba, 0xac, 0xcb, 0xba, 0xac,
+0x4b, 0xfe, 0x5d, 0x8c, 0x75, 0x59, 0x97, 0x75, 0x59, 0x97, 0x75, 0x59, 0x97, 0x75, 0x59, 0x97,
+0x75, 0x59, 0x97, 0x75, 0x59, 0x97, 0x75, 0x59, 0x97, 0x3f, 0x09,
+};
+
+
+const uint8_t NUMBER_3[] PROGMEM ={
+0x3f, 0xbf, 0x7f, 0x96, 0x9c, 0xd6, 0x61, 0xef, 0xc3, 0xba, 0xac, 0xcb, 0xba, 0xac, 0xcb, 0xba,
+0xac, 0xc3, 0xde, 0x87, 0x75, 0xca, 0x3f, 0x95, 0x13, 0xbf, 0xab, 0xf3, 0x32, 0xfb, 0x2b, 0x67,
+0xfe, 0x1d, 0xac, 0xde, 0x7a, 0xeb, 0xad, 0xb7, 0xde, 0x7a, 0xfb, 0xc2, 0xcf, 0xfd, 0xa7, 0x75,
+0xeb, 0xad, 0x47, 0x7e, 0x0a, 0x9b, 0xe5, 0x68, 0x16, 0xff, 0x2a, 0x7a, 0xeb, 0xad, 0xb7, 0xde,
+0xba, 0x6c, 0xdb, 0xba, 0x7a, 0x5a, 0xfb, 0x07, 0xff, 0x1b, 0xf8, 0x9d, 0xdf, 0xf9, 0xbd, 0x7f,
+0xff, 0xac, 0x5f, 0x78, 0xea, 0x6d, 0x8c, 0x5f, 0x39, 0xf3, 0xef, 0x81, 0xe3, 0xb8, 0xcc, 0x7d,
+0x58, 0x97, 0x71, 0xeb, 0xad, 0xb7, 0xde, 0x7a, 0x1b, 0x97, 0x75, 0xd8, 0xf3, 0x32, 0xfe, 0x3a,
+};
+
+
+
+const uint8_t DOG_0[] PROGMEM ={
+0x7f, 0xbf, 0xff, 0xec, 0xbc, 0x7a, 0xf5, 0xea, 0xd5, 0xab, 0xff, 0x1d, 0xe1, 0xb4, 0x0e, 0x7b,
+0xd6, 0x91, 0x95, 0xdb, 0x38, 0x1c, 0xd6, 0x29, 0x7f, 0x8d, 0x9c, 0xe6, 0x3c, 0xf5, 0xe8, 0x5f,
+0xc7, 0x6b, 0x6e, 0xe3, 0x32, 0xf7, 0x61, 0x9d, 0x7a, 0xcb, 0xd5, 0xab, 0x9f, 0xde, 0xf3, 0x32,
+0xf7, 0xde, 0x7b, 0x1f, 0xd6, 0x65, 0xee, 0xbd, 0xf7, 0xde, 0x7b, 0x1f, 0xc6, 0x91, 0xbf, 0xf2,
+0x38, 0xec, 0x79, 0xca, 0x95, 0xe9, 0xb1, 0xa7, 0x75, 0xd8, 0xfb, 0x30, 0xe7, 0x29, 0xff, 0x1c,
+0xb9, 0x7a, 0x14, 0xfe, 0xb8, 0xb9, 0x8d, 0xcb, 0xba, 0xfc, 0x89, 0xb9, 0xe6, 0xd6, 0xd3, 0xba,
+0xac, 0xcb, 0x3a, 0xf5, 0xe8, 0x71, 0x1c, 0x2e, 0xf9, 0xe7, 0xcb, 0x35, 0xa7, 0x75, 0xd8, 0x7b,
+0xef, 0x7d, 0x58, 0x97, 0x75, 0x59, 0x87, 0xbd, 0xf7, 0x3c, 0xe5, 0x9f, 0xd6, 0x89, 0xcf, 0x38,
+0x7a, 0xeb, 0x2d, 0xdf, 0xe7, 0xd6, 0x5b, 0x4f, 0x7b, 0xdc, 0xc6, 0x65, 0xf6, 0xf7, 0x73, 0xcd,
+0x6d, 0x5c, 0xe6, 0x3e, 0x8c, 0x5b, 0xfe, 0xe3, 0xf1, 0x05, 0x4e, 0x27, 0x3e, 0xd3, 0xc3, 0xc5,
+0xcf, 0xe4, 0x74, 0xf0, 0x3d, 0xf3, 0x77, 0x70, 0x1c, 0x87, 0xc3, 0x38, 0xf2, 0xdf, 0xa7, 0xd5,
+0x5b, 0x4f, 0x6b, 0xff, 0x98, 0xee, 0x0f, 0x60, 0x2e, 0xeb, 0x32, 0x3e, 0xd2, 0xc3, 0x61, 0x1c,
+0xf9, 0xef, 0x2d, 0xc7, 0xde, 0xb6, 0x1f, 0x9d, 0xfb, 0xdf, 0x38,
+};
+
+const uint8_t DOG_1[] PROGMEM ={
+0x7f, 0xff, 0xff, 0xfb, 0x88, 0xe3, 0x38, 0xec, 0x79, 0x59, 0x97, 0x75, 0x59, 0x97, 0x75, 0x59,
+0x97, 0x75, 0x99, 0x7b, 0xcf, 0x53, 0x8f, 0xfe, 0xb9, 0xb9, 0x7a, 0xcd, 0x69, 0x1d, 0xf6, 0xde,
+0x7b, 0x9e, 0x7a, 0xf4, 0x9f, 0x23, 0xb7, 0x3d, 0x8e, 0xfc, 0xb9, 0x3d, 0xf6, 0x36, 0x2e, 0xeb,
+0xb2, 0x2e, 0xeb, 0xb2, 0x2e, 0xeb, 0xb0, 0x4f, 0x5e, 0x3d, 0xe6, 0xea, 0x5f, 0x79, 0xe4, 0xef,
+0xea, 0x35, 0xb7, 0x71, 0x99, 0xfb, 0x30, 0x6e, 0x79, 0xc6, 0x95, 0x7f, 0xee, 0x39, 0xcd, 0xc3,
+0xba, 0xac, 0xcb, 0x3a, 0xec, 0xbd, 0xf7, 0xde, 0x7b, 0x9e, 0xfa, 0xb7, 0x40, 0x4e, 0x92, 0xcb,
+0xdc, 0x7b, 0xef, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0xbd, 0x0f, 0xeb, 0x32, 0x6e, 0xf9, 0x0c, 0x93,
+0x4e, 0x07, 0x3f, 0x29, 0x47, 0x3e, 0x3e, 0x6e, 0xf9, 0x73, 0x72, 0x1c, 0x87, 0xc3, 0x38, 0xfa,
+0x9f, 0x0b, 0x8e, 0xe3, 0x32, 0xf7, 0x9e, 0x97, 0x71, 0xeb, 0xd1, 0xc9, 0xe7, 0xc7, 0x38, 0xcd,
+0xf5, 0x15, 0x8e, 0xe3, 0x30, 0x4f, 0xf9, 0x0d, 0xb4, 0xae, 0x5c, 0xf9, 0x6f, 0x56, 0x18, 0xeb,
+0xb2, 0x2e, 0xeb, 0xb2, 0x2e, 0xea, 0x85, 0xf2, 0x88, 0x6b, 0x6e, 0xb9, 0x3a, 0xb9, 0x7a, 0xec,
+0x69, 0xae, 0xc5, 0x68, 0x87, 0x9f, 0xfe, 0xef, 0x19, 0x57, 0xaf, 0x5e, 0xbd, 0x7a, 0xf5, 0xb7,
+0xce, 0xbd, 0xf7, 0xde, 0x7b, 0xef, 0x3d, 0x2f, 0xe3, 0x5f, 0x1d,
+};
+
+const uint8_t DOG_2[] PROGMEM ={
+0x7f, 0xff, 0xff, 0xb9, 0xf4, 0xea, 0xd5, 0x2b, 0xff, 0xfe, 0xb9, 0x7a, 0xcd, 0xad, 0xb7, 0xde,
+0x7a, 0xeb, 0xad, 0xb7, 0x1e, 0xbd, 0xfa, 0x35, 0xaf, 0x5e, 0xbd, 0x7a, 0xf5, 0xea, 0xd5, 0xab,
+0x57, 0xbf, 0x74, 0xea, 0x2d, 0x57, 0xaf, 0xfc, 0x1e, 0x8e, 0xe3, 0xb2, 0x2e, 0xeb, 0xb2, 0x2e,
+0xeb, 0xf0, 0x4f, 0xab, 0x87, 0xc3, 0xb8, 0xe5, 0x9f, 0x39, 0x57, 0xaf, 0x39, 0x7a, 0xf5, 0xea,
+0x35, 0xb7, 0x71, 0x38, 0xf4, 0x5f, 0x4d, 0x4e, 0x73, 0xfd, 0xab, 0xe6, 0x9a, 0xdb, 0x38, 0x1c,
+0xc6, 0x91, 0x3f, 0x2e, 0xe5, 0x60, 0xb3, 0x32, 0x92, 0xae, 0xd2, 0xbd, 0xf7, 0xde, 0x7b, 0xef,
+0xbd, 0xf7, 0xde, 0x87, 0x75, 0xea, 0xd1, 0xe5, 0xb1, 0xa7, 0x79, 0x18, 0xb7, 0xfc, 0xa9, 0x74,
+0x8d, 0xcb, 0xdc, 0x87, 0x71, 0xcb, 0xd5, 0xab, 0xbf, 0xce, 0xab, 0xbf, 0xc2, 0x63, 0x4f, 0x73,
+0x1f, 0xd6, 0xa9, 0x47, 0xfe, 0x5d, 0x70, 0xf5, 0x9a, 0x5b, 0x6f, 0xbd, 0xf5, 0xe8, 0x95, 0xdf,
+0xcb, 0xfc, 0xbe, 0x97, 0xfd, 0xf9, 0x53, 0xae, 0xbc, 0xf7, 0xd6, 0x5b, 0x17, 0x23, 0x9d, 0x09,
+0x1f, 0xfd, 0xbc, 0xd7, 0x8c, 0xb4, 0x1d, 0x2e, 0x17, 0x9f, 0xee, 0xf8, 0xa7, 0xed, 0xba, 0xf1,
+0xa5, 0x8c, 0x23, 0x9f, 0xf3, 0x38, 0x0e, 0x7b, 0x9e, 0xf2, 0x8c, 0x6b, 0xbe, 0xc8, 0x70, 0xcf,
+0xc3, 0xde, 0x7b, 0x9e, 0xfc, 0x31, 0x73, 0xef, 0x79, 0x99, 0xfb, 0xb0, 0x4e, 0x3d, 0xf2, 0xcf,
+0x3f, 0xa7, 0x39, 0x2f, 0xe3, 0xc8, 0xf4, 0xd8, 0x5b, 0x6f, 0xe3, 0xf2, 0x13, 0xb8, 0xe6, 0xd6,
+0x5b, 0x6f, 0x3d, 0xf2, 0xef, 0x16,
+};
+
+const uint8_t DOG_3[] PROGMEM ={
+0x7f, 0xff, 0xff, 0x39, 0xf3, 0xd8, 0x5b, 0x6f, 0xbd, 0xf5, 0x36, 0x2e, 0xeb, 0xb0, 0xf7, 0x3e,
+0xac, 0x53, 0x8f, 0xfc, 0xe7, 0xcb, 0x63, 0x6f, 0xbd, 0xf5, 0xd6, 0x5b, 0x6f, 0x3d, 0x48, 0x49,
+0xfe, 0x9c, 0x1c, 0x7b, 0xeb, 0xad, 0xb7, 0x8e, 0x7f, 0x0f, 0x5e, 0xbd, 0x7a, 0xf5, 0x38, 0x0e,
+0x7b, 0x5e, 0xc6, 0x2d, 0x57, 0xaf, 0x5e, 0xbd, 0x7a, 0xf5, 0xea, 0xd5, 0xab, 0xd7, 0xdc, 0x72,
+0xf5, 0xea, 0x3f, 0x03, 0x8e, 0x3d, 0xad, 0xcb, 0xba, 0xac, 0xcb, 0xba, 0xac, 0xcb, 0x3a, 0xec,
+0xbd, 0xe7, 0x8d, 0xbf, 0x13, 0xc7, 0x71, 0x99, 0xf3, 0xd4, 0xa3, 0xcb, 0xe3, 0xb8, 0xac, 0xc3,
+0xde, 0xe3, 0x9f, 0x3a, 0xc3, 0x59, 0x3b, 0x86, 0x8b, 0xe9, 0xb1, 0xb7, 0xde, 0x7a, 0xeb, 0x2d,
+0x57, 0xfe, 0x06, 0x2c, 0x36, 0xcb, 0x95, 0x66, 0xa5, 0x59, 0x69, 0x56, 0xed, 0xba, 0xac, 0xcb,
+0xdc, 0x87, 0x71, 0xf4, 0xb3, 0x1c, 0xc7, 0xe1, 0x10, 0xf8, 0x0b, 0xce, 0xcb, 0xb8, 0xf5, 0xe8,
+0xd5, 0x9f, 0xc3, 0xd5, 0x63, 0x8f, 0xfc, 0xb1, 0x28, 0x17, 0xc9, 0x65, 0x9d, 0x72, 0xe5, 0x99,
+0xc7, 0x9e, 0xe6, 0x3e, 0x8c, 0xbf, 0xed, 0x5a, 0x47, 0xaf, 0xbc, 0xe3, 0x9a, 0xdb, 0xb8, 0xcc,
+0x7d, 0x58, 0x97, 0x71, 0xeb, 0x69, 0xfb, 0x03, 0xb8, 0x1d, 0xfc, 0xe7, 0xe0, 0xd5, 0xab, 0xa3,
+0x6d, 0x56, 0xda, 0xe6, 0x93, 0xac, 0x0f, 0x71, 0xec, 0x69, 0x5d, 0xd6, 0x65, 0x1c, 0xf9, 0x3b,
+0x79, 0xb9, 0xe4, 0x23, 0xe3, 0x70, 0xc9, 0x95, 0x1f, 0xbe, 0xf8, 0x01, 0x23, 0xff, 0x8c, 0x3c,
+0xad, 0xcb, 0xba, 0xac, 0xcb, 0xb8, 0xe5, 0xdf, 0xce, 0xa1, 0x47, 0xaf, 0xae, 0x0c, 0x47, 0x47,
+0xf2, 0x27, 0xe1, 0x9a, 0xd3, 0x3a, 0x1c, 0xc6, 0xd1, 0x57, 0xb9, 0xf5, 0xd6, 0x45, 0x67, 0xfe,
+0x03, 0x00,
+};
+
+const uint8_t DOG_4[] PROGMEM ={
+0x7f, 0xff, 0xff, 0xf9, 0xf3, 0xbf, 0x8e, 0x5e, 0x3d, 0xf6, 0x36, 0x2e, 0x73, 0xef, 0xbd, 0xf7,
+0xbc, 0xac, 0xcb, 0xb8, 0x55, 0x13, 0x4b, 0x19, 0x94, 0xbf, 0x89, 0xc7, 0x71, 0x99, 0xf3, 0xb2,
+0x4e, 0xbd, 0xf5, 0xe6, 0xef, 0xe1, 0x38, 0x2e, 0x73, 0x5e, 0xc6, 0x62, 0x74, 0xb8, 0x1c, 0x1d,
+0xac, 0x71, 0x59, 0x97, 0x75, 0x59, 0x97, 0x71, 0xeb, 0xd1, 0xe5, 0xd5, 0x63, 0x6f, 0xb9, 0xfa,
+0x73, 0xb9, 0xfa, 0xaf, 0xd0, 0xab, 0x3f, 0x87, 0x6b, 0x4e, 0x73, 0x7e, 0xc4, 0x4b, 0xec, 0xe8,
+0x28, 0xdd, 0xf3, 0x32, 0x8e, 0xfe, 0x19, 0xb8, 0xcd, 0xf5, 0x1f, 0x02, 0xb6, 0xcd, 0x68, 0x9b,
+0xd1, 0xc1, 0xea, 0xad, 0xb7, 0xde, 0x7a, 0xeb, 0x2d, 0x57, 0xff, 0x9a, 0x39, 0xad, 0xcb, 0xdc,
+0x7b, 0x1f, 0xd6, 0xa9, 0x47, 0xfe, 0x4a, 0x63, 0xdf, 0xbc, 0x7a, 0xf5, 0xea, 0xb1, 0xa7, 0x75,
+0xd8, 0xf3, 0xb2, 0x4e, 0xbd, 0xf5, 0xd6, 0x5b, 0x6f, 0xbd, 0xf5, 0xd6, 0xd3, 0xba, 0xac, 0xc3,
+0xde, 0xf3, 0xd4, 0xa3, 0x57, 0xaf, 0x7c, 0x9a, 0x99, 0x66, 0xb4, 0x6d, 0x56, 0xed, 0x8c, 0x39,
+0xac, 0x4b, 0xf0, 0x84, 0xdc, 0xd0, 0x26, 0x7a, 0xe5, 0x63, 0x73, 0xef, 0xc3, 0x3a, 0xec, 0x79,
+0xca, 0x67, 0x38, 0x8e, 0x43, 0x06, 0xbf, 0xcc, 0xab, 0xc7, 0xde, 0xc6, 0x65, 0xee, 0xc3, 0xb8,
+0xe5, 0x9f, 0x2b, 0xd7, 0xdc, 0xc6, 0x65, 0xce, 0xcb, 0xba, 0xac, 0xcb, 0xba, 0xac, 0xcb, 0xba,
+0xac, 0xcb, 0x3a, 0xec, 0x79, 0xf2, 0x73, 0x39, 0xad, 0xc3, 0xde, 0xf3, 0xb2, 0x4e, 0xb9, 0xb2,
+0x3d, 0xdc, 0xf8, 0x4c, 0x0f, 0x17, 0xff, 0x6b, 0x3d, 0xc7, 0x2d, 0x57, 0xaf, 0x2e, 0x97, 0x63,
+0xe4, 0xbf, 0x90,
+};
+
+const uint8_t DOG_5[] PROGMEM ={
+0x7f, 0xbf, 0x3f, 0xd3, 0xab, 0xc7, 0xde, 0x7a, 0xeb, 0x69, 0x5d, 0xd6, 0x65, 0x5d, 0xd6, 0x65,
+0x9d, 0x7a, 0xeb, 0xd1, 0x7f, 0xdd, 0x5e, 0xbd, 0x7a, 0xf5, 0xea, 0x1f, 0x9a, 0x8b, 0x7a, 0x02,
+0x6f, 0xbd, 0xf5, 0xe8, 0xd5, 0xab, 0x57, 0x8f, 0xbd, 0xf5, 0xd6, 0xd3, 0x3a, 0xec, 0x79, 0x19,
+0xb7, 0x3c, 0xe3, 0xd8, 0xd3, 0xba, 0xac, 0x53, 0x6f, 0xbd, 0xf5, 0xd6, 0x5b, 0x6f, 0xbd, 0x8d,
+0xcb, 0xba, 0xac, 0xc3, 0xde, 0x7b, 0x5e, 0xd6, 0x65, 0x5d, 0xd6, 0x65, 0x5d, 0xd6, 0x65, 0xee,
+0xbd, 0xf7, 0xde, 0x7b, 0x1f, 0xd6, 0xa9, 0xb7, 0x74, 0xd5, 0xce, 0x98, 0x03, 0x1f, 0xce, 0x69,
+0x5d, 0xd6, 0x65, 0x1d, 0xf6, 0xbc, 0x8c, 0x23, 0xff, 0xbc, 0xc6, 0xfa, 0x8f, 0x95, 0xc7, 0x8e,
+0xf4, 0x97, 0x72, 0xf5, 0x9a, 0xd3, 0x9c, 0xa7, 0x5c, 0xb9, 0x73, 0xf5, 0xd8, 0xd3, 0xba, 0x8c,
+0x23, 0x7f, 0x16, 0x8f, 0xe3, 0x32, 0xf7, 0x3c, 0xe5, 0x5f, 0x47, 0x6e, 0xe3, 0x32, 0xf7, 0x61,
+0x5d, 0xd6, 0xa9, 0xb7, 0xde, 0x7a, 0xeb, 0x69, 0x5d, 0xd6, 0x65, 0xdc, 0xf2, 0x73, 0xbd, 0x5c,
+0xf8, 0x7d, 0x5e, 0x3d, 0xe6, 0xea, 0xd5, 0xab, 0x57, 0x8f, 0x3d, 0xcd, 0x7d, 0x58, 0x97, 0x75,
+0x19, 0xb7, 0x1e, 0xfd, 0xb5, 0xb9, 0x8d, 0xc3, 0xde, 0x87, 0x75, 0x59, 0x97, 0x75, 0xea, 0x6d,
+0x5c, 0xd6, 0x25, 0xbf, 0x93, 0xe3, 0xb8, 0xac, 0xc3, 0x9e, 0x97, 0x71, 0xcb, 0x95, 0x3f, 0xcd,
+0x65, 0x5d, 0xc6, 0xad, 0x47, 0x27, 0xd7, 0xdc, 0xc6, 0xe1, 0xb0, 0x4e, 0xb9, 0xf2, 0x8f, 0x7f,
+0x8f, 0xdf, 0x91, 0x8e, 0x71, 0x99, 0x7b, 0xcf, 0xcb, 0x3a, 0xf5, 0x96, 0xab, 0x57, 0x97, 0xd7,
+0xdc, 0x7a, 0xeb, 0x2d, 0xd7, 0xdc, 0x3a, 0xd2, 0xff, 0xa0, 0xe5, 0xb4, 0xc7, 0x91, 0xcf, 0xe4,
+0x72, 0x18, 0x47, 0xfe, 0xbb, 0xcd, 0x71, 0x1c, 0x0e, 0xe3, 0xe8, 0xd5, 0xc9, 0x72, 0x74, 0x38,
+0x3a, 0x1c, 0x1d, 0x8e, 0xe1, 0x4f, 0x05,
+};
+
+const uint8_t DOG_6[] PROGMEM ={
+0x7f, 0xff, 0xbf, 0x8d, 0xc5, 0x74, 0x39, 0x32, 0x4d, 0x76, 0xe8, 0x9e, 0x87, 0x3d, 0x2f, 0xe3,
+0xe8, 0xf2, 0xd8, 0xd3, 0x3a, 0x1c, 0xd6, 0x29, 0xff, 0x15, 0xcf, 0x6d, 0x1c, 0xf6, 0x3c, 0xf5,
+0xc8, 0xe6, 0x9a, 0x5b, 0x6f, 0xbd, 0xf5, 0xd6, 0x5b, 0x6f, 0xbd, 0xf5, 0xd6, 0xd3, 0x3a, 0xec,
+0x7d, 0x58, 0xa7, 0x1e, 0xfd, 0x7b, 0x76, 0xdc, 0x7a, 0x1b, 0x97, 0x39, 0x4f, 0xfe, 0x7b, 0xe2,
+0xd8, 0xcb, 0x61, 0x9d, 0x7a, 0x1b, 0x87, 0xc3, 0x38, 0x7a, 0xed, 0xe1, 0xd0, 0x7f, 0x1d, 0x5e,
+0xbd, 0x7a, 0xf5, 0xea, 0xb1, 0xb7, 0xde, 0x7a, 0x5a, 0x87, 0xc3, 0xba, 0xac, 0xcb, 0x6a, 0xfd,
+0x34, 0x57, 0xaf, 0x5e, 0x3d, 0x8e, 0xc3, 0x61, 0x1c, 0xf9, 0xc1, 0x1e, 0xf6, 0xde, 0xfb, 0xb0,
+0x4e, 0x3d, 0xfa, 0x8c, 0x63, 0x4f, 0x73, 0xef, 0x1d, 0xb3, 0x2d, 0x7f, 0x6c, 0xfe, 0xd5, 0x3b,
+0x59, 0x8e, 0x5f, 0xc2, 0x35, 0xb7, 0x71, 0x59, 0x97, 0x75, 0xea, 0x11, 0x33, 0x86, 0xa3, 0xc3,
+0xd1, 0x5b, 0x6f, 0xbd, 0x8d, 0xcb, 0x3a, 0xec, 0x79, 0x59, 0x97, 0x75, 0x59, 0x97, 0x75, 0xea,
+0xad, 0xb7, 0xde, 0x7a, 0xeb, 0x2d, 0x57, 0x9f, 0x73, 0x1c, 0x87, 0xc3, 0xba, 0x04, 0xfe, 0x96,
+0xe8, 0x65, 0xee, 0xc3, 0xba, 0x8c, 0x5b, 0x8f, 0x5e, 0xbd, 0x7a, 0xcd, 0xad, 0xa7, 0x75, 0x59,
+0x97, 0x71, 0xcb, 0x95, 0xff, 0x4e, 0x78, 0xb9, 0xe4, 0xb3, 0x1c, 0xc7, 0xe1, 0x30, 0x8e, 0x5e,
+0xc7, 0xbc, 0x8c, 0x5b, 0xae, 0x7c, 0x36, 0xa7, 0x39, 0x4f, 0xf9, 0xaf, 0xd7, 0xca, 0x67, 0x72,
+0x39, 0x8c, 0x23, 0x7f, 0x1e, 0x8f, 0x3d, 0xcd, 0x79, 0x19, 0x47, 0x5f, 0xe5, 0xb4, 0x0e, 0x7b,
+0x5e, 0xd6, 0x65, 0x5d, 0xc6, 0x7f, 0x45, 0x32, 0x8f, 0x5e, 0xbd, 0x3a, 0x59, 0x8e, 0x7f, 0x10,
+0x1e, 0x7b, 0xeb, 0x69, 0x5d, 0xd6, 0x65, 0xdc, 0xfa, 0xab, 0x00,
+};
+
+const uint8_t *DOG[] = {
+DOG_0,
+DOG_1,
+DOG_2,
+DOG_3,
+DOG_4,
+DOG_5,
+DOG_6,
+};
+
+const uint8_t MERRY_CHRISTMAS[] PROGMEM ={
+0x7f, 0xff, 0x7f, 0xec, 0x75, 0x59, 0x97, 0xf1, 0x63, 0x7a, 0x59, 0x97, 0x75, 0xc9, 0x7f, 0x57,
+0x3f, 0x92, 0xcd, 0xe9, 0xc4, 0xe3, 0x83, 0xdb, 0xc3, 0x78, 0x7f, 0xf7, 0x72, 0x58, 0xc3, 0x36,
+0x2b, 0xcd, 0xe8, 0xb8, 0xcc, 0xf5, 0x7a, 0xf5, 0xb6, 0x1a, 0x47, 0x56, 0xea, 0x9b, 0xd5, 0xdb,
+0x6a, 0x1c, 0x59, 0xa9, 0x57, 0x66, 0x7b, 0xeb, 0x7e, 0xbc, 0xc6, 0xad, 0x63, 0xf8, 0x2f, 0xf8,
+0xfd, 0x3d, 0xfb, 0xc9, 0x78, 0xb2, 0xc6, 0xb3, 0xf7, 0x4f, 0x6e, 0xbc, 0x61, 0xa5, 0x59, 0x69,
+0x56, 0x86, 0xcb, 0x8c, 0xbc, 0x7b, 0xff, 0xbd, 0xf7, 0xdf, 0xe5, 0x74, 0x62, 0x73, 0xf4, 0xd1,
+0xc1, 0x7f, 0xcf, 0x5c, 0xbd, 0xf2, 0x39, 0xaf, 0x7c, 0xce, 0xab, 0x5f, 0xf7, 0xea, 0xd5, 0xaf,
+0x7b, 0xf5, 0xeb, 0x5e, 0xfd, 0xae, 0x87, 0x98, 0x59, 0x8f, 0x63, 0xfe, 0xab, 0xe1, 0xea, 0xd5,
+0xab, 0x1f, 0xef, 0xad, 0x7f, 0x3d, 0x6f, 0xbd, 0xf9, 0x1f, 0x9f, 0xdd, 0x37, 0x7b, 0xdc, 0x7a,
+0x1b, 0x87, 0x4b, 0x17, 0xa3, 0x79, 0xf2, 0x7e, 0x89, 0x87, 0x98, 0x1d, 0xba, 0xe7, 0xc9, 0xf7,
+0xdd, 0xfb, 0x22, 0x1e, 0x62, 0xb6, 0x2f, 0x1a, 0xb3, 0x63, 0x7a, 0xe7, 0x38, 0x0e, 0x7b, 0xc7,
+0xec, 0xd0, 0xc3, 0x3a, 0x79, 0x8b, 0xe9, 0xfb, 0xc6, 0xec, 0x3c, 0xde, 0x7b, 0x9d, 0x34, 0x3b,
+0x74, 0xef, 0xc3, 0x38, 0x05, 0x0f, 0x31, 0x7b, 0x1f, 0xc6, 0xb7, 0xc6, 0x65, 0xee, 0x98, 0x1d,
+0xba, 0xe7, 0xc9, 0xe7, 0x39, 0xcd, 0x5d, 0xb2, 0x63, 0xf6, 0xbc, 0x8c, 0x57, 0xa3, 0xcf, 0x46,
+0xbf, 0x96, 0xcb, 0xde, 0x25, 0x6f, 0xde, 0x7f, 0xe7, 0xfd, 0xfb, 0xf7, 0xdf, 0x7b, 0x7f, 0xb7,
+0x23, 0x75, 0x6b, 0xd2, 0xac, 0x0c, 0x03, 0x51, 0x0f, 0x31, 0x7d, 0xf7, 0x7e, 0xf2, 0x9d, 0xf7,
+0xef, 0xdf, 0x7f, 0xe7, 0xfd, 0xbd, 0xd1, 0x8b, 0x3a, 0x92, 0xba, 0xad, 0x89, 0xfa, 0xfe, 0x6e,
+0x9b, 0x69, 0xad, 0x59, 0x69, 0x96, 0xc1, 0xb0, 0x34, 0x3b, 0xbc, 0xe7, 0xd8, 0xd3, 0xba, 0xac,
+0xcb, 0xba, 0x8c, 0x5b, 0x9e, 0xe7, 0xb2, 0x2e, 0xf9, 0xd8, 0xba, 0xac, 0x2f, 0xad, 0xcb, 0xfa,
+0xf2, 0xba, 0xac, 0xc7, 0xde, 0xc6, 0x65, 0x5d, 0xd6, 0x65, 0xdc, 0xf2, 0xb1, 0x71, 0x59, 0x97,
+0xf5, 0x38, 0x97, 0x75, 0xc9, 0xfb, 0x5c, 0xd6, 0x25, 0x1f, 0x5b, 0x97, 0xf5, 0x36, 0xa7, 0x75,
+0x59, 0x97, 0x71, 0xec, 0x65, 0x5d, 0xf2, 0xba, 0xa7, 0x75, 0x59, 0x97, 0x75, 0xea, 0x91, 0x0d,
+};
+
+
diff --git a/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/voices.h b/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/voices.h
new file mode 100644
index 0000000..efd8d84
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/examples/Sample2-Complex/voices.h
@@ -0,0 +1,594 @@
+
+
+const uint8_t one_q6[] PROGMEM ={
+0x13, 0x60, 0x37, 0x00, 0x94, 0x5d, 0x30, 0x4e, 0x61, 0x24, 0x30, 0x01, 0x91, 0x5f, 0x33, 0x48,
+0x4e, 0x38, 0x2b, 0x05, 0x90, 0x5a, 0x37, 0x49, 0x4c, 0x3a, 0x26, 0x07, 0x88, 0x47, 0x3e, 0x50,
+0x44, 0x3d, 0x23, 0x0f, 0x87, 0x48, 0x3b, 0x52, 0x43, 0x40, 0x1c, 0x07, 0x98, 0xfe, 0x08, 0x77,
+0x3a, 0x35, 0x16, 0x1e, 0x93, 0x72, 0x0c, 0x7d, 0x36, 0x34, 0x11, 0x8a, 0x95, 0xf9, 0x83, 0xf5,
+0x20, 0x3e, 0x0e, 0xff, 0x8b, 0x71, 0x0c, 0x7e, 0x2b, 0x3b, 0x0d, 0xff, 0x8d, 0x7a, 0x0b, 0x77,
+0x26, 0x43, 0x2d, 0xff, 0x91, 0xf3, 0x88, 0xf6, 0x10, 0x4c, 0x0d, 0xff, 0x95, 0xeb, 0x8e, 0xef,
+0x84, 0x5c, 0x0e, 0xff, 0x90, 0xf5, 0x84, 0xfe, 0x07, 0x5b, 0x10, 0xff, 0x8c, 0xfb, 0x01, 0x75,
+0x11, 0x5b, 0x13, 0x51, 0x93, 0xf0, 0x8b, 0xfd, 0x03, 0x67, 0x1f, 0x05, 0x92, 0x79, 0x05, 0x67,
+0x30, 0x4a, 0x26, 0x02, 0x94, 0x7a, 0x0a, 0x59, 0x3f, 0x45, 0x0c, 0x02, 0x8e, 0x69, 0x2f, 0x3d,
+0x42, 0x43, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+//File: one.wav
+//Time: 427 ms
+//Size: 154 bytes
+//Quality: 6
+
+const uint8_t two_q6[] PROGMEM ={
+0x16, 0x60, 0x00, 0x02, 0x1a, 0x40, 0x3b, 0x35, 0x40, 0x3d, 0x0f, 0x08, 0x2a, 0x3a, 0x3b, 0x40,
+0x2b, 0x48, 0x30, 0x06, 0x21, 0x4e, 0x2e, 0x3f, 0x27, 0x49, 0x11, 0x50, 0x86, 0x5a, 0x29, 0x4f,
+0x40, 0x4a, 0x10, 0xfb, 0x8d, 0x75, 0x11, 0x6e, 0x16, 0x5f, 0x09, 0x2e, 0x8c, 0xf5, 0x84, 0xff,
+0x09, 0x58, 0x24, 0x3d, 0x09, 0x6c, 0x03, 0x67, 0x30, 0x4f, 0x08, 0xb1, 0x08, 0x72, 0x00, 0x75,
+0x1f, 0x5a, 0x0a, 0xff, 0x85, 0x74, 0x13, 0x79, 0x07, 0x5d, 0x0c, 0xff, 0x8f, 0xfa, 0x07, 0x6e,
+0x28, 0x49, 0x0d, 0xa4, 0x92, 0xfc, 0x0a, 0x7c, 0x0c, 0x5b, 0x0e, 0x40, 0x90, 0x78, 0x06, 0xfe,
+0x13, 0x58, 0x10, 0x23, 0x8e, 0x6c, 0x0f, 0x71, 0x2e, 0x49, 0x12, 0x12, 0x8a, 0x5d, 0x19, 0x6f,
+0x28, 0x50, 0x17, 0x0e, 0x94, 0x61, 0x39, 0x5a, 0x26, 0x4d, 0x1c, 0x06, 0x98, 0x64, 0x41, 0x5d,
+0x1e, 0x4c, 0x21, 0x02, 0x9a, 0x6d, 0x3c, 0x58, 0x28, 0x48, 0x27, 0x00, 0x9e, 0x78, 0x48, 0x60,
+0x02, 0x5a, 0x2f, 0x00, 0x93, 0x52, 0x45, 0x48, 0x42, 0x3d, 0x36, 0x01, 0x8e, 0x52, 0x46, 0x37,
+0x48, 0x41, 0x01, 0x00, 0x58, 0x22, 0x30, 0x3d, 0x31, 0x2c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00,
+};
+
+//File: two.wav
+//Time: 495 ms
+//Size: 178 bytes
+//Quality: 6
+
+const uint8_t three_q6[] PROGMEM ={
+0x16, 0x60, 0x00, 0x00, 0x06, 0x52, 0x2f, 0x4b, 0x41, 0x2e, 0x00, 0x00, 0x8f, 0x6b, 0x1d, 0x5c,
+0x25, 0x4e, 0x28, 0x03, 0x98, 0xf4, 0x02, 0x79, 0x0f, 0x5a, 0x23, 0x04, 0x9b, 0xed, 0x06, 0x63,
+0x26, 0x4f, 0x1d, 0x0a, 0x9d, 0xe9, 0x15, 0x45, 0x39, 0x48, 0x16, 0x23, 0x9d, 0xe5, 0x00, 0x53,
+0x33, 0x4f, 0x11, 0x69, 0x97, 0xec, 0x80, 0x5f, 0x21, 0x5e, 0x0e, 0xf1, 0x8d, 0xf6, 0x84, 0x6a,
+0x21, 0x5e, 0x0b, 0xff, 0x83, 0xf8, 0x8e, 0x78, 0x21, 0x5e, 0x0a, 0xb8, 0x02, 0xfd, 0x8d, 0x75,
+0x15, 0x69, 0x0a, 0xcf, 0x10, 0x6e, 0x01, 0x60, 0x21, 0x62, 0x0b, 0x9b, 0x15, 0x63, 0x82, 0x59,
+0x30, 0x5d, 0x0d, 0x6b, 0x1a, 0x53, 0x12, 0x45, 0x3e, 0x5a, 0x0e, 0x47, 0x23, 0x48, 0x0c, 0x3c,
+0x41, 0x60, 0x10, 0x2e, 0x2e, 0x2e, 0x1a, 0x35, 0x4f, 0x58, 0x11, 0x16, 0x2d, 0x31, 0x1c, 0x2d,
+0x51, 0x5c, 0x16, 0x0e, 0x2f, 0x2c, 0x16, 0x34, 0x4d, 0x5d, 0x1f, 0x08, 0x15, 0x3a, 0x27, 0x39,
+0x50, 0x4c, 0x2a, 0x02, 0x1f, 0x2c, 0x24, 0x36, 0x50, 0x55, 0x12, 0x01, 0x21, 0x28, 0x24, 0x35,
+0x53, 0x52, 0x22, 0x02, 0x87, 0x66, 0x28, 0x4c, 0x3a, 0x3e, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00,
+};
+
+//File: three.wav
+//Time: 495 ms
+//Size: 178 bytes
+//Quality: 6
+
+const uint8_t merry_q6[] PROGMEM ={
+0x1c, 0x64, 0x12, 0x00, 0x42, 0x39, 0x42, 0x38, 0x37, 0x43, 0x19, 0x00, 0x2b, 0x33, 0x43, 0x3f,
+0x3d, 0x35, 0x7e, 0x00, 0x2c, 0x3e, 0x37, 0x47, 0x40, 0x41, 0x00, 0x00, 0x27, 0x3a, 0x46, 0x3d,
+0x47, 0x46, 0x07, 0x0c, 0x92, 0xf3, 0x0e, 0x6e, 0x20, 0x51, 0x07, 0x1d, 0x89, 0x7f, 0x19, 0x65,
+0x27, 0x54, 0x22, 0x19, 0x80, 0x65, 0x27, 0x5a, 0x37, 0x4a, 0x18, 0x0b, 0x8e, 0x7c, 0x17, 0x69,
+0x29, 0x4d, 0x2f, 0x03, 0x9a, 0xf0, 0x18, 0x69, 0x1a, 0x50, 0x02, 0x02, 0x9d, 0xe5, 0x01, 0x6e,
+0x21, 0x4b, 0x01, 0x01, 0x8f, 0x6a, 0x33, 0x4c, 0x38, 0x43, 0x07, 0x02, 0x85, 0x6d, 0x27, 0x59,
+0x27, 0x56, 0x07, 0x27, 0x81, 0x7c, 0x13, 0x6c, 0x1e, 0x5b, 0x23, 0x44, 0x83, 0x73, 0x20, 0x62,
+0x27, 0x58, 0x23, 0x22, 0x8d, 0xfd, 0x0e, 0x67, 0x2d, 0x52, 0x18, 0x09, 0x9b, 0xe9, 0x0f, 0x4b,
+0x4b, 0x3a, 0x17, 0x07, 0x96, 0xfa, 0x20, 0x5e, 0x2f, 0x47, 0x17, 0x00, 0x97, 0xfe, 0x1b, 0x66,
+0x2d, 0x41, 0x03, 0x01, 0x95, 0xf9, 0x21, 0x51, 0x3d, 0x43, 0x07, 0x02, 0x94, 0xf6, 0x15, 0x5a,
+0x36, 0x4a, 0x0c, 0x11, 0x95, 0xe7, 0x91, 0xf8, 0x16, 0x55, 0x3d, 0x37, 0x89, 0x7f, 0x10, 0x69,
+0x23, 0x51, 0x3d, 0x43, 0x8b, 0x79, 0x14, 0x66, 0x25, 0x52, 0x3d, 0x41, 0x8b, 0x76, 0x18, 0x66,
+0x1c, 0x57, 0x3d, 0x36, 0x87, 0x6d, 0x1b, 0x64, 0x23, 0x53, 0x3d, 0x33, 0x8e, 0x7c, 0x13, 0x68,
+0x27, 0x4a, 0x3d, 0x34, 0x88, 0x76, 0x12, 0x6f, 0x1f, 0x50, 0x3d, 0x2d, 0x8b, 0xfe, 0x07, 0x77,
+0x1b, 0x50, 0x3e, 0x37, 0x83, 0x70, 0x11, 0x71, 0x1f, 0x55, 0x3e, 0x2f, 0x82, 0x68, 0x1b, 0x62,
+0x2d, 0x51, 0x3d, 0x4a, 0x85, 0x6b, 0x1b, 0x63, 0x31, 0x4c, 0x3d, 0x3c, 0x86, 0x6f, 0x19, 0x66,
+0x2c, 0x4d, 0x3d, 0x21, 0x90, 0x7f, 0x10, 0x71, 0x20, 0x4c, 0x3e, 0x13, 0x90, 0xff, 0x0c, 0x74,
+0x15, 0x56, 0x3e, 0x0a, 0x95, 0xef, 0x8a, 0x79, 0x1c, 0x50, 0x08, 0x08, 0x92, 0x71, 0x33, 0x46,
+0x3d, 0x43, 0x08, 0x24, 0x94, 0xfe, 0x20, 0x57, 0x34, 0x47, 0x5a, 0x31, 0x91, 0xfc, 0x17, 0x68,
+0x1d, 0x54, 0x10, 0x41, 0x8b, 0x65, 0x30, 0x61, 0x1b, 0x52, 0x07, 0x3b, 0x8e, 0x68, 0x31, 0x63,
+0x1f, 0x4c, 0x59, 0x3f, 0x8f, 0x6f, 0x2d, 0x5f, 0x2a, 0x45, 0x59, 0x4f, 0x8e, 0x75, 0x29, 0x56,
+0x34, 0x42, 0x59, 0x4d, 0x8a, 0x6e, 0x2b, 0x55, 0x34, 0x48, 0x59, 0x54, 0x86, 0x6a, 0x2b, 0x53,
+0x37, 0x46, 0x59, 0x3e, 0x8a, 0x6e, 0x1c, 0x63, 0x31, 0x47, 0x07, 0x2b, 0x87, 0x6c, 0x18, 0x6b,
+0x2a, 0x4a, 0x59, 0x37, 0x90, 0x77, 0x1f, 0x66, 0x23, 0x4d, 0x10, 0x38, 0x92, 0xfb, 0x1e, 0x5e,
+0x27, 0x4d, 0x10, 0x21, 0x94, 0x7e, 0x25, 0x58, 0x2f, 0x45, 0x1a, 0x0f, 0x91, 0x78, 0x2e, 0x45,
+0x3e, 0x44, 0x09, 0x0b, 0x91, 0x72, 0x2b, 0x54, 0x33, 0x49, 0x09, 0x17, 0x99, 0xf4, 0x25, 0x4f,
+0x2f, 0x4b, 0x36, 0x1f, 0x97, 0xf2, 0x19, 0x58, 0x34, 0x47, 0x09, 0x35, 0x96, 0xf8, 0x1e, 0x55,
+0x33, 0x47, 0x09, 0x34, 0x96, 0xf1, 0x0a, 0x64, 0x2d, 0x49, 0x36, 0x34, 0x94, 0xf8, 0x0d, 0x6f,
+0x22, 0x4d, 0x09, 0x42, 0x94, 0xf4, 0x0f, 0x64, 0x2d, 0x48, 0x35, 0x39, 0x90, 0x78, 0x24, 0x59,
+0x33, 0x46, 0x09, 0x3a, 0x8c, 0x6e, 0x29, 0x59, 0x2c, 0x4d, 0x35, 0x36, 0x91, 0xfe, 0x1b, 0x68,
+0x21, 0x4f, 0x08, 0x35, 0x92, 0xfc, 0x17, 0x62, 0x29, 0x4a, 0x09, 0x2d, 0x94, 0xf8, 0x16, 0x58,
+0x35, 0x47, 0x09, 0x18, 0x99, 0xe7, 0x84, 0x69, 0x31, 0x45, 0x10, 0x13, 0x9a, 0xe8, 0x83, 0x6a,
+0x29, 0x48, 0x35, 0x0c, 0x96, 0xf5, 0x18, 0x58, 0x33, 0x45, 0x0e, 0x03, 0x92, 0xfe, 0x11, 0x61,
+0x2a, 0x4b, 0x09, 0x03, 0x8e, 0x6f, 0x26, 0x53, 0x29, 0x53, 0x07, 0x1a, 0x98, 0xef, 0x03, 0x6f,
+0x23, 0x49, 0x07, 0x54, 0x92, 0xf4, 0x0f, 0x5b, 0x32, 0x43, 0x07, 0x5f, 0x89, 0x7d, 0x16, 0x60,
+0x2e, 0x47, 0x22, 0x5c, 0x88, 0x79, 0x1a, 0x56, 0x2f, 0x48, 0x22, 0x43, 0x8f, 0xf8, 0x10, 0x57,
+0x31, 0x46, 0x07, 0x3c, 0x8c, 0x7f, 0x16, 0x5e, 0x26, 0x4d, 0x07, 0x30, 0x86, 0x6a, 0x24, 0x60,
+0x28, 0x4a, 0x07, 0x2d, 0x8d, 0x7e, 0x12, 0x5e, 0x31, 0x49, 0x07, 0x1b, 0x97, 0xef, 0x03, 0x67,
+0x28, 0x4e, 0x22, 0x13, 0x97, 0xf6, 0x1b, 0x46, 0x4c, 0x3b, 0x59, 0x0d, 0x97, 0x7f, 0x3a, 0x37,
+0x46, 0x3e, 0x23, 0x07, 0x9c, 0xe8, 0x0a, 0x4b, 0x4b, 0x3a, 0x5a, 0x04, 0x95, 0x7f, 0x1e, 0x49,
+0x47, 0x40, 0x67, 0x03, 0x9a, 0xf3, 0x14, 0x5d, 0x33, 0x45, 0x63, 0x02, 0x95, 0x7c, 0x1c, 0x65,
+0x22, 0x50, 0x07, 0x02, 0x94, 0xfa, 0x15, 0x5c, 0x29, 0x4b, 0x08, 0x14, 0x94, 0xee, 0x87, 0x72,
+0x1f, 0x51, 0x5b, 0x1b, 0x92, 0xf2, 0x84, 0x71, 0x1e, 0x53, 0x00, 0x17, 0x94, 0xf9, 0x16, 0x57,
+0x30, 0x4b, 0x23, 0x19, 0x90, 0x71, 0x28, 0x58, 0x2e, 0x48, 0x5a, 0x0f, 0x9a, 0xe7, 0x85, 0x6e,
+0x28, 0x49, 0x23, 0x0c, 0x9d, 0xe3, 0x91, 0x7f, 0x1d, 0x4b, 0x23, 0x05, 0x9f, 0xde, 0x96, 0x77,
+0x29, 0x48, 0x3f, 0x05, 0x9e, 0xe1, 0x8f, 0x71, 0x2a, 0x46, 0x23, 0x0c, 0x89, 0x70, 0x08, 0xfc,
+0x18, 0x50, 0x23, 0x02, 0x98, 0xef, 0x0d, 0x6b, 0x24, 0x4d, 0x23, 0x01, 0x97, 0xf8, 0x1e, 0x57,
+0x36, 0x45, 0x22, 0x00, 0x97, 0xef, 0x0e, 0x5e, 0x34, 0x47, 0x17, 0x00, 0x8c, 0x71, 0x38, 0x3f,
+0x39, 0x4b, 0x23, 0x00, 0x84, 0x6e, 0x31, 0x44, 0x3a, 0x49, 0x22, 0x00, 0x00, 0x64, 0x34, 0x45,
+0x3c, 0x48, 0x08, 0x04, 0x08, 0xf7, 0x20, 0x5d, 0x3f, 0x43, 0x15, 0x30, 0x19, 0x73, 0x29, 0x55,
+0x35, 0x4b, 0x07, 0x36, 0x03, 0x6d, 0x18, 0x61, 0x25, 0x59, 0x23, 0x2b, 0x8d, 0x7e, 0x17, 0x6b,
+0x1d, 0x56, 0x3e, 0x12, 0x97, 0xf1, 0x14, 0x5b, 0x2d, 0x4c, 0x3d, 0x05, 0x99, 0xef, 0x0f, 0x58,
+0x3c, 0x3f, 0x00, 0x01, 0x91, 0xff, 0x13, 0x50, 0x44, 0x40, 0x3d, 0x01, 0x85, 0x76, 0x15, 0x50,
+0x3b, 0x3d, 0x07, 0x24, 0x05, 0x74, 0x29, 0x4c, 0x3c, 0x48, 0x4c, 0x59, 0x01, 0x75, 0x20, 0x56,
+0x37, 0x48, 0x0c, 0x4f, 0x82, 0x72, 0x20, 0x5c, 0x29, 0x51, 0x22, 0x32, 0x80, 0x73, 0x17, 0x60,
+0x26, 0x56, 0x0c, 0x1a, 0x87, 0x7a, 0x15, 0x56, 0x33, 0x50, 0x0c, 0x07, 0x94, 0xf2, 0x13, 0x49,
+0x47, 0x41, 0x30, 0x02, 0x89, 0x75, 0x18, 0x50, 0x34, 0x49, 0x0c, 0x04, 0x91, 0x7d, 0x1a, 0x67,
+0x1e, 0x50, 0x0c, 0x34, 0x85, 0x6f, 0x2d, 0x4e, 0x35, 0x4c, 0x14, 0x76, 0x09, 0x66, 0x17, 0x5f,
+0x2c, 0x4b, 0x65, 0x60, 0x8c, 0xf9, 0x02, 0x6c, 0x23, 0x4e, 0x65, 0x71, 0x88, 0x72, 0x25, 0x47,
+0x3c, 0x44, 0x64, 0x85, 0x03, 0x61, 0x34, 0x54, 0x23, 0x4d, 0x65, 0x7e, 0x87, 0x77, 0x13, 0x71,
+0x13, 0x53, 0x65, 0x6c, 0x88, 0x73, 0x28, 0x57, 0x2b, 0x4c, 0x28, 0x66, 0x00, 0x5b, 0x32, 0x55,
+0x33, 0x49, 0x0a, 0x55, 0x06, 0x54, 0x42, 0x4c, 0x26, 0x55, 0x29, 0x58, 0x0c, 0x57, 0x35, 0x56,
+0x29, 0x4b, 0x65, 0x4d, 0x15, 0x46, 0x3b, 0x59, 0x31, 0x4d, 0x28, 0x49, 0x22, 0x4b, 0x2b, 0x53,
+0x39, 0x51, 0x28, 0x44, 0x1d, 0x57, 0x2e, 0x52, 0x31, 0x48, 0x10, 0x31, 0x27, 0x5c, 0x39, 0x50,
+0x30, 0x3f, 0x04, 0x16, 0x13, 0x73, 0x26, 0x4f, 0x37, 0x3e, 0x04, 0x09, 0x84, 0x70, 0x2c, 0x4c,
+0x37, 0x49, 0x29, 0x1e, 0x86, 0x70, 0x24, 0x50, 0x34, 0x4f, 0x0b, 0x66, 0x00, 0x71, 0x1c, 0x60,
+0x2b, 0x4e, 0x0b, 0x73, 0x06, 0x66, 0x2e, 0x4b, 0x36, 0x4d, 0x0b, 0x6a, 0x09, 0x63, 0x28, 0x4d,
+0x36, 0x51, 0x2b, 0x4c, 0x10, 0x5d, 0x2e, 0x4d, 0x37, 0x4e, 0x23, 0x3a, 0x0c, 0x6f, 0x25, 0x53,
+0x30, 0x53, 0x1a, 0x22, 0x18, 0x65, 0x36, 0x4b, 0x37, 0x57, 0x11, 0x0f, 0x11, 0x75, 0x20, 0x60,
+0x2e, 0x4b, 0x0b, 0x3b, 0x1f, 0x66, 0x2a, 0x57, 0x29, 0x49, 0x29, 0x60, 0x09, 0x6a, 0x25, 0x5b,
+0x20, 0x56, 0x47, 0x77, 0x06, 0x67, 0x1e, 0x60, 0x27, 0x54, 0x0a, 0x48, 0x04, 0x6a, 0x23, 0x59,
+0x25, 0x59, 0x0a, 0x07, 0x8d, 0x71, 0x27, 0x50, 0x1e, 0x5c, 0x17, 0x06, 0x12, 0x56, 0x37, 0x55,
+0x20, 0x4f, 0x22, 0x40, 0x1a, 0x6b, 0x2e, 0x53, 0x3a, 0x44, 0x22, 0x7f, 0x09, 0x68, 0x28, 0x5c,
+0x27, 0x50, 0x22, 0xb5, 0x04, 0x69, 0x2a, 0x58, 0x2e, 0x4b, 0x59, 0xbc, 0x04, 0x5e, 0x36, 0x57,
+0x2f, 0x4a, 0x11, 0x98, 0x84, 0x60, 0x34, 0x56, 0x32, 0x44, 0x59, 0x8b, 0x8a, 0x76, 0x22, 0x56,
+0x36, 0x43, 0x59, 0x55, 0x93, 0xf7, 0x1a, 0x4f, 0x41, 0x3c, 0x59, 0x33, 0x93, 0xf9, 0x15, 0x67,
+0x1d, 0x51, 0x58, 0x1c, 0x92, 0x7d, 0x18, 0x69, 0x16, 0x57, 0x59, 0x14, 0x93, 0xfd, 0x16, 0x72,
+0x09, 0x5e, 0x59, 0x0d, 0x92, 0x76, 0x36, 0x43, 0x2a, 0x52, 0x23, 0x0b, 0x93, 0x7f, 0x29, 0x4a,
+0x33, 0x48, 0x57, 0x07, 0x8e, 0x77, 0x18, 0x5f, 0x28, 0x50, 0x58, 0x07, 0x8a, 0x68, 0x23, 0x63,
+0x28, 0x4b, 0x22, 0x06, 0x8f, 0x6d, 0x36, 0x4f, 0x33, 0x47, 0x23, 0x06, 0x83, 0x64, 0x2c, 0x5c,
+0x2b, 0x49, 0x01, 0x09, 0x82, 0xf5, 0x11, 0x75, 0x17, 0x5f, 0x15, 0x4c, 0x84, 0xf9, 0x07, 0x70,
+0x1e, 0x58, 0x24, 0x66, 0x09, 0x6a, 0x22, 0x5d, 0x21, 0x5b, 0x3d, 0x78, 0x0d, 0x6e, 0x21, 0x60,
+0x22, 0x54, 0x3d, 0x81, 0x0c, 0x68, 0x21, 0x60, 0x26, 0x56, 0x3d, 0x7d, 0x05, 0x68, 0x29, 0x5c,
+0x1a, 0x5f, 0x3d, 0x9d, 0x08, 0x61, 0x2e, 0x55, 0x27, 0x57, 0x3e, 0x8b, 0x09, 0x63, 0x2f, 0x5a,
+0x25, 0x57, 0x3e, 0x75, 0x06, 0x67, 0x29, 0x5f, 0x1e, 0x5c, 0x3e, 0x83, 0x0c, 0x61, 0x2a, 0x5c,
+0x28, 0x53, 0x3e, 0x6c, 0x07, 0x64, 0x27, 0x5f, 0x2b, 0x4f, 0x3d, 0x69, 0x04, 0x65, 0x29, 0x5d,
+0x29, 0x4f, 0x3d, 0x5c, 0x02, 0x63, 0x2b, 0x5b, 0x27, 0x51, 0x3d, 0x4a, 0x83, 0x72, 0x18, 0x66,
+0x1e, 0x55, 0x3d, 0x39, 0x82, 0x73, 0x15, 0x64, 0x1f, 0x53, 0x3d, 0x3c, 0x03, 0x69, 0x1f, 0x5b,
+0x20, 0x55, 0x3e, 0x3b, 0x05, 0x64, 0x24, 0x5c, 0x27, 0x4d, 0x3e, 0x2c, 0x85, 0x7a, 0x0e, 0x69,
+0x25, 0x4d, 0x3e, 0x32, 0x87, 0x79, 0x14, 0x66, 0x25, 0x53, 0x3e, 0x28, 0x8d, 0xf8, 0x08, 0x6f,
+0x23, 0x52, 0x3e, 0x1e, 0x8f, 0xf3, 0x04, 0x73, 0x1c, 0x55, 0x3d, 0x14, 0x95, 0xe7, 0x8f, 0xfa,
+0x11, 0x5b, 0x3e, 0x12, 0x91, 0xef, 0x83, 0x78, 0x1b, 0x56, 0x3e, 0x12, 0x90, 0xf5, 0x0a, 0x65,
+0x25, 0x55, 0x3e, 0x11, 0x8f, 0xf2, 0x84, 0x78, 0x1e, 0x51, 0x3e, 0x0c, 0x91, 0xee, 0x88, 0x7a,
+0x14, 0x58, 0x3e, 0x0f, 0x8f, 0xf1, 0x83, 0x7a, 0x17, 0x56, 0x3e, 0x0a, 0x91, 0xee, 0x87, 0xfe,
+0x10, 0x5d, 0x3d, 0x07, 0x91, 0xf4, 0x0d, 0x65, 0x1c, 0x5c, 0x3d, 0x04, 0x8f, 0xf3, 0x08, 0x6c,
+0x16, 0x61, 0x3d, 0x03, 0x86, 0x7f, 0x11, 0x68, 0x0f, 0x63, 0x3d, 0x02, 0x84, 0x76, 0x1b, 0x5b,
+0x14, 0x60, 0x3d, 0x01, 0x8b, 0x78, 0x22, 0x55, 0x21, 0x56, 0x28, 0x01, 0x91, 0x75, 0x13, 0x6e,
+0x0b, 0x5c, 0x2a, 0x01, 0x85, 0x5b, 0x21, 0x5a, 0x2e, 0x47, 0x2e, 0x03, 0x8e, 0x7c, 0x18, 0x52,
+0x2b, 0x4c, 0x31, 0x0a, 0x89, 0xfc, 0x12, 0x54, 0x35, 0x3d, 0x30, 0x1a, 0x0f, 0x6b, 0x1a, 0x4c,
+0x2a, 0x47, 0x22, 0x28, 0x20, 0x55, 0x23, 0x3b, 0x2d, 0x4d, 0x22, 0x2c, 0x1a, 0x55, 0x24, 0x3a,
+0x3e, 0x40, 0x23, 0x26, 0x15, 0x54, 0x22, 0x40, 0x39, 0x45, 0x22, 0x22, 0x17, 0x4d, 0x21, 0x3e,
+0x3f, 0x47, 0x22, 0x1f, 0x12, 0x49, 0x27, 0x46, 0x34, 0x4b, 0x22, 0x1a, 0x0c, 0x4b, 0x2f, 0x40,
+0x37, 0x4a, 0x22, 0x1e, 0x05, 0x55, 0x22, 0x51, 0x30, 0x4a, 0x22, 0x12, 0x83, 0x5c, 0x24, 0x4f,
+0x30, 0x4c, 0x20, 0x11, 0x83, 0x5f, 0x1a, 0x54, 0x2a, 0x55, 0x22, 0x10, 0x06, 0x47, 0x38, 0x3a,
+0x31, 0x57, 0x22, 0x0b, 0x84, 0x57, 0x32, 0x37, 0x39, 0x54, 0x22, 0x07, 0x80, 0x57, 0x28, 0x3d,
+0x38, 0x53, 0x24, 0x03, 0x8c, 0x57, 0x37, 0x47, 0x3d, 0x41, 0x22, 0x03, 0x8d, 0x4e, 0x4b, 0x44,
+0x26, 0x52, 0x1d, 0x07, 0x85, 0x41, 0x4b, 0x36, 0x4c, 0x3f, 0x19, 0x31, 0x2c, 0x1b, 0x3a, 0x30,
+0x4b, 0x57, 0x16, 0x71, 0x2f, 0x26, 0x35, 0x25, 0x54, 0x5c, 0x13, 0xd5, 0x28, 0x2c, 0x44, 0x24,
+0x4f, 0x59, 0x13, 0xd1, 0x1a, 0x3b, 0x42, 0x22, 0x52, 0x52, 0x14, 0x71, 0x00, 0x62, 0x2d, 0x3a,
+0x4b, 0x40, 0x50, 0x34, 0x81, 0x5c, 0x35, 0x42, 0x3c, 0x4b, 0x3d, 0x4c, 0x23, 0x28, 0x54, 0x40,
+0x30, 0x56, 0x3e, 0x3f, 0x29, 0x22, 0x5a, 0x42, 0x36, 0x4d, 0x3e, 0x2c, 0x2d, 0x1d, 0x5c, 0x47,
+0x35, 0x4c, 0x3d, 0x21, 0x2b, 0x1a, 0x5d, 0x42, 0x2b, 0x5b, 0x3d, 0x1b, 0x36, 0x17, 0x50, 0x4c,
+0x34, 0x51, 0x80, 0x18, 0x4c, 0x16, 0x39, 0x4f, 0x45, 0x4c, 0x80, 0x12, 0x54, 0x0f, 0x35, 0x4d,
+0x40, 0x4c, 0x80, 0x0f, 0x53, 0x1a, 0x34, 0x48, 0x42, 0x4d, 0x80, 0x0b, 0x69, 0x22, 0x10, 0x3c,
+0x5b, 0x4f, 0x80, 0x09, 0x6e, 0x27, 0x08, 0x31, 0x58, 0x55, 0x18, 0x05, 0x48, 0x1b, 0x10, 0x34,
+0x53, 0x55, 0x18, 0x07, 0x32, 0x32, 0x05, 0x36, 0x42, 0x67, 0x17, 0x0e, 0x37, 0x30, 0x06, 0x30,
+0x46, 0x67, 0x16, 0x29, 0x27, 0x3a, 0x1e, 0x2a, 0x4a, 0x59, 0x14, 0x29, 0x0f, 0x4b, 0x2a, 0x38,
+0x3c, 0x51, 0x14, 0x2f, 0x04, 0x54, 0x2c, 0x43, 0x29, 0x58, 0x14, 0x3a, 0x04, 0x55, 0x2f, 0x41,
+0x2e, 0x53, 0x13, 0x3b, 0x07, 0x41, 0x42, 0x3c, 0x2f, 0x59, 0x12, 0x4d, 0x14, 0x24, 0x56, 0x3c,
+0x34, 0x59, 0x12, 0xa1, 0x18, 0x26, 0x53, 0x40, 0x3a, 0x4e, 0x11, 0xd8, 0x12, 0x34, 0x57, 0x3f,
+0x3a, 0x45, 0x10, 0xf3, 0x18, 0x33, 0x56, 0x46, 0x33, 0x46, 0x10, 0xdd, 0x16, 0x3e, 0x3f, 0x52,
+0x3c, 0x3e, 0x10, 0x7f, 0x12, 0x3c, 0x42, 0x46, 0x42, 0x44, 0x11, 0x30, 0x1b, 0x3c, 0x2c, 0x3c,
+0x41, 0x4b, 0x12, 0x31, 0x20, 0x2f, 0x2e, 0x39, 0x4a, 0x4b, 0x14, 0x16, 0x1d, 0x2a, 0x36, 0x30,
+0x4b, 0x51, 0x15, 0x33, 0x23, 0x2d, 0x31, 0x39, 0x45, 0x4f, 0x15, 0xc5, 0x2b, 0x32, 0x3d, 0x36,
+0x3c, 0x52, 0x15, 0xdb, 0x27, 0x34, 0x45, 0x30, 0x3e, 0x5b, 0x3d, 0xf0, 0x25, 0x3c, 0x39, 0x3a,
+0x42, 0x57, 0x3d, 0xfc, 0x20, 0x3f, 0x39, 0x3e, 0x40, 0x57, 0x15, 0xaa, 0x17, 0x4a, 0x2e, 0x3f,
+0x43, 0x52, 0x3e, 0x77, 0x8c, 0x7c, 0x19, 0x46, 0x43, 0x47, 0x16, 0x48, 0x83, 0x69, 0x21, 0x3f,
+0x4d, 0x42, 0x17, 0x4d, 0x80, 0x61, 0x24, 0x4d, 0x3a, 0x4c, 0x17, 0x7c, 0x14, 0x4e, 0x26, 0x40,
+0x47, 0x4d, 0x17, 0x7e, 0x2a, 0x3b, 0x32, 0x36, 0x40, 0x4f, 0x17, 0x6e, 0x2b, 0x38, 0x29, 0x38,
+0x4f, 0x49, 0x17, 0x47, 0x14, 0x53, 0x26, 0x40, 0x5b, 0x30, 0x22, 0x11, 0x86, 0x64, 0x3d, 0x46,
+0x37, 0x4b, 0x22, 0x09, 0x8c, 0x75, 0x2c, 0x4f, 0x35, 0x4a, 0x22, 0x06, 0x83, 0x62, 0x30, 0x4e,
+0x41, 0x3e, 0x2d, 0x05, 0x11, 0x5d, 0x4d, 0x31, 0x3f, 0x3c, 0x0b, 0x05, 0x21, 0x50, 0x52, 0x3f,
+0x3e, 0x3d, 0x0d, 0x0d, 0x1d, 0x5f, 0x35, 0x3e, 0x3d, 0x39, 0x1d, 0x1e, 0x80, 0x54, 0x3c, 0x3a,
+0x39, 0x4a, 0x1d, 0x5b, 0x06, 0x51, 0x37, 0x36, 0x40, 0x4f, 0x1c, 0x64, 0x0a, 0x52, 0x34, 0x3f,
+0x3e, 0x4b, 0x49, 0x6d, 0x08, 0x52, 0x36, 0x35, 0x4d, 0x43, 0x1c, 0x48, 0x0e, 0x4b, 0x36, 0x33,
+0x54, 0x3d, 0x1c, 0x10, 0x0d, 0x47, 0x3f, 0x31, 0x4b, 0x41, 0x1c, 0x06, 0x10, 0x3f, 0x42, 0x3d,
+0x45, 0x47, 0x29, 0x03, 0x05, 0x4e, 0x35, 0x42, 0x4d, 0x3a, 0x29, 0x04, 0x07, 0x59, 0x35, 0x40,
+0x44, 0x3d, 0x04, 0x03, 0x14, 0x54, 0x3d, 0x47, 0x35, 0x3b, 0x1c, 0x01, 0x21, 0x4c, 0x35, 0x47,
+0x3d, 0x46, 0x2f, 0x02, 0x28, 0x41, 0x40, 0x3e, 0x3e, 0x31, 0x2e, 0x01, 0x2c, 0x38, 0x4b, 0x45,
+0x36, 0x3b, 0x06, 0x01, 0x31, 0x2a, 0x48, 0x3c, 0x3b, 0x46, 0x15, 0x01, 0x3c, 0x17, 0x38, 0x4f,
+0x2b, 0x4a, 0x1e, 0x01, 0x81, 0x3b, 0x39, 0x47, 0x4d, 0x3c, 0x1e, 0x04, 0x87, 0x55, 0x20, 0x54,
+0x46, 0x3b, 0x1c, 0x17, 0x8b, 0x58, 0x41, 0x50, 0x1b, 0x57, 0x1c, 0x38, 0x05, 0x46, 0x49, 0x40,
+0x36, 0x51, 0x1c, 0x40, 0x81, 0x51, 0x52, 0x33, 0x3f, 0x4a, 0x1c, 0x57, 0x81, 0x50, 0x4f, 0x33,
+0x3c, 0x49, 0x1d, 0x27, 0x84, 0x4e, 0x49, 0x3b, 0x3a, 0x4b, 0x29, 0x0b, 0x8f, 0x6f, 0x1d, 0x5d,
+0x37, 0x41, 0x2a, 0x07, 0x8d, 0x61, 0x33, 0x4b, 0x3e, 0x43, 0x0b, 0x05, 0x87, 0x55, 0x46, 0x45,
+0x37, 0x49, 0x29, 0x04, 0x89, 0x57, 0x4e, 0x3d, 0x33, 0x4c, 0x29, 0x04, 0x08, 0x41, 0x4b, 0x4b,
+0x32, 0x47, 0x29, 0x02, 0x12, 0x32, 0x58, 0x4d, 0x22, 0x51, 0x1d, 0x01, 0x2e, 0x1c, 0x52, 0x4f,
+0x3c, 0x45, 0x04, 0x01, 0x33, 0x1e, 0x55, 0x53, 0x2a, 0x49, 0x1d, 0x00, 0x00, 0x3a, 0x54, 0x41,
+0x22, 0x55, 0x22, 0x00, 0x8a, 0x47, 0x45, 0x44, 0x3d, 0x44, 0x23, 0x01, 0x85, 0x36, 0x52, 0x46,
+0x33, 0x4a, 0x22, 0x01, 0x8a, 0x4c, 0x50, 0x39, 0x30, 0x4d, 0x1e, 0x0e, 0x15, 0x35, 0x45, 0x3f,
+0x30, 0x4c, 0x1d, 0x27, 0x1f, 0x4c, 0x23, 0x39, 0x48, 0x3f, 0x1d, 0x1e, 0x11, 0x60, 0x12, 0x4a,
+0x3c, 0x46, 0x1d, 0x1e, 0x15, 0x59, 0x0f, 0x4c, 0x3b, 0x48, 0x1d, 0x1f, 0x1c, 0x4e, 0x1b, 0x41,
+0x45, 0x43, 0x1d, 0x1e, 0x1e, 0x46, 0x23, 0x36, 0x4c, 0x46, 0x1d, 0x1c, 0x17, 0x46, 0x28, 0x35,
+0x55, 0x3d, 0x1c, 0x1d, 0x14, 0x51, 0x21, 0x37, 0x55, 0x3c, 0x1c, 0x18, 0x1c, 0x43, 0x28, 0x34,
+0x57, 0x3d, 0x1c, 0x15, 0x19, 0x41, 0x32, 0x28, 0x54, 0x46, 0x1c, 0x0d, 0x17, 0x2e, 0x47, 0x25,
+0x45, 0x56, 0x1c, 0x07, 0x02, 0x36, 0x5c, 0x25, 0x40, 0x50, 0x1d, 0x03, 0x82, 0x3e, 0x44, 0x3c,
+0x4a, 0x41, 0x1d, 0x02, 0x86, 0x48, 0x3b, 0x3c, 0x54, 0x3a, 0x1d, 0x02, 0x90, 0x5c, 0x30, 0x53,
+0x41, 0x3a, 0x1b, 0x06, 0x85, 0x43, 0x44, 0x44, 0x49, 0x38, 0x18, 0x37, 0x18, 0x35, 0x3a, 0x32,
+0x52, 0x47, 0x3d, 0x8b, 0x24, 0x38, 0x32, 0x33, 0x51, 0x4b, 0x11, 0xbe, 0x20, 0x3f, 0x2e, 0x39,
+0x55, 0x48, 0x33, 0xd8, 0x24, 0x3a, 0x3a, 0x33, 0x4f, 0x4f, 0x34, 0x8c, 0x20, 0x3b, 0x2d, 0x42,
+0x5b, 0x3d, 0x11, 0x48, 0x16, 0x4a, 0x30, 0x39, 0x4b, 0x48, 0x1d, 0x33, 0x1f, 0x31, 0x3c, 0x41,
+0x47, 0x46, 0x1d, 0x30, 0x3b, 0x1d, 0x40, 0x58, 0x44, 0x41, 0x35, 0x24, 0x41, 0x23, 0x41, 0x50,
+0x49, 0x45, 0x80, 0x1f, 0x40, 0x26, 0x4f, 0x4b, 0x3e, 0x4d, 0x80, 0x13, 0x47, 0x15, 0x4a, 0x59,
+0x44, 0x40, 0x80, 0x0f, 0x4f, 0x16, 0x33, 0x5c, 0x51, 0x41, 0x80, 0x09, 0x5a, 0x22, 0x21, 0x49,
+0x54, 0x4a, 0x80, 0x0b, 0x74, 0x33, 0x24, 0x3c, 0x42, 0x49, 0x80, 0x05, 0x72, 0x3b, 0x23, 0x3d,
+0x51, 0x55, 0x14, 0x07, 0x55, 0x15, 0x13, 0x2f, 0x48, 0x5b, 0x15, 0x0b, 0x3d, 0x28, 0x0c, 0x33,
+0x4d, 0x5a, 0x13, 0x2e, 0x2a, 0x40, 0x16, 0x36, 0x3b, 0x5e, 0x11, 0x47, 0x16, 0x54, 0x11, 0x45,
+0x3c, 0x50, 0x11, 0x3c, 0x19, 0x48, 0x18, 0x45, 0x40, 0x4e, 0x35, 0x2f, 0x14, 0x42, 0x26, 0x47,
+0x3a, 0x4e, 0x35, 0x1c, 0x08, 0x45, 0x27, 0x4c, 0x44, 0x42, 0x11, 0x1b, 0x02, 0x51, 0x1d, 0x50,
+0x49, 0x3e, 0x10, 0x42, 0x11, 0x39, 0x34, 0x44, 0x49, 0x42, 0x10, 0x69, 0x1c, 0x31, 0x31, 0x45,
+0x54, 0x47, 0x0e, 0x89, 0x13, 0x38, 0x45, 0x43, 0x3c, 0x51, 0x0d, 0xc1, 0x15, 0x49, 0x38, 0x46,
+0x44, 0x42, 0x0c, 0x96, 0x19, 0x49, 0x2c, 0x4b, 0x40, 0x52, 0x2d, 0xb3, 0x1f, 0x3f, 0x37, 0x49,
+0x40, 0x4a, 0x0d, 0xa3, 0x1d, 0x3a, 0x3f, 0x48, 0x3b, 0x49, 0x0f, 0x18, 0x09, 0x48, 0x2e, 0x43,
+0x4a, 0x3f, 0x35, 0x0e, 0x2a, 0x22, 0x27, 0x3c, 0x45, 0x58, 0x11, 0x16, 0x25, 0x2f, 0x20, 0x3b,
+0x46, 0x58, 0x10, 0x7e, 0x36, 0x1f, 0x27, 0x43, 0x51, 0x51, 0x10, 0xff, 0x27, 0x32, 0x30, 0x4b,
+0x49, 0x41, 0x35, 0xff, 0x2b, 0x38, 0x38, 0x47, 0x42, 0x41, 0x35, 0xe5, 0x26, 0x33, 0x3e, 0x47,
+0x41, 0x48, 0x35, 0xd2, 0x1b, 0x48, 0x30, 0x4a, 0x44, 0x4b, 0x11, 0x9e, 0x14, 0x55, 0x2a, 0x4b,
+0x38, 0x51, 0x12, 0x65, 0x81, 0x69, 0x1f, 0x49, 0x3f, 0x4c, 0x14, 0x34, 0x83, 0x5c, 0x33, 0x42,
+0x3c, 0x4c, 0x14, 0x4d, 0x15, 0x51, 0x1d, 0x49, 0x3c, 0x55, 0x14, 0x82, 0x1e, 0x4b, 0x25, 0x46,
+0x3d, 0x4e, 0x15, 0x7f, 0x26, 0x42, 0x31, 0x42, 0x44, 0x40, 0x15, 0x63, 0x2c, 0x3b, 0x34, 0x34,
+0x4f, 0x3d, 0x1a, 0x2f, 0x1e, 0x4c, 0x2c, 0x38, 0x56, 0x31, 0x34, 0x08, 0x07, 0x59, 0x3a, 0x4a,
+0x30, 0x4e, 0x16, 0x05, 0x1c, 0x48, 0x45, 0x3c, 0x37, 0x4c, 0x02, 0x06, 0x17, 0x44, 0x48, 0x49,
+0x3b, 0x49, 0x17, 0x10, 0x02, 0x62, 0x40, 0x49, 0x33, 0x4f, 0x17, 0x25, 0x0e, 0x61, 0x38, 0x44,
+0x37, 0x44, 0x17, 0x51, 0x81, 0x5d, 0x36, 0x46, 0x2a, 0x50, 0x17, 0x7a, 0x09, 0x4e, 0x3e, 0x47,
+0x2c, 0x53, 0x16, 0xab, 0x0b, 0x5c, 0x28, 0x44, 0x3d, 0x48, 0x16, 0x96, 0x03, 0x5b, 0x29, 0x43,
+0x47, 0x43, 0x17, 0x32, 0x85, 0x64, 0x26, 0x49, 0x44, 0x42, 0x23, 0x11, 0x8b, 0x78, 0x1a, 0x47,
+0x47, 0x37, 0x22, 0x07, 0x83, 0x6b, 0x2d, 0x47, 0x2a, 0x4b, 0x17, 0x05, 0x82, 0x64, 0x40, 0x3a,
+0x3e, 0x4a, 0x02, 0x05, 0x0e, 0x44, 0x53, 0x38, 0x35, 0x4b, 0x02, 0x04, 0x15, 0x2e, 0x61, 0x3e,
+0x34, 0x4f, 0x17, 0x03, 0x18, 0x36, 0x61, 0x43, 0x37, 0x56, 0x0c, 0x02, 0x29, 0x36, 0x56, 0x44,
+0x3a, 0x53, 0x02, 0x01, 0x32, 0x31, 0x4f, 0x45, 0x45, 0x4e, 0x17, 0x00, 0x14, 0x3c, 0x43, 0x47,
+0x32, 0x45, 0x23, 0x02, 0x92, 0x63, 0x34, 0x4a, 0x43, 0x39, 0x59, 0x0a, 0x97, 0xf5, 0x1b, 0x47,
+0x49, 0x39, 0x22, 0x15, 0x97, 0xf1, 0x11, 0x5a, 0x35, 0x43, 0x23, 0x26, 0x94, 0x7e, 0x32, 0x3b,
+0x44, 0x42, 0x23, 0x33, 0x8c, 0x6b, 0x3b, 0x41, 0x32, 0x51, 0x59, 0x2a, 0x89, 0x69, 0x3f, 0x31,
+0x46, 0x4c, 0x23, 0x19, 0x89, 0x6b, 0x41, 0x27, 0x55, 0x44, 0x59, 0x0c, 0x92, 0xf2, 0x10, 0x55,
+0x3c, 0x48, 0x2d, 0x09, 0x8b, 0x6a, 0x3f, 0x2d, 0x53, 0x3e, 0x58, 0x05, 0x04, 0x4b, 0x5f, 0x30,
+0x43, 0x4c, 0x17, 0x05, 0x11, 0x30, 0x5b, 0x48, 0x3a, 0x41, 0x22, 0x04, 0x30, 0x32, 0x50, 0x47,
+0x34, 0x4e, 0x0c, 0x04, 0x3f, 0x27, 0x53, 0x40, 0x32, 0x52, 0x02, 0x02, 0x3e, 0x23, 0x44, 0x5a,
+0x3a, 0x4b, 0x22, 0x01, 0x16, 0x27, 0x54, 0x4a, 0x26, 0x48, 0x29, 0x00, 0x85, 0x42, 0x47, 0x45,
+0x33, 0x4a, 0x2a, 0x00, 0x83, 0x3d, 0x4b, 0x46, 0x33, 0x49, 0x29, 0x00, 0x90, 0x5a, 0x4c, 0x38,
+0x32, 0x4b, 0x26, 0x02, 0x87, 0x50, 0x43, 0x44, 0x2f, 0x49, 0x23, 0x0c, 0x15, 0x3e, 0x38, 0x37,
+0x3e, 0x4a, 0x22, 0x14, 0x12, 0x5a, 0x1e, 0x3c, 0x4a, 0x3a, 0x22, 0x12, 0x0c, 0x62, 0x0c, 0x52,
+0x3d, 0x40, 0x21, 0x0f, 0x11, 0x59, 0x0e, 0x52, 0x3b, 0x47, 0x22, 0x0f, 0x0f, 0x5b, 0x10, 0x52,
+0x3e, 0x41, 0x22, 0x10, 0x14, 0x52, 0x0f, 0x4d, 0x45, 0x43, 0x59, 0x0d, 0x18, 0x4b, 0x0e, 0x47,
+0x4e, 0x45, 0x23, 0x0b, 0x1d, 0x42, 0x14, 0x3f, 0x56, 0x43, 0x22, 0x0b, 0x1a, 0x3d, 0x22, 0x37,
+0x56, 0x44, 0x22, 0x08, 0x0d, 0x39, 0x41, 0x30, 0x44, 0x4e, 0x21, 0x02, 0x0b, 0x29, 0x4e, 0x34,
+0x41, 0x4e, 0x22, 0x01, 0x8b, 0x4f, 0x39, 0x41, 0x4b, 0x3c, 0x23, 0x00, 0x8d, 0x52, 0x33, 0x49,
+0x43, 0x42, 0x23, 0x01, 0x92, 0x64, 0x23, 0x5d, 0x3b, 0x3d, 0x22, 0x01, 0x91, 0x53, 0x48, 0x44,
+0x3f, 0x3d, 0x1b, 0x07, 0x93, 0x70, 0x2b, 0x55, 0x2a, 0x46, 0x13, 0x58, 0x09, 0x40, 0x4b, 0x35,
+0x3c, 0x4d, 0x0d, 0x96, 0x11, 0x38, 0x53, 0x32, 0x41, 0x4c, 0x2d, 0xb8, 0x1a, 0x34, 0x44, 0x3e,
+0x4a, 0x42, 0x2d, 0xc9, 0x1e, 0x41, 0x2e, 0x3f, 0x55, 0x3b, 0x0e, 0x8b, 0x18, 0x4c, 0x29, 0x3a,
+0x46, 0x47, 0x13, 0x4d, 0x19, 0x46, 0x3f, 0x3f, 0x3b, 0x3e, 0x2c, 0x41, 0x33, 0x2a, 0x50, 0x42,
+0x36, 0x46, 0x18, 0x3e, 0x3d, 0x22, 0x5a, 0x51, 0x39, 0x46, 0x80, 0x23, 0x41, 0x15, 0x4f, 0x58,
+0x35, 0x41, 0x80, 0x1c, 0x53, 0x24, 0x49, 0x50, 0x2e, 0x3c, 0x80, 0x0f, 0x53, 0x24, 0x44, 0x4f,
+0x32, 0x3a, 0x80, 0x0d, 0x6a, 0x37, 0x39, 0x4d, 0x3e, 0x3a, 0x80, 0x0c, 0x6f, 0x38, 0x32, 0x46,
+0x40, 0x40, 0x80, 0x0c, 0xfe, 0x47, 0x2f, 0x49, 0x4b, 0x46, 0x80, 0x07, 0xff, 0x47, 0x31, 0x3e,
+0x4c, 0x4e, 0x80, 0x0b, 0x67, 0x29, 0x10, 0x28, 0x40, 0x53, 0x10, 0x09, 0x3a, 0x25, 0x10, 0x2e,
+0x42, 0x6d, 0x0f, 0x10, 0x31, 0x36, 0x02, 0x38, 0x40, 0x6c, 0x0e, 0x15, 0x31, 0x35, 0x04, 0x37,
+0x46, 0x66, 0x0d, 0x12, 0x29, 0x32, 0x0a, 0x40, 0x4b, 0x5c, 0x2d, 0x16, 0x0c, 0x3a, 0x39, 0x4b,
+0x1e, 0x62, 0x0c, 0x17, 0x0b, 0x2e, 0x4e, 0x47, 0x22, 0x5a, 0x0c, 0x1a, 0x86, 0x3d, 0x64, 0x44,
+0x0e, 0x5e, 0x0c, 0x18, 0x82, 0x3a, 0x51, 0x57, 0x19, 0x53, 0x0b, 0x46, 0x85, 0x49, 0x53, 0x48,
+0x20, 0x58, 0x0b, 0xe0, 0x02, 0x3f, 0x60, 0x38, 0x32, 0x52, 0x29, 0xc3, 0x0a, 0x4a, 0x2f, 0x5c,
+0x45, 0x39, 0x0a, 0xec, 0x13, 0x41, 0x32, 0x61, 0x41, 0x37, 0x0a, 0xf9, 0x18, 0x43, 0x2d, 0x65,
+0x3f, 0x38, 0x0a, 0xeb, 0x1e, 0x32, 0x3d, 0x58, 0x41, 0x3f, 0x0b, 0x53, 0x11, 0x31, 0x4e, 0x49,
+0x37, 0x4c, 0x2c, 0x15, 0x11, 0x3f, 0x22, 0x44, 0x5b, 0x3a, 0x0d, 0x32, 0x06, 0x55, 0x2c, 0x45,
+0x46, 0x3b, 0x06, 0x51, 0x11, 0x42, 0x37, 0x48, 0x3d, 0x43, 0x2c, 0xff, 0x22, 0x2f, 0x4c, 0x45,
+0x33, 0x56, 0x0c, 0xff, 0x23, 0x34, 0x2e, 0x55, 0x47, 0x4a, 0x2d, 0xff, 0x2c, 0x33, 0x30, 0x49,
+0x46, 0x54, 0x2d, 0xff, 0x25, 0x3b, 0x31, 0x49, 0x40, 0x54, 0x2e, 0xfa, 0x0f, 0x53, 0x37, 0x47,
+0x36, 0x55, 0x2f, 0x98, 0x04, 0x60, 0x2f, 0x45, 0x3f, 0x4f, 0x0e, 0x72, 0x86, 0x67, 0x30, 0x4a,
+0x2e, 0x55, 0x0f, 0x52, 0x0b, 0x53, 0x25, 0x52, 0x30, 0x5b, 0x0f, 0x52, 0x1d, 0x48, 0x1c, 0x48,
+0x42, 0x57, 0x10, 0x57, 0x29, 0x3d, 0x22, 0x3d, 0x43, 0x5a, 0x10, 0x3b, 0x31, 0x2f, 0x24, 0x39,
+0x54, 0x4b, 0x12, 0x21, 0x2a, 0x38, 0x22, 0x33, 0x5b, 0x3e, 0x1d, 0x05, 0x24, 0x3f, 0x28, 0x40,
+0x47, 0x41, 0x1d, 0x02, 0x33, 0x3c, 0x32, 0x3f, 0x49, 0x53, 0x1c, 0x09, 0x81, 0x5a, 0x42, 0x46,
+0x34, 0x4e, 0x4d, 0x22, 0x8f, 0xf5, 0x0c, 0x65, 0x27, 0x4f, 0x1c, 0x2b, 0x90, 0xf5, 0x08, 0x71,
+0x1a, 0x56, 0x1c, 0x39, 0x8e, 0x7e, 0x16, 0x65, 0x21, 0x50, 0x3b, 0x6d, 0x01, 0x56, 0x39, 0x4c,
+0x25, 0x58, 0x3b, 0xc8, 0x0c, 0x4d, 0x36, 0x42, 0x3a, 0x50, 0x13, 0xf7, 0x13, 0x44, 0x3e, 0x3d,
+0x3c, 0x52, 0x3c, 0x99, 0x07, 0x56, 0x32, 0x40, 0x3f, 0x4c, 0x1c, 0x45, 0x83, 0x5e, 0x39, 0x4a,
+0x2b, 0x50, 0x1c, 0x22, 0x87, 0x6d, 0x34, 0x4e, 0x28, 0x54, 0x0b, 0x19, 0x85, 0x70, 0x35, 0x4f,
+0x2b, 0x5a, 0x5c, 0x19, 0x82, 0x6d, 0x34, 0x51, 0x29, 0x59, 0x5c, 0x15, 0x82, 0x6d, 0x32, 0x51,
+0x2a, 0x59, 0x0b, 0x13, 0x86, 0x72, 0x32, 0x4c, 0x33, 0x51, 0x3d, 0x11, 0x06, 0x4e, 0x65, 0x26,
+0x43, 0x4f, 0x10, 0x05, 0x89, 0x75, 0x32, 0x50, 0x24, 0x5c, 0x16, 0x03, 0x93, 0x78, 0x31, 0x42,
+0x35, 0x4a, 0x54, 0x09, 0x91, 0xff, 0x16, 0x57, 0x30, 0x44, 0x1d, 0x1b, 0x89, 0x61, 0x38, 0x46,
+0x34, 0x49, 0x4e, 0x2a, 0x01, 0x3d, 0x52, 0x49, 0x27, 0x53, 0x1c, 0x3d, 0x85, 0x4d, 0x52, 0x3c,
+0x2c, 0x57, 0x1c, 0x33, 0x00, 0x4b, 0x4c, 0x39, 0x32, 0x57, 0x1c, 0x2a, 0x09, 0x43, 0x4f, 0x33,
+0x37, 0x51, 0x1e, 0x0e, 0x01, 0x44, 0x4b, 0x2f, 0x44, 0x47, 0x2c, 0x04, 0x83, 0x4a, 0x4c, 0x2a,
+0x49, 0x46, 0x0d, 0x02, 0x12, 0x3c, 0x43, 0x3f, 0x31, 0x4e, 0x4d, 0x01, 0x16, 0x35, 0x56, 0x3f,
+0x31, 0x48, 0x29, 0x01, 0x21, 0x30, 0x53, 0x45, 0x30, 0x4c, 0x1d, 0x01, 0x2f, 0x35, 0x48, 0x47,
+0x39, 0x48, 0x1e, 0x01, 0x35, 0x31, 0x49, 0x46, 0x37, 0x4b, 0x00, 0x00, 0x3f, 0x37, 0x52, 0x4b,
+0x38, 0x43, 0x16, 0x00, 0x0a, 0x3f, 0x42, 0x38, 0x40, 0x42, 0x1f, 0x04, 0x94, 0x77, 0x1d, 0x50,
+0x43, 0x40, 0x24, 0x05, 0x8f, 0x66, 0x36, 0x41, 0x3f, 0x45, 0x24, 0x0c, 0x8e, 0x70, 0x2d, 0x46,
+0x3a, 0x4e, 0x15, 0x12, 0x8d, 0x77, 0x26, 0x4b, 0x31, 0x54, 0x23, 0x1e, 0x8e, 0x78, 0x18, 0x62,
+0x20, 0x54, 0x20, 0x0c, 0x92, 0xfd, 0x14, 0x5b, 0x20, 0x55, 0x23, 0x04, 0x91, 0x7f, 0x01, 0x69,
+0x28, 0x4f, 0x23, 0x03, 0x82, 0x58, 0x1b, 0x50, 0x43, 0x43, 0x22, 0x18, 0x03, 0x5b, 0x30, 0x43,
+0x2f, 0x55, 0x23, 0x2b, 0x0a, 0x62, 0x24, 0x4d, 0x2f, 0x4e, 0x23, 0x39, 0x03, 0x6b, 0x18, 0x5d,
+0x28, 0x4f, 0x23, 0x43, 0x06, 0x63, 0x22, 0x54, 0x35, 0x4b, 0x29, 0x2a, 0x84, 0x6c, 0x23, 0x55,
+0x2a, 0x50, 0x29, 0x12, 0x8c, 0x7d, 0x18, 0x57, 0x2f, 0x4b, 0x2a, 0x09, 0x85, 0x67, 0x2d, 0x40,
+0x3c, 0x44, 0x2c, 0x05, 0x02, 0x65, 0x18, 0x4f, 0x31, 0x47, 0x26, 0x0a, 0x80, 0x5b, 0x30, 0x3b,
+0x3e, 0x45, 0x29, 0x1e, 0x03, 0x56, 0x3e, 0x3c, 0x44, 0x3e, 0x20, 0x3f, 0x01, 0x65, 0x26, 0x55,
+0x26, 0x54, 0x51, 0x59, 0x80, 0x6e, 0x22, 0x5d, 0x30, 0x52, 0x29, 0x48, 0x83, 0x6a, 0x21, 0x58,
+0x2b, 0x55, 0x1e, 0x61, 0x85, 0x7a, 0x1b, 0x67, 0x1c, 0x5c, 0x1d, 0x56, 0x86, 0x78, 0x25, 0x57,
+0x27, 0x5a, 0x1d, 0x5a, 0x87, 0x7e, 0x1e, 0x58, 0x31, 0x53, 0x1c, 0x6f, 0x03, 0x69, 0x32, 0x48,
+0x36, 0x50, 0x1c, 0x83, 0x0b, 0x56, 0x3f, 0x43, 0x3e, 0x50, 0x1c, 0x49, 0x0d, 0x47, 0x55, 0x31,
+0x3f, 0x54, 0x29, 0x26, 0x82, 0x5e, 0x34, 0x4f, 0x2f, 0x4f, 0x29, 0x23, 0x86, 0x74, 0x15, 0x6b,
+0x1e, 0x55, 0x29, 0x26, 0x84, 0x72, 0x1a, 0x63, 0x22, 0x58, 0x29, 0x25, 0x85, 0x72, 0x22, 0x51,
+0x2c, 0x53, 0x29, 0x1d, 0x06, 0x69, 0x22, 0x5d, 0x23, 0x55, 0x28, 0x08, 0x82, 0x66, 0x30, 0x51,
+0x23, 0x57, 0x16, 0x0b, 0x05, 0x64, 0x23, 0x57, 0x2a, 0x4e, 0x1a, 0x46, 0x08, 0x68, 0x14, 0x59,
+0x2e, 0x49, 0x11, 0x78, 0x0b, 0x59, 0x22, 0x56, 0x37, 0x43, 0x10, 0x60, 0x05, 0x66, 0x15, 0x69,
+0x26, 0x4a, 0x0f, 0x8f, 0x0d, 0x65, 0x0e, 0x68, 0x28, 0x4a, 0x11, 0x65, 0x05, 0x61, 0x0b, 0x65,
+0x34, 0x42, 0x10, 0x62, 0x0f, 0x54, 0x0d, 0x60, 0x39, 0x45, 0x0f, 0x4b, 0x10, 0x55, 0x0d, 0x68,
+0x31, 0x44, 0x0f, 0x44, 0x0b, 0x5c, 0x0d, 0x6a, 0x33, 0x41, 0x0f, 0x54, 0x0a, 0x58, 0x15, 0x68,
+0x34, 0x3f, 0x10, 0x3e, 0x0f, 0x58, 0x11, 0x65, 0x33, 0x3d, 0x10, 0x2e, 0x09, 0x5d, 0x0b, 0x6a,
+0x33, 0x3c, 0x10, 0x23, 0x09, 0x55, 0x0a, 0x6c, 0x37, 0x3e, 0x10, 0x12, 0x85, 0x6a, 0x82, 0x78,
+0x22, 0x4f, 0x10, 0x0a, 0x94, 0xf5, 0x8f, 0xfa, 0x11, 0x55, 0x11, 0x09, 0x86, 0x5a, 0x10, 0x6d,
+0x37, 0x3f, 0x12, 0x09, 0x8a, 0x5c, 0x18, 0x65, 0x34, 0x45, 0x17, 0x12, 0x39, 0x22, 0x0e, 0x42,
+0x49, 0x5a, 0x43, 0x48, 0x18, 0x47, 0x2e, 0x45, 0x3b, 0x4b, 0x23, 0x4e, 0x00, 0x5c, 0x32, 0x46,
+0x3d, 0x48, 0x18, 0x4f, 0x83, 0x63, 0x34, 0x3e, 0x40, 0x44, 0x16, 0x31, 0x85, 0x62, 0x34, 0x3d,
+0x3a, 0x4b, 0x17, 0x23, 0x86, 0x56, 0x46, 0x37, 0x33, 0x4f, 0x18, 0x1c, 0x8f, 0x6e, 0x2a, 0x49,
+0x3f, 0x3e, 0x19, 0x13, 0x8f, 0x61, 0x3f, 0x44, 0x42, 0x35, 0x19, 0x12, 0x8e, 0x56, 0x54, 0x36,
+0x40, 0x3c, 0x19, 0x10, 0x88, 0x47, 0x56, 0x41, 0x33, 0x41, 0x18, 0x0e, 0x89, 0x4f, 0x49, 0x3f,
+0x3e, 0x3e, 0x17, 0x14, 0x04, 0x43, 0x3a, 0x46, 0x46, 0x3a, 0x16, 0x1f, 0x07, 0x54, 0x21, 0x45,
+0x51, 0x39, 0x19, 0x1d, 0x10, 0x4e, 0x16, 0x4d, 0x56, 0x33, 0x45, 0x18, 0x17, 0x49, 0x12, 0x4b,
+0x53, 0x3c, 0x46, 0x11, 0x19, 0x40, 0x12, 0x4d, 0x51, 0x41, 0x18, 0x08, 0x24, 0x3b, 0x04, 0x44,
+0x4e, 0x53, 0x17, 0x0e, 0x2d, 0x38, 0x04, 0x3a, 0x52, 0x55, 0x3d, 0x39, 0x14, 0x57, 0x0e, 0x4f,
+0x46, 0x45, 0x3f, 0x42, 0x0d, 0x65, 0x09, 0x5a, 0x41, 0x42, 0x3e, 0x65, 0x03, 0x71, 0x09, 0x5b,
+0x3e, 0x42, 0x3d, 0x6f, 0x06, 0x6b, 0x11, 0x55, 0x40, 0x41, 0x3e, 0x86, 0x0e, 0x63, 0x1b, 0x47,
+0x4a, 0x3e, 0x3e, 0x72, 0x06, 0x64, 0x23, 0x49, 0x45, 0x42, 0x16, 0x7b, 0x12, 0x56, 0x2e, 0x40,
+0x45, 0x46, 0x3d, 0x6e, 0x0e, 0x59, 0x28, 0x41, 0x44, 0x45, 0x3f, 0x63, 0x16, 0x50, 0x28, 0x3e,
+0x45, 0x4c, 0x3d, 0x7f, 0x25, 0x47, 0x2e, 0x34, 0x42, 0x53, 0x14, 0x90, 0x21, 0x4c, 0x2c, 0x36,
+0x44, 0x4e, 0x14, 0x8c, 0x27, 0x3e, 0x31, 0x32, 0x3e, 0x59, 0x3e, 0x76, 0x1d, 0x43, 0x33, 0x36,
+0x3f, 0x58, 0x3e, 0x72, 0x19, 0x4c, 0x2d, 0x38, 0x45, 0x54, 0x06, 0x3e, 0x0c, 0x57, 0x2f, 0x37,
+0x46, 0x4f, 0x3e, 0x31, 0x04, 0x5c, 0x33, 0x37, 0x3f, 0x52, 0x3e, 0x21, 0x03, 0x5b, 0x32, 0x33,
+0x46, 0x4e, 0x3e, 0x16, 0x06, 0x50, 0x38, 0x37, 0x3b, 0x56, 0x3e, 0x0e, 0x83, 0x5c, 0x40, 0x2a,
+0x3d, 0x52, 0x15, 0x09, 0x86, 0x6a, 0x2e, 0x38, 0x39, 0x4d, 0x15, 0x07, 0x02, 0x64, 0x31, 0x44,
+0x2f, 0x53, 0x15, 0x04, 0x8b, 0x7d, 0x28, 0x44, 0x36, 0x4d, 0x15, 0x06, 0x02, 0x69, 0x39, 0x41,
+0x32, 0x50, 0x00, 0x04, 0x83, 0x72, 0x38, 0x3f, 0x37, 0x4f, 0x15, 0x03, 0x04, 0x74, 0x39, 0x4b,
+0x33, 0x58, 0x15, 0x02, 0x81, 0xf8, 0x26, 0x5a, 0x2f, 0x58, 0x15, 0x02, 0x01, 0xf8, 0x26, 0x5d,
+0x2f, 0x59, 0x15, 0x02, 0x83, 0xf8, 0x21, 0x5e, 0x2b, 0x5b, 0x00, 0x01, 0x08, 0x79, 0x33, 0x55,
+0x34, 0x57, 0x00, 0x01, 0x07, 0x78, 0x2f, 0x55, 0x3c, 0x52, 0x15, 0x01, 0x8c, 0xfd, 0x19, 0x50,
+0x2c, 0x4f, 0x29, 0x01, 0x89, 0x76, 0x28, 0x3c, 0x3a, 0x49, 0x29, 0x01, 0x88, 0x71, 0x2a, 0x3a,
+0x3f, 0x44, 0x29, 0x00, 0x87, 0x70, 0x2a, 0x37, 0x4a, 0x3d, 0x2a, 0x02, 0x11, 0x63, 0x25, 0x37,
+0x37, 0x4b, 0x2d, 0x02, 0x82, 0x67, 0x20, 0x32, 0x49, 0x48, 0x29, 0x04, 0x8a, 0x6e, 0x21, 0x36,
+0x47, 0x49, 0x26, 0x0b, 0x0e, 0x3d, 0x44, 0x27, 0x42, 0x55, 0x24, 0x11, 0x82, 0x4d, 0x4c, 0x24,
+0x45, 0x4c, 0x23, 0x15, 0x85, 0x4d, 0x54, 0x25, 0x39, 0x53, 0x22, 0x14, 0x03, 0x3a, 0x5c, 0x2b,
+0x2e, 0x5c, 0x22, 0x11, 0x04, 0x40, 0x4c, 0x2d, 0x3c, 0x54, 0x22, 0x10, 0x09, 0x2d, 0x5f, 0x2f,
+0x31, 0x59, 0x22, 0x11, 0x09, 0x37, 0x47, 0x38, 0x44, 0x4c, 0x22, 0x0e, 0x0b, 0x36, 0x4f, 0x28,
+0x43, 0x55, 0x22, 0x0b, 0x0a, 0x3d, 0x49, 0x21, 0x4b, 0x50, 0x23, 0x02, 0x83, 0x3c, 0x5c, 0x2c,
+0x4a, 0x3a, 0x22, 0x00, 0x8f, 0x61, 0x45, 0x38, 0x4c, 0x35, 0x59, 0x00, 0x93, 0x5a, 0x58, 0x2e,
+0x45, 0x3b, 0x22, 0x00, 0x8e, 0x56, 0x5a, 0x34, 0x39, 0x45, 0x22, 0x01, 0x16, 0x40, 0x30, 0x51,
+0x44, 0x3a, 0x23, 0x01, 0x2e, 0x31, 0x41, 0x25, 0x3c, 0x56, 0x01, 0x02, 0x41, 0x4c, 0x44, 0x22,
+0x39, 0x3d, 0x0a, 0x02, 0x3a, 0x45, 0x32, 0x26, 0x41, 0x3d, 0x1d, 0x13, 0x01, 0x66, 0x21, 0x43,
+0x43, 0x3a, 0x1b, 0x32, 0x05, 0x50, 0x47, 0x30, 0x4a, 0x3c, 0x1b, 0x43, 0x00, 0x4c, 0x51, 0x38,
+0x3e, 0x43, 0x1a, 0x49, 0x8d, 0x71, 0x38, 0x48, 0x2d, 0x4c, 0x18, 0x56, 0x83, 0x61, 0x40, 0x4c,
+0x2a, 0x4c, 0x18, 0x49, 0x8c, 0x6c, 0x3e, 0x4b, 0x30, 0x48, 0x17, 0x68, 0x89, 0x61, 0x47, 0x45,
+0x2d, 0x4a, 0x41, 0x9f, 0x05, 0x57, 0x4d, 0x46, 0x30, 0x49, 0x16, 0x94, 0x06, 0x54, 0x52, 0x42,
+0x37, 0x48, 0x16, 0xca, 0x0b, 0x54, 0x43, 0x48, 0x39, 0x41, 0x15, 0xfc, 0x0d, 0x54, 0x45, 0x44,
+0x3a, 0x43, 0x15, 0xe8, 0x13, 0x4b, 0x4d, 0x3a, 0x3d, 0x4d, 0x15, 0xff, 0x17, 0x4b, 0x43, 0x37,
+0x4a, 0x4a, 0x15, 0xe2, 0x1f, 0x44, 0x38, 0x33, 0x54, 0x4f, 0x15, 0xb0, 0x27, 0x3e, 0x33, 0x2b,
+0x53, 0x51, 0x15, 0x6f, 0x25, 0x3d, 0x37, 0x23, 0x52, 0x54, 0x15, 0x09, 0x08, 0x42, 0x3e, 0x38,
+0x5f, 0x2a, 0x17, 0x0a, 0x1d, 0x35, 0x34, 0x39, 0x4b, 0x43, 0x15, 0x31, 0x18, 0x49, 0x26, 0x37,
+0x55, 0x41, 0x15, 0x46, 0x1f, 0x44, 0x26, 0x35, 0x56, 0x45, 0x15, 0x44, 0x19, 0x44, 0x23, 0x41,
+0x52, 0x44, 0x3e, 0x39, 0x12, 0x3e, 0x2a, 0x4d, 0x59, 0x32, 0x3e, 0x27, 0x06, 0x48, 0x22, 0x5a,
+0x56, 0x2c, 0x3e, 0x13, 0x8c, 0x65, 0x16, 0x6c, 0x39, 0x38, 0x3d, 0x10, 0x91, 0x74, 0x08, 0x78,
+0x30, 0x39, 0x3d, 0x12, 0x91, 0x72, 0x0b, 0x72, 0x3a, 0x35, 0x3d, 0x0e, 0x96, 0xf4, 0x8b, 0xf9,
+0x22, 0x41, 0x15, 0x0c, 0x8d, 0x6f, 0x2c, 0x41, 0x53, 0x2d, 0x00, 0x09, 0x83, 0x5a, 0x42, 0x3e,
+0x4d, 0x39, 0x00, 0x0a, 0x83, 0x53, 0x46, 0x40, 0x4b, 0x39, 0x00, 0x03, 0x92, 0x64, 0x53, 0x2d,
+0x4c, 0x3b, 0x29, 0x03, 0x91, 0x62, 0x49, 0x41, 0x3f, 0x3e, 0x3e, 0x01, 0x92, 0x62, 0x44, 0x45,
+0x41, 0x39, 0x00, 0x02, 0x06, 0x2e, 0x60, 0x43, 0x3f, 0x3d, 0x00, 0x0a, 0x22, 0x14, 0x6c, 0x47,
+0x32, 0x4e, 0x0c, 0x15, 0x23, 0x22, 0x66, 0x41, 0x2c, 0x58, 0x17, 0x1a, 0x85, 0x58, 0x34, 0x3a,
+0x51, 0x3a, 0x15, 0x25, 0x07, 0x4c, 0x34, 0x35, 0x50, 0x40, 0x15, 0x2c, 0x0e, 0x42, 0x39, 0x38,
+0x43, 0x47, 0x15, 0x20, 0x0e, 0x37, 0x47, 0x40, 0x3d, 0x43, 0x3e, 0x1f, 0x0c, 0x3d, 0x41, 0x40,
+0x3d, 0x44, 0x3d, 0x1c, 0x01, 0x42, 0x4a, 0x3a, 0x41, 0x42, 0x3d, 0x19, 0x05, 0x3c, 0x4c, 0x3a,
+0x3a, 0x49, 0x3d, 0x19, 0x83, 0x49, 0x47, 0x37, 0x42, 0x42, 0x15, 0x1e, 0x0c, 0x33, 0x4e, 0x38,
+0x3b, 0x4a, 0x15, 0x27, 0x12, 0x3e, 0x3a, 0x38, 0x46, 0x47, 0x16, 0x26, 0x0a, 0x4a, 0x2d, 0x3c,
+0x53, 0x3c, 0x17, 0x25, 0x12, 0x4d, 0x23, 0x3c, 0x5b, 0x36, 0x17, 0x25, 0x1c, 0x3f, 0x25, 0x3b,
+0x5b, 0x39, 0x15, 0x1d, 0x19, 0x3e, 0x1e, 0x43, 0x57, 0x3c, 0x18, 0x14, 0x27, 0x3c, 0x0d, 0x36,
+0x52, 0x53, 0x17, 0x1b, 0x2b, 0x35, 0x1b, 0x2d, 0x54, 0x51, 0x17, 0x27, 0x27, 0x3c, 0x1f, 0x2c,
+0x4c, 0x54, 0x17, 0x20, 0x20, 0x3b, 0x26, 0x30, 0x4d, 0x4e, 0x17, 0x20, 0x15, 0x37, 0x35, 0x39,
+0x4c, 0x43, 0x17, 0x1e, 0x0d, 0x41, 0x2e, 0x40, 0x53, 0x3a, 0x17, 0x18, 0x05, 0x43, 0x34, 0x44,
+0x54, 0x34, 0x17, 0x1d, 0x06, 0x3a, 0x45, 0x3c, 0x4c, 0x3c, 0x16, 0x1b, 0x00, 0x3c, 0x58, 0x31,
+0x40, 0x44, 0x17, 0x12, 0x83, 0x42, 0x4a, 0x3e, 0x49, 0x39, 0x17, 0x0f, 0x82, 0x45, 0x39, 0x4a,
+0x4a, 0x37, 0x18, 0x0d, 0x87, 0x49, 0x3b, 0x4f, 0x3f, 0x3b, 0x18, 0x0a, 0x8a, 0x4b, 0x45, 0x49,
+0x3c, 0x3c, 0x17, 0x0c, 0x91, 0x61, 0x3c, 0x3f, 0x46, 0x3a, 0x17, 0x09, 0x8c, 0x58, 0x2a, 0x58,
+0x48, 0x30, 0x17, 0x05, 0x93, 0x68, 0x1f, 0x67, 0x3a, 0x36, 0x17, 0x05, 0x95, 0x68, 0x35, 0x57,
+0x32, 0x3e, 0x18, 0x04, 0x90, 0x5a, 0x41, 0x42, 0x44, 0x3b, 0x18, 0x08, 0x92, 0x65, 0x3a, 0x42,
+0x46, 0x38, 0x17, 0x03, 0x9b, 0xf2, 0x14, 0x5b, 0x3b, 0x39, 0x17, 0x03, 0x98, 0x7e, 0x22, 0x54,
+0x43, 0x34, 0x18, 0x04, 0x99, 0xf8, 0x24, 0x47, 0x46, 0x36, 0x18, 0x03, 0x98, 0xf7, 0x29, 0x3f,
+0x4d, 0x38, 0x59, 0x02, 0x98, 0xf3, 0x25, 0x43, 0x4c, 0x39, 0x59, 0x02, 0x9a, 0xec, 0x15, 0x50,
+0x44, 0x3c, 0x02, 0x02, 0x96, 0xf7, 0x23, 0x4b, 0x46, 0x3d, 0x59, 0x03, 0x91, 0x74, 0x38, 0x40,
+0x48, 0x3e, 0x59, 0x02, 0x95, 0xfe, 0x31, 0x38, 0x54, 0x39, 0x59, 0x02, 0x9a, 0xe9, 0x0e, 0x59,
+0x3a, 0x44, 0x59, 0x02, 0x9a, 0xe9, 0x0a, 0x5c, 0x3a, 0x42, 0x2d, 0x01, 0x9a, 0xec, 0x1b, 0x42,
+0x51, 0x39, 0x02, 0x01, 0x9b, 0xe8, 0x0f, 0x50, 0x48, 0x3c, 0x18, 0x02, 0x94, 0x72, 0x37, 0x42,
+0x47, 0x38, 0x59, 0x04, 0x95, 0x74, 0x34, 0x43, 0x43, 0x3a, 0x20, 0x07, 0x95, 0x62, 0x4f, 0x31,
+0x4d, 0x36, 0x19, 0x1a, 0x93, 0x5f, 0x59, 0x2d, 0x30, 0x51, 0x18, 0x42, 0x88, 0x5b, 0x44, 0x35,
+0x3d, 0x4b, 0x18, 0x4a, 0x06, 0x51, 0x2c, 0x45, 0x4d, 0x43, 0x17, 0x3c, 0x80, 0x5e, 0x20, 0x4f,
+0x46, 0x47, 0x17, 0x3b, 0x01, 0x56, 0x26, 0x51, 0x4c, 0x40, 0x43, 0x41, 0x05, 0x4d, 0x34, 0x4b,
+0x49, 0x44, 0x18, 0x39, 0x87, 0x63, 0x25, 0x55, 0x40, 0x47, 0x18, 0x49, 0x04, 0x4c, 0x3a, 0x45,
+0x47, 0x48, 0x18, 0x3e, 0x82, 0x5e, 0x26, 0x53, 0x3e, 0x4c, 0x18, 0x4c, 0x87, 0x75, 0x0d, 0x67,
+0x2c, 0x54, 0x17, 0x61, 0x08, 0x50, 0x32, 0x47, 0x45, 0x4a, 0x17, 0x73, 0x15, 0x43, 0x34, 0x43,
+0x4f, 0x43, 0x18, 0x66, 0x04, 0x5c, 0x26, 0x51, 0x36, 0x4c, 0x19, 0x1d, 0x93, 0xf7, 0x07, 0x69,
+0x28, 0x4d, 0x19, 0x1a, 0x8c, 0x74, 0x20, 0x53, 0x36, 0x43, 0x19, 0x1f, 0x91, 0x7d, 0x1b, 0x4d,
+0x39, 0x48, 0x18, 0x23, 0x90, 0xf3, 0x89, 0x71, 0x20, 0x53, 0x18, 0x3f, 0x81, 0x74, 0x11, 0x5e,
+0x22, 0x52, 0x17, 0x84, 0x10, 0x53, 0x34, 0x44, 0x31, 0x52, 0x17, 0x8b, 0x1b, 0x3f, 0x35, 0x42,
+0x47, 0x4e, 0x16, 0xae, 0x15, 0x54, 0x2b, 0x48, 0x3f, 0x51, 0x15, 0xaa, 0x21, 0x48, 0x2e, 0x47,
+0x4b, 0x46, 0x14, 0xae, 0x1e, 0x48, 0x2a, 0x4d, 0x46, 0x4a, 0x14, 0xb0, 0x15, 0x4d, 0x32, 0x48,
+0x3e, 0x4d, 0x13, 0xc7, 0x0e, 0x54, 0x37, 0x3f, 0x3d, 0x50, 0x14, 0x96, 0x0a, 0x57, 0x38, 0x44,
+0x3c, 0x51, 0x15, 0x84, 0x07, 0x5e, 0x28, 0x57, 0x34, 0x4f, 0x3f, 0x7b, 0x02, 0x65, 0x24, 0x57,
+0x35, 0x4c, 0x15, 0x51, 0x84, 0x69, 0x21, 0x5c, 0x31, 0x4d, 0x3e, 0x41, 0x86, 0x5d, 0x3e, 0x49,
+0x2c, 0x53, 0x15, 0x35, 0x8b, 0x6e, 0x33, 0x4b, 0x2d, 0x4e, 0x15, 0x18, 0x8d, 0x65, 0x3a, 0x44,
+0x37, 0x45, 0x15, 0x0c, 0x8a, 0x57, 0x43, 0x44, 0x43, 0x39, 0x52, 0x06, 0x8c, 0x63, 0x32, 0x4e,
+0x45, 0x36, 0x28, 0x05, 0x03, 0x4e, 0x33, 0x51, 0x3d, 0x3d, 0x18, 0x05, 0x08, 0x4a, 0x39, 0x48,
+0x42, 0x37, 0x1a, 0x0d, 0x04, 0x47, 0x46, 0x3e, 0x41, 0x3f, 0x18, 0x2e, 0x02, 0x52, 0x3b, 0x41,
+0x46, 0x38, 0x17, 0x49, 0x81, 0x55, 0x47, 0x3e, 0x34, 0x47, 0x17, 0x50, 0x05, 0x4c, 0x47, 0x44,
+0x2c, 0x4f, 0x17, 0x2b, 0x8b, 0x5b, 0x4e, 0x40, 0x22, 0x57, 0x18, 0x34, 0x87, 0x64, 0x33, 0x46,
+0x33, 0x4e, 0x18, 0x2c, 0x8c, 0x6c, 0x36, 0x3c, 0x39, 0x4b, 0x18, 0x23, 0x89, 0x54, 0x50, 0x41,
+0x1d, 0x5d, 0x18, 0x21, 0x8a, 0x58, 0x51, 0x32, 0x30, 0x55, 0x17, 0x32, 0x82, 0x59, 0x3f, 0x37,
+0x3a, 0x4f, 0x17, 0x3c, 0x12, 0x45, 0x3f, 0x39, 0x32, 0x59, 0x18, 0x2c, 0x12, 0x41, 0x3c, 0x35,
+0x43, 0x51, 0x19, 0x33, 0x10, 0x45, 0x3c, 0x3c, 0x57, 0x3f, 0x18, 0x1d, 0x25, 0x31, 0x30, 0x3f,
+0x53, 0x40, 0x19, 0x0d, 0x28, 0x27, 0x32, 0x48, 0x4d, 0x3d, 0x25, 0x06, 0x31, 0x23, 0x2a, 0x43,
+0x44, 0x49, 0x23, 0x09, 0x29, 0x25, 0x2e, 0x4f, 0x42, 0x45, 0x20, 0x10, 0x26, 0x34, 0x2d, 0x40,
+0x4a, 0x41, 0x1e, 0x1a, 0x25, 0x3e, 0x1e, 0x32, 0x52, 0x4c, 0x1d, 0x1d, 0x14, 0x3a, 0x37, 0x38,
+0x46, 0x49, 0x1c, 0x17, 0x16, 0x36, 0x3d, 0x37, 0x3d, 0x53, 0x1c, 0x10, 0x07, 0x3f, 0x43, 0x3a,
+0x42, 0x45, 0x1c, 0x0b, 0x88, 0x59, 0x2f, 0x49, 0x3b, 0x46, 0x1d, 0x0a, 0x8f, 0x62, 0x30, 0x4f,
+0x34, 0x47, 0x1d, 0x08, 0x93, 0x6e, 0x28, 0x58, 0x35, 0x3f, 0x1d, 0x08, 0x95, 0x75, 0x22, 0x5f,
+0x2e, 0x42, 0x1d, 0x09, 0x8f, 0x69, 0x30, 0x46, 0x45, 0x39, 0x1d, 0x0a, 0x8b, 0x60, 0x34, 0x44,
+0x45, 0x3c, 0x1e, 0x07, 0x94, 0x69, 0x40, 0x3b, 0x42, 0x3e, 0x1e, 0x0a, 0x8e, 0x5a, 0x40, 0x42,
+0x47, 0x36, 0x1f, 0x0a, 0x87, 0x3c, 0x65, 0x3b, 0x34, 0x42, 0x24, 0x07, 0x8d, 0x40, 0x6c, 0x3d,
+0x1f, 0x54, 0x24, 0x0a, 0x92, 0x56, 0x5d, 0x3e, 0x24, 0x53, 0x25, 0x0a, 0x8a, 0x49, 0x56, 0x44,
+0x30, 0x46, 0x26, 0x0e, 0x8c, 0x48, 0x64, 0x45, 0x1d, 0x52, 0x25, 0x17, 0x8c, 0x5e, 0x46, 0x4a,
+0x33, 0x43, 0x23, 0x2f, 0x0a, 0x3d, 0x5a, 0x50, 0x29, 0x45, 0x23, 0x30, 0x0d, 0x3a, 0x5c, 0x4d,
+0x2b, 0x41, 0x23, 0x28, 0x80, 0x43, 0x62, 0x45, 0x26, 0x48, 0x23, 0x2c, 0x06, 0x43, 0x56, 0x4b,
+0x31, 0x40, 0x24, 0x1b, 0x82, 0x55, 0x47, 0x48, 0x3e, 0x35, 0x24, 0x19, 0x81, 0x4a, 0x59, 0x46,
+0x2a, 0x46, 0x22, 0x21, 0x03, 0x3d, 0x6a, 0x40, 0x22, 0x4c, 0x21, 0x24, 0x04, 0x3e, 0x69, 0x3f,
+0x23, 0x4e, 0x21, 0x12, 0x90, 0x64, 0x56, 0x37, 0x2e, 0x4f, 0x23, 0x0c, 0x92, 0x76, 0x36, 0x39,
+0x48, 0x3d, 0x24, 0x0b, 0x8a, 0x57, 0x53, 0x37, 0x36, 0x4e, 0x24, 0x08, 0x88, 0x59, 0x51, 0x33,
+0x35, 0x50, 0x23, 0x08, 0x8d, 0x6b, 0x3e, 0x33, 0x45, 0x3e, 0x22, 0x06, 0x96, 0xfd, 0x33, 0x2d,
+0x51, 0x3e, 0x23, 0x03, 0x9b, 0xee, 0x1f, 0x3f, 0x4e, 0x37, 0x23, 0x03, 0x99, 0xf8, 0x2e, 0x41,
+0x41, 0x3d, 0x23, 0x03, 0x95, 0x70, 0x3d, 0x46, 0x3a, 0x3e, 0x23, 0x03, 0x97, 0x7e, 0x2f, 0x49,
+0x3f, 0x3b, 0x23, 0x03, 0x99, 0xf8, 0x2f, 0x42, 0x42, 0x3e, 0x23, 0x04, 0x94, 0x6d, 0x45, 0x38,
+0x45, 0x3e, 0x23, 0x03, 0x8a, 0x55, 0x4c, 0x4b, 0x2c, 0x4d, 0x07, 0x01, 0x0e, 0x3f, 0x46, 0x50,
+0x38, 0x42, 0x08, 0x01, 0x22, 0x43, 0x4b, 0x3f, 0x39, 0x57, 0x19, 0x00, 0x27, 0x45, 0x42, 0x46,
+0x38, 0x4e, 0x23, 0x00, 0x2a, 0x47, 0x4c, 0x4a, 0x38, 0x50, 0x08, 0x00, 0x29, 0x3e, 0x4d, 0x3a,
+0x3e, 0x47, 0x08, 0x00, 0x25, 0x46, 0x46, 0x40, 0x40, 0x4b, 0x42, 0x00, 0x23, 0x44, 0x3e, 0x43,
+0x42, 0x46, 0x08, 0x00, 0x1f, 0x41, 0x45, 0x47, 0x44, 0x39, 0x07, 0x00, 0x1a, 0x4e, 0x43, 0x47,
+0x3d, 0x3f, 0x13, 0x00, 0x18, 0x4a, 0x44, 0x52, 0x33, 0x3d, 0x24, 0x00, 0x23, 0x3f, 0x4a, 0x41,
+0x45, 0x41, 0x23, 0x00, 0x0e, 0x41, 0x3f, 0x3f, 0x35, 0x42, 0x28, 0x02, 0x13, 0x69, 0x1e, 0x34,
+0x39, 0x3d, 0x1e, 0x05, 0x15, 0x48, 0x34, 0x1d, 0x52, 0x45, 0x18, 0x0e, 0x80, 0x66, 0x0f, 0x45,
+0x44, 0x48, 0x14, 0x13, 0x87, 0x69, 0x0a, 0x55, 0x3f, 0x47, 0x12, 0x1e, 0x80, 0x50, 0x29, 0x47,
+0x3d, 0x4b, 0x12, 0x2d, 0x04, 0x4b, 0x2a, 0x47, 0x41, 0x48, 0x12, 0x32, 0x11, 0x3c, 0x30, 0x3e,
+0x4b, 0x46, 0x12, 0x51, 0x15, 0x36, 0x39, 0x3c, 0x46, 0x4c, 0x12, 0x4d, 0x83, 0x51, 0x3f, 0x3c,
+0x36, 0x50, 0x12, 0x81, 0x18, 0x32, 0x43, 0x36, 0x45, 0x4e, 0x11, 0x83, 0x24, 0x2a, 0x41, 0x32,
+0x43, 0x59, 0x11, 0x8b, 0x26, 0x33, 0x3d, 0x36, 0x41, 0x52, 0x12, 0x22, 0x19, 0x3c, 0x37, 0x45,
+0x46, 0x3f, 0x23, 0x09, 0x89, 0x63, 0x2e, 0x48, 0x4b, 0x39, 0x59, 0x08, 0x8f, 0x70, 0x2d, 0x4b,
+0x43, 0x3a, 0x5a, 0x0b, 0x8d, 0x6c, 0x34, 0x4b, 0x3c, 0x42, 0x07, 0x0a, 0x83, 0x5c, 0x47, 0x2e,
+0x56, 0x39, 0x22, 0x0d, 0x11, 0x4b, 0x36, 0x4d, 0x3d, 0x45, 0x22, 0x09, 0x1f, 0x2b, 0x4a, 0x49,
+0x52, 0x37, 0x0a, 0x0b, 0x2e, 0x53, 0x1f, 0x48, 0x3a, 0x44, 0x1c, 0x28, 0x0d, 0x55, 0x20, 0x4e,
+0x3e, 0x44, 0x14, 0x53, 0x03, 0x61, 0x27, 0x4f, 0x33, 0x49, 0x10, 0xae, 0x81, 0x5d, 0x31, 0x53,
+0x3a, 0x44, 0x0f, 0xfc, 0x0f, 0x4d, 0x3d, 0x52, 0x36, 0x4a, 0x30, 0xff, 0x10, 0x53, 0x36, 0x5c,
+0x34, 0x48, 0x0e, 0xf5, 0x0d, 0x5a, 0x2f, 0x67, 0x2e, 0x46, 0x0d, 0xed, 0x12, 0x59, 0x30, 0x67,
+0x2d, 0x46, 0x2d, 0xff, 0x0b, 0x68, 0x2a, 0x6c, 0x25, 0x4d, 0x0c, 0xff, 0x0c, 0x61, 0x35, 0x64,
+0x24, 0x4e, 0x0c, 0xff, 0x06, 0x69, 0x2b, 0x6b, 0x24, 0x4b, 0x0c, 0xff, 0x0e, 0x62, 0x2b, 0x64,
+0x32, 0x43, 0x0c, 0xff, 0x0e, 0x62, 0x31, 0x5c, 0x31, 0x45, 0x0c, 0xff, 0x05, 0x71, 0x2f, 0x5a,
+0x28, 0x55, 0x0c, 0xeb, 0x0f, 0x62, 0x30, 0x4c, 0x40, 0x4d, 0x2d, 0xe7, 0x1d, 0x56, 0x29, 0x43,
+0x43, 0x4e, 0x0d, 0xa4, 0x1b, 0x50, 0x20, 0x43, 0x47, 0x59, 0x0e, 0x92, 0x1b, 0x51, 0x1a, 0x48,
+0x3d, 0x5f, 0x08, 0x2c, 0x12, 0x53, 0x2d, 0x4c, 0x49, 0x3e, 0x13, 0x27, 0x08, 0x57, 0x2c, 0x46,
+0x4d, 0x42, 0x11, 0x88, 0x18, 0x50, 0x1e, 0x4b, 0x43, 0x45, 0x11, 0x70, 0x0d, 0x56, 0x1b, 0x50,
+0x44, 0x43, 0x35, 0x74, 0x0a, 0x55, 0x1f, 0x51, 0x4b, 0x3f, 0x10, 0x75, 0x0d, 0x47, 0x2d, 0x53,
+0x4e, 0x35, 0x11, 0x69, 0x0c, 0x50, 0x26, 0x53, 0x4f, 0x32, 0x11, 0x2f, 0x88, 0x6b, 0x1e, 0x5c,
+0x3a, 0x3a, 0x5a, 0x22, 0x8f, 0xff, 0x0d, 0x61, 0x30, 0x42, 0x11, 0x1c, 0x90, 0x7e, 0x10, 0x5e,
+0x32, 0x44, 0x11, 0x1b, 0x85, 0x64, 0x2a, 0x51, 0x3f, 0x3c, 0x5a, 0x22, 0x87, 0x6c, 0x3a, 0x43,
+0x40, 0x46, 0x5a, 0x10, 0x8e, 0x6e, 0x40, 0x37, 0x4d, 0x3b, 0x11, 0x0b, 0x0a, 0x31, 0x72, 0x3b,
+0x2b, 0x4f, 0x36, 0x07, 0x15, 0x43, 0x4b, 0x4c, 0x2a, 0x50, 0x4f, 0x04, 0x87, 0x70, 0x2a, 0x5e,
+0x20, 0x4f, 0x09, 0x09, 0x91, 0xf9, 0x12, 0x6b, 0x1c, 0x58, 0x09, 0x0f, 0x91, 0xf3, 0x00, 0x70,
+0x1e, 0x57, 0x26, 0x19, 0x91, 0x7b, 0x1a, 0x61, 0x2a, 0x4b, 0x17, 0x36, 0x8c, 0x5a, 0x3b, 0x5d,
+0x23, 0x4c, 0x17, 0x47, 0x90, 0x60, 0x3e, 0x65, 0x11, 0x52, 0x17, 0x47, 0x8a, 0x5a, 0x3b, 0x65,
+0x15, 0x4f, 0x16, 0x5e, 0x87, 0x5a, 0x3d, 0x64, 0x17, 0x52, 0x15, 0x60, 0x89, 0x5d, 0x3a, 0x64,
+0x16, 0x53, 0x15, 0x66, 0x87, 0x68, 0x2e, 0x60, 0x1f, 0x53, 0x15, 0x5c, 0x88, 0x5e, 0x3b, 0x59,
+0x1a, 0x59, 0x14, 0x4c, 0x8a, 0x62, 0x40, 0x4d, 0x1f, 0x57, 0x15, 0x2b, 0x8b, 0x68, 0x31, 0x52,
+0x22, 0x55, 0x10, 0x15, 0x81, 0x66, 0x26, 0x5e, 0x1d, 0x55, 0x35, 0x0e, 0x02, 0x60, 0x2b, 0x57,
+0x2a, 0x4f, 0x14, 0x06, 0x04, 0x64, 0x31, 0x49, 0x37, 0x44, 0x11, 0x04, 0x1b, 0x4e, 0x46, 0x3c,
+0x3c, 0x3e, 0x08, 0x0c, 0x16, 0x4f, 0x4d, 0x4e, 0x22, 0x5c, 0x07, 0x12, 0x05, 0x68, 0x29, 0x60,
+0x20, 0x5c, 0x10, 0x43, 0x84, 0x70, 0x1e, 0x55, 0x2d, 0x4c, 0x08, 0xb9, 0x0d, 0x5b, 0x2d, 0x47,
+0x30, 0x53, 0x22, 0xf4, 0x1c, 0x4f, 0x2c, 0x46, 0x33, 0x56, 0x21, 0xff, 0x2a, 0x48, 0x25, 0x49,
+0x49, 0x4e, 0x22, 0xcb, 0x24, 0x4b, 0x2d, 0x46, 0x43, 0x4a, 0x08, 0x8c, 0x22, 0x42, 0x30, 0x49,
+0x48, 0x40, 0x08, 0x34, 0x06, 0x5d, 0x30, 0x54, 0x30, 0x4a, 0x5a, 0x17, 0x8a, 0x6c, 0x28, 0x5b,
+0x2b, 0x49, 0x23, 0x14, 0x83, 0x61, 0x38, 0x49, 0x3b, 0x46, 0x59, 0x0e, 0x83, 0x6e, 0x23, 0x5f,
+0x28, 0x54, 0x23, 0x0e, 0x02, 0x60, 0x2a, 0x61, 0x26, 0x54, 0x15, 0x0b, 0x08, 0x5d, 0x33, 0x4d,
+0x2b, 0x51, 0x15, 0x0a, 0x14, 0x4d, 0x33, 0x40, 0x3c, 0x4b, 0x23, 0x05, 0x12, 0x44, 0x47, 0x33,
+0x34, 0x4e, 0x23, 0x01, 0x82, 0x53, 0x3b, 0x4c, 0x2e, 0x46, 0x25, 0x03, 0x91, 0x65, 0x2e, 0x55,
+0x3e, 0x38, 0x25, 0x06, 0x96, 0x74, 0x24, 0x5e, 0x38, 0x3a, 0x24, 0x08, 0x91, 0x65, 0x39, 0x4b,
+0x36, 0x49, 0x23, 0x11, 0x8d, 0x69, 0x36, 0x4a, 0x30, 0x4e, 0x22, 0x17, 0x8d, 0x6c, 0x33, 0x4f,
+0x2e, 0x4d, 0x23, 0x14, 0x8c, 0x71, 0x28, 0x4f, 0x2e, 0x51, 0x23, 0x0e, 0x80, 0x5d, 0x36, 0x3d,
+0x36, 0x4f, 0x23, 0x10, 0x81, 0x5c, 0x34, 0x4a, 0x34, 0x4b, 0x23, 0x07, 0x82, 0x56, 0x47, 0x36,
+0x42, 0x47, 0x3e, 0x03, 0x0c, 0x42, 0x5b, 0x34, 0x3c, 0x4d, 0x07, 0x02, 0x0d, 0x4d, 0x49, 0x3c,
+0x40, 0x42, 0x80, 0x01, 0x28, 0x35, 0x4f, 0x3a, 0x38, 0x43, 0x06, 0x00, 0x39, 0x36, 0x3e, 0x4d,
+0x42, 0x40, 0x08, 0x00, 0x35, 0x27, 0x51, 0x49, 0x37, 0x43, 0x08, 0x00, 0x31, 0x2c, 0x47, 0x47,
+0x3a, 0x4a, 0x36, 0x00, 0x3c, 0x2f, 0x50, 0x42, 0x35, 0x40, 0x1f, 0x00, 0x26, 0x2d, 0x4b, 0x3d,
+0x36, 0x4a, 0x20, 0x02, 0x91, 0x67, 0x3d, 0x47, 0x39, 0x3f, 0x16, 0x07, 0x92, 0x6a, 0x3b, 0x48,
+0x38, 0x3f, 0x15, 0x14, 0x8b, 0x70, 0x27, 0x4d, 0x3d, 0x40, 0x28, 0x1e, 0x80, 0x5d, 0x34, 0x4a,
+0x35, 0x4a, 0x27, 0x19, 0x01, 0x67, 0x27, 0x49, 0x36, 0x4c, 0x26, 0x0b, 0x88, 0x6d, 0x1c, 0x50,
+0x38, 0x4a, 0x28, 0x03, 0x87, 0x5c, 0x30, 0x46, 0x3e, 0x40, 0x25, 0x02, 0x83, 0x54, 0x23, 0x4e,
+0x3f, 0x46, 0x23, 0x07, 0x86, 0x57, 0x3c, 0x3f, 0x32, 0x53, 0x24, 0x14, 0x09, 0x4e, 0x34, 0x49,
+0x35, 0x48, 0x3e, 0x31, 0x05, 0x60, 0x25, 0x50, 0x2f, 0x4e, 0x23, 0x3b, 0x01, 0x6c, 0x21, 0x4f,
+0x33, 0x4c, 0x22, 0x41, 0x10, 0x56, 0x36, 0x47, 0x34, 0x4a, 0x28, 0x1d, 0x83, 0x70, 0x1e, 0x54,
+0x2f, 0x49, 0x28, 0x0e, 0x13, 0x4a, 0x34, 0x41, 0x3b, 0x3f, 0x2f, 0x0b, 0x28, 0x44, 0x28, 0x44,
+0x35, 0x3a, 0x30, 0x0b, 0x2b, 0x3c, 0x35, 0x35, 0x3e, 0x3a, 0x29, 0x21, 0x0b, 0x5a, 0x30, 0x40,
+0x3a, 0x43, 0x2a, 0x2d, 0x82, 0x70, 0x19, 0x55, 0x2e, 0x4a, 0x29, 0x4a, 0x87, 0x76, 0x16, 0x63,
+0x2a, 0x4f, 0x29, 0x66, 0x0d, 0x60, 0x28, 0x56, 0x29, 0x51, 0x29, 0x83, 0x13, 0x59, 0x37, 0x44,
+0x2f, 0x4f, 0x1d, 0x90, 0x0a, 0x53, 0x3f, 0x50, 0x2e, 0x52, 0x1d, 0x71, 0x09, 0x65, 0x2f, 0x59,
+0x2c, 0x55, 0x1d, 0x9a, 0x10, 0x5f, 0x34, 0x55, 0x2d, 0x50, 0x1c, 0x8d, 0x07, 0x6a, 0x2e, 0x58,
+0x2c, 0x54, 0x1c, 0x6b, 0x12, 0x52, 0x4a, 0x4c, 0x2f, 0x5b, 0x29, 0x76, 0x04, 0x5f, 0x29, 0x5b,
+0x33, 0x48, 0x0b, 0x66, 0x11, 0x49, 0x47, 0x41, 0x3a, 0x4c, 0x29, 0x30, 0x04, 0x5d, 0x34, 0x50,
+0x2a, 0x57, 0x29, 0x2f, 0x08, 0x58, 0x31, 0x50, 0x2d, 0x57, 0x29, 0x28, 0x0c, 0x5a, 0x27, 0x52,
+0x2a, 0x57, 0x28, 0x13, 0x80, 0x78, 0x09, 0x6e, 0x1c, 0x53, 0x10, 0x09, 0x8c, 0xff, 0x15, 0x61,
+0x23, 0x51, 0x35, 0x14, 0x82, 0x69, 0x2a, 0x4f, 0x3a, 0x4b, 0x47, 0x51, 0x81, 0x64, 0x26, 0x55,
+0x3c, 0x3f, 0x10, 0x7c, 0x03, 0x6a, 0x13, 0x64, 0x36, 0x43, 0x35, 0x98, 0x09, 0x58, 0x1f, 0x5d,
+0x3a, 0x3d, 0x11, 0xb3, 0x0a, 0x52, 0x22, 0x5b, 0x33, 0x44, 0x34, 0x7b, 0x07, 0x5b, 0x11, 0x61,
+0x36, 0x43, 0x36, 0x69, 0x0e, 0x56, 0x08, 0x65, 0x36, 0x48, 0x0c, 0x67, 0x16, 0x56, 0x02, 0x60,
+0x34, 0x4f, 0x0c, 0x63, 0x17, 0x53, 0x0a, 0x61, 0x3a, 0x47, 0x10, 0x4e, 0x14, 0x4e, 0x18, 0x5c,
+0x3e, 0x3d, 0x35, 0x46, 0x0d, 0x52, 0x15, 0x5e, 0x3a, 0x41, 0x10, 0x31, 0x08, 0x53, 0x14, 0x64,
+0x3a, 0x40, 0x10, 0x0f, 0x91, 0x72, 0x0f, 0x6e, 0x2c, 0x42, 0x11, 0x0a, 0x97, 0xfd, 0x0b, 0x72,
+0x1f, 0x4a, 0x38, 0x05, 0x93, 0x6f, 0x10, 0x72, 0x27, 0x47, 0x14, 0x05, 0x87, 0x57, 0x1d, 0x55,
+0x3c, 0x48, 0x18, 0x0c, 0x8c, 0x6e, 0x26, 0x50, 0x22, 0x51, 0x18, 0x36, 0x1d, 0x46, 0x37, 0x4d,
+0x21, 0x45, 0x18, 0x6d, 0x15, 0x45, 0x3a, 0x4e, 0x31, 0x46, 0x12, 0x6c, 0x12, 0x4f, 0x33, 0x47,
+0x2c, 0x4d, 0x11, 0x74, 0x01, 0x61, 0x2f, 0x49, 0x38, 0x45, 0x11, 0x5e, 0x81, 0x62, 0x28, 0x53,
+0x2e, 0x4b, 0x17, 0x32, 0x8b, 0x75, 0x19, 0x51, 0x35, 0x49, 0x17, 0x28, 0x05, 0x52, 0x35, 0x3d,
+0x3f, 0x45, 0x17, 0x1b, 0x02, 0x52, 0x36, 0x42, 0x33, 0x4c, 0x18, 0x0f, 0x0c, 0x42, 0x30, 0x39,
+0x49, 0x48, 0x17, 0x09, 0x81, 0x48, 0x3f, 0x40, 0x2f, 0x53, 0x17, 0x09, 0x16, 0x27, 0x42, 0x3c,
+0x39, 0x54, 0x17, 0x0b, 0x17, 0x2a, 0x3c, 0x3f, 0x38, 0x54, 0x16, 0x11, 0x26, 0x31, 0x20, 0x31,
+0x51, 0x50, 0x41, 0x0e, 0x2f, 0x37, 0x07, 0x33, 0x4f, 0x5a, 0x18, 0x0a, 0x38, 0x30, 0x81, 0x34,
+0x50, 0x61, 0x45, 0x08, 0x3d, 0x2c, 0x86, 0x31, 0x51, 0x65, 0x19, 0x17, 0x14, 0x59, 0x0f, 0x55,
+0x30, 0x45, 0x15, 0x34, 0x19, 0x61, 0x18, 0x4b, 0x2f, 0x3e, 0x3e, 0x60, 0x0e, 0x56, 0x23, 0x53,
+0x3a, 0x40, 0x3d, 0x6c, 0x07, 0x61, 0x19, 0x5b, 0x3a, 0x41, 0x3e, 0x71, 0x06, 0x64, 0x16, 0x56,
+0x43, 0x3c, 0x3e, 0x66, 0x88, 0xfe, 0x83, 0x6f, 0x2d, 0x43, 0x3e, 0x68, 0x84, 0x75, 0x0a, 0x65,
+0x35, 0x40, 0x3e, 0x76, 0x82, 0x76, 0x06, 0x69, 0x2f, 0x46, 0x3d, 0x6c, 0x85, 0x79, 0x09, 0x65,
+0x2c, 0x4a, 0x3e, 0x56, 0x8c, 0xfb, 0x05, 0x6a, 0x27, 0x4d, 0x3e, 0x5e, 0x87, 0x7e, 0x0a, 0x67,
+0x29, 0x4c, 0x15, 0x69, 0x82, 0x78, 0x0f, 0x60, 0x29, 0x4d, 0x15, 0x6c, 0x82, 0x7b, 0x04, 0x67,
+0x29, 0x4a, 0x3d, 0x65, 0x01, 0x73, 0x0e, 0x5c, 0x35, 0x41, 0x3d, 0x5e, 0x83, 0x7e, 0x00, 0x69,
+0x31, 0x43, 0x3f, 0x60, 0x84, 0x7a, 0x07, 0x66, 0x32, 0x47, 0x3d, 0x5b, 0x82, 0x7c, 0x03, 0x64,
+0x30, 0x47, 0x3e, 0x6e, 0x02, 0x6e, 0x0d, 0x5e, 0x31, 0x4b, 0x15, 0x57, 0x81, 0x6e, 0x13, 0x5b,
+0x31, 0x49, 0x3e, 0x64, 0x06, 0x6a, 0x11, 0x57, 0x3d, 0x41, 0x3e, 0x6d, 0x04, 0x6f, 0x0a, 0x5d,
+0x31, 0x4a, 0x3e, 0x56, 0x02, 0x70, 0x03, 0x62, 0x2f, 0x4d, 0x3f, 0x4e, 0x86, 0x7c, 0x80, 0x6b,
+0x2e, 0x48, 0x3e, 0x5c, 0x85, 0x79, 0x07, 0x65, 0x31, 0x43, 0x3e, 0x5b, 0x83, 0x7c, 0x06, 0x62,
+0x2d, 0x49, 0x3e, 0x42, 0x83, 0x73, 0x1b, 0x4a, 0x3c, 0x46, 0x3e, 0x57, 0x0c, 0x68, 0x1e, 0x47,
+0x3e, 0x42, 0x15, 0x4e, 0x0b, 0x66, 0x1c, 0x48, 0x3c, 0x46, 0x3e, 0x50, 0x84, 0xfb, 0x84, 0x67,
+0x2b, 0x48, 0x3e, 0x4b, 0x82, 0x7b, 0x0b, 0x58, 0x38, 0x42, 0x3e, 0x3e, 0x85, 0x7b, 0x10, 0x56,
+0x34, 0x48, 0x3e, 0x4a, 0x05, 0x6b, 0x1b, 0x50, 0x31, 0x4e, 0x3e, 0x3f, 0x8a, 0xfc, 0x0c, 0x59,
+0x30, 0x4c, 0x15, 0x39, 0x82, 0x73, 0x1e, 0x4b, 0x36, 0x4c, 0x3e, 0x36, 0x85, 0x7a, 0x13, 0x50,
+0x36, 0x4c, 0x3e, 0x31, 0x02, 0x68, 0x2b, 0x44, 0x36, 0x4d, 0x3f, 0x43, 0x05, 0x74, 0x14, 0x53,
+0x33, 0x47, 0x3e, 0x2f, 0x83, 0x71, 0x1d, 0x50, 0x34, 0x4a, 0x3e, 0x27, 0x87, 0x78, 0x0f, 0x5f,
+0x2a, 0x4d, 0x3e, 0x2b, 0x82, 0x6a, 0x1c, 0x59, 0x2c, 0x4f, 0x3d, 0x24, 0x82, 0x6b, 0x23, 0x53,
+0x26, 0x55, 0x3e, 0x1e, 0x81, 0x65, 0x38, 0x45, 0x2f, 0x54, 0x3e, 0x1b, 0x01, 0x68, 0x2f, 0x52,
+0x1e, 0x5a, 0x3e, 0x15, 0x81, 0x6b, 0x2c, 0x5b, 0x14, 0x64, 0x3e, 0x16, 0x8a, 0xf6, 0x0a, 0x69,
+0x23, 0x50, 0x3e, 0x12, 0x8d, 0xf2, 0x09, 0x6c, 0x1f, 0x55, 0x3d, 0x0f, 0x8a, 0xfa, 0x17, 0x64,
+0x1f, 0x5b, 0x3d, 0x11, 0x87, 0xfb, 0x16, 0x6a, 0x1f, 0x5b, 0x3d, 0x0f, 0x83, 0x7b, 0x21, 0x60,
+0x22, 0x5b, 0x3e, 0x0f, 0x8b, 0xf1, 0x03, 0x73, 0x1d, 0x56, 0x3e, 0x0b, 0x93, 0xe5, 0x91, 0xf8,
+0x12, 0x59, 0x3e, 0x08, 0x91, 0xec, 0x09, 0x67, 0x27, 0x54, 0x3e, 0x06, 0x90, 0xf6, 0x1d, 0x61,
+0x20, 0x5a, 0x3e, 0x06, 0x94, 0xe7, 0x8c, 0x7f, 0x1a, 0x55, 0x3d, 0x04, 0x96, 0xe5, 0x87, 0x6f,
+0x25, 0x53, 0x3d, 0x05, 0x8f, 0xee, 0x0c, 0x66, 0x25, 0x57, 0x3e, 0x04, 0x8c, 0xf6, 0x20, 0x54,
+0x2f, 0x55, 0x3e, 0x02, 0x95, 0xe7, 0x82, 0x6d, 0x27, 0x51, 0x3e, 0x01, 0x93, 0xe9, 0x01, 0x6f,
+0x24, 0x52, 0x15, 0x01, 0x8d, 0xfb, 0x2d, 0x4a, 0x35, 0x4f, 0x15, 0x01, 0x8d, 0x7e, 0x2d, 0x4e,
+0x32, 0x4e, 0x15, 0x00, 0x05, 0x65, 0x2b, 0x53, 0x39, 0x52, 0x15, 0x00, 0x01, 0x7c, 0x16, 0x59,
+0x39, 0x4a, 0x2a, 0x00, 0x06, 0x61, 0x38, 0x39, 0x3b, 0x38, 0x00, 0x00, 0x83, 0x5b, 0x3d, 0x35,
+0x43, 0x34, 0x15, 0x00, 0x10, 0x4e, 0x43, 0x3f, 0x37, 0x3d, 0x00, 0x00, 0x04, 0x53, 0x3f, 0x36,
+0x2d, 0x47, 0x00, 0x00, 0x05, 0x57, 0x36, 0x34, 0x3b, 0x3f, 0x01, 0x00, 0x29, 0x48, 0x38, 0x34,
+0x3e, 0x39, 0x15, 0x00, 0x2b, 0x5a, 0x38, 0x3f, 0x3c, 0x3c, 0x15, 0x00, 0x2b, 0x5a, 0x40, 0x47,
+0x3c, 0x3a, 0x15, 0x00, 0x2b, 0x5e, 0x3f, 0x43, 0x3f, 0x3f, 0x00, 0x00, 0x2c, 0x4c, 0x41, 0x37,
+0x3a, 0x42, 0x00, 0x00, 0x26, 0x4f, 0x32, 0x3d, 0x2f, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00,
+};
+
+//File: merry.wav
+//Time: 23670 ms
+//Size: 8418 bytes
+//Quality: 6
diff --git a/board-package-source/libraries/ArdVoice/extras/assets/merry.wav b/board-package-source/libraries/ArdVoice/extras/assets/merry.wav
new file mode 100644
index 0000000..0be9a38
Binary files /dev/null and b/board-package-source/libraries/ArdVoice/extras/assets/merry.wav differ
diff --git a/board-package-source/libraries/ArdVoice/extras/assets/one.wav b/board-package-source/libraries/ArdVoice/extras/assets/one.wav
new file mode 100644
index 0000000..dfbe14c
Binary files /dev/null and b/board-package-source/libraries/ArdVoice/extras/assets/one.wav differ
diff --git a/board-package-source/libraries/ArdVoice/extras/assets/three.wav b/board-package-source/libraries/ArdVoice/extras/assets/three.wav
new file mode 100644
index 0000000..826c7f8
Binary files /dev/null and b/board-package-source/libraries/ArdVoice/extras/assets/three.wav differ
diff --git a/board-package-source/libraries/ArdVoice/extras/assets/two.wav b/board-package-source/libraries/ArdVoice/extras/assets/two.wav
new file mode 100644
index 0000000..7cf9daf
Binary files /dev/null and b/board-package-source/libraries/ArdVoice/extras/assets/two.wav differ
diff --git a/board-package-source/libraries/ArdVoice/extras/vocoder/vocoder0.2.jar b/board-package-source/libraries/ArdVoice/extras/vocoder/vocoder0.2.jar
new file mode 100644
index 0000000..2c5add0
Binary files /dev/null and b/board-package-source/libraries/ArdVoice/extras/vocoder/vocoder0.2.jar differ
diff --git a/board-package-source/libraries/ArdVoice/keywords.txt b/board-package-source/libraries/ArdVoice/keywords.txt
new file mode 100644
index 0000000..d4460af
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/keywords.txt
@@ -0,0 +1,23 @@
+######################################
+# Syntax Coloring Map For ArdVoice
+######################################
+
+######################################
+# Datatypes (KEYWORD1)
+######################################
+
+ArdVoice KEYWORD1
+
+######################################
+# Methods and Functions (KEYWORD2)
+######################################
+
+isVoicePlaying KEYWORD2
+playVoice KEYWORD2
+stopVoice KEYWORD2
+
+######################################
+# Constants (LITERAL1)
+######################################
+
+# (none defined in this library)
diff --git a/board-package-source/libraries/ArdVoice/library.properties b/board-package-source/libraries/ArdVoice/library.properties
new file mode 100644
index 0000000..91e6abc
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/library.properties
@@ -0,0 +1,9 @@
+name=ArdVoice
+version=0.1.0
+author=Ignacio Vina
+maintainer=Ignacio Vina
+sentence=A library to play audio (voices) on the Arduboy game system.
+paragraph=Plays PCM speech and other audio from compressed .wav data.
+category=Other
+url=https://github.com/igvina/ArdVoice
+architectures=avr
diff --git a/board-package-source/libraries/ArdVoice/src/ArdVoice.cpp b/board-package-source/libraries/ArdVoice/src/ArdVoice.cpp
new file mode 100644
index 0000000..764e269
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/src/ArdVoice.cpp
@@ -0,0 +1,219 @@
+/*
+ Copyright (C) 2016 Ignacio Vina (@igvina)
+
+ 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.
+*/
+
+
+// ArdVoice: version 0.1
+
+#include "ArdVoice.h"
+
+//#define SAMPLES 180
+// 7812,5 ticks/s vs 8000 Hz -> 175,78
+
+#define SAMPLES 176
+
+//Could be size 10 but 16 is faster for % op
+#define BUFFER_SIZE 16
+uint8_t soundBuffer[BUFFER_SIZE];
+
+const uint8_t *voiceName;
+//MAX coeffs 10
+uint8_t numberOfCoeffs;
+int16_t coeffs[10];
+
+uint8_t samplesMod;
+
+int16_t gain;
+uint8_t pitchPeriod;
+
+uint8_t sample_count = 1;
+uint8_t sample1 = 0xFF;
+
+
+int16_t biasOffset;
+uint16_t beat;
+uint16_t beat_lenght;
+
+
+ArdVoice::ArdVoice(){};
+
+void ArdVoice::playVoice(const uint8_t *audio){
+ playVoice(audio, 0, 0, 1.0);
+}
+
+void ArdVoice::playVoice(const uint8_t *audio, uint16_t startTime, uint16_t endTime, float speed){
+
+
+ if (!isSoundInit){
+ isSoundInit = true;
+/*
+ The Arduboy2 library, or equivalent, will control the mode of the
+ speaker pins itself, in order to handle muting.
+ If the ArdVoice library is used where another library or sketch doesn't
+ control the speaker pins, uncomment the following two lines.
+*/
+// pinMode(PIN_SPEAKER_1, OUTPUT);
+// pinMode(PIN_SPEAKER_2, OUTPUT);
+
+ TCCR4A = 0b01000010; // Fast-PWM 8-bit
+ TCCR4B = 0b00000001; // 62500Hz
+ // It is faster, but generates an annoying noise/buzz
+ //TCCR4B = 0b00000010; // 62500Hz / 4
+ OCR4C = 0xFF; // Resolution to 8-bit (TOP=0xFF)
+ OCR4A = 127;
+#ifdef AB_ALTERNATE_WIRING
+ TCCR4C = 0b01000101;
+ OCR4D = 127;
+#endif
+ }
+
+ voiceName = audio;
+
+ byte readedByte = pgm_read_byte(&voiceName[1]);
+
+ uint16_t chunks = ((readedByte & 0x0F) << 8) | (pgm_read_byte(&voiceName[0]) & 0xFF);
+
+ numberOfCoeffs = (readedByte >> 4) & 0x0F;
+ beat = (startTime * 2/*8*/) / /*180*/45;
+ sample1=0;
+ sample_count=1;
+ samplesMod = (uint8_t)(SAMPLES * speed);
+ beat_lenght = endTime == 0 ? chunks : (endTime * 2/*8*/) / /*180*/45;
+
+ //Init timer
+ TIMSK4 = 0b00000100;
+}
+
+
+//Timer
+ISR(TIMER4_OVF_vect){
+
+ sample_count--;
+
+ if(sample1 != 0xFF){
+ if(sample_count == 0){
+ // Should be sample_count = 8, but it's slow to process
+ sample_count = 4;
+ // Read LPC coeffs on first sample
+ if (sample1 == 0){
+ // Reset buffer
+ memset(soundBuffer, 127, BUFFER_SIZE);
+ // Get array offset
+ uint16_t offset = 2 + beat * (2 + numberOfCoeffs);
+ beat++;
+
+ // Check if voice ended
+ if(beat > beat_lenght){
+ // Stop timer and return
+ OCR4A = 127;
+#ifdef AB_ALTERNATE_WIRING
+ OCR4D = 127;
+#endif
+ TIMSK4 = 0;
+ sample1 = 0xFF;
+ return;
+ }
+
+ byte readedByte = pgm_read_byte(&voiceName[offset]);
+
+ pitchPeriod = readedByte & 0xb10000000;
+
+ if (pitchPeriod == 0){
+ pitchPeriod = (readedByte & 0xFF) + 20;
+ } else {
+ pitchPeriod = 0;
+ }
+
+ gain = ((pgm_read_byte(&voiceName[offset+1])& 0xFF));;
+ biasOffset = 64;
+
+ for (uint8_t i = 0; i < numberOfCoeffs ; i++){
+ readedByte = pgm_read_byte(&voiceName[offset + 2 + i]);
+
+ if ((readedByte & 0b10000000) == 0){
+ coeffs[i] =((readedByte & 0xFF) - 64);
+ } else{
+ coeffs[i] = (((64 * 64) / ((readedByte & 0b01111111) - 64 )));
+ }
+ //TIP: Faster to precalculate
+ biasOffset += coeffs[i];
+ }
+ biasOffset *= 127;
+ }
+
+ // Get next sample
+
+ int16_t temp = pitchPeriod == 0 ?
+ gain * ((fastRand8())-127):
+ (sample1 % pitchPeriod) == 0 ? gain * 127: 0;
+
+ uint8_t sampleOffset = sample1 % BUFFER_SIZE;
+
+ for (uint8_t i = 0; i < numberOfCoeffs; i++) {
+ temp -= coeffs[i] * ((soundBuffer[(sampleOffset- i + BUFFER_SIZE - 1)%BUFFER_SIZE] & 0xFF));
+ }
+
+ temp = (temp + biasOffset) / 64;
+ // Fix out of range values
+ temp = temp < 0 ? 0 : temp > 255 ? 255 : temp;
+
+ OCR4A = soundBuffer[sampleOffset] = temp & 0xFF;
+#ifdef AB_ALTERNATE_WIRING
+ OCR4D = soundBuffer[sampleOffset];
+#endif
+ sample1++;
+
+ // Jump to next beat
+ if (sample1 == samplesMod) sample1 = 0;
+ }
+ }
+}
+
+void ArdVoice::stopVoice(){
+ OCR4A = 127;
+#ifdef AB_ALTERNATE_WIRING
+ OCR4D = 127;
+#endif
+ TIMSK4 = 0;
+ sample1 = 0xFF;
+}
+
+boolean ArdVoice::isVoicePlaying(){
+ return sample1 != 0xFF;
+}
+
+uint8_t fastRand8() {
+ static uint8_t state[STATE_BYTES] = { 0x87, 0xdd, 0xdc, 0x10, 0x35, 0xbc, 0x5c };
+ static uint16_t c = 0x42;
+ static unsigned int i = 0;
+ uint16_t t;
+ uint8_t x;
+
+ x = state[i];
+ t = (uint16_t)x * MULT_LO + c;
+ c = t >> 8;
+
+#if MULT_HI
+ c += x;
+#endif
+
+ x = t & 255;
+ state[i] = x;
+ if (++i >= sizeof(state))
+ i = 0;
+ return x;
+}
+
+
diff --git a/board-package-source/libraries/ArdVoice/src/ArdVoice.h b/board-package-source/libraries/ArdVoice/src/ArdVoice.h
new file mode 100644
index 0000000..d60b4cb
--- /dev/null
+++ b/board-package-source/libraries/ArdVoice/src/ArdVoice.h
@@ -0,0 +1,54 @@
+/*
+ Copyright (C) 2016 Ignacio Vina (@igvina)
+
+ 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.
+*/
+
+// ArdVoice: version 0.1
+
+#ifndef ARDVOICE_H
+#define ARDVOICE_H
+
+#include
+
+#define PIN_SPEAKER_1 5 /**< The pin number of the first lead of the speaker */
+#ifndef AB_ALTERNATE_WIRING
+ #define PIN_SPEAKER_2 13 /**< The pin number of the second lead of the speaker */
+#else
+ #define PIN_SPEAKER_2 6 /**< Pro Micro alternative second lead of the speaker */
+#endif
+
+//Fast pseudoo-random number generator, it's ok for noise
+#define STATE_BYTES 7
+#define MULT 0x13B /* for STATE_BYTES==6 only */
+#define MULT_LO (MULT & 255)
+#define MULT_HI (MULT & 256)
+
+uint8_t fastRand8();
+
+class ArdVoice
+{
+ public:
+ ArdVoice();
+ void playVoice(const uint8_t *audio);
+ void playVoice(const uint8_t *audio, uint16_t startTime, uint16_t endTime, float speed);
+ void stopVoice();
+ boolean isVoicePlaying();
+ private:
+ boolean isSoundInit = false;
+
+};
+
+
+
+#endif
diff --git a/board-package-source/libraries/Arduboy-TinyFont/LICENSE b/board-package-source/libraries/Arduboy-TinyFont/LICENSE
new file mode 100644
index 0000000..9735151
--- /dev/null
+++ b/board-package-source/libraries/Arduboy-TinyFont/LICENSE
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2017, Botond Kis
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/board-package-source/libraries/Arduboy-TinyFont/README.md b/board-package-source/libraries/Arduboy-TinyFont/README.md
new file mode 100644
index 0000000..20319ea
--- /dev/null
+++ b/board-package-source/libraries/Arduboy-TinyFont/README.md
@@ -0,0 +1,141 @@
+# Arduboy-TinyFont
+Tiny 4x4 Font for Arduboy which contains the small ASCII Table from 32 to 127.
+The sprite for the font uses 192 bytes.
+The last character 127 is supposed to bel `DEL` but i used it as a placeholder (â– ) for not found characters.
+
+![Preview](https://github.com/yinkou/Arduboy-TinyFont/blob/master/bitmaps/tinyfont-preview.png?raw=true "Font Preview")
+
+## Usage:
+Make an instance of `Tinyfont` and initialize it with a screenbuffer with corresponding sizes.
+Call `print()` with you c-string and position to draw text to the screen.
+
+#### Sample:
+```cpp
+Tinyfont tinyfont = Tinyfont(arduboy.sBuffer, Arduboy2::width(), Arduboy2::height());
+tinyfont.setCursor(0, 0);
+tinyfont.print("The quick brown fox jumps\nover the lazy dog.");
+```
+
+## Dependencies:
+Subclass of Arduino `Print`.
+
+## Customization:
+You can adjust `letterSpacing` and `lineHeight`.
+
+#### Custom characters:
+You can add custom characters above 127 (up to index 255) by using the `4x4font.png` as base.
+Edit the file (or the .psd) in an image editor of your choice. But be sure to always append 8x8 pixels at the end which you can fill as you like.
+Throw the new .png through a image converter and replace the sprite in `TinyfontSprite.c` with your new data.
+
+## Optimization:
+I'm pretty sure this can be optimized since it takes a lot of space.
+
+#### Arduboy2::print()
+`Sketch uses 7902 bytes (27%) of program storage space`
+
+#### Tinyfont::print()
+`Sketch uses 8834 bytes (30%) of program storage space.`
+
+#### Both:
+`Sketch uses 8918 bytes (30%) of program storage space`
+
+
+## Table
+**dec**|**hex**|**symbol**
+:-----:|:-----:|:-----:
+32|20|(space)
+33|21|!
+34|22|"
+35|23|#
+36|24|$
+37|25|%
+38|26|&
+39|27|'
+40|28|(
+41|29|)
+42|2A|*
+43|2B|+
+44|2C|;
+45|2D|-
+46|2E|.
+47|2F|/
+48|30|0
+49|31|1
+50|32|2
+51|33|3
+52|34|4
+53|35|5
+54|36|6
+55|37|7
+56|38|8
+57|39|9
+58|3A|:
+59|3B|"
+60|3C|<
+61|3D|=
+62|3E|>
+63|3F|?
+64|40|@
+65|41|A
+66|42|B
+67|43|C
+68|44|D
+69|45|E
+70|46|F
+71|47|G
+72|48|H
+73|49|I
+74|4A|J
+75|4B|K
+76|4C|L
+77|4D|M
+78|4E|N
+79|4F|O
+80|50|P
+81|51|Q
+82|52|R
+83|53|S
+84|54|T
+85|55|U
+86|56|V
+87|57|W
+88|58|X
+89|59|Y
+90|5A|Z
+91|5B|[
+92|5C|\
+93|5D|]
+94|5E|^
+95|5F|\_
+96|60|`
+97|61|a
+98|62|b
+99|63|c
+100|64|d
+101|65|e
+102|66|f
+103|67|g
+104|68|h
+105|69|i
+106|6A|j
+107|6B|k
+108|6C|l
+109|6D|m
+110|6E|n
+111|6F|o
+112|70|p
+113|71|q
+114|72|r
+115|73|s
+116|74|t
+117|75|u
+118|76|v
+119|77|w
+120|78|x
+121|79|y
+122|7A|z
+123|7B|{
+124|7C|\\|
+125|7D|}
+126|7E|~
+127|7F|â–
diff --git a/board-package-source/libraries/Arduboy-TinyFont/bitmaps/4x4font.psd b/board-package-source/libraries/Arduboy-TinyFont/bitmaps/4x4font.psd
new file mode 100644
index 0000000..bf741a1
Binary files /dev/null and b/board-package-source/libraries/Arduboy-TinyFont/bitmaps/4x4font.psd differ
diff --git a/board-package-source/libraries/Arduboy-TinyFont/bitmaps/tinyfont-preview.png b/board-package-source/libraries/Arduboy-TinyFont/bitmaps/tinyfont-preview.png
new file mode 100644
index 0000000..5acc63f
Binary files /dev/null and b/board-package-source/libraries/Arduboy-TinyFont/bitmaps/tinyfont-preview.png differ
diff --git a/board-package-source/libraries/Arduboy-TinyFont/bitmaps/tinyfont_8x8.png b/board-package-source/libraries/Arduboy-TinyFont/bitmaps/tinyfont_8x8.png
new file mode 100644
index 0000000..a19f93a
Binary files /dev/null and b/board-package-source/libraries/Arduboy-TinyFont/bitmaps/tinyfont_8x8.png differ
diff --git a/board-package-source/libraries/Arduboy-TinyFont/examples/TinyfontSample/TinyfontSample.ino b/board-package-source/libraries/Arduboy-TinyFont/examples/TinyfontSample/TinyfontSample.ino
new file mode 100644
index 0000000..fa63849
--- /dev/null
+++ b/board-package-source/libraries/Arduboy-TinyFont/examples/TinyfontSample/TinyfontSample.ino
@@ -0,0 +1,47 @@
+#include
+#include "Tinyfont.h"
+
+Arduboy2 arduboy;
+Tinyfont tinyfont = Tinyfont(arduboy.sBuffer, Arduboy2::width(), Arduboy2::height());
+char allLetters[101];
+
+void setup() {
+ arduboy.begin();
+ Serial.begin(9600);
+
+ // create all ascii letters from 32-126
+ size_t newLineCounter = 0;
+ for (size_t i = 0; i < 100; i++) {
+ if ((i % 26) == 0) {
+ allLetters[i] = '\n';
+ newLineCounter++;
+ }
+ else{
+ allLetters[i] = (char) (i+32) - newLineCounter;
+ }
+ }
+ allLetters[100] = '\0';
+}
+
+void loop() {
+ // put your main code here, to run repeatedly:
+
+ arduboy.clear();
+
+ tinyfont.setCursor(1, 0);
+ tinyfont.print("THE QUICK BROWN FOX JUMPS\nOVER THE LAZY DOG.");
+ tinyfont.setCursor(1, 11);
+ tinyfont.print("The quick brown fox jumps\nover the lazy dog.");
+
+ // all letters
+ tinyfont.setCursor(1, 22);
+ tinyfont.print(allLetters);
+
+ // for comparison
+ arduboy.setCursor(1, 52);
+ arduboy.print("THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.");
+
+ // screen capture
+ Serial.write(arduboy.getBuffer(), 128 * 64 / 8);
+ arduboy.display();
+}
diff --git a/board-package-source/libraries/Arduboy-TinyFont/keywords.txt b/board-package-source/libraries/Arduboy-TinyFont/keywords.txt
new file mode 100644
index 0000000..c7744a4
--- /dev/null
+++ b/board-package-source/libraries/Arduboy-TinyFont/keywords.txt
@@ -0,0 +1,7 @@
+https://github.com/yinkou/Arduboy-TinyFont
+
+#######################################
+# Datatypes (KEYWORD1)
+#######################################
+
+Tinyfont KEYWORD1
diff --git a/board-package-source/libraries/Arduboy-TinyFont/library.json b/board-package-source/libraries/Arduboy-TinyFont/library.json
new file mode 100644
index 0000000..9e1e081
--- /dev/null
+++ b/board-package-source/libraries/Arduboy-TinyFont/library.json
@@ -0,0 +1,21 @@
+{
+ "name": "Arduboy-Tinyfont",
+ "description": "Tiny 4x4 Font for Arduboy which contains the small ASCII Table from 32 to 127. The sprite for the font uses 192 bytes.",
+ "keywords": "arduboy, font, tiny, 4x4, text, display, print",
+ "authors":
+ {
+ "name": "Boti Kis",
+ "email": "not@available.com",
+ "url": "https://github.com/yinkou/Arduboy-TinyFont",
+ "maintainer": true
+ },
+
+ "repository":
+ {
+ "type": "git",
+ "url": "https://github.com/yinkou/Arduboy-TinyFont"
+ },
+ "version": "3.2",
+ "license": "BSD-3-Clause",
+ "examples": "examples/TinyfontSample/TinyfontSample.ino"
+}
diff --git a/board-package-source/libraries/Arduboy-TinyFont/library.properties b/board-package-source/libraries/Arduboy-TinyFont/library.properties
new file mode 100644
index 0000000..e6b5542
--- /dev/null
+++ b/board-package-source/libraries/Arduboy-TinyFont/library.properties
@@ -0,0 +1,10 @@
+name=Arduboy-TinyFont
+version=3.2
+author=Boti Kis
+maintainer=Boti Kis
+sentence=Tiny 4x4 Font for Arduboy which contains the small ASCII Table from 32 to 127. The sprite for the font uses 192 bytes.
+paragraph=Subclasses Arduino::Print and works with all print functions.
+category=Display
+url=https://github.com/yinkou/Arduboy-TinyFont
+architectures=avr
+includes=Tinyfont.h
diff --git a/board-package-source/libraries/Arduboy-TinyFont/src/Tinyfont.cpp b/board-package-source/libraries/Arduboy-TinyFont/src/Tinyfont.cpp
new file mode 100644
index 0000000..80a8e8d
--- /dev/null
+++ b/board-package-source/libraries/Arduboy-TinyFont/src/Tinyfont.cpp
@@ -0,0 +1,123 @@
+#include "Tinyfont.h"
+#include "TinyfontSprite.c"
+
+#define TINYFONT_WIDTH 4
+#define TINYFONT_HEIGHT 4
+
+Tinyfont::Tinyfont(uint8_t *screenBuffer, int16_t width, int16_t height){
+ sBuffer = screenBuffer;
+ sWidth = width;
+ sHeight = height;
+
+ // default values
+ lineHeight = TINYFONT_HEIGHT + 1;
+ letterSpacing = 1;
+
+ cursorX = cursorY = baseX = 0;
+ textColor = 1;
+
+ maskText = false;
+}
+
+size_t Tinyfont::write(uint8_t c) {
+ if(c == '\n'){
+ cursorX = baseX; // cr
+ cursorY += lineHeight; // lf
+ }
+ // check for tab
+ else if(c == '\t'){
+ cursorX += TINYFONT_WIDTH + 5;
+ }
+ // check \n
+ else if (c == '\n') {
+ cursorX = baseX;
+ cursorY += lineHeight;
+ }
+ else{
+ // draw char
+ printChar(c, cursorX, cursorY);
+ cursorX += TINYFONT_WIDTH + letterSpacing;
+ }
+ return 1;
+}
+
+void Tinyfont::printChar(char c, int16_t x, int16_t y)
+{
+ // no need to draw at all of we're offscreen
+ if (x + TINYFONT_WIDTH <= 0 || x > sWidth - 1 || y + TINYFONT_HEIGHT <= 0 || y > sHeight - 1)
+ return;
+
+ // check if char is available
+ if (((uint8_t) c) < 32 || ((uint8_t) c) > 255) c = (char)127;
+
+ uint8_t cval = ((uint8_t) c) - 32;
+
+ // layout lowercase letters
+ if (cval >= 65 && cval <= 90) y++;
+
+ // layout comma letters
+ if (cval == 12 || cval == 27) y++;
+
+ // get sprite frames
+ const uint8_t *letter = TINYFONT_SPRITE + ((cval/2) * 4);
+
+ for (uint8_t i = 0; i < 4; i++ ) {
+
+ uint8_t colData = pgm_read_byte(letter++);
+ if (c % 2 == 0) {
+ // mask upper sprite
+ colData &= 0x0f;
+ }
+ else{
+ // for every odd character, shift pixels to get the correct character
+ colData >>= 4;
+ }
+
+ if (maskText) {
+ drawByte(x+i, y, 0x0f, (textColor == 0)?1:0);
+ }
+
+ drawByte(x+i, y, colData, textColor);
+ }
+}
+
+void Tinyfont::drawByte(int16_t x, int16_t y, uint8_t pixels, uint8_t color){
+
+ uint8_t row = (uint8_t)y / 8;
+
+ // check if byte needs to be seperated
+ if (((uint8_t)y)%8 == 0) {
+ uint8_t col = (uint8_t)x % sWidth;
+ if (color == 0)
+ sBuffer[col + row*sWidth] &= ~pixels;
+ else
+ sBuffer[col + row*sWidth] |= pixels;
+ }
+ else{
+ uint8_t d = (uint8_t)y%8;
+
+ drawByte(x, row*8, pixels << d, color);
+ drawByte(x, (row+1)*8, pixels >> (8-d), color);
+ }
+}
+
+void Tinyfont::setCursor(int16_t x, int16_t y){
+ cursorX = baseX = x;
+ cursorY = y;
+}
+
+int16_t Tinyfont::getCursorX() const {
+ return cursorX;
+}
+
+int16_t Tinyfont::getCursorY() const {
+ return cursorY;
+}
+
+void Tinyfont::setTextColor(uint8_t color){
+ textColor = color;
+}
+
+uint8_t Tinyfont::getTextColor() const {
+ return textColor;
+}
diff --git a/board-package-source/libraries/Arduboy-TinyFont/src/Tinyfont.h b/board-package-source/libraries/Arduboy-TinyFont/src/Tinyfont.h
new file mode 100644
index 0000000..669cb96
--- /dev/null
+++ b/board-package-source/libraries/Arduboy-TinyFont/src/Tinyfont.h
@@ -0,0 +1,109 @@
+#ifndef TINYFONT_H
+#define TINYFONT_H
+
+#include
+#include
+
+/**
+ * Tinyfont uses a 4x4 font to print text.
+ * It conforms do standard ASCII letters in range from 32 to 126.
+ * Even tough the lowercase letters are available, the best readability
+ * is given with the Uppercase letters.
+ *
+ * Usage:
+ * Call the print() method of a Tinyfont instance.
+ *
+ * Special letters:
+ * \n makes a linebreak in print().
+ * \t makes a 9 px long jump in print().
+ */
+class Tinyfont : public Print {
+ public:
+ Tinyfont(uint8_t *screenBuffer, int16_t width, int16_t height); //!< Needs to be initialized with a screenBuffer where the height is a multiple of 8.
+ virtual size_t write(uint8_t); // used by the Arduino Print class
+
+ /** \brief
+ * Prints a single letter in ASCII range from 32 to 126.
+ *
+ * \details
+ * Every character outside the range will be 127, wich is a square fallback sprite.
+ */
+ void printChar(char c, int16_t x, int16_t y);
+
+
+ /** \brief
+ * Set the location of the text cursor.
+ *
+ * \param x The X coordinate, in pixels, for the new location of the text cursor.
+ * \param y The Y coordinate, in pixels, for the new location of the text cursor.
+ *
+ * \details
+ * The location of the text cursor is set the the specified coordinates.
+ * The coordinates are in pixels. Since the coordinates can specify any pixel
+ * location, the text does not have to be placed on specific rows.
+ * As with all drawing functions, location 0, 0 is the top left corner of
+ * the display. The cursor location will be the top left corner of the next
+ * character written.
+ */
+ void setCursor(int16_t x, int16_t y);
+
+ /** \brief
+ * Get the X coordinate of the current text cursor position.
+ *
+ * \return The X coordinate of the current text cursor position.
+ *
+ * \details
+ * The X coordinate returned is a pixel location with 0 indicating the
+ * leftmost column.
+ */
+ int16_t getCursorX() const;
+
+ /** \brief
+ * Get the Y coordinate of the current text cursor position.
+ *
+ * \return The Y coordinate of the current text cursor position.
+ *
+ * \details
+ * The Y coordinate returned is a pixel location with 0 indicating the
+ * topmost row.
+ */
+ int16_t getCursorY() const;
+
+ /** \brief
+ * Set the text foreground color.
+ *
+ * \param color The color to be used for following text.
+ */
+ void setTextColor(uint8_t color);
+
+ /** \brief
+ * Get the text foreground color.
+ *
+ * \return The color used for text.
+ */
+ uint8_t getTextColor() const;
+
+ /** \brief
+ * If set to true the pixel behind the text will be set to the opposite of textColor.
+ * Default is false.
+ */
+ bool maskText;
+
+ private:
+ void drawByte(int16_t x, int16_t y, uint8_t pixels, uint8_t color);
+
+ uint8_t *sBuffer;
+ int16_t sWidth;
+ int16_t sHeight;
+
+ int16_t cursorX; //!< Default is 0.
+ int16_t baseX; //!< needed for linebreak.
+ int16_t cursorY; //!< Default is 0.
+
+ uint8_t textColor; // BLACK == 0, everything else is WHITE. Default is WHITE.
+
+ uint8_t letterSpacing; //!< letterSpacing controls the distance between letters. Default is 1.
+ uint8_t lineHeight; //!< lineHeight controls the height between lines breakend by \n. Default is 5.
+};
+
+#endif
diff --git a/board-package-source/libraries/Arduboy-TinyFont/src/TinyfontSprite.c b/board-package-source/libraries/Arduboy-TinyFont/src/TinyfontSprite.c
new file mode 100644
index 0000000..686da16
--- /dev/null
+++ b/board-package-source/libraries/Arduboy-TinyFont/src/TinyfontSprite.c
@@ -0,0 +1,36 @@
+
+#ifndef TINYFONT_SPRITE_H
+#define TINYFONT_SPRITE_H
+
+#include
+#include
+
+const unsigned char PROGMEM TINYFONT_SPRITE[] =
+{
+ 0x00, 0xb0, 0x00, 0x00, 0xa1, 0x70, 0xe1, 0x50,
+ 0x96, 0x4f, 0x26, 0x90, 0x0f, 0x1d, 0x07, 0x0c,
+ 0x00, 0x96, 0x69, 0x00, 0x4a, 0xe4, 0x4a, 0x00,
+ 0x48, 0x44, 0x40, 0x00, 0x80, 0x68, 0x10, 0x00,
+ 0x0f, 0x99, 0xfb, 0x8f, 0x9d, 0xbd, 0xbb, 0xfb,
+ 0x77, 0xd4, 0xd4, 0xdf, 0x1f, 0x1a, 0x1a, 0xfe,
+ 0x7f, 0x5d, 0x5d, 0xff, 0x80, 0x5a, 0x00, 0x00,
+ 0xa0, 0xa4, 0xaa, 0x00, 0x10, 0xba, 0x34, 0x00,
+ 0xff, 0x59, 0x53, 0xf3, 0xff, 0x9b, 0x9b, 0x9e,
+ 0xff, 0xb9, 0xb9, 0x96, 0xff, 0x95, 0x95, 0xd1,
+ 0x9f, 0xf4, 0x94, 0x0f, 0xfc, 0x29, 0x5f, 0x91,
+ 0xff, 0x18, 0x38, 0xf8, 0xff, 0x92, 0x94, 0xff,
+ 0xff, 0x95, 0xd5, 0xf7, 0xbf, 0xb5, 0xdd, 0xd7,
+ 0xf1, 0x8f, 0x81, 0xf1, 0xf7, 0x88, 0xc8, 0xf7,
+ 0x79, 0xc6, 0x46, 0x79, 0x09, 0xfd, 0x9b, 0x09,
+ 0x01, 0x96, 0xf8, 0x00, 0x82, 0x81, 0x82, 0x80,
+ 0x50, 0x71, 0x62, 0x00, 0x77, 0x56, 0x56, 0x00,
+ 0x76, 0x76, 0x37, 0x00, 0xa2, 0xb7, 0x73, 0x01,
+ 0x07, 0x72, 0x06, 0x00, 0x78, 0x27, 0x50, 0x00,
+ 0x73, 0x34, 0x74, 0x00, 0x77, 0x51, 0x76, 0x00,
+ 0x7f, 0x55, 0xf7, 0x00, 0x47, 0x71, 0x10, 0x00,
+ 0x32, 0x47, 0x72, 0x00, 0x73, 0x64, 0x73, 0x00,
+ 0x15, 0xa2, 0x75, 0x00, 0x61, 0x67, 0x94, 0x00,
+ 0x00, 0x9f, 0x60, 0x60, 0xf4, 0xf2, 0xf6, 0xf2,
+};
+
+#endif
diff --git a/board-package-source/libraries/ArduboyTones/LICENSE.txt b/board-package-source/libraries/ArduboyTones/LICENSE.txt
new file mode 100644
index 0000000..f08ad19
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2017 Scott Allen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/board-package-source/libraries/ArduboyTones/README.md b/board-package-source/libraries/ArduboyTones/README.md
new file mode 100644
index 0000000..2485b40
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/README.md
@@ -0,0 +1,222 @@
+# The ArduboyTones Library
+
+The ArduboyTones library is maintained in a git repository hosted on [GitHub](https://github.com/) at:
+
+https://github.com/MLXXXp/ArduboyTones
+
+ArduboyTones is a library for playing tones and tone sequences, intended to be used with the Arduino based [Arduboy miniature game system](https://www.arduboy.com/) (but could be used with other Arduino boards).
+
+## Description
+
+**ArduboyTones** is a small, efficient library which generates tones and tone sequences on a speaker attached to digital output pins. It is intended to be used by games and other sketches written for the Arduboy, so the pins (and timer) used are *hard coded* for the Arduboy, and thus aren't specified in any functions.
+
+Like the [Arduino built in *tone()* function](https://www.arduino.cc/en/Reference/Tone), the tones are simple square waves generated by toggling a pin digitally high and low with a 50% duty cycle. Also like Arduino *tone()*, once started, interrupts are used so that the sound plays in the background while the *real* code continues to run.
+
+ArduboyTones has equivalents to Arduino [*tone()*](https://www.arduino.cc/en/Reference/Tone) and [*noTone()*](https://www.arduino.cc/en/Reference/NoTone) and additionally:
+
+- As well as a single tone, the *tone()* function can play two or three tones, in sequence, with a single call.
+- Includes functions to play a tone sequence of any length, specified by an array located in either program memory ([PROGMEM](https://www.arduino.cc/en/Reference/PROGMEM)) or RAM. The array can be optionally terminated with a *repeat* command so the sequence will repeat continuously unless stopped by using *noTone()* or a new tone or sequence is started.
+- Each tone can specify that it's to be played at either normal or a higher volume. High volume is accomplished by taking advantage of the speaker being wired across two pins and toggling each pin opposite to the other, which will generate twice the normal voltage across the speaker. For normal volume, one pin is toggled while the other is held low.
+- A function is available to set flags to ignore the individual volume setting in each tone, so that all tones will play at either normal or high volume.
+- Tone sequences can include intervals of silence (musical rests).
+- Includes a global *mute* capability by using a callback function, specified by the sketch, which indicates sound is to be muted. When muted, the sketch can continue to call functions to produce tones in the usual way but the speaker will remain silent. It is intended that the Arduboy2 Library's *audio.enabled()* function, or something similar, be used as this function.
+- A function is provided which will return `true` if tones are playing or `false` if the sequence has completed.
+
+Note that even with all these features, ArduboyTones will use significantly less code space than using Arduino *tone()* functions.
+
+### Converting MIDI files
+
+A separate command line utility program, [midi2tones](https://github.com/MLXXXp/midi2tones), is available. It will convert [standard MIDI files](https://www.midi.org/articles/about-midi-part-4-midi-files) to ArduboyTones format when the `-o2` option is specified.
+
+## Installation
+
+The library can be installed using the Arduino IDE library manager:
+
+- In the Arduino IDE select from the menus: `Sketch > Include Library > Manage Libraries...`
+- In the Library Manager *Filter your search...* field enter *arduboytones*.
+- Click somewhere within the ArduboyTones entry.
+- Click on the *Install* button.
+
+For more library installation information see
+
+[Installing Additional Arduino Libraries - Using the Library Manager](https://www.arduino.cc/en/Guide/Libraries#toc3)
+
+## Using the library
+
+### Setting up
+
+Include the library using
+
+```cpp
+#include
+```
+
+You must then create an *ArduboyTones* object which specifies the callback function used for muting. The function is a required parameter. It must return a *boolean* (or *bool*) value which will be `true` if sound should be played, or `false` if all sounds should be muted. In this document the *ArduboyTones* object will be named *sound*. The *audio.enabled()* function of the *Arduboy* library will be used for the mute callback. The *Arduboy* object will be named *arduboy*.
+
+So, to set things up we can use:
+
+```cpp
+#include
+#include
+
+Arduboy2 arduboy;
+ArduboyTones sound(arduboy.audio.enabled);
+```
+
+### Specifying tones
+
+Each tone is specified by a frequency and duration pair, the same as with Arduino *tone()*. Like *tone()*, the frequency is specified in hertz (Hz, cycles per second). The duration is in milliseconds (actually very slightly shorter; see below).
+
+There are some small differences between the Arduino *tone()* and the ArduboyTones frequency and duration parameters.
+
+#### Frequency
+
+- ArduboyTones can only play frequencies between 16 Hz and 32767 Hz. Arduino *tone()* allows a greater range.
+- For efficiency, ArduboyTones uses a single clock prescaler value for the timer. The result is that very high frequencies may be a bit less accurate than what Arduino *tone()* would produce. It likely won't be noticeable for the range of frequencies that will mainly be used.
+- With ArduboyTones, you can use a frequency value of 0 to indicate silence (a musical rest) for the duration specified.
+- You can indicate that a tone should sound at a higher volume by adding the defined value *TONE_HIGH_VOLUME* to the desired frequency.
+
+#### Duration
+
+- To make the code smaller and more efficient, durations are actually in 1024ths of a second instead of 1000ths (milliseconds). See the note near the end of this document for a detailed explanation.
+- With ArduboyTones, a tone's duration is specified as an unsigned int (16 bits) instead of an unsigned long (32 bits). This means the maximum duration allowed is 65535 (65 seconds). Like Arduino *tone()* a duration of 0 indicates forever, which can be stopped by *noTone()* or replaced by a new tone or sequence call.
+
+#### Defines for musical notes
+
+ ArduboyTones includes file *ArduboyTonesPitches.h* which will automatically be included by *ArduboyTones.h*. *ArduboyTonesPitches.h* provides frequency values for musical notes based on A4 = 440 Hz.
+
+The format is:
+
+`NOTE_`
+
+*NOTE_REST* is defined as 0 and can be used for a musical rest.
+
+There are no flats. You have to use the sharp note equivalent.
+
+Notes are define over the range of C0 (16 Hz) to B9 (15804 Hz)
+
+Examples: `NOTE_C3 NOTE_GS4 NOTE_B5H NOTE_DS6H`
+
+### Functions
+
+All functions are members of class *ArduboyTones*, so you must remember to reference each function with the object name.
+Example: `sound.tone(1000, 500);`
+
+----------
+
+Play a tone forever or until interrupted:
+
+`void tone(frequency)`
+
+Play a single tone for the duration. Duration can be 0 (forever):
+
+`void tone(frequency, duration)`
+
+Play two tones in sequence:
+
+`void tone(freq1, dur1, freq2, dur2)`
+
+Play three tones in sequence:
+
+`void tone(freq1, dur1, freq2, dur2, freq3, dur3)`
+
+----------
+
+Play a tone sequence from frequency/duration pairs in an array in program memory:
+
+`void tones(arrayInProgram)`
+
+The array must end with a single value of either *TONES_END*, to end the sequence, or *TONES_REPEAT* to continuously repeat from beginning to end.
+
+Example:
+
+```cpp
+const uint16_t song1[] PROGMEM = {
+ 220,1000, 0,250, 440,500, 880,2000,
+ TONES_END };
+
+sound.tones(song1);
+```
+
+----------
+
+The same as *tones()* above except the frequency/duration pairs are in an array in RAM instead of in program memory:
+
+`void tonesInRAM(arrayInRAM)`
+
+ Generally, the only reason to use *tonesInRAM()* instead of *tones()* would be if dynamically altering the contents of the array is required.
+
+Example:
+
+```cpp
+uint16_t song2[] = {
+ NOTE_A3,1000, NOTE_REST,250, NOTE_A4,500, NOTE_A5,2000,
+ TONES_REPEAT };
+
+sound.tonesInRAM(song2);
+```
+
+----------
+
+Stop playing the tone or sequence:
+
+`void noTone()`
+
+If called when nothing is playing, it will do nothing.
+
+----------
+
+Set the volume to always be normal, always high, or tone controlled:
+
+`void volumeMode(mode)`
+
+The following values for *mode* should be used:
+
+- *VOLUME_IN_TONE* - Each tone will play at the volume specified in the tone itself. This is the default.
+- *VOLUME_ALWAYS_NORMAL* - All tones will play at normal volume level regardless of what's specified in the tones.
+- *VOLUME_ALWAYS_HIGH* - All tones will play at high volume level regardless of what's specified in the tones.
+
+----------
+
+Check if a tone or tone sequence is playing:
+
+`boolean playing()`
+
+Returns `true` if playing (even if sound is muted).
+
+----------
+
+### Notes and Hints
+
+#### Example sketch
+
+The ArduboyTones library contains an example sketch *ArduboyTonesTest* in the *examples* folder. It was primarily written to test the library but the code can be examined and uploaded for examples of using all the functions. It uses the [*Arduboy2*](https://github.com/MLXXXp/Arduboy2) library, which must be installed to compile the sketch. *ArduboyTonesTest* can be loaded into the Arduino IDE using the menus:
+
+`File > Examples > ArduboyTones > ArduboyTonesTest`
+
+#### Frequencies and durations work the same everywhere
+
+You can use rests and infinite durations in *tone()* functions the same as in sequence arrays. Most of the time this wouldn't be useful, however...
+
+- A rest would only be useful in the middle of a three tone *tone()* function, to play two tones with a rest between them. Or maybe on the end, if you were chaining *tone()* functions by using *playing()* to wait for each one to end, and then starting the next one immediately.
+- A duration of 0 (forever) is only useful on the last tone of a sequence, even in an array.
+- You can use *TONES_REPEAT* (and even *TONES_END*) in place of a frequency in a *tone()* function. In this case the mandatory duration value would be ignored. About the only place this might be useful would be using *TONES_REPEAT* at the end of a three tone *tone()* function, to play two tones repeatedly. For instance, two tones repeated could be used when a character starts walking and then *noTone()* could be called when the character stopped.
+
+Something to consider for all of the above points, though:
+
+Using a two or three tone array in program memory with *tones()* is likely more efficient than using a two or three tone *tone()* function. The two and three tone *tone()* functions were only added to make things easier and quick for sketches where code size isn't an issue.
+
+#### Why durations aren't exactly in milliseconds
+
+Ideally, to match Arduino *tone()*, durations should be given in 1000ths of a second (milliseconds). However, ArduboyTones treats durations as being in 1024ths of a second. Here's why:
+
+To calculate internal timing values for a duration given in milliseconds, a divide by 500 on an *unsigned long* (32 bit) number is required, which is what Arduino *tone()* does. On an 8 bit processor without any native divide instructions, this is slow and takes a fair amount of code. On the other hand, a divide by 512 is easily and quickly accomplished by simply shifting the value right 9 bits. This is what ArduboyTones does, at the expense of durations being about 2.34% shorter than the same value would be with Arduino *tone()*.
+
+In most circumstances, the slightly shorter durations will likely be unnoticeable. If a duration needs to be precise, the required value can be calculated by multiplying the desired duration, in milliseconds, by 1.024.
+
+#### Use with the Arduboy Development Kit (DevKit) version
+
+ArduboyTones will work with the Arduboy DevKit. The DevKit is limited to controlling only one pin for the speaker, so all tones will sound at normal volume. The high volume setting in tones will be ignored, and calls to *volumeMode()* will have no effect.
+
+----------
+
diff --git a/board-package-source/libraries/ArduboyTones/examples/ArduboyTonesTest/ArduboyTonesTest.ino b/board-package-source/libraries/ArduboyTones/examples/ArduboyTonesTest/ArduboyTonesTest.ino
new file mode 100644
index 0000000..e0208bb
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/examples/ArduboyTonesTest/ArduboyTonesTest.ino
@@ -0,0 +1,228 @@
+// Sketch for testing the ArduboyTones library
+
+#include
+#include
+
+Arduboy2 arduboy;
+ArduboyTones sound(arduboy.audio.enabled);
+
+#define BUTTON_DELAY 200
+
+byte circlePos = 7;
+
+#define NDUR 100
+const uint16_t allNotes[] PROGMEM = {
+ NOTE_C0H,NDUR, NOTE_CS0,NDUR, NOTE_D0,NDUR, NOTE_DS0,NDUR, NOTE_E0,NDUR, NOTE_F0,NDUR,
+ NOTE_FS0,NDUR, NOTE_G0,NDUR, NOTE_GS0,NDUR, NOTE_A0,NDUR, NOTE_AS0,NDUR, NOTE_B0,NDUR,
+ NOTE_C1H,NDUR, NOTE_CS1,NDUR, NOTE_D1,NDUR, NOTE_DS1,NDUR, NOTE_E1,NDUR, NOTE_F1,NDUR,
+ NOTE_FS1,NDUR, NOTE_G1,NDUR, NOTE_GS1,NDUR, NOTE_A1,NDUR, NOTE_AS1,NDUR, NOTE_B1,NDUR,
+ NOTE_C2H,NDUR, NOTE_CS2,NDUR, NOTE_D2,NDUR, NOTE_DS2,NDUR, NOTE_E2,NDUR, NOTE_F2,NDUR,
+ NOTE_FS2,NDUR, NOTE_G2,NDUR, NOTE_GS2,NDUR, NOTE_A2,NDUR, NOTE_AS2,NDUR, NOTE_B2,NDUR,
+ NOTE_C3H,NDUR, NOTE_CS3,NDUR, NOTE_D3,NDUR, NOTE_DS3,NDUR, NOTE_E3,NDUR, NOTE_F3,NDUR,
+ NOTE_FS3,NDUR, NOTE_G3,NDUR, NOTE_GS3,NDUR, NOTE_A3,NDUR, NOTE_AS3,NDUR, NOTE_B3,NDUR,
+ NOTE_C4H,NDUR, NOTE_CS4,NDUR, NOTE_D4,NDUR, NOTE_DS4,NDUR, NOTE_E4,NDUR, NOTE_F4,NDUR,
+ NOTE_FS4,NDUR, NOTE_G4,NDUR, NOTE_GS4,NDUR, NOTE_A4,NDUR, NOTE_AS4,NDUR, NOTE_B4,NDUR,
+ NOTE_C5H,NDUR, NOTE_CS5,NDUR, NOTE_D5,NDUR, NOTE_DS5,NDUR, NOTE_E5,NDUR, NOTE_F5,NDUR,
+ NOTE_FS5,NDUR, NOTE_G5,NDUR, NOTE_GS5,NDUR, NOTE_A5,NDUR, NOTE_AS5,NDUR, NOTE_B5,NDUR,
+ NOTE_C6H,NDUR, NOTE_CS6,NDUR, NOTE_D6,NDUR, NOTE_DS6,NDUR, NOTE_E6,NDUR, NOTE_F6,NDUR,
+ NOTE_FS6,NDUR, NOTE_G6,NDUR, NOTE_GS6,NDUR, NOTE_A6,NDUR, NOTE_AS6,NDUR, NOTE_B6,NDUR,
+ NOTE_C7H,NDUR, NOTE_CS7,NDUR, NOTE_D7,NDUR, NOTE_DS7,NDUR, NOTE_E7,NDUR, NOTE_F7,NDUR,
+ NOTE_FS7,NDUR, NOTE_G7,NDUR, NOTE_GS7,NDUR, NOTE_A7,NDUR, NOTE_AS7,NDUR, NOTE_B7,NDUR,
+ NOTE_C8H,NDUR, NOTE_CS8,NDUR, NOTE_D8,NDUR, NOTE_DS8,NDUR, NOTE_E8,NDUR, NOTE_F8,NDUR,
+ NOTE_FS8,NDUR, NOTE_G8,NDUR, NOTE_GS8,NDUR, NOTE_A8,NDUR, NOTE_AS8,NDUR, NOTE_B8,NDUR,
+ NOTE_C9H,NDUR, NOTE_CS9,NDUR, NOTE_D9,NDUR, NOTE_DS9,NDUR, NOTE_E9,NDUR, NOTE_F9,NDUR,
+ NOTE_FS9,NDUR, NOTE_G9,NDUR, NOTE_GS9,NDUR, NOTE_A9,NDUR, NOTE_AS9,NDUR, NOTE_B9,NDUR,
+ TONES_REPEAT
+};
+
+const uint16_t sound1[] PROGMEM = {
+ NOTE_C1,500, NOTE_C1H,500, NOTE_G1,500, NOTE_G1H,500,
+ NOTE_C2,500, NOTE_C2H,500, NOTE_G2,500, NOTE_G2H,500,
+ NOTE_C3,500, NOTE_C3H,500, NOTE_G3,500, NOTE_G3H,500,
+ NOTE_C4,500, NOTE_C4H,500, NOTE_G4,500, NOTE_G4H,500,
+ NOTE_C5,500, NOTE_C5H,500, NOTE_G5,500, NOTE_G5H,500,
+ NOTE_C6,500, NOTE_C6H,500, NOTE_G6,500, NOTE_G6H,500,
+ NOTE_C7,500, NOTE_C7H,500, NOTE_G7,500, NOTE_G7H,500,
+ NOTE_C8,500, NOTE_C8H,500, NOTE_G8,500, NOTE_G8H,500,
+ NOTE_C9,500, NOTE_C9H,500, NOTE_G9,500, NOTE_G9H,500,
+ TONES_END
+};
+
+uint16_t inRAM[] = {
+ NOTE_E4,400, NOTE_D4,200, NOTE_C4,400, NOTE_REST,200, NOTE_D4,200,
+ NOTE_C4,300, NOTE_REST,100, NOTE_C4,300, NOTE_REST,100, NOTE_E4,300,
+ NOTE_REST,100, NOTE_G4,300, NOTE_REST,100, NOTE_F4,300, NOTE_REST,100,
+ NOTE_A4,300, NOTE_REST,100, NOTE_D5H,200, NOTE_REST,200, NOTE_D5H,200,
+ NOTE_REST,1500,
+ TONES_REPEAT
+};
+
+void setup() {
+ arduboy.begin();
+}
+
+void loop() {
+ boolean newNotes;
+
+ displayAudio();
+ while(true) {
+ moveCircle();
+ if (arduboy.pressed(UP_BUTTON)) {
+ arduboy.audio.on();
+ displayAudio();
+ }
+ if (arduboy.pressed(DOWN_BUTTON)) {
+ arduboy.audio.off();
+ displayAudio();
+ }
+ if (arduboy.pressed(B_BUTTON)) {
+ delay(BUTTON_DELAY);
+ break;
+ }
+ }
+
+ sound.tone(1000);
+ arduboy.clear();
+ arduboy.print("tone(1000)\n\nB: noTone()\n delay(1000)\n break");
+ while (sound.playing()) {
+ moveCircle();
+ if (arduboy.pressed(B_BUTTON)) {
+ sound.noTone();
+ delay(1000);
+ break;
+ }
+ }
+
+ sound.tone(500, 4000);
+ arduboy.clear();
+ arduboy.print("tone(500, 4000)\n\nB: break");
+ while (sound.playing()) {
+ moveCircle();
+ if (arduboy.pressed(B_BUTTON)) {
+ delay(BUTTON_DELAY);
+ break;
+ }
+ }
+
+ sound.tone(NOTE_C4,500, NOTE_C5H,5000);
+ arduboy.clear();
+ arduboy.print("tone(C4,500,C5H,5000)\n\nB: noTone(), break");
+ while (sound.playing()) {
+ moveCircle();
+ if (arduboy.pressed(B_BUTTON)) {
+ sound.noTone();
+ delay(BUTTON_DELAY);
+ break;
+ }
+ }
+
+ sound.tone(NOTE_C7H,500, NOTE_REST,1000, NOTE_C6,5000);
+ arduboy.clear();
+ arduboy.print("tone(C7H,500,\n REST,1000,\n C6,6000)\n\nB: noTone(), break");
+ while (sound.playing()) {
+ moveCircle();
+ if (arduboy.pressed(B_BUTTON)) {
+ sound.noTone();
+ delay(BUTTON_DELAY);
+ break;
+ }
+ }
+
+ sound.tones(allNotes);
+ arduboy.clear();
+ arduboy.print("tones(allNotes)\n\nA: noTone(), again\nUP: again\nB: break");
+ while (sound.playing()) {
+ moveCircle();
+ if (arduboy.pressed(A_BUTTON)) {
+ sound.noTone();
+ sound.tones(allNotes);
+ }
+ if (arduboy.pressed(UP_BUTTON)) {
+ sound.tones(allNotes);
+ }
+ if (arduboy.pressed(B_BUTTON)) {
+ delay(BUTTON_DELAY);
+ break;
+ }
+ }
+
+ newNotes = false;
+ inRAM[34] = inRAM[38] = NOTE_D5H;
+ sound.tonesInRAM(inRAM);
+ arduboy.clear();
+ arduboy.print("tonesInRAM(inRAM)\n\nA: change notes\nB: break");
+ while (sound.playing()) {
+ moveCircle();
+ if (arduboy.pressed(A_BUTTON)) {
+ newNotes = !newNotes;
+ if (newNotes) {
+ inRAM[34] = inRAM[38] = NOTE_C5H;
+ }
+ else {
+ inRAM[34] = inRAM[38] = NOTE_D5H;
+ }
+ delay(BUTTON_DELAY);
+ }
+ if (arduboy.pressed(B_BUTTON)) {
+ delay(BUTTON_DELAY);
+ break;
+ }
+ }
+
+ sound.tones(sound1);
+ arduboy.clear();
+ arduboy.print("volumeMode(IN_TONES)\ntones(sound1)\n\nB: break");
+ while(sound.playing()) {
+ moveCircle();
+ if (arduboy.pressed(B_BUTTON)) {
+ delay(BUTTON_DELAY);
+ break;
+ }
+ }
+
+ sound.volumeMode(VOLUME_ALWAYS_NORMAL);
+ sound.tones(sound1);
+ arduboy.clear();
+ arduboy.print("volumeMode(NORMAL)\ntones(sound1)\n\nB: noTone(), break");
+ while(sound.playing()) {
+ moveCircle();
+ if (arduboy.pressed(B_BUTTON)) {
+ sound.noTone();
+ delay(BUTTON_DELAY);
+ break;
+ }
+ }
+
+ sound.volumeMode(VOLUME_ALWAYS_HIGH);
+ sound.tones(sound1);
+ arduboy.clear();
+ arduboy.print("volumeMode(HIGH)\ntones(sound1)\n\nB: break");
+ while(sound.playing()) {
+ moveCircle();
+ if (arduboy.pressed(B_BUTTON)) {
+ delay(BUTTON_DELAY);
+ break;
+ }
+ }
+ sound.volumeMode(VOLUME_IN_TONE);
+}
+
+void moveCircle() {
+ arduboy.fillCircle(circlePos, 54, 7, BLACK);
+ circlePos += 8;
+ if (circlePos > 119) {
+ circlePos = 7;
+ }
+ arduboy.fillCircle(circlePos, 54, 7, WHITE);
+ arduboy.display();
+ delay(100);
+}
+
+void displayAudio() {
+ arduboy.clear();
+ arduboy.print("Audio enabled: ");
+ arduboy.print(arduboy.audio.enabled() ? "YES" : "NO");
+ arduboy.print("\n\nUP: enable\nDOWN: disable\nB: break");
+ arduboy.invert(!arduboy.audio.enabled());
+}
+
diff --git a/board-package-source/libraries/ArduboyTones/extras/Doxyfile b/board-package-source/libraries/ArduboyTones/extras/Doxyfile
new file mode 100644
index 0000000..2013056
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/extras/Doxyfile
@@ -0,0 +1,329 @@
+# Doxyfile 1.8.11
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
+PROJECT_NAME = "ArduboyTones Library"
+PROJECT_NUMBER =
+PROJECT_BRIEF =
+PROJECT_LOGO =
+OUTPUT_DIRECTORY = ./doxygen
+CREATE_SUBDIRS = NO
+ALLOW_UNICODE_NAMES = NO
+OUTPUT_LANGUAGE = English
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF =
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = YES
+FULL_PATH_NAMES = YES
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+QT_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 2
+ALIASES =
+TCL_SUBST =
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+EXTENSION_MAPPING = ino=C++
+MARKDOWN_SUPPORT = YES
+AUTOLINK_SUPPORT = YES
+BUILTIN_STL_SUPPORT = NO
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
+DISTRIBUTE_GROUP_DOC = NO
+SUBGROUPING = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS = NO
+TYPEDEF_HIDES_STRUCT = NO
+LOOKUP_CACHE_SIZE = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = NO
+EXTRACT_PRIVATE = NO
+EXTRACT_PACKAGE = NO
+EXTRACT_STATIC = NO
+EXTRACT_LOCAL_CLASSES = NO
+EXTRACT_LOCAL_METHODS = NO
+EXTRACT_ANON_NSPACES = NO
+HIDE_UNDOC_MEMBERS = YES
+HIDE_UNDOC_CLASSES = YES
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = YES
+HIDE_SCOPE_NAMES = NO
+HIDE_COMPOUND_REFERENCE= NO
+SHOW_INCLUDE_FILES = YES
+SHOW_GROUPED_MEMB_INC = NO
+FORCE_LOCAL_INCLUDES = NO
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+SORT_BRIEF_DOCS = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES = NO
+SORT_BY_SCOPE_NAME = NO
+STRICT_PROTO_MATCHING = NO
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+SHOW_FILES = YES
+SHOW_NAMESPACES = YES
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
+CITE_BIB_FILES =
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = NO
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = YES
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = ./src ./README.md
+INPUT_ENCODING = UTF-8
+FILE_PATTERNS = *.c *.cc *.cxx *.cpp *.c++ *.h *.hh *.hxx *.hpp *.h++
+RECURSIVE = NO
+EXCLUDE =
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE = ./README.md
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = YES
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION = NO
+REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS = YES
+USE_HTAGS = NO
+VERBATIM_HEADERS = YES
+CLANG_ASSISTED_PARSING = NO
+CLANG_OPTIONS =
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = YES
+COLS_IN_ALPHA_INDEX = 5
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_EXTRA_STYLESHEET =
+HTML_EXTRA_FILES =
+HTML_COLORSTYLE_HUE = 245
+HTML_COLORSTYLE_SAT = 90
+HTML_COLORSTYLE_GAMMA = 95
+HTML_TIMESTAMP = YES
+HTML_DYNAMIC_SECTIONS = YES
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME = Publisher
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
+BINARY_TOC = NO
+TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
+QHG_LOCATION =
+GENERATE_ECLIPSEHELP = NO
+ECLIPSE_DOC_ID = org.doxygen.Project
+DISABLE_INDEX = NO
+GENERATE_TREEVIEW = YES
+ENUM_VALUES_PER_LINE = 4
+TREEVIEW_WIDTH = 250
+EXT_LINKS_IN_WINDOW = NO
+FORMULA_FONTSIZE = 10
+FORMULA_TRANSPARENT = YES
+USE_MATHJAX = NO
+MATHJAX_FORMAT = HTML-CSS
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+MATHJAX_EXTENSIONS =
+MATHJAX_CODEFILE =
+SEARCHENGINE = YES
+SERVER_BASED_SEARCH = NO
+EXTERNAL_SEARCH = NO
+SEARCHENGINE_URL =
+SEARCHDATA_FILE = searchdata.xml
+EXTERNAL_SEARCH_ID =
+EXTRA_SEARCH_MAPPINGS =
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = YES
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4
+EXTRA_PACKAGES =
+LATEX_HEADER =
+LATEX_FOOTER =
+LATEX_EXTRA_STYLESHEET =
+LATEX_EXTRA_FILES =
+PDF_HYPERLINKS = YES
+USE_PDFLATEX = YES
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+LATEX_SOURCE_CODE = NO
+LATEX_BIB_STYLE = plain
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+RTF_SOURCE_CODE = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_SUBDIR =
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_PROGRAMLISTING = YES
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK = NO
+DOCBOOK_OUTPUT = docbook
+DOCBOOK_PROGRAMLISTING = NO
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = NO
+EXPAND_ONLY_PREDEF = NO
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE =
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+EXTERNAL_PAGES = YES
+PERL_PATH = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+MSCGEN_PATH =
+DIA_PATH =
+HIDE_UNDOC_RELATIONS = YES
+HAVE_DOT = YES
+DOT_NUM_THREADS = 0
+DOT_FONTNAME = Helvetica
+DOT_FONTSIZE = 10
+DOT_FONTPATH =
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = YES
+UML_LIMIT_NUM_FIELDS = 10
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+INTERACTIVE_SVG = NO
+DOT_PATH =
+DOTFILE_DIRS =
+MSCFILE_DIRS =
+DIAFILE_DIRS =
+PLANTUML_JAR_PATH =
+PLANTUML_INCLUDE_PATH =
+DOT_GRAPH_MAX_NODES = 50
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = YES
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
diff --git a/board-package-source/libraries/ArduboyTones/extras/docs/FILE_DESCRIPTIONS.md b/board-package-source/libraries/ArduboyTones/extras/docs/FILE_DESCRIPTIONS.md
new file mode 100644
index 0000000..554007c
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/extras/docs/FILE_DESCRIPTIONS.md
@@ -0,0 +1,22 @@
+# File Descriptions
+
+Documentation for files contained in this repository which aren't self explanatory.
+
+### /library.properties
+
+Provides information so that this library can be installed and updated in the Arduino IDE using the [Library Manager](https://www.arduino.cc/en/Guide/Libraries#toc3).
+
+The value of *version* must be set to the latest stable tagged release. This should be changed and commited just before tagging the new release.
+
+See the [Arduino IDE 1.5: Library specification](https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5:-Library-specification) for details.
+
+### /library.json
+
+This JSON file is a manifest used by the [PlatformIO IDE](http://platformio.org/) to make this library available in its [Library Manager](http://docs.platformio.org/en/latest/librarymanager/index.html).
+
+The value of *version* must be set to the latest stable tagged release. This should be changed and commited just before tagging the new release.
+
+See the [PlatformIO library.json](http://docs.platformio.org/en/latest/librarymanager/config.html) documentation for details.
+
+----------
+
diff --git a/board-package-source/libraries/ArduboyTones/keywords.txt b/board-package-source/libraries/ArduboyTones/keywords.txt
new file mode 100644
index 0000000..bcde966
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/keywords.txt
@@ -0,0 +1,30 @@
+######################################
+# Syntax Coloring Map For ArduboyTones
+######################################
+
+######################################
+# Datatypes (KEYWORD1)
+######################################
+
+ArduboyTones KEYWORD1
+
+######################################
+# Methods and Functions (KEYWORD2)
+######################################
+
+playing KEYWORD2
+tone KEYWORD2
+tones KEYWORD2
+tonesInRAM KEYWORD2
+volumeMode KEYWORD2
+
+######################################
+# Constants (LITERAL1)
+######################################
+
+TONES_END LITERAL1
+TONES_REPEAT LITERAL1
+TONE_HIGH_VOLUME LITERAL1
+VOLUME_ALWAYS_HIGH LITERAL1
+VOLUME_ALWAYS_NORMAL LITERAL1
+VOLUME_IN_TONE LITERAL1
diff --git a/board-package-source/libraries/ArduboyTones/library.json b/board-package-source/libraries/ArduboyTones/library.json
new file mode 100644
index 0000000..fb6efee
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/library.json
@@ -0,0 +1,14 @@
+{
+ "name": "ArduboyTones",
+ "keywords": "arduboy, game, sound, music",
+ "description": "A library for playing a sequence of tones, intended for use with the Arduboy game system",
+ "repository":
+ {
+ "type": "git",
+ "url": "https://github.com/MLXXXp/ArduboyTones.git"
+ },
+ "version": "1.0.3",
+ "exclude": "extras",
+ "frameworks": "arduino",
+ "platforms": "atmelavr"
+}
diff --git a/board-package-source/libraries/ArduboyTones/library.properties b/board-package-source/libraries/ArduboyTones/library.properties
new file mode 100644
index 0000000..5cfec80
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/library.properties
@@ -0,0 +1,9 @@
+name=ArduboyTones
+version=1.0.3
+author=Scott Allen
+maintainer=Scott Allen
+sentence=A library for playing a sequence of tones, intended for use with the Arduboy game system.
+paragraph=Plays one or more tones in sequence. Driven by interrupts, so audio plays in the background while the "real" program runs in the foreground. Written to minimize code size by specifically targeting the processor and pins of the Arduboy.
+category=Other
+url=https://github.com/MLXXXp/ArduboyTones
+architectures=avr
diff --git a/board-package-source/libraries/ArduboyTones/src/ArduboyTones.cpp b/board-package-source/libraries/ArduboyTones/src/ArduboyTones.cpp
new file mode 100644
index 0000000..8b56dde
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/src/ArduboyTones.cpp
@@ -0,0 +1,287 @@
+/**
+ * @file ArduboyTones.cpp
+ * \brief An Arduino library for playing tones and tone sequences,
+ * intended for the Arduboy game system.
+ */
+
+/*****************************************************************************
+ ArduboyTones
+
+An Arduino library to play tones and tone sequences.
+
+Specifically written for use by the Arduboy miniature game system
+https://www.arduboy.com/
+but could work with other Arduino AVR boards that have 16 bit timer 3
+available, by changing the port and bit definintions for the pin(s)
+if necessary.
+
+Copyright (c) 2017 Scott Allen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*****************************************************************************/
+
+#include "ArduboyTones.h"
+
+// pointer to a function that indicates if sound is enabled
+static bool (*outputEnabled)();
+
+static volatile long durationToggleCount = 0;
+static volatile bool tonesPlaying = false;
+static volatile bool toneSilent;
+#ifdef TONES_VOLUME_CONTROL
+static volatile bool toneHighVol;
+static volatile bool forceHighVol = false;
+static volatile bool forceNormVol = false;
+#endif
+
+static volatile uint16_t *tonesStart;
+static volatile uint16_t *tonesIndex;
+static volatile uint16_t toneSequence[MAX_TONES * 2 + 1];
+static volatile bool inProgmem;
+
+
+ArduboyTones::ArduboyTones(boolean (*outEn)())
+{
+ outputEnabled = outEn;
+
+ toneSequence[MAX_TONES * 2] = TONES_END;
+
+ bitClear(TONE_PIN_PORT, TONE_PIN); // set the pin low
+ bitSet(TONE_PIN_DDR, TONE_PIN); // set the pin to output mode
+#ifdef TONES_2_SPEAKER_PINS
+ bitClear(TONE_PIN2_PORT, TONE_PIN2); // set pin 2 low
+ bitSet(TONE_PIN2_DDR, TONE_PIN2); // set pin 2 to output mode
+#endif
+}
+
+void ArduboyTones::tone(uint16_t freq, uint16_t dur)
+{
+ bitWrite(TIMSK3, OCIE3A, 0); // disable the output compare match interrupt
+ inProgmem = false;
+ tonesStart = tonesIndex = toneSequence; // set to start of sequence array
+ toneSequence[0] = freq;
+ toneSequence[1] = dur;
+ toneSequence[2] = TONES_END; // set end marker
+ nextTone(); // start playing
+}
+
+void ArduboyTones::tone(uint16_t freq1, uint16_t dur1,
+ uint16_t freq2, uint16_t dur2)
+{
+ bitWrite(TIMSK3, OCIE3A, 0); // disable the output compare match interrupt
+ inProgmem = false;
+ tonesStart = tonesIndex = toneSequence; // set to start of sequence array
+ toneSequence[0] = freq1;
+ toneSequence[1] = dur1;
+ toneSequence[2] = freq2;
+ toneSequence[3] = dur2;
+ toneSequence[4] = TONES_END; // set end marker
+ nextTone(); // start playing
+}
+
+void ArduboyTones::tone(uint16_t freq1, uint16_t dur1,
+ uint16_t freq2, uint16_t dur2,
+ uint16_t freq3, uint16_t dur3)
+{
+ bitWrite(TIMSK3, OCIE3A, 0); // disable the output compare match interrupt
+ inProgmem = false;
+ tonesStart = tonesIndex = toneSequence; // set to start of sequence array
+ toneSequence[0] = freq1;
+ toneSequence[1] = dur1;
+ toneSequence[2] = freq2;
+ toneSequence[3] = dur2;
+ toneSequence[4] = freq3;
+ toneSequence[5] = dur3;
+ // end marker was set in the constructor and will never change
+ nextTone(); // start playing
+}
+
+void ArduboyTones::tones(const uint16_t *tones)
+{
+ bitWrite(TIMSK3, OCIE3A, 0); // disable the output compare match interrupt
+ inProgmem = true;
+ tonesStart = tonesIndex = (uint16_t *)tones; // set to start of sequence array
+ nextTone(); // start playing
+}
+
+void ArduboyTones::tonesInRAM(uint16_t *tones)
+{
+ bitWrite(TIMSK3, OCIE3A, 0); // disable the output compare match interrupt
+ inProgmem = false;
+ tonesStart = tonesIndex = tones; // set to start of sequence array
+ nextTone(); // start playing
+}
+
+void ArduboyTones::noTone()
+{
+ bitWrite(TIMSK3, OCIE3A, 0); // disable the output compare match interrupt
+ TCCR3B = 0; // stop the counter
+ bitClear(TONE_PIN_PORT, TONE_PIN); // set the pin low
+#ifdef TONES_VOLUME_CONTROL
+ bitClear(TONE_PIN2_PORT, TONE_PIN2); // set pin 2 low
+#endif
+ tonesPlaying = false;
+}
+
+void ArduboyTones::volumeMode(uint8_t mode)
+{
+#ifdef TONES_VOLUME_CONTROL
+ forceNormVol = false; // assume volume is tone controlled
+ forceHighVol = false;
+
+ if (mode == VOLUME_ALWAYS_NORMAL) {
+ forceNormVol = true;
+ }
+ else if (mode == VOLUME_ALWAYS_HIGH) {
+ forceHighVol = true;
+ }
+#endif
+}
+
+bool ArduboyTones::playing()
+{
+ return tonesPlaying;
+}
+
+void ArduboyTones::nextTone()
+{
+ uint16_t freq;
+ uint16_t dur;
+ long toggleCount;
+ uint32_t ocrValue;
+#ifdef TONES_ADJUST_PRESCALER
+ uint8_t tccrxbValue;
+#endif
+
+ freq = getNext(); // get tone frequency
+
+ if (freq == TONES_END) { // if freq is actually an "end of sequence" marker
+ noTone(); // stop playing
+ return;
+ }
+
+ tonesPlaying = true;
+
+ if (freq == TONES_REPEAT) { // if frequency is actually a "repeat" marker
+ tonesIndex = tonesStart; // reset to start of sequence
+ freq = getNext();
+ }
+
+#ifdef TONES_VOLUME_CONTROL
+ if (((freq & TONE_HIGH_VOLUME) || forceHighVol) && !forceNormVol) {
+ toneHighVol = true;
+ }
+ else {
+ toneHighVol = false;
+ }
+#endif
+
+ freq &= ~TONE_HIGH_VOLUME; // strip volume indicator from frequency
+
+#ifdef TONES_ADJUST_PRESCALER
+ if (freq >= MIN_NO_PRESCALE_FREQ) {
+ tccrxbValue = _BV(WGM32) | _BV(CS30); // CTC mode, no prescaling
+ ocrValue = F_CPU / freq / 2 - 1;
+ toneSilent = false;
+ }
+ else {
+ tccrxbValue = _BV(WGM32) | _BV(CS31); // CTC mode, prescaler /8
+#endif
+ if (freq == 0) { // if tone is silent
+ ocrValue = F_CPU / 8 / SILENT_FREQ / 2 - 1; // dummy tone for silence
+ freq = SILENT_FREQ;
+ toneSilent = true;
+ bitClear(TONE_PIN_PORT, TONE_PIN); // set the pin low
+ }
+ else {
+ ocrValue = F_CPU / 8 / freq / 2 - 1;
+ toneSilent = false;
+ }
+#ifdef TONES_ADJUST_PRESCALER
+ }
+#endif
+
+ if (!outputEnabled()) { // if sound has been muted
+ toneSilent = true;
+ }
+
+#ifdef TONES_VOLUME_CONTROL
+ if (toneHighVol && !toneSilent) {
+ // set pin 2 to the compliment of pin 1
+ if (bitRead(TONE_PIN_PORT, TONE_PIN)) {
+ bitClear(TONE_PIN2_PORT, TONE_PIN2);
+ }
+ else {
+ bitSet(TONE_PIN2_PORT, TONE_PIN2);
+ }
+ }
+ else {
+ bitClear(TONE_PIN2_PORT, TONE_PIN2); // set pin 2 low for normal volume
+ }
+#endif
+
+ dur = getNext(); // get tone duration
+ if (dur != 0) {
+ // A right shift is used to divide by 512 for efficency.
+ // For durations in milliseconds it should actually be a divide by 500,
+ // so durations will by shorter by 2.34% of what is specified.
+ toggleCount = ((long)dur * freq) >> 9;
+ }
+ else {
+ toggleCount = -1; // indicate infinite duration
+ }
+
+ TCCR3A = 0;
+#ifdef TONES_ADJUST_PRESCALER
+ TCCR3B = tccrxbValue;
+#else
+ TCCR3B = _BV(WGM32) | _BV(CS31); // CTC mode, prescaler /8
+#endif
+ OCR3A = ocrValue;
+ durationToggleCount = toggleCount;
+ bitWrite(TIMSK3, OCIE3A, 1); // enable the output compare match interrupt
+}
+
+uint16_t ArduboyTones::getNext()
+{
+ if (inProgmem) {
+ return pgm_read_word(tonesIndex++);
+ }
+ return *tonesIndex++;
+}
+
+ISR(TIMER3_COMPA_vect)
+{
+ if (durationToggleCount != 0) {
+ if (!toneSilent) {
+ *(&TONE_PIN_PORT) ^= TONE_PIN_MASK; // toggle the pin
+#ifdef TONES_VOLUME_CONTROL
+ if (toneHighVol) {
+ *(&TONE_PIN2_PORT) ^= TONE_PIN2_MASK; // toggle pin 2
+ }
+#endif
+ }
+ if (durationToggleCount > 0) {
+ durationToggleCount--;
+ }
+ }
+ else {
+ ArduboyTones::nextTone();
+ }
+}
diff --git a/board-package-source/libraries/ArduboyTones/src/ArduboyTones.h b/board-package-source/libraries/ArduboyTones/src/ArduboyTones.h
new file mode 100644
index 0000000..ff32948
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/src/ArduboyTones.h
@@ -0,0 +1,305 @@
+/**
+ * @file ArduboyTones.h
+ * \brief An Arduino library for playing tones and tone sequences,
+ * intended for the Arduboy game system.
+ */
+
+/*****************************************************************************
+ ArduboyTones
+
+An Arduino library to play tones and tone sequences.
+
+Specifically written for use by the Arduboy miniature game system
+https://www.arduboy.com/
+but could work with other Arduino AVR boards that have 16 bit timer 3
+available, by changing the port and bit definintions for the pin(s)
+if necessary.
+
+Copyright (c) 2017 Scott Allen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*****************************************************************************/
+
+#ifndef ARDUBOY_TONES_H
+#define ARDUBOY_TONES_H
+
+#include
+
+// ************************************************************
+// ***** Values to use as function parameters in sketches *****
+// ************************************************************
+
+/** \brief
+ * Frequency value for sequence termination. (No duration follows)
+ */
+#define TONES_END 0x8000
+
+/** \brief
+ * Frequency value for sequence repeat. (No duration follows)
+ */
+#define TONES_REPEAT 0x8001
+
+
+/** \brief
+ * Add this to the frequency to play a tone at high volume
+ */
+#define TONE_HIGH_VOLUME 0x8000
+
+
+/** \brief
+ * `volumeMode()` parameter. Use the volume encoded in each tone's frequency
+ */
+#define VOLUME_IN_TONE 0
+
+/** \brief
+ * `volumeMode()` parameter. Play all tones at normal volume, ignoring
+ * what's encoded in the frequencies
+ */
+#define VOLUME_ALWAYS_NORMAL 1
+
+/** \brief
+ * `volumeMode()` parameter. Play all tones at high volume, ignoring
+ * what's encoded in the frequencies
+ */
+#define VOLUME_ALWAYS_HIGH 2
+
+// ************************************************************
+
+
+#ifndef AB_DEVKIT
+ // ***** SPEAKER ON TWO PINS *****
+ // Indicates that each of the speaker leads is attached to a pin, the way
+ // the Arduboy is wired. Allows tones of a higher volume to be produced.
+ // If commented out only one speaker pin will be used. The other speaker
+ // lead should be attached to ground.
+ #define TONES_2_SPEAKER_PINS
+ // *******************************
+
+ // ***** VOLUME HIGH/NORMAL SUPPORT *****
+ // With the speaker placed across two pins, higher volume is produced by
+ // toggling the second pin to the opposite state of the first pin.
+ // Normal volume is produced by leaving the second pin low.
+ // Comment this out for only normal volume support, which will slightly
+ // reduce the code size.
+ #define TONES_VOLUME_CONTROL
+ // **************************************
+
+ #ifdef TONES_VOLUME_CONTROL
+ // Must be defined for volume control, so force it if necessary.
+ #define TONES_2_SPEAKER_PINS
+ #endif
+#endif
+
+// ***** CONTROL THE TIMER CLOCK PRESCALER ****
+// Uncommenting this will switch the timer clock to use no prescaler,
+// instead of a divide by 8 prescaler, if the frequency is high enough to
+// allow it. This will result in higher frequencies being more accurate at
+// the expense of requiring more code. If left commented out, a divide by 8
+// prescaler will be used for all frequencies.
+//#define TONES_ADJUST_PRESCALER
+// ********************************************
+
+// This must match the maximum number of tones that can be specified in
+// the tone() function.
+#define MAX_TONES 3
+
+#ifndef AB_DEVKIT
+ // Arduboy speaker pin 1 = Arduino pin 5 = ATmega32u4 PC6
+ #define TONE_PIN_PORT PORTC
+ #define TONE_PIN_DDR DDRC
+ #define TONE_PIN PORTC6
+ #define TONE_PIN_MASK _BV(TONE_PIN)
+#ifndef AB_ALTERNATE_WIRING
+ // Arduboy speaker pin 2 = Arduino pin 13 = ATmega32u4 PC7
+ #define TONE_PIN2_PORT PORTC
+ #define TONE_PIN2_DDR DDRC
+ #define TONE_PIN2 PORTC7
+#else
+ // Arduboy speaker pin 2 = Pro Micro pin 6 = ATmega32u4 PD7
+ #define TONE_PIN2_PORT PORTD
+ #define TONE_PIN2_DDR DDRD
+ #define TONE_PIN2 PORTD7
+#endif
+ #define TONE_PIN2_MASK _BV(TONE_PIN2)
+#else
+ // DevKit speaker pin 1 = Arduino pin A2 = ATmega32u4 PF5
+ #define TONE_PIN_PORT PORTF
+ #define TONE_PIN_DDR DDRF
+ #define TONE_PIN PORTF5
+ #define TONE_PIN_MASK _BV(TONE_PIN)
+#endif
+
+// The minimum frequency that can be produced without a clock prescaler.
+#define MIN_NO_PRESCALE_FREQ ((uint16_t)(((F_CPU / 2L) + (1L << 16) - 1L) / (1L << 16)))
+
+// Dummy frequency used to for silent tones (rests).
+#define SILENT_FREQ 250
+
+
+/** \brief
+ * The ArduboyTones class for generating tones by specifying
+ * frequency/duration pairs.
+ */
+class ArduboyTones
+{
+ public:
+ /** \brief
+ * The ArduboyTones class constructor.
+ *
+ * \param outEn A function which returns a boolean value of `true` if sound
+ * should be played or `false` if sound should be muted. This function will
+ * be called from the timer interrupt service routine, at the start of each
+ * tone, so it should be as fast as possible.
+ */
+ ArduboyTones(bool (*outEn)());
+
+ /** \brief
+ * Play a single tone.
+ *
+ * \param freq The frequency of the tone, in hertz.
+ * \param dur The duration to play the tone for, in 1024ths of a
+ * second (very close to milliseconds). A duration of 0, or if not provided,
+ * means play forever, or until `noTone()` is called or a new tone or
+ * sequence is started.
+ */
+ static void tone(uint16_t freq, uint16_t dur = 0);
+
+ /** \brief
+ * Play two tones in sequence.
+ *
+ * \param freq1,freq2 The frequency of the tone in hertz.
+ * \param dur1,dur2 The duration to play the tone for, in 1024ths of a
+ * second (very close to milliseconds).
+ */
+ static void tone(uint16_t freq1, uint16_t dur1,
+ uint16_t freq2, uint16_t dur2);
+
+ /** \brief
+ * Play three tones in sequence.
+ *
+ * \param freq1,freq2,freq3 The frequency of the tone, in hertz.
+ * \param dur1,dur2,dur3 The duration to play the tone for, in 1024ths of a
+ * second (very close to milliseconds).
+ */
+ static void tone(uint16_t freq1, uint16_t dur1,
+ uint16_t freq2, uint16_t dur2,
+ uint16_t freq3, uint16_t dur3);
+
+ /** \brief
+ * Play a tone sequence from frequency/duration pairs in a PROGMEM array.
+ *
+ * \param tones A pointer to an array of frequency/duration pairs.
+ * The array must be placed in code space using `PROGMEM`.
+ *
+ * \details
+ * \parblock
+ * See the `tone()` function for details on the frequency and duration values.
+ * A frequency of 0 for any tone means silence (a musical rest).
+ *
+ * The last element of the array must be `TONES_END` or `TONES_REPEAT`.
+ *
+ * Example:
+ *
+ * \code
+ * const uint16_t sound1[] PROGMEM = {
+ * 220,1000, 0,250, 440,500, 880,2000,
+ * TONES_END
+ * };
+ * \endcode
+ *
+ * \endparblock
+ */
+ static void tones(const uint16_t *tones);
+
+ /** \brief
+ * Play a tone sequence from frequency/duration pairs in an array in RAM.
+ *
+ * \param tones A pointer to an array of frequency/duration pairs.
+ * The array must be located in RAM.
+ *
+ * \see tones()
+ *
+ * \details
+ * \parblock
+ * See the `tone()` function for details on the frequency and duration values.
+ * A frequency of 0 for any tone means silence (a musical rest).
+ *
+ * The last element of the array must be `TONES_END` or `TONES_REPEAT`.
+ *
+ * Example:
+ *
+ * \code
+ * uint16_t sound2[] = {
+ * 220,1000, 0,250, 440,500, 880,2000,
+ * TONES_END
+ * };
+ * \endcode
+ *
+ * \endparblock
+ *
+ * \note Using `tones()`, with the data in PROGMEM, is normally a better
+ * choice. The only reason to use tonesInRAM() would be if dynamically
+ * altering the contents of the array is required.
+ */
+ static void tonesInRAM(uint16_t *tones);
+
+ /** \brief
+ * Stop playing the tone or sequence.
+ *
+ * \details
+ * If a tone or sequence is playing, it will stop. If nothing
+ * is playing, this function will do nothing.
+ */
+ static void noTone();
+
+ /** \brief
+ * Set the volume to always normal, always high, or tone controlled.
+ *
+ * \param mode
+ * \parblock
+ * One of the following values should be used:
+ *
+ * - `VOLUME_IN_TONE` The volume of each tone will be specified in the tone
+ * itself.
+ * - `VOLUME_ALWAYS_NORMAL` All tones will play at the normal volume level.
+ * - `VOLUME_ALWAYS_HIGH` All tones will play at the high volume level.
+ *
+ * \endparblock
+ */
+ static void volumeMode(uint8_t mode);
+
+ /** \brief
+ * Check if a tone or tone sequence is playing.
+ *
+ * \return boolean `true` if playing (even if sound is muted).
+ */
+ static bool playing();
+
+private:
+ // Get the next value in the sequence
+ static uint16_t getNext();
+
+public:
+ // Called from ISR so must be public. Should not be called by a program.
+ static void nextTone();
+};
+
+#include "ArduboyTonesPitches.h"
+
+#endif
diff --git a/board-package-source/libraries/ArduboyTones/src/ArduboyTonesPitches.h b/board-package-source/libraries/ArduboyTones/src/ArduboyTonesPitches.h
new file mode 100644
index 0000000..3c0175c
--- /dev/null
+++ b/board-package-source/libraries/ArduboyTones/src/ArduboyTonesPitches.h
@@ -0,0 +1,254 @@
+/**
+ * @file ArduboyTonesPitches.h
+ * \brief Frequency definitions for standard note pitches.
+ */
+
+// Definitions ending with "H" indicate high volume
+
+#ifndef ARDUBOY_TONES_PITCHES_H
+#define ARDUBOY_TONES_PITCHES_H
+
+#define NOTE_REST 0
+#define NOTE_C0 16
+#define NOTE_CS0 17
+#define NOTE_D0 18
+#define NOTE_DS0 19
+#define NOTE_E0 21
+#define NOTE_F0 22
+#define NOTE_FS0 23
+#define NOTE_G0 25
+#define NOTE_GS0 26
+#define NOTE_A0 28
+#define NOTE_AS0 29
+#define NOTE_B0 31
+#define NOTE_C1 33
+#define NOTE_CS1 35
+#define NOTE_D1 37
+#define NOTE_DS1 39
+#define NOTE_E1 41
+#define NOTE_F1 44
+#define NOTE_FS1 46
+#define NOTE_G1 49
+#define NOTE_GS1 52
+#define NOTE_A1 55
+#define NOTE_AS1 58
+#define NOTE_B1 62
+#define NOTE_C2 65
+#define NOTE_CS2 69
+#define NOTE_D2 73
+#define NOTE_DS2 78
+#define NOTE_E2 82
+#define NOTE_F2 87
+#define NOTE_FS2 93
+#define NOTE_G2 98
+#define NOTE_GS2 104
+#define NOTE_A2 110
+#define NOTE_AS2 117
+#define NOTE_B2 123
+#define NOTE_C3 131
+#define NOTE_CS3 139
+#define NOTE_D3 147
+#define NOTE_DS3 156
+#define NOTE_E3 165
+#define NOTE_F3 175
+#define NOTE_FS3 185
+#define NOTE_G3 196
+#define NOTE_GS3 208
+#define NOTE_A3 220
+#define NOTE_AS3 233
+#define NOTE_B3 247
+#define NOTE_C4 262
+#define NOTE_CS4 277
+#define NOTE_D4 294
+#define NOTE_DS4 311
+#define NOTE_E4 330
+#define NOTE_F4 349
+#define NOTE_FS4 370
+#define NOTE_G4 392
+#define NOTE_GS4 415
+#define NOTE_A4 440
+#define NOTE_AS4 466
+#define NOTE_B4 494
+#define NOTE_C5 523
+#define NOTE_CS5 554
+#define NOTE_D5 587
+#define NOTE_DS5 622
+#define NOTE_E5 659
+#define NOTE_F5 698
+#define NOTE_FS5 740
+#define NOTE_G5 784
+#define NOTE_GS5 831
+#define NOTE_A5 880
+#define NOTE_AS5 932
+#define NOTE_B5 988
+#define NOTE_C6 1047
+#define NOTE_CS6 1109
+#define NOTE_D6 1175
+#define NOTE_DS6 1245
+#define NOTE_E6 1319
+#define NOTE_F6 1397
+#define NOTE_FS6 1480
+#define NOTE_G6 1568
+#define NOTE_GS6 1661
+#define NOTE_A6 1760
+#define NOTE_AS6 1865
+#define NOTE_B6 1976
+#define NOTE_C7 2093
+#define NOTE_CS7 2218
+#define NOTE_D7 2349
+#define NOTE_DS7 2489
+#define NOTE_E7 2637
+#define NOTE_F7 2794
+#define NOTE_FS7 2960
+#define NOTE_G7 3136
+#define NOTE_GS7 3322
+#define NOTE_A7 3520
+#define NOTE_AS7 3729
+#define NOTE_B7 3951
+#define NOTE_C8 4186
+#define NOTE_CS8 4435
+#define NOTE_D8 4699
+#define NOTE_DS8 4978
+#define NOTE_E8 5274
+#define NOTE_F8 5588
+#define NOTE_FS8 5920
+#define NOTE_G8 6272
+#define NOTE_GS8 6645
+#define NOTE_A8 7040
+#define NOTE_AS8 7459
+#define NOTE_B8 7902
+#define NOTE_C9 8372
+#define NOTE_CS9 8870
+#define NOTE_D9 9397
+#define NOTE_DS9 9956
+#define NOTE_E9 10548
+#define NOTE_F9 11175
+#define NOTE_FS9 11840
+#define NOTE_G9 12544
+#define NOTE_GS9 13290
+#define NOTE_A9 14080
+#define NOTE_AS9 14917
+#define NOTE_B9 15804
+
+#define NOTE_C0H (NOTE_C0 + TONE_HIGH_VOLUME)
+#define NOTE_CS0H (NOTE_CS0 + TONE_HIGH_VOLUME)
+#define NOTE_D0H (NOTE_D08 + TONE_HIGH_VOLUME)
+#define NOTE_DS0H (NOTE_DS0 + TONE_HIGH_VOLUME)
+#define NOTE_E0H (NOTE_E0 + TONE_HIGH_VOLUME)
+#define NOTE_F0H (NOTE_F0 + TONE_HIGH_VOLUME)
+#define NOTE_FS0H (NOTE_FS0 + TONE_HIGH_VOLUME)
+#define NOTE_G0H (NOTE_G0 + TONE_HIGH_VOLUME)
+#define NOTE_GS0H (NOTE_GS0 + TONE_HIGH_VOLUME)
+#define NOTE_A0H (NOTE_A0 + TONE_HIGH_VOLUME)
+#define NOTE_AS0H (NOTE_AS0 + TONE_HIGH_VOLUME)
+#define NOTE_B0H (NOTE_B0 + TONE_HIGH_VOLUME)
+#define NOTE_C1H (NOTE_C1 + TONE_HIGH_VOLUME)
+#define NOTE_CS1H (NOTE_CS1 + TONE_HIGH_VOLUME)
+#define NOTE_D1H (NOTE_D1 + TONE_HIGH_VOLUME)
+#define NOTE_DS1H (NOTE_DS1 + TONE_HIGH_VOLUME)
+#define NOTE_E1H (NOTE_E1 + TONE_HIGH_VOLUME)
+#define NOTE_F1H (NOTE_F1 + TONE_HIGH_VOLUME)
+#define NOTE_FS1H (NOTE_FS1 + TONE_HIGH_VOLUME)
+#define NOTE_G1H (NOTE_G1 + TONE_HIGH_VOLUME)
+#define NOTE_GS1H (NOTE_GS1 + TONE_HIGH_VOLUME)
+#define NOTE_A1H (NOTE_A1 + TONE_HIGH_VOLUME)
+#define NOTE_AS1H (NOTE_AS1 + TONE_HIGH_VOLUME)
+#define NOTE_B1H (NOTE_B1 + TONE_HIGH_VOLUME)
+#define NOTE_C2H (NOTE_C2 + TONE_HIGH_VOLUME)
+#define NOTE_CS2H (NOTE_CS2 + TONE_HIGH_VOLUME)
+#define NOTE_D2H (NOTE_D2 + TONE_HIGH_VOLUME)
+#define NOTE_DS2H (NOTE_DS2 + TONE_HIGH_VOLUME)
+#define NOTE_E2H (NOTE_E2 + TONE_HIGH_VOLUME)
+#define NOTE_F2H (NOTE_F2 + TONE_HIGH_VOLUME)
+#define NOTE_FS2H (NOTE_FS2 + TONE_HIGH_VOLUME)
+#define NOTE_G2H (NOTE_G2 + TONE_HIGH_VOLUME)
+#define NOTE_GS2H (NOTE_GS2 + TONE_HIGH_VOLUME)
+#define NOTE_A2H (NOTE_A2 + TONE_HIGH_VOLUME)
+#define NOTE_AS2H (NOTE_AS2 + TONE_HIGH_VOLUME)
+#define NOTE_B2H (NOTE_B2 + TONE_HIGH_VOLUME)
+#define NOTE_C3H (NOTE_C3 + TONE_HIGH_VOLUME)
+#define NOTE_CS3H (NOTE_CS3 + TONE_HIGH_VOLUME)
+#define NOTE_D3H (NOTE_D3 + TONE_HIGH_VOLUME)
+#define NOTE_DS3H (NOTE_DS3 + TONE_HIGH_VOLUME)
+#define NOTE_E3H (NOTE_E3 + TONE_HIGH_VOLUME)
+#define NOTE_F3H (NOTE_F3 + TONE_HIGH_VOLUME)
+#define NOTE_FS3H (NOTE_F3 + TONE_HIGH_VOLUME)
+#define NOTE_G3H (NOTE_G3 + TONE_HIGH_VOLUME)
+#define NOTE_GS3H (NOTE_GS3 + TONE_HIGH_VOLUME)
+#define NOTE_A3H (NOTE_A3 + TONE_HIGH_VOLUME)
+#define NOTE_AS3H (NOTE_AS3 + TONE_HIGH_VOLUME)
+#define NOTE_B3H (NOTE_B3 + TONE_HIGH_VOLUME)
+#define NOTE_C4H (NOTE_C4 + TONE_HIGH_VOLUME)
+#define NOTE_CS4H (NOTE_CS4 + TONE_HIGH_VOLUME)
+#define NOTE_D4H (NOTE_D4 + TONE_HIGH_VOLUME)
+#define NOTE_DS4H (NOTE_DS4 + TONE_HIGH_VOLUME)
+#define NOTE_E4H (NOTE_E4 + TONE_HIGH_VOLUME)
+#define NOTE_F4H (NOTE_F4 + TONE_HIGH_VOLUME)
+#define NOTE_FS4H (NOTE_FS4 + TONE_HIGH_VOLUME)
+#define NOTE_G4H (NOTE_G4 + TONE_HIGH_VOLUME)
+#define NOTE_GS4H (NOTE_GS4 + TONE_HIGH_VOLUME)
+#define NOTE_A4H (NOTE_A4 + TONE_HIGH_VOLUME)
+#define NOTE_AS4H (NOTE_AS4 + TONE_HIGH_VOLUME)
+#define NOTE_B4H (NOTE_B4 + TONE_HIGH_VOLUME)
+#define NOTE_C5H (NOTE_C5 + TONE_HIGH_VOLUME)
+#define NOTE_CS5H (NOTE_CS5 + TONE_HIGH_VOLUME)
+#define NOTE_D5H (NOTE_D5 + TONE_HIGH_VOLUME)
+#define NOTE_DS5H (NOTE_DS5 + TONE_HIGH_VOLUME)
+#define NOTE_E5H (NOTE_E5 + TONE_HIGH_VOLUME)
+#define NOTE_F5H (NOTE_F5 + TONE_HIGH_VOLUME)
+#define NOTE_FS5H (NOTE_FS5 + TONE_HIGH_VOLUME)
+#define NOTE_G5H (NOTE_G5 + TONE_HIGH_VOLUME)
+#define NOTE_GS5H (NOTE_GS5 + TONE_HIGH_VOLUME)
+#define NOTE_A5H (NOTE_A5 + TONE_HIGH_VOLUME)
+#define NOTE_AS5H (NOTE_AS5 + TONE_HIGH_VOLUME)
+#define NOTE_B5H (NOTE_B5 + TONE_HIGH_VOLUME)
+#define NOTE_C6H (NOTE_C6 + TONE_HIGH_VOLUME)
+#define NOTE_CS6H (NOTE_CS6 + TONE_HIGH_VOLUME)
+#define NOTE_D6H (NOTE_D6 + TONE_HIGH_VOLUME)
+#define NOTE_DS6H (NOTE_DS6 + TONE_HIGH_VOLUME)
+#define NOTE_E6H (NOTE_E6 + TONE_HIGH_VOLUME)
+#define NOTE_F6H (NOTE_F6 + TONE_HIGH_VOLUME)
+#define NOTE_FS6H (NOTE_FS6 + TONE_HIGH_VOLUME)
+#define NOTE_G6H (NOTE_G6 + TONE_HIGH_VOLUME)
+#define NOTE_GS6H (NOTE_GS6 + TONE_HIGH_VOLUME)
+#define NOTE_A6H (NOTE_A6 + TONE_HIGH_VOLUME)
+#define NOTE_AS6H (NOTE_AS6 + TONE_HIGH_VOLUME)
+#define NOTE_B6H (NOTE_B6 + TONE_HIGH_VOLUME)
+#define NOTE_C7H (NOTE_C7 + TONE_HIGH_VOLUME)
+#define NOTE_CS7H (NOTE_CS7 + TONE_HIGH_VOLUME)
+#define NOTE_D7H (NOTE_D7 + TONE_HIGH_VOLUME)
+#define NOTE_DS7H (NOTE_DS7 + TONE_HIGH_VOLUME)
+#define NOTE_E7H (NOTE_E7 + TONE_HIGH_VOLUME)
+#define NOTE_F7H (NOTE_F7 + TONE_HIGH_VOLUME)
+#define NOTE_FS7H (NOTE_FS7 + TONE_HIGH_VOLUME)
+#define NOTE_G7H (NOTE_G7 + TONE_HIGH_VOLUME)
+#define NOTE_GS7H (NOTE_GS7 + TONE_HIGH_VOLUME)
+#define NOTE_A7H (NOTE_A7 + TONE_HIGH_VOLUME)
+#define NOTE_AS7H (NOTE_AS7 + TONE_HIGH_VOLUME)
+#define NOTE_B7H (NOTE_B7 + TONE_HIGH_VOLUME)
+#define NOTE_C8H (NOTE_C8 + TONE_HIGH_VOLUME)
+#define NOTE_CS8H (NOTE_CS8 + TONE_HIGH_VOLUME)
+#define NOTE_D8H (NOTE_D8 + TONE_HIGH_VOLUME)
+#define NOTE_DS8H (NOTE_DS8 + TONE_HIGH_VOLUME)
+#define NOTE_E8H (NOTE_E8 + TONE_HIGH_VOLUME)
+#define NOTE_F8H (NOTE_F8 + TONE_HIGH_VOLUME)
+#define NOTE_FS8H (NOTE_FS8 + TONE_HIGH_VOLUME)
+#define NOTE_G8H (NOTE_G8 + TONE_HIGH_VOLUME)
+#define NOTE_GS8H (NOTE_GS8 + TONE_HIGH_VOLUME)
+#define NOTE_A8H (NOTE_A8 + TONE_HIGH_VOLUME)
+#define NOTE_AS8H (NOTE_AS8 + TONE_HIGH_VOLUME)
+#define NOTE_B8H (NOTE_B8 + TONE_HIGH_VOLUME)
+#define NOTE_C9H (NOTE_C9 + TONE_HIGH_VOLUME)
+#define NOTE_CS9H (NOTE_CS9 + TONE_HIGH_VOLUME)
+#define NOTE_D9H (NOTE_D9 + TONE_HIGH_VOLUME)
+#define NOTE_DS9H (NOTE_DS9 + TONE_HIGH_VOLUME)
+#define NOTE_E9H (NOTE_E9 + TONE_HIGH_VOLUME)
+#define NOTE_F9H (NOTE_F9 + TONE_HIGH_VOLUME)
+#define NOTE_FS9H (NOTE_FS9 + TONE_HIGH_VOLUME)
+#define NOTE_G9H (NOTE_G9 + TONE_HIGH_VOLUME)
+#define NOTE_GS9H (NOTE_GS9 + TONE_HIGH_VOLUME)
+#define NOTE_A9H (NOTE_A9 + TONE_HIGH_VOLUME)
+#define NOTE_AS9H (NOTE_AS9 + TONE_HIGH_VOLUME)
+#define NOTE_B9H (NOTE_B9 + TONE_HIGH_VOLUME)
+
+#endif
diff --git a/board-package-source/libraries/EEPROM/README.md b/board-package-source/libraries/EEPROM/README.md
new file mode 100644
index 0000000..a624136
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/README.md
@@ -0,0 +1,139 @@
+## **EEPROM Library V2.0** for Arduino
+
+**Written by:** _Christopher Andrews_.
+
+### **What is the EEPROM library.**
+
+Th EEPROM library provides an easy to use interface to interact with the internal non-volatile storage found in AVR based Arduino boards. This library will work on many AVR devices like ATtiny and ATmega chips.
+
+### **How to use it**
+The EEPROM library is included in your IDE download. To add its functionality to your sketch you'll need to reference the library header file. You do this by adding an include directive to the top of your sketch.
+
+```Arduino
+#include
+
+void setup(){
+
+}
+
+void loop(){
+
+}
+
+```
+
+The library provides a global variable named `EEPROM`, you use this variable to access the library functions. The methods provided in the EEPROM class are listed below.
+
+You can view all the examples [here](examples/).
+
+### **Library functions**
+
+#### **`EEPROM.read( address )`** [[_example_]](examples/eeprom_read/eeprom_read.ino)
+
+This function allows you to read a single byte of data from the eeprom.
+Its only parameter is an `int` which should be set to the address you wish to read.
+
+The function returns an `unsigned char` containing the value read.
+
+#### **`EEPROM.write( address, value )`** [[_example_]](examples/eeprom_write/eeprom_write.ino)
+
+The `write()` method allows you to write a single byte of data to the EEPROM.
+Two parameters are needed. The first is an `int` containing the address that is to be written, and the second is a the data to be written (`unsigned char`).
+
+This function does not return any value.
+
+#### **`EEPROM.update( address, value )`** [[_example_]](examples/eeprom_update/eeprom_update.ino)
+
+This function is similar to `EEPROM.write()` however this method will only write data if the cell contents pointed to by `address` is different to `value`. This method can help prevent unnecessary wear on the EEPROM cells.
+
+This function does not return any value.
+
+#### **`EEPROM.get( address, object )`** [[_example_]](examples/eeprom_get/eeprom_get.ino)
+
+This function will retrieve any object from the EEPROM.
+Two parameters are needed to call this function. The first is an `int` containing the address that is to be written, and the second is the object you would like to read.
+
+This function returns a reference to the `object` passed in. It does not need to be used and is only returned for conveience.
+
+#### **`EEPROM.put( address, object )`** [[_example_]](examples/eeprom_put/eeprom_put.ino)
+
+This function will write any object to the EEPROM.
+Two parameters are needed to call this function. The first is an `int` containing the address that is to be written, and the second is the object you would like to write.
+
+This function uses the _update_ method to write its data, and therefore only rewrites changed cells.
+
+This function returns a reference to the `object` passed in. It does not need to be used and is only returned for conveience.
+
+#### **Subscript operator: `EEPROM[address]`** [[_example_]](examples/eeprom_crc/eeprom_crc.ino)
+
+This operator allows using the identifier `EEPROM` like an array.
+EEPROM cells can be read _and_ **_written_** directly using this method.
+
+This operator returns a reference to the EEPROM cell.
+
+```c++
+unsigned char val;
+
+//Read first EEPROM cell.
+val = EEPROM[ 0 ];
+
+//Write first EEPROM cell.
+EEPROM[ 0 ] = val;
+
+//Compare contents
+if( val == EEPROM[ 0 ] ){
+ //Do something...
+}
+```
+
+#### **`EEPROM.length()`**
+
+This function returns an `unsigned int` containing the number of cells in the EEPROM.
+
+---
+
+### **Advanced features**
+
+This library uses a component based approach to provide its functionality. This means you can also use these components to design a customized approach. Two background classes are available for use: `EERef` & `EEPtr`.
+
+#### **`EERef` class**
+
+This object references an EEPROM cell.
+Its purpose is to mimic a typical byte of RAM, however its storage is the EEPROM.
+This class has an overhead of two bytes, similar to storing a pointer to an EEPROM cell.
+
+```C++
+EERef ref = EEPROM[ 10 ]; //Create a reference to 11th cell.
+
+ref = 4; //write to EEPROM cell.
+
+unsigned char val = ref; //Read referenced cell.
+```
+
+#### **`EEPtr` class**
+
+This object is a bidirectional pointer to EEPROM cells represented by `EERef` objects.
+Just like a normal pointer type, this type can be dereferenced and repositioned using
+increment/decrement operators.
+
+```C++
+EEPtr ptr = 10; //Create a pointer to 11th cell.
+
+*ptr = 4; //dereference and write to EEPROM cell.
+
+unsigned char val = *ptr; //dereference and read.
+
+ptr++; //Move to next EEPROM cell.
+```
+
+#### **`EEPROM.begin()`**
+
+This function returns an `EEPtr` pointing to the first cell in the EEPROM.
+This is useful for STL objects, custom iteration and C++11 style ranged for loops.
+
+#### **`EEPROM.end()`**
+
+This function returns an `EEPtr` pointing at the location after the last EEPROM cell.
+Used with `begin()` to provide custom iteration.
+
+**Note:** The `EEPtr` returned is invalid as it is out of range. Infact the hardware causes wrapping of the address (overflow) and `EEPROM.end()` actually references the first EEPROM cell.
diff --git a/board-package-source/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino b/board-package-source/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino
new file mode 100644
index 0000000..8b5121c
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino
@@ -0,0 +1,39 @@
+/*
+ * EEPROM Clear
+ *
+ * Sets all of the bytes of the EEPROM to 0.
+ * Please see eeprom_iteration for a more in depth
+ * look at how to traverse the EEPROM.
+ *
+ * This example code is in the public domain.
+ */
+
+#include
+
+void setup() {
+ // initialize the LED pin as an output.
+ pinMode(13, OUTPUT);
+
+ /***
+ Iterate through each byte of the EEPROM storage.
+
+ Larger AVR processors have larger EEPROM sizes, E.g:
+ - Arduno Duemilanove: 512b EEPROM storage.
+ - Arduino Uno: 1kb EEPROM storage.
+ - Arduino Mega: 4kb EEPROM storage.
+
+ Rather than hard-coding the length, you should use the pre-provided length function.
+ This will make your code portable to all AVR processors.
+ ***/
+
+ for (int i = 0 ; i < EEPROM.length() ; i++) {
+ EEPROM.write(i, 0);
+ }
+
+ // turn the LED on when we're done
+ digitalWrite(13, HIGH);
+}
+
+void loop() {
+ /** Empty loop. **/
+}
diff --git a/board-package-source/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino b/board-package-source/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino
new file mode 100644
index 0000000..c6db85c
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino
@@ -0,0 +1,52 @@
+/***
+ Written by Christopher Andrews.
+ CRC algorithm generated by pycrc, MIT licence ( https://github.com/tpircher/pycrc ).
+
+ A CRC is a simple way of checking whether data has changed or become corrupted.
+ This example calculates a CRC value directly on the EEPROM values.
+ The purpose of this example is to highlight how the EEPROM object can be used just like an array.
+***/
+
+#include
+#include
+
+void setup() {
+
+ //Start serial
+ Serial.begin(9600);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+
+ //Print length of data to run CRC on.
+ Serial.print("EEPROM length: ");
+ Serial.println(EEPROM.length());
+
+ //Print the result of calling eeprom_crc()
+ Serial.print("CRC32 of EEPROM data: 0x");
+ Serial.println(eeprom_crc(), HEX);
+ Serial.print("\n\nDone!");
+}
+
+void loop() {
+ /* Empty loop */
+}
+
+unsigned long eeprom_crc(void) {
+
+ const unsigned long crc_table[16] = {
+ 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
+ 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
+ 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
+ 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
+ };
+
+ unsigned long crc = ~0L;
+
+ for (int index = 0 ; index < EEPROM.length() ; ++index) {
+ crc = crc_table[(crc ^ EEPROM[index]) & 0x0f] ^ (crc >> 4);
+ crc = crc_table[(crc ^ (EEPROM[index] >> 4)) & 0x0f] ^ (crc >> 4);
+ crc = ~crc;
+ }
+ return crc;
+}
diff --git a/board-package-source/libraries/EEPROM/examples/eeprom_get/eeprom_get.ino b/board-package-source/libraries/EEPROM/examples/eeprom_get/eeprom_get.ino
new file mode 100644
index 0000000..a07cee7
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/examples/eeprom_get/eeprom_get.ino
@@ -0,0 +1,68 @@
+/***
+ eeprom_get example.
+
+ This shows how to use the EEPROM.get() method.
+
+ To pre-set the EEPROM data, run the example sketch eeprom_put.
+ This sketch will run without it, however, the values shown
+ will be shown from what ever is already on the EEPROM.
+
+ This may cause the serial object to print out a large string
+ of garbage if there is no null character inside one of the strings
+ loaded.
+
+ Written by Christopher Andrews 2015
+ Released under MIT licence.
+***/
+
+#include
+
+void setup() {
+
+ float f = 0.00f; //Variable to store data read from EEPROM.
+ int eeAddress = 0; //EEPROM address to start reading from
+
+ Serial.begin(9600);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+ Serial.print("Read float from EEPROM: ");
+
+ //Get the float data from the EEPROM at position 'eeAddress'
+ EEPROM.get(eeAddress, f);
+ Serial.println(f, 3); //This may print 'ovf, nan' if the data inside the EEPROM is not a valid float.
+
+ /***
+ As get also returns a reference to 'f', you can use it inline.
+ E.g: Serial.print( EEPROM.get( eeAddress, f ) );
+ ***/
+
+ /***
+ Get can be used with custom structures too.
+ I have separated this into an extra function.
+ ***/
+
+ secondTest(); //Run the next test.
+}
+
+struct MyObject {
+ float field1;
+ byte field2;
+ char name[10];
+};
+
+void secondTest() {
+ int eeAddress = sizeof(float); //Move address to the next byte after float 'f'.
+
+ MyObject customVar; //Variable to store custom object read from EEPROM.
+ EEPROM.get(eeAddress, customVar);
+
+ Serial.println("Read custom object from EEPROM: ");
+ Serial.println(customVar.field1);
+ Serial.println(customVar.field2);
+ Serial.println(customVar.name);
+}
+
+void loop() {
+ /* Empty loop */
+}
diff --git a/board-package-source/libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino b/board-package-source/libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino
new file mode 100644
index 0000000..3673b47
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino
@@ -0,0 +1,57 @@
+/***
+ eeprom_iteration example.
+
+ A set of example snippets highlighting the
+ simplest methods for traversing the EEPROM.
+
+ Running this sketch is not necessary, this is
+ simply highlighting certain programming methods.
+
+ Written by Christopher Andrews 2015
+ Released under MIT licence.
+***/
+
+#include
+
+void setup() {
+
+ /***
+ Iterate the EEPROM using a for loop.
+ ***/
+
+ for (int index = 0 ; index < EEPROM.length() ; index++) {
+
+ //Add one to each cell in the EEPROM
+ EEPROM[ index ] += 1;
+ }
+
+ /***
+ Iterate the EEPROM using a while loop.
+ ***/
+
+ int index = 0;
+
+ while (index < EEPROM.length()) {
+
+ //Add one to each cell in the EEPROM
+ EEPROM[ index ] += 1;
+ index++;
+ }
+
+ /***
+ Iterate the EEPROM using a do-while loop.
+ ***/
+
+ int idx = 0; //Used 'idx' to avoid name conflict with 'index' above.
+
+ do {
+
+ //Add one to each cell in the EEPROM
+ EEPROM[ idx ] += 1;
+ idx++;
+ } while (idx < EEPROM.length());
+
+
+} //End of setup function.
+
+void loop() {}
\ No newline at end of file
diff --git a/board-package-source/libraries/EEPROM/examples/eeprom_put/eeprom_put.ino b/board-package-source/libraries/EEPROM/examples/eeprom_put/eeprom_put.ino
new file mode 100644
index 0000000..c1ba0a5
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/examples/eeprom_put/eeprom_put.ino
@@ -0,0 +1,58 @@
+/***
+ eeprom_put example.
+
+ This shows how to use the EEPROM.put() method.
+ Also, this sketch will pre-set the EEPROM data for the
+ example sketch eeprom_get.
+
+ Note, unlike the single byte version EEPROM.write(),
+ the put method will use update semantics. As in a byte
+ will only be written to the EEPROM if the data is actually
+ different.
+
+ Written by Christopher Andrews 2015
+ Released under MIT licence.
+***/
+
+#include
+
+struct MyObject {
+ float field1;
+ byte field2;
+ char name[10];
+};
+
+void setup() {
+
+ Serial.begin(9600);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+
+ float f = 123.456f; //Variable to store in EEPROM.
+ int eeAddress = 0; //Location we want the data to be put.
+
+
+ //One simple call, with the address first and the object second.
+ EEPROM.put(eeAddress, f);
+
+ Serial.println("Written float data type!");
+
+ /** Put is designed for use with custom structures also. **/
+
+ //Data to store.
+ MyObject customVar = {
+ 3.14f,
+ 65,
+ "Working!"
+ };
+
+ eeAddress += sizeof(float); //Move address to the next byte after float 'f'.
+
+ EEPROM.put(eeAddress, customVar);
+ Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
+}
+
+void loop() {
+ /* Empty loop */
+}
diff --git a/board-package-source/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino b/board-package-source/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino
new file mode 100644
index 0000000..a8a3510
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino
@@ -0,0 +1,56 @@
+/*
+ * EEPROM Read
+ *
+ * Reads the value of each byte of the EEPROM and prints it
+ * to the computer.
+ * This example code is in the public domain.
+ */
+
+#include
+
+// start reading from the first byte (address 0) of the EEPROM
+int address = 0;
+byte value;
+
+void setup() {
+ // initialize serial and wait for port to open:
+ Serial.begin(9600);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+}
+
+void loop() {
+ // read a byte from the current address of the EEPROM
+ value = EEPROM.read(address);
+
+ Serial.print(address);
+ Serial.print("\t");
+ Serial.print(value, DEC);
+ Serial.println();
+
+ /***
+ Advance to the next address, when at the end restart at the beginning.
+
+ Larger AVR processors have larger EEPROM sizes, E.g:
+ - Arduno Duemilanove: 512b EEPROM storage.
+ - Arduino Uno: 1kb EEPROM storage.
+ - Arduino Mega: 4kb EEPROM storage.
+
+ Rather than hard-coding the length, you should use the pre-provided length function.
+ This will make your code portable to all AVR processors.
+ ***/
+ address = address + 1;
+ if (address == EEPROM.length()) {
+ address = 0;
+ }
+
+ /***
+ As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an
+ EEPROM address is also doable by a bitwise and of the length - 1.
+
+ ++address &= EEPROM.length() - 1;
+ ***/
+
+ delay(500);
+}
diff --git a/board-package-source/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino b/board-package-source/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino
new file mode 100644
index 0000000..5e3db5b
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino
@@ -0,0 +1,71 @@
+/***
+ EEPROM Update method
+
+ Stores values read from analog input 0 into the EEPROM.
+ These values will stay in the EEPROM when the board is
+ turned off and may be retrieved later by another sketch.
+
+ If a value has not changed in the EEPROM, it is not overwritten
+ which would reduce the life span of the EEPROM unnecessarily.
+
+ Released using MIT licence.
+ ***/
+
+#include
+
+/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
+int address = 0;
+
+void setup() {
+ /** EMpty setup **/
+}
+
+void loop() {
+ /***
+ need to divide by 4 because analog inputs range from
+ 0 to 1023 and each byte of the EEPROM can only hold a
+ value from 0 to 255.
+ ***/
+ int val = analogRead(0) / 4;
+
+ /***
+ Update the particular EEPROM cell.
+ these values will remain there when the board is
+ turned off.
+ ***/
+ EEPROM.update(address, val);
+
+ /***
+ The function EEPROM.update(address, val) is equivalent to the following:
+
+ if( EEPROM.read(address) != val ){
+ EEPROM.write(address, val);
+ }
+ ***/
+
+
+ /***
+ Advance to the next address, when at the end restart at the beginning.
+
+ Larger AVR processors have larger EEPROM sizes, E.g:
+ - Arduno Duemilanove: 512b EEPROM storage.
+ - Arduino Uno: 1kb EEPROM storage.
+ - Arduino Mega: 4kb EEPROM storage.
+
+ Rather than hard-coding the length, you should use the pre-provided length function.
+ This will make your code portable to all AVR processors.
+ ***/
+ address = address + 1;
+ if (address == EEPROM.length()) {
+ address = 0;
+ }
+
+ /***
+ As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an
+ EEPROM address is also doable by a bitwise and of the length - 1.
+
+ ++address &= EEPROM.length() - 1;
+ ***/
+
+ delay(100);
+}
diff --git a/board-package-source/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino b/board-package-source/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino
new file mode 100644
index 0000000..f9bea64
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino
@@ -0,0 +1,60 @@
+/*
+ * EEPROM Write
+ *
+ * Stores values read from analog input 0 into the EEPROM.
+ * These values will stay in the EEPROM when the board is
+ * turned off and may be retrieved later by another sketch.
+ */
+
+#include
+
+/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
+int addr = 0;
+
+void setup() {
+ /** Empty setup. **/
+}
+
+void loop() {
+ /***
+ Need to divide by 4 because analog inputs range from
+ 0 to 1023 and each byte of the EEPROM can only hold a
+ value from 0 to 255.
+ ***/
+
+ int val = analogRead(0) / 4;
+
+ /***
+ Write the value to the appropriate byte of the EEPROM.
+ these values will remain there when the board is
+ turned off.
+ ***/
+
+ EEPROM.write(addr, val);
+
+ /***
+ Advance to the next address, when at the end restart at the beginning.
+
+ Larger AVR processors have larger EEPROM sizes, E.g:
+ - Arduno Duemilanove: 512b EEPROM storage.
+ - Arduino Uno: 1kb EEPROM storage.
+ - Arduino Mega: 4kb EEPROM storage.
+
+ Rather than hard-coding the length, you should use the pre-provided length function.
+ This will make your code portable to all AVR processors.
+ ***/
+ addr = addr + 1;
+ if (addr == EEPROM.length()) {
+ addr = 0;
+ }
+
+ /***
+ As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an
+ EEPROM address is also doable by a bitwise and of the length - 1.
+
+ ++addr &= EEPROM.length() - 1;
+ ***/
+
+
+ delay(100);
+}
diff --git a/board-package-source/libraries/EEPROM/keywords.txt b/board-package-source/libraries/EEPROM/keywords.txt
new file mode 100644
index 0000000..2cabc0b
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/keywords.txt
@@ -0,0 +1,22 @@
+#######################################
+# Syntax Coloring Map For EEPROM
+#######################################
+
+#######################################
+# Datatypes (KEYWORD1)
+#######################################
+
+EEPROM KEYWORD1
+EERef KEYWORD1
+EEPtr KEYWORD2
+
+#######################################
+# Methods and Functions (KEYWORD2)
+#######################################
+
+update KEYWORD2
+
+#######################################
+# Constants (LITERAL1)
+#######################################
+
diff --git a/board-package-source/libraries/EEPROM/library.properties b/board-package-source/libraries/EEPROM/library.properties
new file mode 100644
index 0000000..3b20032
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/library.properties
@@ -0,0 +1,10 @@
+name=EEPROM
+version=2.0
+author=Arduino, Christopher Andrews
+maintainer=Arduino
+sentence=Enables reading and writing to the permanent board storage.
+paragraph=This library allows to read and write data in a memory type, the EEPROM, that keeps its content also when the board is powered off. The amount of EEPROM available depends on the microcontroller type.
+category=Data Storage
+url=http://www.arduino.cc/en/Reference/EEPROM
+architectures=avr
+
diff --git a/board-package-source/libraries/EEPROM/src/EEPROM.h b/board-package-source/libraries/EEPROM/src/EEPROM.h
new file mode 100644
index 0000000..cde75db
--- /dev/null
+++ b/board-package-source/libraries/EEPROM/src/EEPROM.h
@@ -0,0 +1,146 @@
+/*
+ EEPROM.h - EEPROM library
+ Original Copyright (c) 2006 David A. Mellis. All right reserved.
+ New version by Christopher Andrews 2015.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef EEPROM_h
+#define EEPROM_h
+
+#include
+#include
+#include
+
+/***
+ EERef class.
+
+ This object references an EEPROM cell.
+ Its purpose is to mimic a typical byte of RAM, however its storage is the EEPROM.
+ This class has an overhead of two bytes, similar to storing a pointer to an EEPROM cell.
+***/
+
+struct EERef{
+
+ EERef( const int index )
+ : index( index ) {}
+
+ //Access/read members.
+ uint8_t operator*() const { return eeprom_read_byte( (uint8_t*) index ); }
+ operator const uint8_t() const { return **this; }
+
+ //Assignment/write members.
+ EERef &operator=( const EERef &ref ) { return *this = *ref; }
+ EERef &operator=( uint8_t in ) { return eeprom_write_byte( (uint8_t*) index, in ), *this; }
+ EERef &operator +=( uint8_t in ) { return *this = **this + in; }
+ EERef &operator -=( uint8_t in ) { return *this = **this - in; }
+ EERef &operator *=( uint8_t in ) { return *this = **this * in; }
+ EERef &operator /=( uint8_t in ) { return *this = **this / in; }
+ EERef &operator ^=( uint8_t in ) { return *this = **this ^ in; }
+ EERef &operator %=( uint8_t in ) { return *this = **this % in; }
+ EERef &operator &=( uint8_t in ) { return *this = **this & in; }
+ EERef &operator |=( uint8_t in ) { return *this = **this | in; }
+ EERef &operator <<=( uint8_t in ) { return *this = **this << in; }
+ EERef &operator >>=( uint8_t in ) { return *this = **this >> in; }
+
+ EERef &update( uint8_t in ) { return in != *this ? *this = in : *this; }
+
+ /** Prefix increment/decrement **/
+ EERef& operator++() { return *this += 1; }
+ EERef& operator--() { return *this -= 1; }
+
+ /** Postfix increment/decrement **/
+ uint8_t operator++ (int){
+ uint8_t ret = **this;
+ return ++(*this), ret;
+ }
+
+ uint8_t operator-- (int){
+ uint8_t ret = **this;
+ return --(*this), ret;
+ }
+
+ int index; //Index of current EEPROM cell.
+};
+
+/***
+ EEPtr class.
+
+ This object is a bidirectional pointer to EEPROM cells represented by EERef objects.
+ Just like a normal pointer type, this can be dereferenced and repositioned using
+ increment/decrement operators.
+***/
+
+struct EEPtr{
+
+ EEPtr( const int index )
+ : index( index ) {}
+
+ operator const int() const { return index; }
+ EEPtr &operator=( int in ) { return index = in, *this; }
+
+ //Iterator functionality.
+ bool operator!=( const EEPtr &ptr ) { return index != ptr.index; }
+ EERef operator*() { return index; }
+
+ /** Prefix & Postfix increment/decrement **/
+ EEPtr& operator++() { return ++index, *this; }
+ EEPtr& operator--() { return --index, *this; }
+ EEPtr operator++ (int) { return index++; }
+ EEPtr operator-- (int) { return index--; }
+
+ int index; //Index of current EEPROM cell.
+};
+
+/***
+ EEPROMClass class.
+
+ This object represents the entire EEPROM space.
+ It wraps the functionality of EEPtr and EERef into a basic interface.
+ This class is also 100% backwards compatible with earlier Arduino core releases.
+***/
+
+struct EEPROMClass{
+
+ //Basic user access methods.
+ EERef operator[]( const int idx ) { return idx; }
+ uint8_t read( int idx ) { return EERef( idx ); }
+ void write( int idx, uint8_t val ) { (EERef( idx )) = val; }
+ void update( int idx, uint8_t val ) { EERef( idx ).update( val ); }
+
+ //STL and C++11 iteration capability.
+ EEPtr begin() { return 0x00; }
+ EEPtr end() { return length(); } //Standards requires this to be the item after the last valid entry. The returned pointer is invalid.
+ uint16_t length() { return E2END + 1; }
+
+ //Functionality to 'get' and 'put' objects to and from EEPROM.
+ template< typename T > T &get( int idx, T &t ){
+ EEPtr e = idx;
+ uint8_t *ptr = (uint8_t*) &t;
+ for( int count = sizeof(T) ; count ; --count, ++e ) *ptr++ = *e;
+ return t;
+ }
+
+ template< typename T > const T &put( int idx, const T &t ){
+ EEPtr e = idx;
+ const uint8_t *ptr = (const uint8_t*) &t;
+ for( int count = sizeof(T) ; count ; --count, ++e ) (*e).update( *ptr++ );
+ return t;
+ }
+};
+
+static EEPROMClass EEPROM;
+#endif
\ No newline at end of file
diff --git a/board-package-source/libraries/FixedPointsArduino/LICENCE b/board-package-source/libraries/FixedPointsArduino/LICENCE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/LICENCE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/board-package-source/libraries/FixedPointsArduino/README.md b/board-package-source/libraries/FixedPointsArduino/README.md
new file mode 100644
index 0000000..8f2908c
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/README.md
@@ -0,0 +1,176 @@
+# FixedPoints
+A portable fixed point arithmetic library.
+
+Some knowledge of how fixed point types are formatted is required to used this library to full effect.
+No knowledge of how these operations are implemented is required to use them.
+
+This library was written with Arduino in mind, as well as CPUs with limited floating point support.
+However, given the templated nature of the library, it should still function on a wide variety of CPUs.
+
+## Project Showcase
+
+Here's a list of projects that use `FixedPoints`:
+
+* [1943](https://github.com/filmote/Nineteen43) for the [Arduboy](https://arduboy.com/) by [@filmote](https://github.com/filmote)
+* [XOD Powered Rechargeable Solar Lamp](http://www.instructables.com/id/XOD-powered-Rechargeable-Solar-Lamp/) by [Victorian DeLorean](http://www.instructables.com/member/Victorian%20DeLorean/)
+
+If you have a project that uses `FixedPoints` and would like your work to be showcased here,
+please [raise an issue](https://github.com/Pharap/FixedPointsArduino/issues/new).
+
+## Requirements:
+
+- The Compiler must be C++11 compliant.
+- The user should ideally be familar with the [Q number format](https://en.wikipedia.org/wiki/Q_(number_format)) for fixed points.
+
+## Licence
+
+This code uses the Apache 2.0 Licence.
+This means:
+
+- This code comes with no warranty.
+- The licensor and any contributors cannot be held liable for damages.
+- If you use this code, edited or unedited, you must:
+ - Package a copy of LICENCE with your code.
+ - Package a copy of NOTICE with your code.
+- You may modify the source code.
+ - If you modify a file, you must state this prominently in the file (i.e. in a comment at the top).
+ - Any modified code may use a different licence.
+ - Any unmodified code must carry the same Apache 2.0 licence.
+- You may not use any trademarks owned by the licensor.
+
+## Conditional Compilation
+
+These are symbols you can define prior to library inclusion to alter the behaviour of the library.
+
+- `FIXED_POINTS_USE_NAMESPACE`: Define this to wrap all classes and functions in the namespace `FixedPoints`. Useful for preventing naming conflicts.
+- `FIXED_POINTS_NO_RANDOM`: Define this to disable the random utility functions. Useful for systems that don't have access to `long random(void)` from avr-libc.
+
+## FAQ
+
+* Why can't I multiply `UQ32x32` or `SQ31x32` by another type?
+ * Because it would require a 128-bit integer type to provide enough precision for accurate multiplication.
+
+## Contents
+This library supplies two core types and sixteen type aliases.
+
+### Defines
+
+- `FIXED_POINTS_NAMESPACE`: The namespace used by FixedPoints. This is empty unless `FIXED_POINTS_USE_NAMESPACE` is defined prior to inclusion.
+- `FIXED_POINTS_DETAILS`: An infrastructure macro that should not be used in user code. It is safe to undefine this if it is causing problems.
+- `FIXED_POINTS_BEGIN_NAMESPACE`: An infrastructure macro that should not be used in user code. It is safe to undefine this if it is causing problems.
+- `FIXED_POINTS_END_NAMESPACE`: An infrastructure macro that should not be used in user code. It is safe to undefine this if it is causing problems.
+
+### Core Types:
+The core types are provided by `FixedPoints.h`.
+
+- `UFixed`: An unsigned fixed point type where I is the number of bits used for the integer part of the number and F is the number of bits used for the fractional part of the number.
+- `SFixed`: An signed fixed point type where I is the number of bits used for the integer part of the number (excluding the implicit sign bit) and F is the number of bits used for the fractional part of the number.
+
+### Aliases:
+The common aliases are provided by `FixedPointsCommon.h`.
+
+- `UQ4x4`: An alias for `UFixed<4, 4>`, an 8-bit unsigned fixed point in the Q4.4 format.
+- `UQ8x8`: An alias for `UFixed<8, 8>`, a 16-bit unsigned fixed point in the Q8.8 format.
+- `UQ16x16`: An alias for `UFixed<16, 16>`, a 32-bit unsigned fixed point in the Q16.16 format.
+- `UQ32x32`: An alias for `UFixed<32, 32>`, a 64-bit unsigned fixed point in the Q32.32 format.
+- `UQ1x7`: An alias for `UFixed<1, 7>`, an 8-bit unsigned fixed point in the Q1.7 format.
+- `UQ1x15`: An alias for `UFixed<1, 15>`, a 16-bit unsigned fixed point in the Q1.15 format.
+- `UQ1x31`: An alias for `UFixed<1, 31>`, a 32-bit unsigned fixed point in the Q1.31 format.
+- `UQ1x63`: An alias for `UFixed<1, 63>`, a 64-bit unsigned fixed point in the Q1.63 format.
+- `SQ3x4`: An alias for `SFixed<3, 4>`, an 8-bit signed fixed point in the Q3.4 format with implicit sign bit.
+- `SQ7x8`: An alias for `SFixed<7, 8>`, a 16-bit signed fixed point in the Q7.8 format with implicit sign bit.
+- `SQ15x16`: An alias for `SFixed<15, 16>`, a 32-bit signed fixed point in the Q15.16 format with implicit sign bit.
+- `SQ31x32`: An alias for `SFixed<31, 32>`, a 64-bit signed fixed point in the Q31.32 format with implicit sign bit.
+- `SQ1x6`: An alias for `SFixed<1, 6>`, an 8-bit signed fixed point in the Q1.6 format with implicit sign bit.
+- `SQ1x14`: An alias for `SFixed<1, 14>`, a 16-bit signed fixed point in the Q1.14 format with implicit sign bit.
+- `SQ1x30`: An alias for `SFixed<1, 30>`, a 32-bit signed fixed point in the Q1.30 format with implicit sign bit.
+- `SQ1x62`: An alias for `SFixed<1, 62>`, a 64-bit signed fixed point in the Q1.62 format with implicit sign bit.
+
+([About Q Format](https://en.wikipedia.org/wiki/Q_(number_format)).)
+
+### Operators:
+
+- `+`: Adds two `UFixed`s or two `SFixed`s
+- `-`: Subtracts two `UFixed`s or two `SFixed`s
+- `*`: Multiplies two `UFixed`s or two `SFixed`s
+- `/`: Divides two `UFixed`s or two `SFixed`s
+- `==`: Compares two `UFixed`s or two `SFixed`s
+- `!=`: Compares two `UFixed`s or two `SFixed`s
+- `<`: Compares two `UFixed`s or two `SFixed`s
+- `<=`: Compares two `UFixed`s or two `SFixed`s
+- `>`: Compares two `UFixed`s or two `SFixed`s
+- `>=`: Compares two `UFixed`s or two `SFixed`s
+
+### Free Functions:
+
+- `floorFixed`: The floor operation.
+- `ceilFixed`: The Ceiling operation
+- `roundFixed`: Rounding operation.
+- `truncFixed`: Truncation operation.
+- `signbitFixed`: Returns `true` for signed numbers and `false` for unsigned numbers.
+- `copysignFixed`: Returns a value with the magnitude of the first argument and the sign of the second argument.
+- `multiply`: Multiplies two `UFixed`s or two `SFixed`s, returns a result that is twice the resolution of the input.
+
+### Member Functions:
+
+- `UFixed::getInteger`: Gets the integer part of an unsigned fixed point.
+- `UFixed::getFraction`: Gets the fractional part of an unsigned fixed point.
+- `UFixed::getInternal`: Gets the internal representation of an unsigned fixed point.
+
+- `SFixed::getInteger`: Gets the integer part of a signed fixed point.
+- `SFixed::getFraction`: Gets the fractional part of a signed fixed point.
+- `SFixed::getInternal`: Gets the internal representation of a signed fixed point.
+
+### Static Functions:
+
+- `UFixed::fromInternal`: Produces an unsigned fixed point number from its internal representation.
+- `SFixed::fromInternal`: Produces a signed fixed point number from its internal representation.
+
+## Construction:
+
+Note that both `UFixed` and `SFixed` are implicitly compile-time constructable from all integer and decimal literals.
+This means that you may write code such as `UFixed<8, 8> value = 0.5;` without incurring a runtime cost for converting from `double` to `UFixed<8, 8>` because the constructor is `constexpr`.
+
+`UFixed` is constructable from:
+- Any integer literal type, regardless of sign.
+-- This constructs the fixed point as an integer with no fractional part.
+-- A value that does not fit shall be truncated without warning.
+-- If a constant value is used, the fixed point shall be constructed at compile time.
+- An unsigned integer part and an unsigned fractional part.
+-- The integer part is of the smallest type capable of representing `I` bits.
+-- The fractional part is of the smallest type capable of representing `F` bits.
+-- If constant values are used, the fixed point shall be constructed at compile time.
+- Any decimal literal type, regardless of sign.
+-- This constructs the fixed point as a best approximation of the provided value.
+-- A value that does not fit shall be truncated without warning.
+-- If a constant value is used, the fixed point shall be constructed at compile time.
+
+`SFixed` is constructable from:
+- Any integer literal type, regardless of sign.
+-- This constructs the fixed point as an integer with no fractional part.
+-- A value that does not fit shall be truncated without warning.
+-- If a constant value is used, the fixed point shall be constructed at compile time.
+- A signed integer part and an unsigned fractional part.
+-- The integer part is of the smallest type capable of representing `I + 1` bits.
+-- The fractional part is of the smallest type capable of representing `F` bits.
+-- If constant values are used, the fixed point shall be constructed at compile time.
+- Any decimal literal type, regardless of sign.
+-- This constructs the fixed point as a best approximation of the provided value.
+-- A value that does not fit shall be truncated without warning.
+-- If a constant value is used, the fixed point shall be constructed at compile time.
+
+### Casts:
+
+`UFixed` is explicitly convertible to:
+- `float`.
+- `double`.
+- The smallest unsigned type capable of holding its integer part. I.e. a type of at least `I` bits.
+- Another `UFixed` type of a different scale. E.g. `UFixed<4, 4>` may be converted to `UFixed<8, 8>` and vice versa.
+
+`SFixed` is explicitly convertible to:
+- `float`.
+- `double`.
+- The smallest signed type capable of holding its integer part. I.e. a type of at least `I + 1` bits.
+- Another `SFixed` type of a different scale. E.g. `SFixed<3, 4>` may be converted to `SFixed<7, 8>` and vice versa.
+
+
diff --git a/board-package-source/libraries/FixedPointsArduino/examples/FixedPointCalculations/FixedPointCalculations.ino b/board-package-source/libraries/FixedPointsArduino/examples/FixedPointCalculations/FixedPointCalculations.ino
new file mode 100644
index 0000000..70f1e01
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/examples/FixedPointCalculations/FixedPointCalculations.ino
@@ -0,0 +1,171 @@
+#include
+#include
+
+void TestUQ8x8(void)
+{
+ Serial.println(F("The size of UQ8x8 on your system is:"));
+ Serial.println(sizeof(UQ8x8));
+ Serial.println();
+
+ UQ8x8 a = 1.5;
+ Serial.println(F("Displaying a as float:"));
+ Serial.println(static_cast(a));
+ Serial.println();
+
+ Serial.println(F("Displaying the integer part of a"));
+ Serial.println(a.getInteger());
+ Serial.println();
+
+ Serial.println(F("Displaying floorFixed(a):"));
+ Serial.println(static_cast(floorFixed(a)));
+ Serial.println();
+
+ Serial.println(F("Displaying ceilFixed(a):"));
+ Serial.println(static_cast(ceilFixed(a)));
+ Serial.println();
+
+ Serial.println(F("Displaying roundFixed(a):"));
+ Serial.println(static_cast(roundFixed(a)));
+ Serial.println();
+
+ Serial.println(F("Displaying truncFixed(a):"));
+ Serial.println(static_cast(truncFixed(a)));
+ Serial.println();
+
+ UQ8x8 b = 5.25;
+ Serial.println(F("Displaying b as float:"));
+ Serial.println(static_cast(b));
+ Serial.println();
+
+ Serial.println(F("Displaying the integer part of b"));
+ Serial.println(b.getInteger());
+ Serial.println();
+
+ Serial.println(F("Displaying floorFixed(b):"));
+ Serial.println(static_cast(floorFixed(b)));
+ Serial.println();
+
+ Serial.println(F("Displaying ceilFixed(b):"));
+ Serial.println(static_cast(ceilFixed(b)));
+ Serial.println();
+
+ Serial.println(F("Displaying roundFixed(b):"));
+ Serial.println(static_cast(roundFixed(b)));
+ Serial.println();
+
+ Serial.println(F("Displaying truncFixed(b):"));
+ Serial.println(static_cast(truncFixed(b)));
+ Serial.println();
+
+ Serial.println(F("Displaying a + b as float:"));
+ Serial.println(static_cast(a + b));
+ Serial.println();
+
+ Serial.println(F("Displaying a - b as float:"));
+ Serial.println(F("(Note the underflow due lack of sign bit)"));
+ Serial.println(static_cast(a - b));
+ Serial.println();
+
+ Serial.println(F("Displaying b - a as float:"));
+ Serial.println(static_cast(b - a));
+ Serial.println();
+
+ Serial.println(F("Displaying a * b as float:"));
+ Serial.println(static_cast(a * b));
+ Serial.println();
+
+ Serial.println(F("Displaying a / b as float:"));
+ Serial.println(static_cast(a / b));
+ Serial.println();
+}
+
+void TestSQ7x8(void)
+{
+ Serial.println(F("The size of SQ7x8 on your system is:"));
+ Serial.println(sizeof(SQ7x8));
+ Serial.println();
+
+ SQ7x8 a = 1.5;
+ Serial.println(F("Displaying a as float:"));
+ Serial.println(static_cast(a));
+ Serial.println();
+
+ Serial.println(F("Displaying the integer part of a"));
+ Serial.println(a.getInteger());
+ Serial.println();
+
+ Serial.println(F("Displaying floorFixed(a):"));
+ Serial.println(static_cast(floorFixed(a)));
+ Serial.println();
+
+ Serial.println(F("Displaying ceilFixed(a):"));
+ Serial.println(static_cast(ceilFixed(a)));
+ Serial.println();
+
+ Serial.println(F("Displaying roundFixed(a):"));
+ Serial.println(static_cast(roundFixed(a)));
+ Serial.println();
+
+ Serial.println(F("Displaying truncFixed(a):"));
+ Serial.println(static_cast(truncFixed(a)));
+ Serial.println();
+
+ SQ7x8 b = 5.25;
+ Serial.println(F("Displaying b as float:"));
+ Serial.println(static_cast(b));
+ Serial.println();
+
+ Serial.println(F("Displaying the integer part of b"));
+ Serial.println(b.getInteger());
+ Serial.println();
+
+ Serial.println(F("Displaying floorFixed(b):"));
+ Serial.println(static_cast(floorFixed(b)));
+ Serial.println();
+
+ Serial.println(F("Displaying ceilFixed(b):"));
+ Serial.println(static_cast(ceilFixed(b)));
+ Serial.println();
+
+ Serial.println(F("Displaying roundFixed(b):"));
+ Serial.println(static_cast(roundFixed(b)));
+ Serial.println();
+
+ Serial.println(F("Displaying truncFixed(b):"));
+ Serial.println(static_cast(truncFixed(b)));
+ Serial.println();
+
+ Serial.println(F("Displaying a + b as float:"));
+ Serial.println(static_cast(a + b));
+ Serial.println();
+
+ Serial.println(F("Displaying a - b as float:"));
+ Serial.println(F("(Note this is correct due to sign bit)"));
+ Serial.println(static_cast(a - b));
+ Serial.println();
+
+ Serial.println(F("Displaying b - a as float:"));
+ Serial.println(static_cast(b - a));
+ Serial.println();
+
+ Serial.println(F("Displaying a * b as float:"));
+ Serial.println(static_cast(a * b));
+ Serial.println();
+
+ Serial.println(F("Displaying a / b as float:"));
+ Serial.println(static_cast(a / b));
+ Serial.println();
+}
+
+void setup()
+{
+ Serial.begin(9600);
+ while(!Serial);
+
+ TestUQ8x8();
+ TestSQ7x8();
+}
+
+void loop()
+{
+}
diff --git a/board-package-source/libraries/FixedPointsArduino/extras/AFixedPointPrimer.md b/board-package-source/libraries/FixedPointsArduino/extras/AFixedPointPrimer.md
new file mode 100644
index 0000000..3413465
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/extras/AFixedPointPrimer.md
@@ -0,0 +1,69 @@
+# A Fixed Point Primer
+
+## What Are Fixed Point Numbers?
+
+Normally computers operate on what are called 'integers'.
+Integers are numbers that do not have a fractional component in them.
+For example 0, 1, 42, 128, 10000 are all integers
+
+Numbers that do have a fractional component are called 'rational' numbers.
+They are often represented either as fractions or as numbers with a 'radix point'in them (often called a 'decimal point' in day-to-day maths)
+For example 0.5, 1.75, 42.42, 128.367 and 10000.00001 are all rational numbers.
+
+Normally computers represent these in what is called a 'floating point' format.
+The name 'floating point' refers to the fact that the radix point can change position within the number, i.e. the radix point can 'float' around.
+
+Another way to represent real numbers is what is called a 'fixed point' format.
+The name 'fixed point' refers to the fact that the radix point does not change position within the number, i.e. it is 'fixed' in place.
+This means that the range of numbers that can be represented by a fixed point is much more limited in terms of scale (how large or small the numbers can be).
+
+## Why Use Fixed Point Numbers?
+
+To allow the ability to move the radix point, the most common floating point formats are quite complicated and typically need special hardware or lots of complicated functions to implement them.
+
+Almost all modern CPUs have floating point capabilities built into them.
+However many CPUs intended for use in embedded systems do not have this capability built in because it is not always needed and it is often cheaper to leave it out.
+
+This is where fixed points come in.
+
+By limiting the format so that the radix point is fixed in place, the implementation of fixed point numbers becomes a lot simpler.
+
+In fact for the most basic operations, addition and subtraction, the operations are exactly the same as they are for integers. Some of the more complicated operations like multiplication and division are very similar and merely involve a bit of bit shifting to adjust the results.
+
+This means that even the simplest of CPUs can use fixed point numbers without any special hardware support. As long as they support integer and bit shifting operations, they can support fixed point numbers.
+
+## Why Aren't Fixed Point Numbers Used More Often?
+
+Fixed point numbers have fallen out of favour because modern CPUs tend to come with floating point support as standard. The wide range of support for floating points and the sheer dominance of the IEEE 754 floating point format means that for most cases using floating points to perform operations on real numbers is preferred.
+
+Even if a particular application could be sped up by switching to fixed points, there are many reasons why people tend not to choose this option, not least because of the lack of awareness of fixed point numbers and because of the lack of available fixed point libraries.
+
+Indeed, finding information about fixed point numbers can be quite a struggle.
+
+## How Do Fixed Points Work?
+
+Fixed point numbers are comprised of two parts, the integer part and the fractional part.
+Each part takes up a set number of bits. For example, a common format (often called `Q8.8`) has `8` bits for the integer part and 8 bits for the fractional part.
+
+The integer part stores the digits to the left of the radix point.
+This part behaves exactly like a regular integer and for all intents and purposes can be imagined as one. If you understand how computers represent integers, you already understand the integer part.
+
+For example, in the `Q8.8` format, there are `8` bits in the integer part, thus it is capable of holding `256` values. The values are `0` to `255` when unsigned or `-128` to `127` when signed and in two's complement format.
+
+The fractional part stores the digits to the right of the radix point.
+This part has special behaviour that can be a bit tricky to comprehend at first.
+The simplest way to think of it is as a fraction.
+
+For example in the `Q8.8` format, there are `8` bits for the fractional part, which means it is capable of holding `256` values.
+When thought of as a fraction, the fractional part is treated as an unsigned integer, meaning it can hold values of `0` to `255`. This integer is then imagined as the numerator of a fraction in which the denominator is the number of possible values that can be held, i.e. `256`.
+
+If the fractional part had the integer value of `64`, then its effective value can be represented as `64/256`, which would be equivalent to the decimal value of `0.25`.
+
+As a more in depth example, consider a Q8.8 value where the integer part is `5` and the fractional part has an integer value of `37`. This can be thought of as a mixed fraction `5 37/256`.
+Using a calculator to divide `37` by `256` you will find that `37/256 = 0.14453125`, which means that the number being represented is `5.14453125`.
+
+## Further Reading
+
+- Wikipedia's article about [Radix Points](https://en.wikipedia.org/wiki/Radix_point)
+- Wikipedia's article about [Integers](https://en.wikipedia.org/wiki/Integer)
+- Wikipedia's article about [Rational Numbers](https://en.wikipedia.org/wiki/Rational_number)
diff --git a/board-package-source/libraries/FixedPointsArduino/extras/Credits.md b/board-package-source/libraries/FixedPointsArduino/extras/Credits.md
new file mode 100644
index 0000000..5bf721f
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/extras/Credits.md
@@ -0,0 +1,14 @@
+## Main Credits:
+
+- [Pharap](https://github.com/Pharap) - main programmer
+
+## Extra special thanks to:
+
+- [bakagamedev](https://github.com/bakagamedev) - extra-handy duck
+- [filmote](https://github.com/filmote) - testing and debugging
+- [eried](https://github.com/eried) - testing and debugging
+
+## Special mentions:
+
+- crait
+- Bergasms
diff --git a/board-package-source/libraries/FixedPointsArduino/extras/Hello.txt b/board-package-source/libraries/FixedPointsArduino/extras/Hello.txt
new file mode 100644
index 0000000..189a7ee
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/extras/Hello.txt
@@ -0,0 +1,8 @@
+
+ /\___/\ ~
+ ( O . O ) \\
+ > ^ < //
+ ( \ / )//
+ u U U u
+
+ ヘãƒãƒ¼ エブリニャン!
diff --git a/board-package-source/libraries/FixedPointsArduino/extras/Important.txt b/board-package-source/libraries/FixedPointsArduino/extras/Important.txt
new file mode 100644
index 0000000..702d4cd
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/extras/Important.txt
@@ -0,0 +1,6 @@
+Do not attempt to use anything from the Details namespace.
+Everything in the Details namespace is merely an implementation detail which may be changed without notice,
+thus any attempt to use anything from the Details namespace may result in your own code breaking in future updates.
+
+To wrap the fixed point types in the FixedPoints namespace (e.g. in case of name conflicts):
+#define FIXED_POINTS_USE_NAMESPACE
\ No newline at end of file
diff --git a/board-package-source/libraries/FixedPointsArduino/keywords.txt b/board-package-source/libraries/FixedPointsArduino/keywords.txt
new file mode 100644
index 0000000..e713eaa
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/keywords.txt
@@ -0,0 +1,47 @@
+
+####################################
+# Syntax Colouring For FixedPoints #
+####################################
+
+####################################
+# Datatypes (KEYWORD1) #
+####################################
+
+SFixed KEYWORD1
+UFixed KEYWORD1
+UQ4x4 KEYWORD1
+UQ8x8 KEYWORD1
+UQ16x16 KEYWORD1
+UQ32x32 KEYWORD1
+UQ1x7 KEYWORD1
+UQ1x15 KEYWORD1
+UQ1x31 KEYWORD1
+UQ1x63 KEYWORD1
+SQ3x4 KEYWORD1
+SQ7x8 KEYWORD1
+SQ15x16 KEYWORD1
+SQ31x32 KEYWORD1
+SQ1x6 KEYWORD1
+SQ1x14 KEYWORD1
+SQ1x30 KEYWORD1
+SQ1x62 KEYWORD1
+
+####################################
+# Methods and Functions (KEYWORD2) #
+####################################
+
+getInternal KEYWORD2
+getInteger KEYWORD2
+getFraction KEYWORD2
+fromInternal KEYWORD2
+multiply KEYWORD2
+floorFixed KEYWORD2
+ceilFixed KEYWORD2
+roundFixed KEYWORD2
+truncFixed KEYWORD2
+signbitFixed KEYWORD2
+absFixed KEYWORD2
+copysignFixed KEYWORD2
+nextafterFixed KEYWORD2
+randomUFixed KEYWORD2
+randomSFixed KEYWORD2
diff --git a/board-package-source/libraries/FixedPointsArduino/library.json b/board-package-source/libraries/FixedPointsArduino/library.json
new file mode 100644
index 0000000..f99202f
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/library.json
@@ -0,0 +1,18 @@
+{
+ "name": "FixedPoints",
+ "description": "A templated header-only fixed point arithmetic library aimed at Arduino",
+ "keywords": "maths, fixed, point, fixed point, arithmetic",
+ "authors":
+ {
+ "name": "Pharap",
+ "url": "https://github.com/Pharap"
+ },
+ "repository":
+ {
+ "type": "git",
+ "url": "https://github.com/Pharap/FixedPointsArduino.git"
+ },
+ "license": "Apache-2.0",
+ "version": "1.0.7",
+ "frameworks": "arduino"
+}
\ No newline at end of file
diff --git a/board-package-source/libraries/FixedPointsArduino/library.properties b/board-package-source/libraries/FixedPointsArduino/library.properties
new file mode 100644
index 0000000..4d3ac0e
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/library.properties
@@ -0,0 +1,10 @@
+name=FixedPoints
+version=1.0.7
+author=Pharap
+maintainer=Pharap
+sentence=A template library for defining fixed point types of varying sizes.
+paragraph=The library is designed to be generic so it should be applicable to almost all size requirements and processor architectures.
+category=Data Processing
+url=https://github.com/Pharap/FixedPointsArduino
+architectures=*
+includes=FixedPoints.h, FixedPointsCommon.h
diff --git a/board-package-source/libraries/FixedPointsArduino/src/FixedPoints.h b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints.h
new file mode 100644
index 0000000..435b540
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints.h
@@ -0,0 +1,15 @@
+// Copyright 2017-2018 Pharap
+//
+// 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.
+
+#include "FixedPoints/FixedPoints.h"
\ No newline at end of file
diff --git a/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/Details.h b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/Details.h
new file mode 100644
index 0000000..6abedd0
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/Details.h
@@ -0,0 +1,205 @@
+// Copyright 2017-2018 Pharap
+//
+// 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.
+
+#pragma once
+
+#include
+#include
+#include
+
+#if defined(FIXED_POINTS_USE_NAMESPACE)
+#define FIXED_POINTS_NAMESPACE FixedPoints
+#define FIXED_POINTS_BEGIN_NAMESPACE namespace FIXED_POINTS_NAMESPACE\
+{
+#define FIXED_POINTS_END_NAMESPACE }
+#define FIXED_POINTS_DETAILS Details
+#else
+#define FIXED_POINTS_NAMESPACE
+#define FIXED_POINTS_BEGIN_NAMESPACE
+#define FIXED_POINTS_END_NAMESPACE
+#define FIXED_POINTS_DETAILS FixedPointsDetails
+#endif
+
+#if defined(ESP8266) || defined(ARDUINO_SAM_DUE)
+#define FIXED_POINTS_NO_RANDOM
+#endif
+
+// Pay no attention to the man behind the curtains
+
+FIXED_POINTS_BEGIN_NAMESPACE
+namespace FIXED_POINTS_DETAILS
+{
+ template< typename T >
+ struct BitSize
+ {
+ BitSize(void) = delete;
+ constexpr static const auto Value = sizeof(T) * CHAR_BIT;
+ };
+
+ template< bool Condition, typename TTrue, typename TFalse >
+ struct Conditional;
+
+ template< typename TTrue, typename TFalse >
+ struct Conditional< true, TTrue, TFalse > { using Type = TTrue; };
+
+ template< typename TTrue, typename TFalse >
+ struct Conditional< false, TTrue, TFalse > { using Type = TFalse; };
+
+ template< bool Condition, typename TTrue, typename TFalse >
+ using ConditionalT = typename Conditional::Type;
+
+ template< typename T, typename U >
+ using LargerType = ConditionalT<(BitSize::Value > BitSize::Value), T, U>;
+
+ template< typename T, typename U >
+ using StrictLargerType = ConditionalT< (BitSize::Value > BitSize::Value), T, ConditionalT< (BitSize::Value > BitSize::Value), U, void > >;
+
+ template< typename T, typename U >
+ using SmallerType = ConditionalT<(BitSize::Value < BitSize::Value), T, U>;
+
+ template< typename T, typename U >
+ using StrictSmallerType = ConditionalT< (BitSize::Value < BitSize::Value), T, ConditionalT< (BitSize::Value < BitSize::Value), U, void > >;
+
+ template< unsigned Bits, typename... Ts >
+ struct LeastTypeHelper;
+
+ template< unsigned Bits, typename T, typename... Ts >
+ struct LeastTypeHelper
+ {
+ LeastTypeHelper(void) = delete;
+ using Type = ConditionalT<(Bits <= BitSize::Value), T, typename LeastTypeHelper::Type>;
+ };
+
+ template< unsigned Bits >
+ struct LeastTypeHelper
+ {
+ LeastTypeHelper(void) = delete;
+ using Type = void;
+ };
+
+
+ template< unsigned Bits, typename... Ts >
+ using LeastType = typename LeastTypeHelper::Type;
+
+ template< unsigned Bits >
+ struct LeastUIntDef
+ {
+ static_assert(Bits <= BitSize::Value, "No type large enough");
+ LeastUIntDef(void) = delete;
+ using Type = LeastType;
+ };
+
+
+ template< unsigned Bits >
+ using LeastUInt = typename LeastUIntDef::Type;
+
+ template< unsigned Bits >
+ struct LeastIntDef
+ {
+ static_assert(Bits <= BitSize::Value, "No type large enough");
+ LeastIntDef(void) = delete;
+ using Type = LeastType;
+ };
+
+ template< unsigned Bits >
+ using LeastInt = typename LeastIntDef::Type;
+
+ template< unsigned Bits >
+ struct MsbMask
+ {
+ MsbMask(void) = delete;
+ constexpr const static LeastUInt Value = (1ull << (Bits - 1));
+ };
+
+ template< unsigned Bits >
+ struct IdentityMask
+ {
+ IdentityMask(void) = delete;
+ constexpr const static LeastUInt Value = 1 | (IdentityMask::Value << 1);
+ };
+
+ template<>
+ struct IdentityMask<0>
+ {
+ IdentityMask(void) = delete;
+ constexpr const static LeastUInt<0> Value = 0;
+ };
+
+#if !defined(FIXED_POINTS_NO_RANDOM)
+ template< typename T >
+ struct RandomHelper;
+
+ template<>
+ struct RandomHelper
+ {
+ static inline uint8_t Random() { return static_cast(random()); }
+ };
+
+ template<>
+ struct RandomHelper
+ {
+ static inline uint16_t Random() { return static_cast(random()); }
+ };
+
+ template<>
+ struct RandomHelper
+ {
+ static inline uint32_t Random() { return static_cast(random()); }
+ };
+
+ template<>
+ struct RandomHelper
+ {
+ static inline uint64_t Random() { return (static_cast(random()) << 32) | static_cast(random()); }
+ };
+
+ template<>
+ struct RandomHelper
+ {
+ static inline int8_t Random() { return static_cast(random()); }
+ };
+
+ template<>
+ struct RandomHelper
+ {
+ static inline int16_t Random() { return static_cast(random()); }
+ };
+
+ template<>
+ struct RandomHelper
+ {
+ static inline int32_t Random() { return static_cast(random()); }
+ };
+
+ template<>
+ struct RandomHelper
+ {
+ static inline int64_t Random() { return (static_cast(random()) << 32) | static_cast(random()); }
+ };
+#endif
+
+ ///////////////////////
+ // Here be dragons!! //
+ // //
+ // /\___/\ _ //
+ // ( O . O ) \\ //
+ // > ^ < // //
+ // ( \ / )// //
+ // u U U u //
+ // //
+ // Or cats?... //
+ // ~Mwrow~ //
+ ///////////////////////
+}
+FIXED_POINTS_END_NAMESPACE
diff --git a/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/FixedPoints.h b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/FixedPoints.h
new file mode 100644
index 0000000..8325e36
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/FixedPoints.h
@@ -0,0 +1,20 @@
+// Copyright 2017-2018 Pharap
+//
+// 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.
+
+#include "Details.h"
+
+#include "UFixed.h"
+#include "SFixed.h"
+
+#include "Utils.h"
\ No newline at end of file
diff --git a/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/SFixed.h b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/SFixed.h
new file mode 100644
index 0000000..da7ad3a
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/SFixed.h
@@ -0,0 +1,219 @@
+// Copyright 2017-2018 Pharap
+//
+// 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.
+
+#pragma once
+
+#include "Details.h"
+
+FIXED_POINTS_BEGIN_NAMESPACE
+
+//
+// Declaration
+//
+
+template< unsigned Integer, unsigned Fraction >
+class SFixed
+{
+public:
+ constexpr const static uintmax_t IntegerSize = Integer + 1;
+ constexpr const static uintmax_t FractionSize = Fraction;
+ constexpr const static uintmax_t LogicalSize = IntegerSize + FractionSize;
+ constexpr const static uintmax_t Scale = UINTMAX_C(1) << FractionSize;
+
+public:
+ static_assert(LogicalSize <= FIXED_POINTS_DETAILS::BitSize::Value, "Platform does not have a native type large enough for SFixed.");
+
+public:
+ using IntegerType = FIXED_POINTS_DETAILS::LeastInt;
+ using FractionType = FIXED_POINTS_DETAILS::LeastUInt;
+ using InternalType = FIXED_POINTS_DETAILS::LeastInt;
+
+ constexpr const static uintmax_t InternalSize = FIXED_POINTS_DETAILS::BitSize::Value;
+
+ using ShiftType = FIXED_POINTS_DETAILS::LeastUInt;
+ using MaskType = FIXED_POINTS_DETAILS::LeastUInt;
+
+public:
+ constexpr const static ShiftType IntegerShift = FractionSize;
+ constexpr const static ShiftType FractionShift = 0;
+
+ constexpr const static MaskType IntegerMask = FIXED_POINTS_DETAILS::IdentityMask::Value;
+ constexpr const static MaskType FractionMask = FIXED_POINTS_DETAILS::IdentityMask::Value;
+
+ constexpr const static MaskType IdentityMask = (IntegerMask << IntegerShift) | (FractionMask << FractionShift);
+
+ constexpr const static MaskType MidpointMask = FIXED_POINTS_DETAILS::MsbMask::Value;
+ constexpr const static MaskType LesserMidpointMask = MidpointMask - 1;
+
+protected:
+ class RawType
+ {
+ private:
+ const InternalType value;
+
+ public:
+ constexpr inline explicit RawType(const InternalType & value) : value(value) {}
+ constexpr inline explicit operator InternalType(void) const { return this->value; }
+ };
+
+protected:
+ InternalType value;
+
+protected:
+ constexpr SFixed(const RawType & value);
+
+public:
+ constexpr SFixed(void);
+ constexpr SFixed(const IntegerType & integer, const FractionType & fraction);
+ constexpr SFixed(const char & value);
+ constexpr SFixed(const unsigned char & value);
+ constexpr SFixed(const signed char & value);
+ constexpr SFixed(const unsigned short int & value);
+ constexpr SFixed(const signed short int & value);
+ constexpr SFixed(const unsigned int & value);
+ constexpr SFixed(const signed int & value);
+ constexpr SFixed(const unsigned long int & value);
+ constexpr SFixed(const signed long int & value);
+ constexpr SFixed(const unsigned long long int & value);
+ constexpr SFixed(const signed long long int & value);
+ constexpr SFixed(const double & value);
+ constexpr SFixed(const float & value);
+ constexpr SFixed(const long double & value);
+
+ constexpr InternalType getInternal(void) const;
+ constexpr IntegerType getInteger(void) const;
+ constexpr FractionType getFraction(void) const;
+
+ constexpr explicit operator IntegerType(void) const;
+ constexpr explicit operator float(void) const;
+ constexpr explicit operator double(void) const;
+ constexpr explicit operator long double(void) const;
+
+ template< unsigned IntegerOut, unsigned FractionOut >
+ constexpr explicit operator SFixed(void) const;
+
+ constexpr static SFixed fromInternal(const InternalType & value);
+
+ constexpr SFixed operator -(void) const;
+ SFixed & operator ++(void);
+ SFixed & operator --(void);
+ SFixed & operator +=(const SFixed & other);
+ SFixed & operator -=(const SFixed & other);
+ SFixed & operator *=(const SFixed & other);
+ SFixed & operator /=(const SFixed & other);
+
+public:
+ constexpr const static SFixed Epsilon = SFixed::fromInternal(1);
+ constexpr const static SFixed MinValue = SFixed::fromInternal(FIXED_POINTS_DETAILS::MsbMask::Value);
+ constexpr const static SFixed MaxValue = SFixed::fromInternal(~FIXED_POINTS_DETAILS::MsbMask::Value);
+
+ // 40 digits is probably enough for these
+ constexpr const static SFixed Pi = 3.1415926535897932384626433832795028841971;
+ constexpr const static SFixed E = 2.718281828459045235360287471352662497757;
+ constexpr const static SFixed Phi = 1.6180339887498948482045868343656381177203;
+ constexpr const static SFixed Tau = 6.2831853071795864769252867665590057683943;
+};
+
+
+//
+// Free functions
+//
+
+template< unsigned Integer, unsigned Fraction >
+constexpr SFixed multiply(const SFixed & left, const SFixed & right);
+
+//
+// Basic Logic Operations
+//
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator ==(const SFixed & left, const SFixed & right);
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator !=(const SFixed & left, const SFixed & right);
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator <(const SFixed & left, const SFixed & right);
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator >(const SFixed & left, const SFixed & right);
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator <=(const SFixed & left, const SFixed & right);
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator >=(const SFixed & left, const SFixed & right);
+
+//
+// Inter-size Logic Operations
+//
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator ==(const SFixed & left, const SFixed & right);
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator !=(const SFixed & left, const SFixed & right);
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator <(const SFixed & left, const SFixed & right);
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator >(const SFixed & left, const SFixed & right);
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator <=(const SFixed & left, const SFixed & right);
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator >=(const SFixed & left, const SFixed & right);
+
+//
+// Basic Arithmetic Operations
+//
+
+template< unsigned Integer, unsigned Fraction >
+constexpr SFixed operator +(const SFixed & left, const SFixed & right);
+
+template< unsigned Integer, unsigned Fraction >
+constexpr SFixed operator -(const SFixed & left, const SFixed & right);
+
+template< unsigned Integer, unsigned Fraction >
+constexpr SFixed operator *(const SFixed & left, const SFixed & right);
+
+template< unsigned Integer, unsigned Fraction >
+constexpr SFixed operator /(const SFixed & left, const SFixed & right);
+
+//
+// Inter-size Arithmetic Operations
+//
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr auto operator +(const SFixed & left, const SFixed & right)
+ -> FIXED_POINTS_DETAILS::LargerType< SFixed, SFixed >;
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr auto operator -(const SFixed & left, const SFixed & right)
+ -> FIXED_POINTS_DETAILS::LargerType< SFixed, SFixed >;
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr auto operator *(const SFixed & left, const SFixed & right)
+ -> FIXED_POINTS_DETAILS::LargerType< SFixed, SFixed >;
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+inline constexpr auto operator /(const SFixed & left, const SFixed & right)
+ -> FIXED_POINTS_DETAILS::LargerType< SFixed, SFixed >;
+
+FIXED_POINTS_END_NAMESPACE
+
+#include "SFixedMemberFunctions.h"
+#include "SFixedFreeFunctions.h"
\ No newline at end of file
diff --git a/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/SFixedFreeFunctions.h b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/SFixedFreeFunctions.h
new file mode 100644
index 0000000..1fe5047
--- /dev/null
+++ b/board-package-source/libraries/FixedPointsArduino/src/FixedPoints/SFixedFreeFunctions.h
@@ -0,0 +1,323 @@
+// Copyright 2017-2018 Pharap
+//
+// 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.
+
+FIXED_POINTS_BEGIN_NAMESPACE
+
+//
+// multiply
+//
+
+template< unsigned Integer, unsigned Fraction >
+constexpr SFixed multiply(const SFixed & left, const SFixed & right)
+{
+ static_assert(((Integer + 1) * 2 + Fraction * 2) <= FIXED_POINTS_DETAILS::BitSize::Value, "Multiplication cannot be performed, the result type would be too large");
+
+ using ResultType = SFixed;
+ using InternalType = typename ResultType::InternalType;
+ return ResultType::fromInternal(static_cast(static_cast(left.getInternal()) * static_cast(right.getInternal())));
+}
+
+//
+// Basic Logic Operations
+//
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator ==(const SFixed & left, const SFixed & right)
+{
+ return (left.getInternal() == right.getInternal());
+}
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator !=(const SFixed & left, const SFixed & right)
+{
+ return (left.getInternal() != right.getInternal());
+}
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator <(const SFixed & left, const SFixed & right)
+{
+ return (left.getInternal() < right.getInternal());
+}
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator >(const SFixed & left, const SFixed & right)
+{
+ return (left.getInternal() > right.getInternal());
+}
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator <=(const SFixed & left, const SFixed & right)
+{
+ return (left.getInternal() <= right.getInternal());
+}
+
+template< unsigned Integer, unsigned Fraction >
+constexpr bool operator >=(const SFixed & left, const SFixed & right)
+{
+ return (left.getInternal() >= right.getInternal());
+}
+
+//
+// Inter-size Logic Operations
+//
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator ==(const SFixed & left, const SFixed & right)
+{
+ using LeftType = SFixed;
+ using RightType = SFixed;
+
+ static_assert(LeftType::InternalSize != RightType::InternalSize, "operator == has ambiguous result");
+
+ using CompareType = FIXED_POINTS_DETAILS::LargerType;
+
+ return (static_cast(left) == static_cast(right));
+}
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator !=(const SFixed & left, const SFixed & right)
+{
+ using LeftType = SFixed;
+ using RightType = SFixed;
+
+ static_assert(LeftType::InternalSize != RightType::InternalSize, "operator != has ambiguous result");
+
+ using CompareType = FIXED_POINTS_DETAILS::LargerType;
+
+ return (static_cast(left) != static_cast(right));
+}
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator <(const SFixed & left, const SFixed & right)
+{
+ using LeftType = SFixed;
+ using RightType = SFixed;
+
+ static_assert(LeftType::InternalSize != RightType::InternalSize, "operator < has ambiguous result");
+
+ using CompareType = FIXED_POINTS_DETAILS::LargerType;
+
+ return (static_cast(left) < static_cast(right));
+}
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator >(const SFixed & left, const SFixed & right)
+{
+ using LeftType = SFixed;
+ using RightType = SFixed;
+
+ static_assert(LeftType::InternalSize != RightType::InternalSize, "operator > has ambiguous result");
+
+ using CompareType = FIXED_POINTS_DETAILS::LargerType;
+
+ return (static_cast(left) > static_cast(right));
+}
+
+template< unsigned IntegerLeft, unsigned FractionLeft, unsigned IntegerRight, unsigned FractionRight >
+constexpr bool operator <=(const SFixed & left, const SFixed & right)
+{
+ using LeftType = SFixed;
+ using RightType = SFixed