Merge trunk @ 5469

This commit is contained in:
Garth Corral 2015-03-03 08:12:41 -08:00
commit 9dce5b6ad9
185 changed files with 18489 additions and 1714 deletions

View File

@ -569,6 +569,12 @@ set( BMAPS_BIG
wizard_add_fplib_icon wizard_add_fplib_icon
) )
set( BMAPS_OTHER
tune_diff_pair_length_legend
tune_diff_pair_skew_legend
tune_single_track_length_legend
)
# @todo keep these in sync with .bzrignore # @todo keep these in sync with .bzrignore
set( TMP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tmp" ) set( TMP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tmp" )
@ -742,5 +748,10 @@ foreach( bmn ${BMAPS_BIG} )
list( APPEND CPP_LIST cpp_48/${bmn}.cpp ) list( APPEND CPP_LIST cpp_48/${bmn}.cpp )
endforeach() endforeach()
foreach( bmn ${BMAPS_OTHER} )
#message( "library add cpp_other/${bmn}.cpp" )
list( APPEND CPP_LIST cpp_other/${bmn}.cpp )
endforeach()
#add_library( bitmaps SHARED ${CPP_LIST} ) #add_library( bitmaps SHARED ${CPP_LIST} )
add_library( bitmaps STATIC ${CPP_LIST} ) add_library( bitmaps STATIC ${CPP_LIST} )

View File

@ -0,0 +1,871 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0xbd, 0x08, 0x02, 0x00, 0x00, 0x01, 0x62, 0xd4, 0xc7,
0x28, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x1e, 0xc2, 0x00, 0x00, 0x1e,
0xc2, 0x01, 0x6e, 0xd0, 0x75, 0x3e, 0x00, 0x00, 0x00, 0x09, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f,
0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x89, 0x2a, 0x8d, 0x06, 0x00, 0x00, 0x20, 0x00, 0x49,
0x44, 0x41, 0x54, 0x78, 0x9c, 0xec, 0x5d, 0x89, 0x5f, 0x13, 0x47, 0xdf, 0xf7, 0xbf, 0x78, 0x9f,
0xb7, 0x87, 0x56, 0x6b, 0xa5, 0x9e, 0xd5, 0x5a, 0xab, 0x4f, 0xb5, 0x6a, 0xd5, 0xbe, 0xad, 0x3e,
0x56, 0xad, 0xad, 0x55, 0x6b, 0xb5, 0x7d, 0xb4, 0x15, 0x10, 0xf0, 0x40, 0x0e, 0x45, 0xee, 0x53,
0xb9, 0x54, 0x3c, 0x50, 0xf1, 0x00, 0xc5, 0x03, 0x39, 0xaa, 0x56, 0x2e, 0x41, 0x45, 0x2b, 0x2a,
0x2a, 0xa2, 0x45, 0x41, 0x39, 0xc2, 0x4d, 0x20, 0x1c, 0xe1, 0x0a, 0x10, 0x92, 0x90, 0x77, 0xc2,
0x84, 0xc9, 0x64, 0xef, 0xdd, 0x84, 0x24, 0x46, 0xbe, 0x9f, 0xf9, 0x2c, 0xcb, 0xec, 0xec, 0x6f,
0xbe, 0xfb, 0xcd, 0xec, 0xec, 0xdc, 0x33, 0x42, 0x6d, 0x0c, 0x54, 0x36, 0xc9, 0xe8, 0x2e, 0x8d,
0x80, 0x7f, 0x9a, 0x9b, 0x9b, 0x04, 0xd8, 0xf5, 0x89, 0x7b, 0xba, 0xd9, 0xe3, 0xaf, 0x47, 0x65,
0xad, 0x5d, 0xbd, 0x0a, 0x70, 0x02, 0x1c, 0x6d, 0x04, 0x02, 0x10, 0x79, 0xf5, 0xd5, 0x9e, 0x73,
0xff, 0x10, 0x3c, 0xc9, 0x71, 0x08, 0x8f, 0x00, 0xda, 0x2a, 0xf9, 0xe8, 0xfd, 0xca, 0x65, 0xdf,
0x34, 0x1f, 0x3f, 0x04, 0x4e, 0xc0, 0xbf, 0xee, 0x31, 0x8f, 0x8d, 0x16, 0x81, 0x63, 0x58, 0x0e,
0x8c, 0x00, 0x1c, 0x3b, 0x3a, 0x3a, 0xfa, 0x15, 0x0a, 0x69, 0x72, 0x02, 0x38, 0x77, 0x39, 0x94,
0x6b, 0x9c, 0x08, 0xbc, 0xe3, 0x0a, 0xc0, 0xb1, 0x6a, 0xf5, 0x0a, 0xe4, 0xd3, 0x18, 0xe2, 0x07,
0x8e, 0xf6, 0x81, 0x59, 0xb4, 0x11, 0xf4, 0xf7, 0xf7, 0x73, 0x8f, 0xc0, 0x4b, 0x40, 0x04, 0x32,
0x99, 0x36, 0xb5, 0x25, 0x27, 0x5e, 0xae, 0xad, 0xad, 0x61, 0x8e, 0xc0, 0x3b, 0xee, 0xe9, 0x40,
0x04, 0xcb, 0x79, 0x44, 0xc0, 0x0b, 0x14, 0x11, 0xec, 0x1d, 0xb2, 0x08, 0xe6, 0xcd, 0x9e, 0x65,
0xfc, 0x08, 0xbc, 0x60, 0x04, 0x3f, 0x2d, 0x1f, 0xf5, 0xce, 0xff, 0x00, 0x07, 0xce, 0x2b, 0x16,
0x7f, 0xa5, 0x26, 0xbd, 0x0a, 0x9a, 0x08, 0x36, 0xfd, 0xba, 0x1e, 0x86, 0x80, 0xb0, 0xf3, 0xcd,
0x80, 0x6e, 0x4b, 0x60, 0x56, 0x5e, 0x69, 0x2b, 0x6b, 0x04, 0xe0, 0x08, 0x6f, 0x87, 0x49, 0x36,
0xf0, 0xc2, 0x73, 0x10, 0x87, 0xad, 0x57, 0x9a, 0xad, 0x77, 0x9a, 0x6b, 0xf4, 0x43, 0x96, 0x27,
0x60, 0xc8, 0x03, 0xbc, 0x62, 0x61, 0x04, 0xcb, 0xc0, 0x31, 0x24, 0xd0, 0x1f, 0x1c, 0x95, 0xb2,
0xae, 0xf2, 0x59, 0x53, 0x09, 0xc1, 0xb4, 0x11, 0xd8, 0xfe, 0xbe, 0x11, 0x79, 0xd5, 0xbb, 0x38,
0xd5, 0xbb, 0x6c, 0xad, 0x77, 0xdd, 0xd6, 0x18, 0xe2, 0x8b, 0x3c, 0xc9, 0x71, 0xe0, 0x11, 0x20,
0x28, 0x9a, 0x9b, 0xc0, 0x73, 0x94, 0xcf, 0xf9, 0xac, 0xc1, 0x67, 0x97, 0xd8, 0xdb, 0xbd, 0x21,
0xc0, 0x93, 0xe5, 0x09, 0x6a, 0xfe, 0xfb, 0x33, 0x7c, 0x70, 0x4d, 0x1c, 0x9e, 0xa9, 0xac, 0x11,
0x90, 0xc1, 0xe9, 0x47, 0x86, 0x71, 0x10, 0x1e, 0xc2, 0x98, 0x11, 0x88, 0xbe, 0xfa, 0x37, 0x38,
0xb6, 0x74, 0xca, 0xab, 0x9b, 0xbb, 0x87, 0x24, 0x02, 0x80, 0xe6, 0xe3, 0x87, 0xc1, 0xd1, 0xe5,
0xf0, 0x7d, 0x62, 0x04, 0xab, 0xbe, 0x13, 0x12, 0xc1, 0x94, 0x09, 0x36, 0x04, 0x1f, 0x49, 0x78,
0x30, 0x38, 0x3a, 0xee, 0xbb, 0x6d, 0x9c, 0x08, 0xc8, 0x90, 0x84, 0x07, 0x81, 0xa3, 0x03, 0x39,
0x02, 0x63, 0x49, 0x44, 0xf8, 0x9d, 0xe1, 0x09, 0xc8, 0x7d, 0xbb, 0x72, 0xef, 0x18, 0x33, 0x02,
0x68, 0x1a, 0xb8, 0x6b, 0x4f, 0xc4, 0xb8, 0x27, 0x7b, 0x04, 0x78, 0x56, 0xc1, 0x1a, 0x07, 0xfa,
0x57, 0x2e, 0x2a, 0x63, 0x8f, 0xa0, 0x42, 0x24, 0x4a, 0x4f, 0x4b, 0xe3, 0xe8, 0x92, 0x76, 0x6e,
0x4b, 0xdc, 0xe1, 0x04, 0x1c, 0x17, 0xee, 0x7a, 0x4f, 0x60, 0x08, 0x8a, 0xeb, 0x3a, 0x98, 0xac,
0x73, 0x11, 0x87, 0x12, 0xe0, 0x97, 0xd8, 0x1a, 0x79, 0x47, 0xd5, 0xdf, 0x7f, 0x24, 0xad, 0x14,
0x9c, 0x93, 0x3f, 0xb7, 0x86, 0x16, 0x58, 0x98, 0x7d, 0x04, 0x5a, 0x0f, 0x4a, 0x2a, 0x82, 0x27,
0xe0, 0x37, 0xe8, 0xca, 0xcb, 0x05, 0xc7, 0x96, 0x53, 0xd1, 0xe4, 0x08, 0x04, 0x5a, 0x47, 0x25,
0x2d, 0x70, 0xf4, 0xf5, 0xf2, 0x54, 0xd3, 0x64, 0x82, 0x46, 0xb0, 0x0e, 0x31, 0x54, 0xd6, 0xe1,
0xc7, 0x8b, 0xc5, 0xfa, 0x98, 0xf7, 0xdf, 0xf9, 0x71, 0x05, 0x4b, 0x26, 0x45, 0x69, 0x1d, 0xe2,
0xcd, 0x54, 0x66, 0xc8, 0xad, 0xcf, 0x9e, 0xf9, 0x19, 0xad, 0x75, 0xca, 0x32, 0x0f, 0x70, 0xbe,
0xf1, 0xcf, 0xb8, 0x58, 0x5f, 0xb7, 0xe6, 0x27, 0x70, 0x94, 0x26, 0xc4, 0x2b, 0x7b, 0xba, 0xe1,
0x25, 0xf0, 0xf5, 0x07, 0x65, 0x1e, 0xe0, 0x34, 0xd6, 0xb3, 0xb3, 0x6e, 0xd0, 0x59, 0xd9, 0x7d,
0xea, 0x09, 0x65, 0x81, 0x87, 0xac, 0x0c, 0xf9, 0x5f, 0x0a, 0xee, 0xf5, 0x3b, 0x1d, 0x35, 0x05,
0x1e, 0x57, 0x4d, 0x81, 0xa7, 0xfb, 0x59, 0x3e, 0x6e, 0x8b, 0xd5, 0x3a, 0xf4, 0x01, 0xae, 0xde,
0x7d, 0x07, 0x2c, 0xf0, 0x30, 0xe9, 0xae, 0xea, 0xed, 0x05, 0x41, 0x3b, 0x6f, 0x67, 0x91, 0x23,
0xa0, 0xb3, 0x4e, 0xc1, 0x9d, 0x19, 0xba, 0xcf, 0xd3, 0x9e, 0xeb, 0xc6, 0xb7, 0xae, 0xa6, 0x4a,
0x6d, 0x42, 0xac, 0x47, 0x1f, 0x39, 0x3c, 0x54, 0xd6, 0xed, 0xff, 0xd8, 0x84, 0xce, 0x93, 0x93,
0x12, 0x8d, 0xcf, 0x9d, 0x0e, 0xa6, 0xb0, 0x1e, 0x98, 0x58, 0x94, 0x74, 0xbf, 0xc6, 0xf8, 0xd6,
0x01, 0xca, 0x66, 0x4c, 0x01, 0x47, 0xb7, 0xa8, 0x7b, 0x78, 0x85, 0xa2, 0x8c, 0x54, 0x5f, 0xa0,
0xb0, 0xce, 0xb1, 0x48, 0x53, 0xbd, 0x76, 0x25, 0xfa, 0x57, 0xd9, 0xd9, 0xc1, 0xa9, 0xcc, 0xc4,
0xbd, 0x3c, 0x93, 0x9e, 0x7a, 0x1d, 0x95, 0x67, 0x24, 0x61, 0x81, 0xac, 0xa6, 0x35, 0xd6, 0x8b,
0x8b, 0x8a, 0xfe, 0x4c, 0x49, 0x36, 0x97, 0x0b, 0x8d, 0x8c, 0x81, 0x0e, 0x0a, 0x0e, 0x9d, 0xff,
0xc5, 0x42, 0x2e, 0xd4, 0xd5, 0xf8, 0xef, 0x8a, 0xaa, 0xa8, 0x26, 0x80, 0x83, 0x77, 0x2a, 0x60,
0xe9, 0x10, 0x92, 0x4d, 0x79, 0x55, 0xa9, 0xea, 0x87, 0x8f, 0x91, 0x2f, 0x92, 0x32, 0xdb, 0x31,
0x42, 0x59, 0x92, 0x2f, 0x08, 0x15, 0x65, 0xd1, 0xc2, 0x39, 0x30, 0xef, 0x86, 0xae, 0xed, 0x5a,
0x32, 0x1e, 0x12, 0x7c, 0x86, 0x18, 0x4c, 0x99, 0x9a, 0x3d, 0x4e, 0xbd, 0xc1, 0xdf, 0x13, 0xd0,
0x45, 0x5f, 0x2a, 0x08, 0xf8, 0x0c, 0x78, 0xf8, 0x33, 0x37, 0x2b, 0xe8, 0xac, 0x99, 0x81, 0x3d,
0x6c, 0xd2, 0x52, 0x0f, 0x10, 0x85, 0x6d, 0x1e, 0x6a, 0xfd, 0x7c, 0x03, 0xf8, 0x37, 0xee, 0xf5,
0x47, 0xe1, 0xb7, 0xe8, 0xb7, 0xe3, 0xe0, 0xa0, 0x65, 0x9f, 0x92, 0x9c, 0x48, 0x77, 0xc9, 0x10,
0x10, 0xd9, 0x0f, 0x36, 0xcb, 0x01, 0xf6, 0xa8, 0xa1, 0x4d, 0xc3, 0x7e, 0xa0, 0x05, 0x0d, 0x86,
0xb7, 0xe7, 0xcb, 0x7e, 0xb7, 0x9b, 0x0b, 0x38, 0x7e, 0x32, 0xf1, 0x63, 0x63, 0x91, 0x46, 0xa0,
0x63, 0x0f, 0x0b, 0xd5, 0xc8, 0xdf, 0x20, 0xf6, 0x08, 0xf9, 0x4f, 0xb4, 0xcd, 0xb8, 0xaf, 0x5f,
0x15, 0x6f, 0x77, 0x72, 0xb0, 0x19, 0x33, 0x6a, 0xab, 0x83, 0xbd, 0x60, 0xea, 0x90, 0x0d, 0x6c,
0xe9, 0x53, 0x6b, 0xd9, 0x2f, 0x27, 0x87, 0x19, 0x48, 0x39, 0xc6, 0x60, 0x6f, 0x74, 0x58, 0x17,
0x7b, 0xac, 0x29, 0x14, 0x9e, 0x44, 0x1d, 0x88, 0x04, 0xfe, 0x0d, 0xfe, 0x7b, 0x50, 0x78, 0x7b,
0xff, 0x4c, 0x3a, 0x6b, 0x66, 0xc9, 0x73, 0xf4, 0xd8, 0x93, 0xc3, 0xe0, 0x99, 0x66, 0x73, 0x87,
0x1c, 0xdc, 0x62, 0xe7, 0x43, 0x9d, 0xeb, 0xeb, 0x7d, 0x6b, 0x3f, 0x78, 0xf7, 0x5f, 0x94, 0xf1,
0xb1, 0x3a, 0xbc, 0x65, 0x50, 0x18, 0x7b, 0x10, 0x7b, 0xfc, 0xd9, 0x38, 0xca, 0x07, 0x00, 0x68,
0xed, 0x92, 0x83, 0xcf, 0x16, 0x21, 0x52, 0xd7, 0x23, 0x0f, 0x74, 0xec, 0x55, 0x2a, 0x15, 0x47,
0x06, 0x64, 0x04, 0x5e, 0x2a, 0xa4, 0x6b, 0x6a, 0xa6, 0x60, 0x1f, 0x8b, 0xb3, 0xa7, 0x6d, 0xdb,
0x6b, 0x39, 0x73, 0x02, 0x3e, 0x43, 0xcf, 0xeb, 0x62, 0xba, 0x30, 0x5a, 0xf6, 0x4f, 0x1e, 0x3f,
0xa2, 0x2b, 0xe7, 0xe0, 0x9f, 0x71, 0xb2, 0x2b, 0x9d, 0x34, 0x16, 0x85, 0x54, 0x28, 0x55, 0xac,
0xcf, 0xc0, 0x9d, 0x3d, 0x82, 0x34, 0xf1, 0x42, 0xc9, 0xb8, 0x91, 0xe4, 0xa8, 0xab, 0x7f, 0x59,
0x65, 0x84, 0x74, 0xaf, 0x55, 0xa8, 0xf8, 0x05, 0xfc, 0xd7, 0x23, 0xee, 0x19, 0xc3, 0x03, 0x08,
0x60, 0xcf, 0x00, 0xa3, 0xbd, 0xb5, 0x80, 0x8a, 0x68, 0xd1, 0x1c, 0x78, 0xbe, 0xed, 0xe0, 0x3d,
0xba, 0x07, 0x30, 0x11, 0xfb, 0x2f, 0x3e, 0x9f, 0xce, 0xcb, 0x90, 0xa2, 0xa5, 0x19, 0xb0, 0x51,
0x48, 0x1a, 0xe1, 0xbf, 0x80, 0x65, 0x40, 0x62, 0x11, 0x39, 0x18, 0x91, 0x3d, 0x5b, 0xa3, 0x39,
0x33, 0xa8, 0xd9, 0x8f, 0x1b, 0x3d, 0x72, 0xc3, 0xba, 0x35, 0xf0, 0x35, 0x58, 0x30, 0x77, 0xf6,
0x57, 0x5f, 0x7e, 0xa1, 0x1e, 0x68, 0xc8, 0x1f, 0x3f, 0x76, 0x0c, 0x83, 0x2d, 0x4d, 0x9d, 0x28,
0x22, 0x18, 0xb1, 0x74, 0x0c, 0xbd, 0x4d, 0x0e, 0x63, 0x0a, 0xf6, 0xc2, 0xa0, 0x61, 0x1f, 0xae,
0x63, 0x8f, 0xf7, 0x1e, 0x20, 0x58, 0x34, 0xfb, 0x7a, 0x67, 0x47, 0x78, 0x4e, 0x97, 0xf9, 0x00,
0xcf, 0x88, 0x6b, 0x25, 0x28, 0xbc, 0xd8, 0x63, 0xa7, 0x21, 0x31, 0x1a, 0x93, 0xbd, 0x78, 0x8f,
0x2b, 0xa1, 0x62, 0xa1, 0xf9, 0x4c, 0xfa, 0x65, 0x9c, 0xb9, 0x29, 0x0a, 0x4c, 0x2c, 0x82, 0xff,
0x1e, 0xbc, 0xae, 0xa5, 0x5e, 0xb9, 0xe2, 0x5b, 0xee, 0xbd, 0x09, 0x74, 0x30, 0x72, 0x49, 0xa1,
0x31, 0xd0, 0x1b, 0xaf, 0x5b, 0xd0, 0x81, 0xf0, 0x29, 0x15, 0x0c, 0xbd, 0x92, 0x42, 0x79, 0x39,
0x7b, 0xaf, 0x0d, 0x17, 0x80, 0xef, 0x08, 0xe4, 0x57, 0xf3, 0xdb, 0xda, 0xee, 0xc2, 0xe7, 0xea,
0x81, 0xa6, 0xc4, 0xe6, 0x13, 0x87, 0xd1, 0x87, 0xc6, 0x28, 0xb1, 0xa8, 0x4d, 0x50, 0x4a, 0xeb,
0xef, 0x93, 0xf7, 0x96, 0xbc, 0xea, 0xab, 0xab, 0x1d, 0x0a, 0xe3, 0x66, 0x68, 0x53, 0x20, 0x43,
0x2c, 0xed, 0x79, 0x51, 0xd3, 0x01, 0x0a, 0x1a, 0xbc, 0xee, 0x1a, 0x81, 0x5a, 0x85, 0x2e, 0x5d,
0xbc, 0x60, 0xe2, 0x76, 0xa8, 0xa8, 0x98, 0x78, 0xd8, 0x0e, 0xe5, 0xe0, 0xf9, 0xa7, 0x80, 0xe2,
0xaa, 0x5e, 0x8a, 0xe7, 0xa7, 0x95, 0x61, 0x40, 0x44, 0x83, 0x12, 0x8b, 0x3a, 0x7a, 0x14, 0xfd,
0xfd, 0xfd, 0xaf, 0xea, 0x3a, 0xdc, 0x8e, 0xe5, 0x41, 0x4f, 0x07, 0xbf, 0x74, 0x56, 0x0b, 0xba,
0x2e, 0x59, 0xe0, 0x40, 0x01, 0x73, 0x88, 0x09, 0x6b, 0x01, 0xf9, 0x3d, 0x2e, 0xa3, 0x1e, 0x1a,
0xb2, 0xfb, 0xe4, 0x13, 0x2e, 0xc5, 0x6c, 0x9d, 0xea, 0xf7, 0xef, 0xdd, 0x33, 0x26, 0x3b, 0x7a,
0x40, 0x5a, 0xbd, 0x7d, 0x4c, 0x29, 0x7b, 0xdf, 0x95, 0xd7, 0x20, 0xcc, 0xae, 0xa3, 0xf7, 0x19,
0xc2, 0x98, 0x9a, 0x3a, 0x1c, 0x30, 0x87, 0xfe, 0xed, 0xba, 0xff, 0x37, 0x5e, 0x46, 0x2f, 0x9b,
0x31, 0x19, 0x5d, 0xda, 0xbe, 0xff, 0x2e, 0xb3, 0xf0, 0xa6, 0xa6, 0x3e, 0xf0, 0xad, 0xd5, 0xd6,
0xa9, 0xdb, 0x52, 0x12, 0x20, 0xe3, 0xa6, 0xc3, 0x91, 0x5d, 0x0f, 0xfe, 0x46, 0xdf, 0x04, 0x3c,
0xb0, 0xd3, 0xbe, 0x5b, 0x74, 0xa6, 0x4c, 0x4a, 0x5d, 0xda, 0xd5, 0x07, 0xd8, 0x14, 0xd5, 0x6a,
0x3b, 0xfb, 0x09, 0x44, 0xdb, 0xa4, 0x52, 0x65, 0x7b, 0xdb, 0x40, 0xaf, 0xd9, 0x76, 0xe8, 0x03,
0xab, 0xad, 0x74, 0xd6, 0x4c, 0x4a, 0x7d, 0xdf, 0x95, 0x57, 0x88, 0x4a, 0xf7, 0xd3, 0xc7, 0x80,
0xa5, 0xaa, 0x5b, 0x33, 0xb4, 0xae, 0xb7, 0xa7, 0x47, 0x22, 0x91, 0x40, 0x7f, 0xfc, 0x79, 0x02,
0x2e, 0xbf, 0xb4, 0x14, 0xea, 0x7e, 0x17, 0x0b, 0x11, 0x15, 0xc9, 0xfe, 0x7d, 0x88, 0xa2, 0x97,
0xc7, 0xae, 0x0f, 0x47, 0xbe, 0x0b, 0xcf, 0xeb, 0xb6, 0xd9, 0x21, 0xff, 0xe3, 0x37, 0xca, 0x2d,
0x93, 0xfa, 0x5e, 0xca, 0x22, 0x4d, 0xdd, 0xf6, 0x2d, 0xc8, 0xff, 0x84, 0xe5, 0x53, 0x3f, 0x7a,
0x28, 0xaa, 0xb5, 0xa5, 0x05, 0x9e, 0x1b, 0x4a, 0x1d, 0xfc, 0x7c, 0x43, 0xf1, 0x71, 0x65, 0xa0,
0x8e, 0xc2, 0x18, 0x4a, 0x3d, 0x74, 0x6f, 0xf0, 0xdd, 0x9c, 0x1c, 0x23, 0x92, 0x86, 0xe0, 0x46,
0xdd, 0x5e, 0x38, 0xf5, 0xaa, 0xca, 0x4a, 0xd9, 0x00, 0xf6, 0xec, 0x72, 0x73, 0x77, 0x71, 0xfe,
0x61, 0xf9, 0xd2, 0x69, 0x93, 0x27, 0x28, 0x14, 0x8a, 0x98, 0xe3, 0xd1, 0xe0, 0x64, 0x28, 0xa8,
0xe3, 0x30, 0x88, 0x3a, 0x4a, 0x2a, 0xe0, 0x64, 0x7f, 0x78, 0xd8, 0xfa, 0x9f, 0x57, 0x03, 0xc6,
0x53, 0x27, 0x8d, 0x77, 0xb0, 0xdb, 0x0c, 0x3c, 0x95, 0x4a, 0xa5, 0xe5, 0x52, 0x1f, 0x3a, 0xd0,
0x65, 0x8e, 0x38, 0x86, 0xa9, 0x1b, 0x1b, 0x74, 0xd4, 0x9d, 0xb7, 0x3a, 0xa9, 0x07, 0x47, 0xc5,
0xeb, 0x51, 0xcf, 0xb2, 0x60, 0xea, 0x79, 0x0f, 0x1f, 0x10, 0xba, 0x40, 0xc4, 0x1e, 0x3b, 0x11,
0xf5, 0xf8, 0xbb, 0x55, 0x96, 0x4b, 0x1d, 0x9c, 0x38, 0xda, 0xdb, 0x22, 0xea, 0x40, 0xf8, 0xa6,
0xa8, 0x70, 0x42, 0xe1, 0x31, 0xf4, 0xca, 0x2b, 0x4a, 0x6b, 0xe6, 0xa7, 0x4e, 0x80, 0x76, 0x1c,
0xd5, 0x4d, 0x6d, 0xc1, 0x18, 0xd6, 0x4b, 0xe4, 0x0a, 0x8a, 0x7a, 0x89, 0x5e, 0x05, 0x8f, 0xfc,
0x05, 0x05, 0xb5, 0x74, 0x7c, 0xe4, 0x9a, 0xd6, 0xf9, 0x65, 0x80, 0x7a, 0x00, 0x9d, 0x18, 0x02,
0xa8, 0x4f, 0x9f, 0x32, 0xc9, 0xd5, 0x79, 0x3b, 0x0a, 0x46, 0x2e, 0xb5, 0x43, 0xa7, 0x19, 0xf2,
0x3f, 0x30, 0xea, 0x5f, 0x37, 0x08, 0x0e, 0x60, 0x7f, 0x44, 0x18, 0xe5, 0x97, 0x5f, 0xa1, 0xec,
0x67, 0xed, 0x6f, 0x0a, 0xbe, 0x44, 0x9c, 0xc8, 0xc3, 0x97, 0xfa, 0x36, 0xc7, 0x2d, 0x63, 0x47,
0xbd, 0x87, 0x82, 0x35, 0x1f, 0x3d, 0x00, 0x2e, 0xb5, 0x9e, 0xd7, 0xf5, 0x40, 0x85, 0x24, 0x14,
0x92, 0xe3, 0xd5, 0x25, 0x98, 0xf1, 0x63, 0x47, 0x73, 0x64, 0x80, 0x70, 0x7e, 0xe0, 0x35, 0x82,
0xee, 0x6a, 0x1e, 0x7b, 0x3b, 0x11, 0x1d, 0x75, 0xa8, 0x9a, 0xdb, 0xce, 0x1d, 0x28, 0x24, 0x14,
0x5e, 0x56, 0xf0, 0x84, 0xc1, 0x9a, 0x8e, 0xba, 0x87, 0xbb, 0x2b, 0x5f, 0xea, 0x10, 0xdd, 0x72,
0x25, 0x64, 0xef, 0x1c, 0xc9, 0x32, 0xe4, 0xdc, 0x9f, 0x43, 0x5a, 0x47, 0xd0, 0x36, 0x00, 0x6e,
0xfa, 0x85, 0x2e, 0x80, 0x6e, 0x52, 0x19, 0x65, 0x82, 0x01, 0xb5, 0x98, 0x81, 0x79, 0x1d, 0x4e,
0x68, 0xb0, 0x23, 0x70, 0x62, 0x4f, 0xd7, 0xe6, 0xe8, 0x83, 0x84, 0x90, 0xee, 0x31, 0x8f, 0x35,
0xf5, 0x4e, 0xaf, 0x54, 0xb2, 0x11, 0x04, 0x2e, 0xaf, 0x29, 0x8e, 0x8a, 0xef, 0xbe, 0xd6, 0xf5,
0x8a, 0xad, 0x5f, 0xd5, 0xe0, 0xb3, 0x0b, 0x3a, 0xb1, 0xb7, 0xbb, 0x6e, 0xd0, 0x24, 0x7c, 0x47,
0xe1, 0x74, 0x1e, 0x02, 0x75, 0xe6, 0x2e, 0xbe, 0xd6, 0xf3, 0xb1, 0x28, 0xb0, 0xff, 0xb9, 0x02,
0xc0, 0xcc, 0xf7, 0xd2, 0x0b, 0x63, 0x51, 0x87, 0xa8, 0xf9, 0x6d, 0x2d, 0x65, 0xd4, 0xba, 0x04,
0x83, 0x06, 0x3f, 0x70, 0x44, 0x6b, 0xfc, 0x19, 0x72, 0xfb, 0x2d, 0xa8, 0xed, 0x33, 0x7c, 0x44,
0x84, 0x51, 0xa7, 0x83, 0x70, 0xea, 0x5a, 0x06, 0xe1, 0x41, 0x94, 0x79, 0x19, 0x65, 0x60, 0xcb,
0xa2, 0x0e, 0xd0, 0x71, 0x23, 0x0d, 0x90, 0xa8, 0x73, 0xda, 0x0c, 0xff, 0xf5, 0xb9, 0xf4, 0x82,
0x96, 0x3a, 0x76, 0xc9, 0x22, 0xa8, 0xab, 0x07, 0x66, 0x1b, 0x11, 0x84, 0xf7, 0x1e, 0xec, 0xfd,
0xc2, 0x61, 0x89, 0xd4, 0xd5, 0x70, 0xd0, 0x4b, 0x90, 0x0f, 0x3c, 0xa7, 0x4b, 0x33, 0xa6, 0xa0,
0xde, 0xdb, 0xd3, 0xf3, 0xf5, 0x57, 0xf3, 0x78, 0x19, 0xc2, 0x53, 0xfc, 0x8e, 0xa8, 0x5c, 0xb3,
0x51, 0x07, 0x19, 0xe5, 0xc6, 0x0d, 0xb4, 0xdf, 0x02, 0x4a, 0x88, 0x16, 0xce, 0x46, 0x54, 0x7c,
0x69, 0x92, 0xbb, 0xbf, 0x09, 0xa8, 0x2f, 0xff, 0xcf, 0xe2, 0x0d, 0xeb, 0xd6, 0x88, 0xeb, 0xeb,
0x57, 0x2e, 0x5b, 0x7a, 0x20, 0x22, 0xfc, 0x97, 0xb5, 0xab, 0x1f, 0xe5, 0x3d, 0xfc, 0x7c, 0xda,
0x14, 0x06, 0x43, 0x30, 0xf7, 0x85, 0xe7, 0x61, 0x58, 0x03, 0x9d, 0x49, 0xa9, 0xfb, 0x78, 0x7a,
0xc0, 0x13, 0xa0, 0x3d, 0x48, 0x36, 0xe0, 0xf8, 0xf1, 0xd8, 0xd1, 0x80, 0x3a, 0xb3, 0x21, 0x9c,
0x7a, 0xf8, 0x40, 0xeb, 0xb8, 0x19, 0xa8, 0x0b, 0x43, 0xcd, 0x46, 0xdd, 0xd4, 0xcc, 0xf0, 0xab,
0x6f, 0x16, 0xf5, 0x4d, 0xbf, 0x20, 0x2a, 0x11, 0xd7, 0xa8, 0xa9, 0x5b, 0xdc, 0x27, 0x09, 0xa2,
0x31, 0xc8, 0x1b, 0x51, 0x29, 0xac, 0x6e, 0x07, 0x14, 0x1b, 0xdb, 0x7a, 0x09, 0x61, 0xec, 0xfd,
0x75, 0xc5, 0x04, 0xf1, 0x6e, 0x67, 0x4b, 0xa1, 0xde, 0xfd, 0xf2, 0x1f, 0x40, 0xa5, 0x7f, 0x70,
0x90, 0x19, 0x39, 0x6b, 0xaf, 0x6a, 0x92, 0x01, 0x1f, 0xd7, 0x28, 0x6d, 0x35, 0xd2, 0xf0, 0xce,
0x6b, 0xa3, 0x51, 0x87, 0x6c, 0x2a, 0xbf, 0x5f, 0x0c, 0xcf, 0x25, 0xd2, 0x6e, 0xc8, 0xde, 0xf7,
0xd2, 0xcb, 0xd8, 0x9b, 0x22, 0xc7, 0xb0, 0x1c, 0xc2, 0xc3, 0x30, 0x97, 0xc5, 0xb9, 0xc0, 0x98,
0xd4, 0x45, 0xf3, 0xf5, 0x8a, 0x03, 0x2f, 0x6b, 0x3a, 0xf0, 0xfa, 0x98, 0x23, 0x36, 0x5a, 0xbf,
0x64, 0xfc, 0x68, 0x63, 0x0e, 0xd1, 0x30, 0x9c, 0xba, 0x9a, 0x5b, 0x32, 0x68, 0x3a, 0x10, 0xaa,
0xe9, 0x30, 0x72, 0xdb, 0xce, 0x1c, 0x8c, 0x15, 0x7a, 0x55, 0x8d, 0xd4, 0xbf, 0xae, 0x19, 0x68,
0x0e, 0xf6, 0x63, 0x01, 0x27, 0xaf, 0xa9, 0xa2, 0x0c, 0x50, 0xb3, 0x61, 0xf5, 0x90, 0x0c, 0x2d,
0x31, 0xdc, 0x1c, 0x04, 0xaa, 0x82, 0x34, 0x1d, 0xd9, 0xaf, 0xea, 0xd6, 0x74, 0xf8, 0xf7, 0x56,
0x8a, 0x50, 0x65, 0xa7, 0x62, 0xf1, 0x02, 0xa3, 0xc4, 0xa2, 0x9b, 0xc7, 0x73, 0xe2, 0x58, 0x34,
0x8f, 0x39, 0x3d, 0x6c, 0xee, 0x4a, 0xd4, 0x7e, 0x38, 0xe9, 0x07, 0xba, 0x14, 0x27, 0x7b, 0xe3,
0x8e, 0x87, 0x51, 0x9b, 0x60, 0x50, 0x49, 0x5f, 0x83, 0xb8, 0xb7, 0xe4, 0x95, 0xaa, 0x97, 0x98,
0xc7, 0x1b, 0x0e, 0x8b, 0x18, 0x0f, 0x63, 0x46, 0xfc, 0x95, 0x5f, 0x1f, 0x78, 0xf9, 0xa5, 0x43,
0x70, 0x36, 0xb9, 0x89, 0xca, 0xce, 0x37, 0xdd, 0xeb, 0x4c, 0xfe, 0xf1, 0x2c, 0x91, 0x52, 0xc5,
0x63, 0x61, 0x16, 0x8e, 0xa0, 0xd0, 0xbd, 0xe0, 0xe9, 0xd3, 0x4f, 0x27, 0x4f, 0x34, 0x7a, 0x4c,
0x96, 0x83, 0xd4, 0xfc, 0x7a, 0x5b, 0x2f, 0xe2, 0xd8, 0x73, 0x9d, 0xf3, 0xbc, 0x4e, 0x77, 0x29,
0x34, 0x99, 0x62, 0x24, 0xad, 0x30, 0x10, 0x75, 0x8f, 0x3f, 0x1b, 0x07, 0xf3, 0x79, 0xbc, 0x0d,
0xd3, 0x3a, 0xd0, 0x23, 0x57, 0x6e, 0x0d, 0xce, 0xc2, 0x75, 0xf4, 0x8a, 0x2b, 0x90, 0x76, 0xf5,
0x31, 0xdf, 0xa5, 0x52, 0xf5, 0x07, 0x25, 0x15, 0x13, 0x7e, 0x80, 0x17, 0xd5, 0xed, 0x06, 0x92,
0xd1, 0xd3, 0x7d, 0x97, 0xeb, 0x4e, 0xd4, 0xdc, 0x6e, 0xca, 0x89, 0x89, 0x26, 0xc0, 0xae, 0x63,
0x0f, 0x91, 0x6a, 0x1e, 0xb1, 0x05, 0xc2, 0x8c, 0x04, 0x27, 0x63, 0x3f, 0x80, 0x27, 0x53, 0x1b,
0x2b, 0x2b, 0xa8, 0xf3, 0x77, 0x93, 0x8d, 0x07, 0x33, 0x01, 0xaa, 0x9a, 0xbb, 0x91, 0x58, 0x3b,
0xf5, 0xd7, 0xef, 0x42, 0xe8, 0xbc, 0x95, 0x25, 0xde, 0xe5, 0x5c, 0x3e, 0x6b, 0xaa, 0xa6, 0x68,
0x6b, 0x33, 0xaa, 0xec, 0xf3, 0x29, 0xa0, 0x46, 0xd4, 0x9e, 0x7a, 0x95, 0x32, 0x70, 0x48, 0xe2,
0x4b, 0x64, 0x30, 0x31, 0xb7, 0x5a, 0x18, 0x2b, 0x2b, 0xd7, 0x5d, 0xd2, 0xde, 0xab, 0xeb, 0x42,
0x4a, 0x21, 0x76, 0x83, 0xb5, 0xc6, 0x9d, 0x64, 0x6e, 0x8c, 0x87, 0xae, 0xf9, 0xf8, 0x21, 0xc2,
0x8d, 0xe5, 0x0d, 0x9d, 0xc8, 0xec, 0xa1, 0x74, 0x21, 0x03, 0xa3, 0xad, 0x5c, 0x77, 0x3b, 0xbf,
0x0c, 0xa8, 0x8e, 0x5f, 0x82, 0x5e, 0xe7, 0x85, 0xb2, 0x4d, 0xaa, 0x53, 0xd6, 0x66, 0x54, 0x7b,
0x1a, 0x45, 0xa5, 0xa5, 0x2a, 0x23, 0x15, 0x57, 0xbf, 0xbf, 0x4f, 0xef, 0x4b, 0x90, 0x57, 0xda,
0x82, 0xa4, 0xef, 0xea, 0x55, 0xf0, 0x25, 0x66, 0xcd, 0xba, 0x5f, 0x7e, 0x50, 0x4b, 0x97, 0x17,
0xa3, 0x29, 0x5d, 0x92, 0xb0, 0x20, 0x66, 0x23, 0x4d, 0x87, 0x23, 0x75, 0xd2, 0xcb, 0xe5, 0xf8,
0x25, 0xd7, 0xc1, 0xf1, 0xc8, 0x01, 0x09, 0xb4, 0x3d, 0x52, 0x74, 0xb0, 0x66, 0xdd, 0x83, 0x06,
0x27, 0x8f, 0xb8, 0x1d, 0xcb, 0xc3, 0xfd, 0x5b, 0x62, 0x8e, 0x40, 0x1d, 0xcb, 0xe7, 0x7c, 0x86,
0xfb, 0xaf, 0x5b, 0xbd, 0x8a, 0xb2, 0x34, 0x51, 0xb9, 0xfc, 0x1b, 0x6d, 0xfd, 0xf5, 0x50, 0x04,
0xee, 0x7f, 0xe0, 0xaf, 0xd7, 0xd0, 0xfe, 0x96, 0x60, 0xea, 0xa5, 0x0a, 0x18, 0x60, 0xcd, 0xba,
0xc3, 0x46, 0x4f, 0x4d, 0x7f, 0x51, 0x9c, 0x5e, 0x01, 0x06, 0x8e, 0xe6, 0x02, 0xae, 0x6a, 0xcd,
0x0a, 0xc2, 0x2d, 0xa5, 0x25, 0xaf, 0xc9, 0x76, 0xe0, 0xb0, 0xc0, 0x12, 0x6c, 0xe6, 0x38, 0x04,
0x1c, 0x7b, 0xb4, 0x99, 0x71, 0x26, 0x33, 0x1d, 0xde, 0x6e, 0xdd, 0x57, 0xeb, 0xe9, 0x7e, 0x21,
0xfe, 0x5c, 0xce, 0xed, 0x5b, 0x1f, 0x8f, 0x1d, 0xed, 0xbc, 0xcd, 0x09, 0xf7, 0x37, 0xbf, 0xee,
0xd9, 0x59, 0x37, 0xe6, 0xcc, 0x9c, 0xb1, 0x3f, 0x3c, 0x8c, 0x6f, 0x34, 0x66, 0x01, 0xd2, 0xdd,
0x8b, 0x9b, 0xee, 0x47, 0x0f, 0x45, 0xad, 0xff, 0x79, 0x35, 0xd9, 0x8e, 0xf9, 0x75, 0x87, 0x79,
0x9f, 0xcd, 0x98, 0x51, 0x95, 0x15, 0x15, 0x7c, 0x63, 0x32, 0x3d, 0x04, 0xe8, 0x8e, 0x2f, 0x49,
0x81, 0x60, 0x66, 0xdd, 0x81, 0xe8, 0x1b, 0xd6, 0xad, 0x81, 0x0e, 0x7d, 0x7c, 0xc0, 0x2b, 0xb9,
0x60, 0xee, 0xec, 0xcc, 0xf4, 0xb4, 0x45, 0xf3, 0xbe, 0x3c, 0x17, 0x17, 0xab, 0x52, 0xa9, 0xc0,
0x7b, 0x3a, 0x7d, 0xca, 0xa4, 0x36, 0xa9, 0xf4, 0xeb, 0xf9, 0x73, 0xd5, 0x83, 0x2b, 0xd2, 0x9a,
0x05, 0x7c, 0x75, 0xa7, 0x03, 0x1c, 0x94, 0x69, 0x1e, 0xdd, 0x67, 0x7d, 0x36, 0xed, 0xda, 0x95,
0x3f, 0xd1, 0xbf, 0x32, 0x99, 0x0c, 0x4a, 0x0f, 0xf3, 0x1c, 0xf8, 0x7a, 0x4e, 0x9b, 0x3c, 0x21,
0x38, 0xc0, 0xaf, 0xa5, 0xa5, 0x19, 0x9c, 0x47, 0x1f, 0xd6, 0xd4, 0x35, 0xec, 0xff, 0xd8, 0x74,
0xfe, 0x5c, 0x9c, 0xda, 0x4c, 0xc0, 0xf2, 0x77, 0xbd, 0x71, 0x18, 0x98, 0xee, 0x14, 0x2b, 0x50,
0x90, 0x61, 0x4e, 0xdd, 0xdf, 0x44, 0xd0, 0xeb, 0xbe, 0x4f, 0xa0, 0xee, 0x7b, 0x87, 0x75, 0xe7,
0x80, 0x61, 0xdd, 0xcd, 0x83, 0x21, 0xd7, 0x3d, 0x6b, 0x58, 0x77, 0x2a, 0x70, 0xd7, 0xfd, 0xd4,
0x89, 0xe3, 0x78, 0x4d, 0x15, 0x9e, 0xa3, 0xe5, 0xd5, 0x87, 0x75, 0xe7, 0x07, 0x76, 0xdd, 0x7f,
0x5a, 0x1e, 0x75, 0x20, 0x12, 0xef, 0x6f, 0x80, 0xd3, 0xb6, 0x70, 0x9f, 0x5f, 0xd7, 0xad, 0xad,
0x0f, 0xf6, 0x85, 0xe1, 0xeb, 0x9d, 0x1d, 0x70, 0x3b, 0xb9, 0xaf, 0x75, 0x4d, 0x63, 0xbd, 0x7d,
0xfc, 0x66, 0x46, 0xbd, 0x15, 0xba, 0x7b, 0xd1, 0xeb, 0x8e, 0xfb, 0x2f, 0x9c, 0xf7, 0x25, 0x3c,
0x19, 0x37, 0x7a, 0xa4, 0xb4, 0x55, 0x37, 0xb5, 0xbd, 0xf3, 0xee, 0x2d, 0xf2, 0x28, 0x67, 0x08,
0x9f, 0xf8, 0xe7, 0x5a, 0xe9, 0xb1, 0xa5, 0x6a, 0xb9, 0x60, 0x58, 0x77, 0x22, 0x28, 0xd7, 0xf5,
0xaa, 0xfc, 0x7e, 0x09, 0xbc, 0x05, 0xe4, 0x39, 0x84, 0x4b, 0xc1, 0x29, 0x7a, 0xbd, 0x80, 0x41,
0x49, 0xc5, 0x92, 0x76, 0xf6, 0xf1, 0x07, 0x44, 0xdd, 0xf1, 0x57, 0x2c, 0x23, 0x8d, 0xbd, 0x2b,
0x8b, 0xcb, 0x9c, 0x15, 0x06, 0xe7, 0x7a, 0xe4, 0xfe, 0xb1, 0xcc, 0x72, 0x60, 0x84, 0x35, 0x22,
0x01, 0xe0, 0xab, 0x3b, 0xca, 0xdf, 0x6f, 0x66, 0x67, 0xe1, 0xe9, 0x1d, 0xa2, 0xc4, 0x66, 0x94,
0x56, 0xfa, 0xad, 0xb6, 0xe4, 0xb8, 0xf6, 0xfd, 0xf9, 0x8a, 0xcf, 0x53, 0x3f, 0xa0, 0x48, 0xef,
0x50, 0xf4, 0x0a, 0x91, 0x88, 0xcb, 0xb3, 0xf5, 0x29, 0x54, 0x97, 0x73, 0x6b, 0xb8, 0xb8, 0xf8,
0x9c, 0xca, 0x23, 0xe9, 0x65, 0x81, 0x89, 0x45, 0xde, 0x67, 0x0b, 0xb6, 0x04, 0x66, 0x51, 0x12,
0x0a, 0x4e, 0x28, 0xec, 0xe1, 0x99, 0x51, 0x32, 0x80, 0x83, 0xee, 0x14, 0x6b, 0x80, 0xd5, 0xd6,
0xd6, 0xcc, 0x9c, 0x3e, 0x15, 0x9f, 0xdc, 0x83, 0x20, 0x5a, 0xa4, 0x5b, 0xd6, 0xb5, 0xeb, 0xd1,
0x03, 0xba, 0x78, 0x2b, 0x9b, 0x64, 0x77, 0x8a, 0x9b, 0x33, 0x0a, 0x1a, 0x90, 0x4b, 0x2f, 0x68,
0x48, 0x7b, 0x2a, 0x4e, 0xcd, 0x1f, 0x74, 0x4f, 0xc5, 0x23, 0x3a, 0x3a, 0x3a, 0xea, 0x48, 0xc8,
0xb9, 0x7d, 0x8b, 0xec, 0x69, 0x20, 0xda, 0xda, 0xa8, 0x97, 0xcb, 0x95, 0xca, 0xfa, 0x82, 0x93,
0x8a, 0x08, 0x3f, 0x80, 0xff, 0x05, 0xae, 0xd3, 0xba, 0x18, 0xa0, 0xd3, 0x3d, 0x96, 0x93, 0xee,
0x0f, 0xee, 0xe7, 0xc2, 0x34, 0xb7, 0xea, 0x7b, 0xda, 0xf2, 0x65, 0x47, 0x66, 0x1a, 0xde, 0x09,
0xd5, 0x1a, 0x1b, 0x23, 0x8c, 0x1b, 0x45, 0x7a, 0x9f, 0x35, 0x7d, 0x9a, 0xb9, 0x46, 0x12, 0x88,
0x1a, 0x3a, 0x6d, 0xf7, 0xe8, 0xd4, 0xdf, 0xe2, 0xcb, 0xbe, 0xae, 0x0c, 0x03, 0xf8, 0xea, 0xce,
0x1d, 0xf8, 0x7c, 0xa2, 0x92, 0xc1, 0xd5, 0xa2, 0xda, 0x92, 0x2e, 0xf6, 0x2b, 0xb8, 0x76, 0xf8,
0x11, 0x75, 0x1f, 0x3b, 0xea, 0x3d, 0x94, 0xbf, 0x73, 0xd9, 0xc0, 0x8a, 0x75, 0x9e, 0x16, 0x9d,
0xab, 0x75, 0xf8, 0xbd, 0x23, 0x93, 0xf6, 0xfb, 0xe1, 0x73, 0xee, 0x99, 0x2e, 0x37, 0x8c, 0x66,
0x19, 0x6e, 0x4f, 0x87, 0xa1, 0xd3, 0x1d, 0xa1, 0x35, 0xee, 0x64, 0xe9, 0x27, 0x36, 0x7c, 0x9f,
0x9d, 0xb8, 0x46, 0xe4, 0xf3, 0x67, 0x05, 0xd0, 0x25, 0x5c, 0xbc, 0x00, 0x4f, 0x58, 0x23, 0x06,
0xba, 0x37, 0x06, 0xfb, 0x70, 0x71, 0x62, 0x2f, 0xf7, 0x9a, 0xdf, 0xd7, 0x8b, 0x16, 0xcc, 0x26,
0xf3, 0xa8, 0x5a, 0xbd, 0x82, 0xd0, 0x6b, 0x0c, 0xe1, 0x7e, 0x3c, 0x0f, 0xa9, 0x9f, 0xfe, 0x54,
0xcc, 0x57, 0x14, 0x13, 0xe8, 0x4e, 0x40, 0xf7, 0xf3, 0xa7, 0xcd, 0x31, 0x47, 0x81, 0xfd, 0xc6,
0x20, 0x1f, 0x34, 0xcf, 0x90, 0xc2, 0x05, 0x78, 0x51, 0x97, 0x23, 0x8d, 0x32, 0xa4, 0x99, 0x15,
0xf2, 0xca, 0x8a, 0x8a, 0x25, 0x0b, 0xf1, 0x1f, 0x40, 0x96, 0x4f, 0x5c, 0x7f, 0xaa, 0x12, 0x1b,
0x31, 0x11, 0x48, 0xb5, 0xe0, 0x24, 0x03, 0x4c, 0xaf, 0x3b, 0x77, 0x98, 0x53, 0x77, 0x84, 0x8e,
0xb4, 0x6b, 0xe8, 0x6d, 0x2d, 0x9d, 0x32, 0x8e, 0x1c, 0x00, 0x49, 0x1f, 0x70, 0x99, 0x87, 0xf4,
0x70, 0xee, 0xd7, 0xb0, 0xee, 0x2c, 0x68, 0x0c, 0xf1, 0xd3, 0x95, 0xd2, 0xfe, 0xd6, 0x5b, 0x1e,
0x46, 0xae, 0x50, 0x21, 0xe9, 0x2f, 0xde, 0x63, 0xd9, 0xc9, 0x10, 0x61, 0x58, 0x77, 0xae, 0xe8,
0xc8, 0xce, 0xa0, 0xcb, 0x73, 0xe0, 0xe6, 0x59, 0x9b, 0x35, 0x6b, 0x11, 0x70, 0x1d, 0x98, 0x68,
0x55, 0xba, 0xa7, 0x24, 0x27, 0x76, 0x75, 0x75, 0x0d, 0x19, 0x1f, 0xed, 0x24, 0x16, 0xe0, 0xca,
0xa6, 0x13, 0xc7, 0x82, 0xdb, 0xf9, 0xa6, 0x43, 0x1d, 0xcf, 0xe6, 0x54, 0x72, 0x31, 0xc5, 0xae,
0xbb, 0x61, 0x2b, 0xe0, 0x1a, 0x02, 0x7e, 0xba, 0xaf, 0x5d, 0xf5, 0x03, 0xac, 0x5c, 0x0c, 0x25,
0x25, 0x75, 0xe9, 0xe4, 0x8f, 0xa0, 0x2e, 0xed, 0x19, 0x7a, 0x8d, 0x4d, 0x9e, 0x67, 0xb5, 0x85,
0x4b, 0x9f, 0xb3, 0x9c, 0x06, 0xf4, 0xfa, 0x5b, 0x87, 0xee, 0x77, 0x73, 0x72, 0xe0, 0xd2, 0xd1,
0x72, 0xb9, 0x9c, 0x41, 0xfa, 0xaa, 0x4a, 0x4e, 0x89, 0x91, 0x01, 0xe0, 0xf5, 0x87, 0xba, 0x80,
0xb4, 0x8f, 0xfb, 0x87, 0x0c, 0x0e, 0x83, 0x76, 0x0a, 0xe7, 0xb4, 0x38, 0x98, 0x95, 0xe8, 0x8e,
0x9a, 0xa7, 0x01, 0x8e, 0x47, 0x1f, 0x85, 0xb3, 0x9e, 0xa7, 0x8c, 0x1f, 0xa7, 0x1e, 0x6c, 0x51,
0x1a, 0x37, 0x7a, 0x24, 0x38, 0x3e, 0xca, 0x7b, 0x08, 0x37, 0xe7, 0xbc, 0x10, 0x7f, 0x4e, 0x18,
0x27, 0x34, 0x85, 0x0b, 0xad, 0xfb, 0x0d, 0x01, 0x67, 0x4f, 0x6f, 0xa6, 0x59, 0x03, 0x9c, 0x0c,
0x6b, 0xd0, 0x1d, 0x28, 0xdb, 0xa7, 0x5f, 0xb5, 0x99, 0xf5, 0xd9, 0xb4, 0x40, 0x3f, 0x5f, 0x38,
0xf7, 0x1f, 0xea, 0xfe, 0xf1, 0xc0, 0x4a, 0x35, 0x48, 0x77, 0xc2, 0xc6, 0x61, 0xdc, 0x01, 0xb7,
0xb3, 0x2d, 0xc1, 0x56, 0x2c, 0x87, 0x80, 0xf3, 0xa7, 0x35, 0xba, 0x53, 0xad, 0x5e, 0x4e, 0x86,
0x35, 0xe8, 0x6e, 0x4a, 0xd4, 0x6c, 0x5c, 0xc7, 0xac, 0x3b, 0xe5, 0xaa, 0xf1, 0x64, 0x0c, 0xeb,
0xce, 0x0f, 0xf5, 0x2e, 0x5b, 0xb5, 0xfd, 0x99, 0x41, 0xde, 0xb8, 0xff, 0x89, 0x2c, 0x91, 0xb6,
0x3f, 0x33, 0x80, 0x76, 0x23, 0x47, 0x1c, 0x6e, 0xc7, 0x1f, 0x69, 0x5b, 0x37, 0xf5, 0x37, 0x40,
0x93, 0x84, 0x06, 0x68, 0xdb, 0x88, 0x36, 0xff, 0x6a, 0x44, 0xda, 0xbc, 0x60, 0x89, 0xba, 0x37,
0x47, 0x47, 0x41, 0x5d, 0xca, 0x67, 0x13, 0xf7, 0xb2, 0xd0, 0x35, 0x14, 0x9f, 0x7f, 0xce, 0x6c,
0xe4, 0x50, 0x7a, 0x19, 0x0a, 0x5c, 0xdf, 0xda, 0x83, 0x5f, 0x42, 0xcd, 0xe8, 0x4d, 0x51, 0xe1,
0x46, 0xa6, 0xce, 0x19, 0x96, 0xa8, 0xbb, 0x1a, 0xeb, 0xdc, 0x81, 0x9b, 0xf5, 0xe2, 0xc0, 0x9b,
0xe9, 0x41, 0xce, 0x43, 0xbe, 0xf7, 0x7e, 0x51, 0x23, 0x1e, 0xa6, 0xa0, 0xa2, 0x0d, 0xbf, 0xda,
0x12, 0x1b, 0x83, 0xaa, 0x66, 0x5c, 0x1a, 0x5c, 0x87, 0x08, 0x16, 0xaa, 0x7b, 0xf7, 0xf3, 0x02,
0xa4, 0x4e, 0xc7, 0x0d, 0xe2, 0x46, 0x4d, 0xa7, 0x6f, 0x57, 0x72, 0xe9, 0x4e, 0x3b, 0x34, 0xb8,
0x57, 0x05, 0x82, 0xec, 0xf1, 0x43, 0x64, 0xb6, 0xed, 0x6a, 0x92, 0xa9, 0x9e, 0x86, 0x02, 0x16,
0xaa, 0x3b, 0x40, 0xd7, 0xc3, 0x5c, 0xa4, 0x91, 0xd8, 0xcb, 0x9d, 0x32, 0xcc, 0xd3, 0x0a, 0xe9,
0xde, 0xe4, 0xa2, 0x6d, 0x91, 0x77, 0xec, 0xfd, 0x33, 0xed, 0xfc, 0x32, 0x1c, 0xc3, 0x6e, 0xfb,
0x5e, 0x7c, 0xf1, 0xac, 0xb2, 0x8d, 0x32, 0x30, 0x30, 0x82, 0x0c, 0xb6, 0xa7, 0xb3, 0x6f, 0x29,
0x35, 0xa4, 0xd0, 0xd3, 0x7d, 0xe5, 0xb2, 0xa5, 0x96, 0x36, 0x7f, 0xb5, 0xe2, 0x9b, 0xf9, 0x48,
0xac, 0x86, 0x40, 0x2f, 0x61, 0x46, 0x1a, 0x83, 0x7c, 0x74, 0xad, 0xcd, 0xe3, 0x47, 0xf7, 0x1b,
0xb0, 0x0a, 0xb0, 0xb1, 0x40, 0x4c, 0xef, 0xde, 0x7b, 0x76, 0x5b, 0x8e, 0xe8, 0x10, 0x40, 0x26,
0x42, 0x9f, 0x4e, 0x63, 0xa0, 0xb7, 0xb2, 0xb3, 0x93, 0xf9, 0x2e, 0x4d, 0x87, 0x0c, 0xd6, 0xc0,
0xa9, 0x71, 0x36, 0xa3, 0x54, 0x54, 0xbd, 0x2b, 0x66, 0x01, 0x45, 0x3e, 0x93, 0x98, 0x70, 0x49,
0xc0, 0x5a, 0x9d, 0x26, 0x40, 0xd3, 0x91, 0xfd, 0xc2, 0xfa, 0x14, 0x9b, 0x8f, 0x45, 0xb1, 0x5b,
0x37, 0x2d, 0xde, 0xd4, 0xf5, 0x38, 0xa4, 0xc9, 0x97, 0xc4, 0x5e, 0x6e, 0x65, 0x9f, 0x4e, 0x20,
0xab, 0x5c, 0x36, 0x63, 0xb2, 0xd8, 0x7d, 0xbb, 0xf4, 0xf2, 0x79, 0x73, 0x73, 0x64, 0xc2, 0x9b,
0xaa, 0xbb, 0xd1, 0xd1, 0xd9, 0xa3, 0x28, 0x6f, 0xec, 0x2a, 0xac, 0x6e, 0x2f, 0xae, 0xeb, 0x6c,
0xe9, 0x94, 0xb3, 0xdf, 0x60, 0x18, 0xde, 0x6a, 0xdd, 0x81, 0xd6, 0x07, 0xaf, 0x97, 0xee, 0x89,
0x79, 0x64, 0xeb, 0x95, 0x4a, 0x2e, 0x86, 0x3a, 0x85, 0xe7, 0x84, 0x24, 0x15, 0x15, 0xd0, 0x94,
0x8e, 0x0c, 0xc4, 0x08, 0xf2, 0x1e, 0x4f, 0xa7, 0x4f, 0x9d, 0x34, 0xe3, 0x4e, 0xe7, 0xa6, 0x71,
0xf1, 0x17, 0x13, 0x0e, 0x1c, 0x8d, 0x45, 0xbb, 0xaa, 0x93, 0xf7, 0x56, 0xc7, 0x9d, 0x63, 0x48,
0xf6, 0xb1, 0x1b, 0x9c, 0x46, 0xcf, 0xf1, 0xd0, 0x9d, 0xec, 0x05, 0x4a, 0x32, 0x3d, 0xdd, 0x5c,
0x77, 0x7d, 0x7d, 0x13, 0xe1, 0x1f, 0x9b, 0xcf, 0xa5, 0xda, 0x45, 0x54, 0x3f, 0x30, 0xb3, 0xac,
0x81, 0xa5, 0x10, 0xc5, 0x1d, 0x44, 0xdd, 0x6f, 0x64, 0x66, 0x00, 0xdd, 0x27, 0xd9, 0x8c, 0xa5,
0x0c, 0xfd, 0xa6, 0xe3, 0x48, 0xa6, 0x88, 0xa0, 0xa6, 0xad, 0x77, 0x9a, 0xe7, 0xd9, 0x67, 0x67,
0x6f, 0x55, 0xd4, 0xb4, 0x74, 0xc3, 0x8d, 0xe7, 0x14, 0xca, 0xfe, 0xfa, 0xd6, 0x9e, 0x94, 0x87,
0x75, 0x7e, 0x97, 0x5e, 0xd8, 0x07, 0xdc, 0x20, 0x84, 0x3f, 0x96, 0x4a, 0xd1, 0x32, 0x21, 0x00,
0xb4, 0xe3, 0x81, 0x45, 0xe5, 0xe5, 0x46, 0x89, 0xc0, 0x72, 0x70, 0x34, 0xa3, 0x0c, 0x57, 0xd0,
0x21, 0xe4, 0x66, 0xfc, 0x2d, 0xf6, 0xdc, 0x23, 0xeb, 0x79, 0xe3, 0xce, 0x43, 0xf7, 0xf1, 0x1b,
0x83, 0xcf, 0x3f, 0x33, 0x9c, 0x8c, 0x9e, 0xee, 0x91, 0x61, 0xa1, 0x48, 0x77, 0xca, 0x9d, 0xa9,
0xdf, 0x5c, 0x84, 0x5d, 0x2b, 0xc1, 0xb5, 0xf3, 0xe7, 0xb9, 0x82, 0x46, 0x4c, 0x76, 0x85, 0x9e,
0xf4, 0xe7, 0x28, 0x16, 0xc8, 0xe6, 0x05, 0x3d, 0xdd, 0x09, 0x8d, 0x04, 0x69, 0xd7, 0xcd, 0xdc,
0x88, 0x61, 0x2c, 0x3c, 0x29, 0x6b, 0xc5, 0x55, 0xab, 0x69, 0x14, 0x92, 0x4d, 0x97, 0x88, 0xbb,
0xec, 0xb0, 0x9d, 0xc8, 0xf7, 0x26, 0xd3, 0xee, 0xee, 0xcd, 0x05, 0x14, 0xdf, 0xd5, 0xbd, 0xc1,
0x81, 0x86, 0x58, 0xb4, 0x40, 0xd8, 0xfa, 0xa4, 0x23, 0xbd, 0x24, 0x6d, 0x3d, 0xec, 0x37, 0xd0,
0x40, 0xa5, 0xea, 0xb7, 0xc3, 0x56, 0xdb, 0xbb, 0x57, 0xdc, 0x24, 0xd8, 0x94, 0xf5, 0xeb, 0x0e,
0x37, 0x8b, 0xd0, 0x2a, 0x55, 0x24, 0x21, 0x07, 0x50, 0x75, 0xcb, 0x9a, 0x0e, 0x86, 0x56, 0xaf,
0xf9, 0xbe, 0x74, 0xea, 0xc7, 0x25, 0xe3, 0x46, 0x96, 0x4e, 0xfc, 0xb0, 0x62, 0xe9, 0xd7, 0x4d,
0x07, 0x42, 0x95, 0x52, 0xea, 0xdd, 0x3b, 0x6d, 0x07, 0x53, 0xbd, 0x43, 0x08, 0xef, 0x65, 0x67,
0x10, 0xac, 0x5c, 0xf7, 0xaa, 0x26, 0xdd, 0xa2, 0x6e, 0x94, 0xfb, 0x74, 0x48, 0x42, 0x03, 0x19,
0x1a, 0x76, 0xd0, 0xce, 0x01, 0x38, 0xb2, 0x9f, 0x89, 0x91, 0xcd, 0xa8, 0xd4, 0x52, 0x61, 0xc4,
0xac, 0x5c, 0x77, 0xef, 0xb3, 0xba, 0x71, 0xf4, 0xe4, 0xab, 0xa2, 0x6f, 0xe6, 0xb1, 0xb6, 0xa9,
0x95, 0xcd, 0x9c, 0xda, 0x5b, 0x46, 0xec, 0x3f, 0x71, 0x3f, 0xa1, 0xed, 0xb9, 0xb5, 0x15, 0xba,
0x9a, 0xa1, 0x35, 0xeb, 0xae, 0x54, 0xe9, 0xe6, 0xbc, 0x1d, 0xbe, 0x4e, 0x2c, 0x77, 0xe3, 0x2d,
0xfb, 0x20, 0x7b, 0x69, 0xf0, 0xf7, 0x6c, 0xbb, 0x9a, 0xd4, 0xf3, 0xf2, 0x9f, 0xf6, 0xd4, 0xab,
0x70, 0x19, 0x78, 0xe4, 0x4a, 0xa7, 0x8e, 0x27, 0xdc, 0x5b, 0x8d, 0xad, 0x8d, 0x98, 0xca, 0x7f,
0x60, 0xbe, 0xda, 0xba, 0x75, 0x3f, 0x83, 0x75, 0x07, 0x12, 0xd6, 0xf8, 0x95, 0x84, 0x07, 0x23,
0x59, 0x6b, 0x6d, 0x7f, 0x23, 0xdf, 0xdb, 0xdf, 0xd7, 0x97, 0xb2, 0x7e, 0x35, 0x43, 0x97, 0xcb,
0xf6, 0x03, 0x7f, 0x6b, 0xb3, 0xaf, 0x0b, 0x85, 0xe4, 0xdb, 0x59, 0x61, 0xcd, 0xba, 0xfb, 0x5f,
0xf8, 0x07, 0x4a, 0xe3, 0xa6, 0x3f, 0x53, 0xa7, 0x4f, 0x5c, 0xa7, 0x13, 0x9d, 0x66, 0x28, 0xc7,
0x86, 0x75, 0x6b, 0xfb, 0x95, 0xca, 0x06, 0x3f, 0x0f, 0x14, 0x92, 0xf0, 0x99, 0x8d, 0x18, 0x1c,
0xbc, 0x66, 0xef, 0x9f, 0x29, 0x80, 0x9b, 0x35, 0xeb, 0x8e, 0x6a, 0xf9, 0xfb, 0x52, 0xf4, 0xca,
0xda, 0x68, 0xdc, 0x52, 0x09, 0xcd, 0xaa, 0xe8, 0x2b, 0x96, 0x2e, 0x46, 0xe7, 0x68, 0x90, 0xac,
0x24, 0x22, 0x04, 0x0f, 0x53, 0x39, 0xb0, 0x6d, 0x03, 0x74, 0x32, 0x39, 0xef, 0x8e, 0x43, 0x6b,
0xd6, 0x7d, 0xf3, 0xe0, 0xd4, 0xc0, 0xbf, 0xf5, 0x0b, 0xda, 0x95, 0x2b, 0x97, 0xa0, 0xfe, 0x42,
0xdc, 0xbf, 0xbd, 0xad, 0x6d, 0xc7, 0x56, 0xc7, 0xb5, 0x3f, 0xfd, 0x80, 0x7b, 0xa2, 0x41, 0x4e,
0x65, 0x33, 0x3f, 0xc1, 0xfd, 0xf1, 0x8f, 0xc7, 0xf3, 0x2a, 0xde, 0xcb, 0x34, 0x5b, 0xad, 0xee,
0xf8, 0x14, 0x11, 0x91, 0x44, 0x86, 0x5f, 0x2a, 0x9d, 0x32, 0x6e, 0x70, 0x28, 0x47, 0x32, 0xee,
0x0f, 0x6b, 0xe9, 0x0b, 0xe7, 0xcd, 0xc1, 0x3d, 0x65, 0xf9, 0x8f, 0xd0, 0xb7, 0x97, 0x10, 0x05,
0x2a, 0xc8, 0xa7, 0x15, 0x34, 0xf0, 0xa5, 0x67, 0xb5, 0xba, 0x77, 0xf5, 0x2a, 0x90, 0xee, 0x0d,
0xfa, 0x9b, 0xd2, 0xa0, 0x4c, 0xa6, 0xa7, 0xf8, 0x25, 0xee, 0x0f, 0xe7, 0x90, 0x6e, 0xfc, 0x75,
0x3d, 0xee, 0xd9, 0x57, 0x5f, 0xab, 0x1b, 0xe7, 0xa4, 0xdf, 0x2d, 0x6e, 0xe7, 0xab, 0x5d, 0x04,
0xf7, 0x72, 0x2e, 0xd7, 0xa9, 0x3f, 0x08, 0xc3, 0xba, 0xeb, 0xe1, 0x45, 0x21, 0x71, 0x9e, 0x78,
0x5f, 0x7d, 0x1d, 0xab, 0xee, 0x09, 0xf7, 0x78, 0xaf, 0x8a, 0xfd, 0x96, 0xeb, 0xce, 0xde, 0x2a,
0xc9, 0x25, 0xbd, 0x0f, 0xeb, 0xae, 0x83, 0x00, 0xdd, 0x17, 0xcc, 0x9d, 0xbd, 0x3f, 0x3c, 0x6c,
0xf4, 0x7b, 0xff, 0x8b, 0x7b, 0x5a, 0x84, 0xee, 0x8f, 0xf3, 0xf2, 0x6e, 0x66, 0xf3, 0x5e, 0xd3,
0xc9, 0x2c, 0x10, 0xa0, 0x3b, 0xc8, 0xdc, 0x3d, 0xdc, 0xdd, 0x4a, 0xf4, 0x97, 0x08, 0xb6, 0x08,
0xdd, 0x2d, 0x6a, 0x1c, 0x19, 0x33, 0x84, 0xe9, 0x4e, 0xb6, 0x63, 0x7e, 0xdd, 0x9b, 0x9b, 0x9b,
0xa6, 0x4d, 0x9e, 0xf0, 0xf3, 0x4f, 0x3f, 0xa6, 0x73, 0x58, 0x0f, 0xc8, 0xec, 0xb0, 0x1e, 0xdd,
0xbf, 0x9e, 0x3f, 0xf7, 0xde, 0xdd, 0x3b, 0xed, 0xed, 0xed, 0x6f, 0x44, 0x17, 0xa0, 0xac, 0x57,
0x69, 0x25, 0xba, 0xe3, 0xcb, 0xfc, 0xf5, 0x0e, 0xc1, 0x16, 0x5e, 0xc6, 0x85, 0x95, 0xe8, 0x9e,
0x9c, 0x94, 0xf8, 0xd1, 0x07, 0xef, 0xc3, 0x45, 0x99, 0x3f, 0xfb, 0x64, 0xf2, 0xca, 0x65, 0x4b,
0x81, 0xe7, 0xc6, 0x0d, 0xbf, 0x7c, 0x3a, 0x79, 0xa2, 0xcd, 0x87, 0x1f, 0x7c, 0xbb, 0x68, 0xc1,
0x98, 0xf7, 0xdf, 0x01, 0x3e, 0xae, 0xce, 0xdb, 0x57, 0x2c, 0x5d, 0x02, 0xde, 0x8c, 0xde, 0x9e,
0x1e, 0x77, 0x17, 0x67, 0x99, 0x4c, 0xb6, 0x2f, 0x84, 0x65, 0x23, 0x87, 0x21, 0x82, 0x00, 0xdd,
0x29, 0x61, 0x66, 0xdd, 0x41, 0xde, 0x52, 0x5b, 0x5b, 0x83, 0xe6, 0xaf, 0xc2, 0xa4, 0x01, 0x77,
0x21, 0x86, 0x4b, 0x33, 0xc3, 0x72, 0x4e, 0x5f, 0x5f, 0xdf, 0xeb, 0x57, 0xc5, 0xff, 0x9e, 0xf1,
0x29, 0x38, 0x8f, 0x3e, 0x72, 0x18, 0xce, 0x6e, 0x35, 0x0b, 0x70, 0xdd, 0xc5, 0x52, 0xbd, 0x3e,
0xd5, 0x37, 0x46, 0x77, 0x95, 0x4a, 0x45, 0x78, 0x07, 0x27, 0x7c, 0x34, 0x26, 0xfe, 0x6c, 0x1c,
0xd4, 0x3d, 0xea, 0x40, 0x24, 0x38, 0xde, 0xb9, 0x7d, 0x1b, 0x1c, 0x41, 0xc2, 0x07, 0xc7, 0x2f,
0x67, 0x7d, 0xae, 0x1e, 0x58, 0x24, 0x7b, 0xc6, 0xd4, 0xc9, 0x7c, 0x09, 0x19, 0x0b, 0xd6, 0xa0,
0xfb, 0x96, 0xcd, 0xbf, 0xbb, 0xec, 0xd8, 0x86, 0xfb, 0xe4, 0x3f, 0x79, 0x8c, 0x76, 0xdd, 0xc6,
0x75, 0x07, 0x29, 0x7d, 0xe6, 0xf4, 0xa9, 0x3b, 0x9c, 0x1c, 0x4b, 0x5e, 0xbf, 0xca, 0xbe, 0xa1,
0x69, 0x98, 0x5e, 0xb6, 0xe4, 0x5b, 0xbe, 0x9c, 0x8c, 0x02, 0x6b, 0xd0, 0xfd, 0x4d, 0x04, 0x93,
0xee, 0x83, 0x9b, 0x08, 0x0d, 0xeb, 0x6e, 0x7c, 0x0c, 0xeb, 0x6e, 0x1e, 0xc8, 0xe4, 0xc3, 0xba,
0x9b, 0x03, 0xc3, 0xba, 0x9b, 0x07, 0xc3, 0xba, 0x9b, 0x07, 0x7c, 0x75, 0x07, 0xb5, 0x93, 0x45,
0xf3, 0x35, 0xeb, 0x90, 0x5f, 0x88, 0x3f, 0xf7, 0xd7, 0x35, 0xdd, 0x0e, 0xa0, 0xc3, 0xba, 0xf3,
0x03, 0x77, 0xdd, 0xe5, 0x72, 0xf9, 0xd4, 0x89, 0xe3, 0x41, 0xb1, 0x78, 0xc1, 0x5c, 0x4d, 0xcf,
0x2a, 0xd0, 0x1d, 0x36, 0xbb, 0x96, 0x97, 0x6b, 0x36, 0xf8, 0xe4, 0xa2, 0xfb, 0xa5, 0x61, 0xdd,
0x11, 0x38, 0xe9, 0x5e, 0xf4, 0x62, 0xc5, 0xd2, 0xc5, 0x68, 0xdc, 0x39, 0x41, 0x77, 0xe0, 0x26,
0x8e, 0xfb, 0xb0, 0xbd, 0xa2, 0x5c, 0xa7, 0xbb, 0xfe, 0x7e, 0x94, 0xf6, 0xfe, 0x99, 0xd0, 0xfe,
0xa9, 0x6c, 0xde, 0xb3, 0x9f, 0xde, 0x6a, 0xdd, 0xeb, 0x1f, 0xe4, 0x4e, 0x19, 0x3f, 0x0e, 0xa9,
0xfc, 0xd5, 0x97, 0x5f, 0xc8, 0x64, 0xb2, 0xd8, 0xd3, 0xa7, 0xf0, 0x49, 0x00, 0x05, 0xb9, 0xf7,
0x90, 0xee, 0xca, 0xd6, 0x16, 0xdc, 0xce, 0x8e, 0xc8, 0xbb, 0xd0, 0xbe, 0x1f, 0xd5, 0x88, 0x57,
0x66, 0xbc, 0xd5, 0xba, 0x83, 0xf4, 0x0e, 0xfe, 0xad, 0xae, 0xaa, 0xfa, 0xe0, 0xdd, 0x7f, 0x91,
0xd3, 0xfb, 0x95, 0x14, 0xed, 0x28, 0x0f, 0xa4, 0x7b, 0xe7, 0x9d, 0x9b, 0xb8, 0x1d, 0xdd, 0x7e,
0xe7, 0x9e, 0xfc, 0x36, 0x99, 0x50, 0x0f, 0xeb, 0x8e, 0x3c, 0x6f, 0x64, 0x66, 0x20, 0xdd, 0x03,
0x7c, 0x7d, 0xf0, 0xf0, 0x68, 0x04, 0x6b, 0xe3, 0x3e, 0xbd, 0xdd, 0xfb, 0xda, 0xbb, 0xfb, 0x50,
0x14, 0x7c, 0xb7, 0xbe, 0x1d, 0xd6, 0x9d, 0x1d, 0x92, 0x88, 0x10, 0x18, 0xbe, 0xe2, 0xff, 0xe6,
0x12, 0x2e, 0xed, 0x89, 0x7d, 0x8a, 0x62, 0x09, 0x4e, 0xe1, 0x31, 0xf3, 0x66, 0x58, 0x77, 0x3d,
0xb4, 0x49, 0x29, 0x36, 0x65, 0x90, 0x3d, 0xd2, 0xad, 0x16, 0xa4, 0x18, 0xd8, 0x7d, 0x10, 0x07,
0x8a, 0x05, 0xb8, 0x9d, 0x47, 0x1f, 0xa6, 0xe5, 0x73, 0x1a, 0x96, 0xcd, 0x34, 0xaf, 0x2c, 0xee,
0xcc, 0x69, 0xd6, 0xfb, 0xfd, 0x13, 0x5e, 0x82, 0xe2, 0x14, 0x17, 0x07, 0xbe, 0xfe, 0x0e, 0x21,
0x37, 0x3d, 0x62, 0x1e, 0x81, 0x5b, 0xce, 0xdd, 0xa9, 0x6a, 0xe4, 0xb0, 0xe9, 0x8b, 0x21, 0xe0,
0xab, 0x3b, 0x28, 0xbf, 0x83, 0x5c, 0xde, 0xcf, 0xdb, 0x73, 0xca, 0x04, 0x9b, 0x2d, 0xb6, 0x7f,
0x10, 0xac, 0x95, 0xcf, 0x9e, 0x0e, 0x6f, 0x11, 0xef, 0x71, 0x21, 0x5c, 0xea, 0x53, 0x28, 0x71,
0xe9, 0xa1, 0xb3, 0xf5, 0x4a, 0xd3, 0x3a, 0x6f, 0x0a, 0x57, 0x54, 0xdb, 0xa1, 0xa7, 0xfb, 0x6e,
0x37, 0x17, 0xbe, 0x8b, 0xfe, 0x00, 0x11, 0xc9, 0xb1, 0x72, 0x74, 0xe0, 0x97, 0xf0, 0xbf, 0xf4,
0xe2, 0x79, 0xd5, 0x90, 0x2c, 0x00, 0xc0, 0x57, 0x77, 0xb7, 0x9d, 0x3b, 0x4e, 0x9f, 0xd4, 0x6e,
0xd6, 0x41, 0xee, 0xb8, 0x6f, 0x3a, 0x14, 0x81, 0x92, 0xbc, 0xbc, 0xba, 0x8a, 0x70, 0xb5, 0xb7,
0x4f, 0xb5, 0x3d, 0x3c, 0x87, 0xfb, 0x83, 0x13, 0x75, 0x57, 0x63, 0x49, 0x9e, 0xe3, 0x52, 0x57,
0x86, 0xe8, 0x8e, 0x9c, 0x43, 0x50, 0xd6, 0xe5, 0x5c, 0xde, 0x55, 0x0f, 0x66, 0xe0, 0xba, 0xd7,
0x73, 0xd0, 0x5d, 0xa9, 0x54, 0xc2, 0x07, 0xdf, 0xb0, 0x6e, 0x0d, 0xe5, 0x32, 0x01, 0x48, 0x77,
0xd1, 0xc2, 0x39, 0xe4, 0xab, 0x6a, 0xcd, 0x36, 0x89, 0xa2, 0x9d, 0x07, 0xef, 0x09, 0xd4, 0xfd,
0xfc, 0xb9, 0xb3, 0x20, 0xee, 0x8f, 0x3e, 0xa0, 0x1e, 0x18, 0x4e, 0x46, 0x4a, 0x5e, 0x1d, 0x97,
0x4d, 0x84, 0x40, 0x4d, 0xfa, 0x74, 0xb6, 0x28, 0xe2, 0xea, 0x6b, 0x50, 0xd4, 0x75, 0x8e, 0xba,
0x67, 0x8b, 0x4d, 0x04, 0x45, 0xce, 0xce, 0x37, 0x3d, 0xe1, 0x3e, 0xef, 0x01, 0x9e, 0x74, 0xe0,
0xab, 0x3b, 0x42, 0xcc, 0xf1, 0x68, 0xca, 0x77, 0xbd, 0xed, 0x4a, 0x12, 0x92, 0xbe, 0x66, 0xe3,
0x3a, 0xba, 0x78, 0xe5, 0x0a, 0xd5, 0x13, 0x91, 0xf4, 0xc6, 0xf3, 0x46, 0xc2, 0x26, 0x42, 0xf8,
0x3e, 0x42, 0x75, 0xad, 0x3d, 0xd4, 0xeb, 0x42, 0xb4, 0x90, 0xbe, 0x1e, 0x46, 0x07, 0xf8, 0xcd,
0xf7, 0x26, 0x17, 0xdb, 0xf9, 0x65, 0x12, 0xd4, 0xf7, 0x3d, 0x49, 0xdc, 0x6a, 0x42, 0x18, 0xf8,
0xea, 0xbe, 0x79, 0xd3, 0x7f, 0xc3, 0xf6, 0x6a, 0x67, 0x16, 0xd0, 0xe5, 0xb1, 0x0d, 0xde, 0xbb,
0x90, 0xf4, 0xd5, 0xeb, 0x29, 0x76, 0xe2, 0xe6, 0x8e, 0x11, 0xe4, 0x8d, 0x96, 0x22, 0xc2, 0x42,
0x8d, 0xbe, 0x79, 0x13, 0x00, 0x1d, 0x83, 0x5b, 0x85, 0x8d, 0x3b, 0x22, 0x72, 0xf4, 0x13, 0x7e,
0x46, 0x41, 0x05, 0xf5, 0x66, 0x4f, 0xdc, 0x21, 0x20, 0xbd, 0x2f, 0x5b, 0xf2, 0x2d, 0x5c, 0x20,
0xa0, 0xf0, 0x1f, 0xda, 0xdd, 0xa3, 0xaa, 0x7e, 0x5c, 0x8a, 0xa4, 0xaf, 0x5a, 0xbd, 0x9c, 0x5c,
0xbc, 0xe1, 0x08, 0x8a, 0xf4, 0x3e, 0x75, 0x12, 0x71, 0xfa, 0x9a, 0x09, 0x90, 0xf3, 0xa2, 0xd1,
0xde, 0x2f, 0x03, 0x57, 0x5f, 0x40, 0xa3, 0x07, 0x0e, 0xc1, 0xf9, 0x0c, 0x2b, 0x44, 0xf3, 0x67,
0x21, 0xe9, 0x81, 0x6b, 0x3a, 0x18, 0x26, 0xc0, 0x08, 0x51, 0x77, 0xf0, 0x49, 0x01, 0xbf, 0xb9,
0x97, 0xc7, 0x2e, 0x01, 0xb6, 0x0c, 0x47, 0x64, 0x62, 0x21, 0x2e, 0x3d, 0xe5, 0x72, 0xa8, 0x1c,
0xd1, 0x3d, 0x64, 0xba, 0x03, 0x54, 0xad, 0x5d, 0x89, 0x4b, 0x5f, 0x32, 0x61, 0x8c, 0x24, 0x34,
0xb0, 0xe7, 0xb5, 0x01, 0xf5, 0xa6, 0x49, 0x36, 0x63, 0x79, 0x0d, 0x3e, 0x95, 0x84, 0x07, 0xd7,
0xbb, 0x38, 0x11, 0x9d, 0xeb, 0xd6, 0x41, 0xb7, 0x4d, 0xeb, 0xdc, 0xb7, 0x37, 0xf8, 0x7a, 0x48,
0x22, 0xf7, 0x4a, 0x13, 0xe2, 0x15, 0xcd, 0x4c, 0xd3, 0xfa, 0xcf, 0xdc, 0xd2, 0x5b, 0x0b, 0x35,
0xe2, 0x1a, 0x71, 0xce, 0x2e, 0x47, 0x0c, 0xa9, 0xee, 0x00, 0x4d, 0x51, 0xe1, 0x7a, 0xd2, 0x0f,
0xb8, 0xd2, 0x69, 0xe3, 0x2b, 0x97, 0x2e, 0xaa, 0x73, 0xda, 0x2c, 0xf6, 0x76, 0xc7, 0x37, 0x6c,
0x12, 0x7b, 0x03, 0xe7, 0x8e, 0x5c, 0x6f, 0x49, 0xb1, 0x9e, 0xee, 0xe5, 0xe5, 0x65, 0xa8, 0x1c,
0xf9, 0xfd, 0x77, 0xff, 0xe1, 0x12, 0x7d, 0x43, 0x80, 0x17, 0x39, 0x7a, 0x56, 0x57, 0xfe, 0xc5,
0xa7, 0xa0, 0xf2, 0xdd, 0xf7, 0xff, 0xec, 0x9d, 0x89, 0x5f, 0x13, 0xd7, 0x16, 0xc7, 0xfb, 0x5f,
0xbc, 0xf7, 0xda, 0x5a, 0x14, 0x77, 0xad, 0x5b, 0x15, 0xad, 0xf5, 0xa9, 0x7d, 0xad, 0xda, 0xd6,
0x7d, 0xa9, 0xd6, 0x3e, 0x6b, 0xfb, 0xac, 0x56, 0x16, 0x51, 0xeb, 0xc6, 0xbe, 0x2f, 0x82, 0xec,
0x82, 0x80, 0x80, 0x28, 0xe0, 0x02, 0x88, 0x0b, 0x0a, 0x88, 0x82, 0x08, 0xa8, 0xb8, 0x20, 0x04,
0x65, 0x87, 0x04, 0x42, 0x20, 0x40, 0x16, 0x08, 0x7b, 0xf6, 0xc4, 0x77, 0x71, 0x70, 0x98, 0xcc,
0x4c, 0x26, 0x93, 0x98, 0x15, 0xe7, 0xfb, 0x39, 0x1f, 0x3f, 0x71, 0x32, 0x73, 0xb9, 0x73, 0xf2,
0xcb, 0xcd, 0xbd, 0x73, 0xef, 0x3d, 0x87, 0xd3, 0x85, 0x5b, 0x66, 0x45, 0x8b, 0x4a, 0xf8, 0x8c,
0x4a, 0xba, 0x2e, 0x6d, 0xa8, 0xa1, 0xfd, 0x0e, 0x50, 0x0c, 0x0f, 0x75, 0x9d, 0x70, 0xd4, 0xe1,
0xf6, 0xc5, 0x4d, 0xaa, 0x7e, 0x87, 0x1e, 0xcb, 0xc1, 0x26, 0x25, 0x11, 0xe5, 0x52, 0x37, 0xbf,
0xc3, 0xc6, 0xf1, 0x76, 0x95, 0x0f, 0x0e, 0x62, 0x8b, 0xa5, 0x77, 0x0d, 0x21, 0x5d, 0xaf, 0x43,
0x00, 0x65, 0x23, 0xf8, 0x1d, 0x42, 0xca, 0xe9, 0x06, 0x8d, 0x0c, 0x50, 0xba, 0x8e, 0x7e, 0x07,
0x5e, 0x86, 0x72, 0xc3, 0x1d, 0x76, 0xb0, 0x83, 0x5e, 0x30, 0x18, 0x9a, 0x83, 0x1e, 0x80, 0xaf,
0x1b, 0x99, 0x24, 0x71, 0xe0, 0xe3, 0xe9, 0x3a, 0x71, 0xb8, 0x6d, 0xf3, 0x0f, 0xa0, 0x29, 0xc4,
0xd6, 0x03, 0x37, 0xae, 0x66, 0x35, 0x73, 0x5c, 0xf5, 0xc7, 0x23, 0x4a, 0xb5, 0x75, 0x87, 0x8a,
0xdf, 0x05, 0x06, 0xf4, 0x3b, 0x0c, 0xe8, 0xdb, 0xf4, 0x65, 0x5d, 0x03, 0x23, 0x5b, 0x5e, 0x68,
0x20, 0xc7, 0xc7, 0x95, 0x20, 0x4f, 0x1c, 0xba, 0x9d, 0x81, 0xf0, 0xf5, 0xd6, 0x31, 0x0c, 0x2f,
0x49, 0xa4, 0x5d, 0x9d, 0xdc, 0x20, 0x1f, 0xb4, 0xf0, 0xfd, 0xdc, 0xb1, 0x67, 0xc6, 0xe4, 0x34,
0x21, 0x1a, 0x7a, 0xed, 0x7e, 0x63, 0x8d, 0xef, 0x77, 0xad, 0x30, 0x81, 0xdf, 0x21, 0x40, 0xd3,
0x81, 0x0c, 0x12, 0x00, 0x8c, 0x6d, 0xff, 0x27, 0xf6, 0x34, 0xa7, 0xa4, 0x57, 0x63, 0xee, 0xd3,
0x32, 0x81, 0x35, 0x39, 0xbf, 0xeb, 0x12, 0x5a, 0x40, 0x2f, 0x98, 0xcc, 0xef, 0x10, 0x52, 0x2e,
0x67, 0x34, 0xda, 0xce, 0x7b, 0xd7, 0x83, 0x9e, 0x00, 0xea, 0x84, 0x11, 0xc4, 0xb6, 0x0d, 0xdf,
0x4c, 0xf4, 0xb6, 0x47, 0x02, 0x28, 0xbf, 0x6b, 0x86, 0xb1, 0x64, 0xde, 0xf8, 0x30, 0x24, 0x26,
0x1c, 0xf5, 0xae, 0xe7, 0xd5, 0xf1, 0x4e, 0x3d, 0xf9, 0x32, 0x29, 0xbf, 0x93, 0x82, 0xb5, 0x7b,
0x1b, 0xec, 0x7a, 0x51, 0x23, 0x3a, 0xe9, 0x24, 0xec, 0xc1, 0xd0, 0x6c, 0xb2, 0xad, 0xbc, 0x88,
0xf2, 0x3b, 0x19, 0x14, 0x42, 0x21, 0xec, 0x77, 0xd6, 0xcf, 0xe8, 0xf4, 0x3e, 0xae, 0x29, 0x63,
0x31, 0xc2, 0x1c, 0xfc, 0xc9, 0x06, 0x1d, 0xa1, 0xfc, 0x4e, 0x96, 0xbe, 0x8c, 0xcb, 0xb0, 0xeb,
0x51, 0x79, 0x20, 0x68, 0x88, 0x91, 0x14, 0xbb, 0x97, 0x54, 0x0c, 0x5d, 0xca, 0xef, 0x5a, 0xc0,
0x5c, 0xff, 0x1d, 0xe4, 0x91, 0xf6, 0xdd, 0xdb, 0x50, 0x6f, 0xc1, 0x8b, 0xb3, 0xa2, 0x30, 0xd9,
0x52, 0x70, 0x41, 0xfa, 0xbd, 0x93, 0xf2, 0x3b, 0x31, 0xfd, 0xb7, 0xb3, 0x60, 0xc9, 0x2b, 0xc4,
0x2a, 0xce, 0x72, 0x49, 0x1e, 0x0b, 0xa6, 0xec, 0x9e, 0x5c, 0x41, 0xa6, 0xa8, 0x09, 0xe5, 0xf7,
0x4e, 0x36, 0xfb, 0xd6, 0x4d, 0x1d, 0xb3, 0xee, 0x91, 0x84, 0xfe, 0xe5, 0x34, 0xc8, 0x29, 0xbd,
0x97, 0x12, 0x91, 0xc7, 0xa3, 0xee, 0x8e, 0x8d, 0xa1, 0x48, 0xc6, 0x95, 0x9a, 0x50, 0x7e, 0x9f,
0x37, 0x6b, 0xba, 0xa1, 0x37, 0x0d, 0x77, 0x9d, 0x3c, 0x0c, 0x39, 0xa5, 0xdb, 0xc3, 0x09, 0x79,
0xbc, 0xae, 0x63, 0x50, 0xab, 0xc7, 0x35, 0x13, 0xca, 0xef, 0x56, 0x9f, 0xfe, 0xe3, 0x72, 0x6a,
0xca, 0x51, 0x47, 0x07, 0xc3, 0x55, 0x08, 0x7e, 0xbe, 0xda, 0xb2, 0x72, 0x29, 0xf2, 0xf8, 0x90,
0x48, 0xed, 0xbe, 0x77, 0x5c, 0x26, 0x8e, 0xdf, 0x23, 0x42, 0x43, 0xdc, 0x9c, 0x47, 0x35, 0x68,
0xd0, 0xd0, 0x10, 0x83, 0x0f, 0xf2, 0x20, 0xa7, 0xd0, 0xe7, 0x4e, 0x45, 0xbd, 0x05, 0xfb, 0xb1,
0xba, 0x5d, 0x73, 0x3c, 0xaf, 0x89, 0xe3, 0x77, 0xd8, 0xdd, 0x0b, 0xe6, 0xce, 0x82, 0x76, 0x4d,
0x62, 0xf1, 0xf3, 0xf6, 0xc2, 0x3d, 0x4e, 0x1e, 0x51, 0x53, 0x3d, 0xfc, 0xd3, 0x8a, 0x7a, 0xeb,
0xa0, 0xfb, 0x58, 0x4c, 0xe4, 0x17, 0x74, 0xfc, 0xc8, 0xbd, 0x2a, 0xe5, 0x4c, 0x0c, 0xbf, 0xf7,
0xf7, 0xf5, 0x41, 0x6b, 0x4b, 0x80, 0xfd, 0xb4, 0x76, 0x6c, 0x57, 0x7c, 0x56, 0x66, 0xc6, 0xc6,
0x1f, 0xd7, 0xce, 0xb4, 0xb6, 0x3a, 0x7e, 0xc4, 0x71, 0xf6, 0x34, 0x6b, 0x70, 0x04, 0xbc, 0x1e,
0x2d, 0xc1, 0xcb, 0x63, 0xc5, 0xd2, 0x25, 0x8f, 0x4b, 0x48, 0x65, 0x63, 0x46, 0x21, 0xa6, 0x37,
0xa9, 0xf5, 0xfb, 0xfb, 0x58, 0xd4, 0x4f, 0x1a, 0x34, 0xcf, 0x84, 0x4c, 0x10, 0xbf, 0xaf, 0x5f,
0xf7, 0x7d, 0x5a, 0xca, 0x25, 0xe4, 0x3e, 0x79, 0xb9, 0x5c, 0x0e, 0xfc, 0x0e, 0xde, 0x6a, 0x6c,
0xa8, 0xe7, 0xf1, 0x46, 0xe3, 0x4c, 0x97, 0xbf, 0x7c, 0x01, 0xf9, 0xfd, 0xce, 0xed, 0x5b, 0xe0,
0x5f, 0x28, 0x15, 0xb1, 0xb6, 0x90, 0xf1, 0xfb, 0xe3, 0x7a, 0xcd, 0x01, 0xc0, 0x27, 0x88, 0xdf,
0x51, 0x6d, 0xba, 0xfd, 0x5f, 0xfb, 0xf7, 0xfc, 0xb2, 0x13, 0xf2, 0x3b, 0x9d, 0xde, 0x2c, 0x14,
0x8e, 0x06, 0x0a, 0x7c, 0xf9, 0xe2, 0x39, 0xe4, 0x77, 0x48, 0xe9, 0xa8, 0x80, 0x80, 0x24, 0x11,
0x33, 0x9a, 0x35, 0xfa, 0xbd, 0x54, 0x4b, 0xbf, 0xb3, 0x2d, 0xd4, 0xef, 0x39, 0x77, 0xb2, 0x51,
0x8b, 0x3b, 0xa0, 0x88, 0x05, 0x94, 0xdf, 0x75, 0xc6, 0xbc, 0xc6, 0xab, 0x6f, 0x49, 0xfa, 0xbd,
0x8e, 0xf2, 0xbb, 0xbe, 0x11, 0xb7, 0xd0, 0xd5, 0xfb, 0x7d, 0x2c, 0xab, 0x58, 0x49, 0x1d, 0x4e,
0xda, 0x02, 0x14, 0xa4, 0xfc, 0x5e, 0x47, 0xf9, 0xfd, 0x3d, 0x64, 0xfc, 0x5e, 0x54, 0xc3, 0xd5,
0x58, 0x0e, 0xa5, 0x77, 0xed, 0x90, 0xb2, 0xdb, 0x61, 0xbf, 0x2b, 0x65, 0x32, 0xe4, 0x5b, 0x76,
0x3e, 0x63, 0xe9, 0x51, 0x92, 0x1e, 0x30, 0x34, 0x96, 0xd3, 0xd1, 0x3b, 0x1e, 0x1a, 0xbf, 0x7f,
0x44, 0x65, 0x41, 0xca, 0xf8, 0x7a, 0x0a, 0xba, 0x7e, 0x92, 0x60, 0xe9, 0x80, 0xd9, 0xf9, 0x5d,
0x21, 0x1c, 0x81, 0xfd, 0x22, 0xe5, 0xa8, 0xec, 0x59, 0x71, 0x8e, 0x7b, 0x0e, 0xf9, 0xd1, 0xed,
0x62, 0xa5, 0xc6, 0x72, 0x62, 0xf3, 0xde, 0x27, 0x6c, 0x52, 0x9d, 0x10, 0x97, 0xf5, 0xf0, 0xe1,
0xf2, 0x65, 0x3c, 0xcd, 0xdf, 0x1b, 0x03, 0x61, 0x76, 0x7e, 0x07, 0xd0, 0xe7, 0x4e, 0x85, 0xfc,
0xd2, 0x97, 0x75, 0x0d, 0x79, 0xfc, 0x4c, 0xf6, 0xf8, 0xb2, 0x0e, 0xae, 0xa6, 0x47, 0x34, 0xb6,
0x9e, 0x63, 0x4b, 0xec, 0xbd, 0x53, 0xab, 0x90, 0xc7, 0x07, 0x1f, 0xde, 0x1f, 0xf3, 0xfb, 0x4c,
0x2b, 0xbd, 0xd7, 0x9c, 0x3c, 0xe6, 0xe8, 0x77, 0xd6, 0x7f, 0x77, 0x40, 0xae, 0xc1, 0xa6, 0x93,
0x81, 0x43, 0xba, 0x1f, 0x0b, 0x7d, 0x44, 0x50, 0x82, 0xe7, 0xe5, 0xf1, 0x74, 0x2a, 0xcf, 0x1a,
0x55, 0x36, 0xfb, 0x72, 0x4f, 0x8f, 0x2d, 0xdd, 0x61, 0xae, 0xff, 0x4e, 0xef, 0x35, 0x27, 0x8f,
0x39, 0xfa, 0x9d, 0x17, 0x15, 0x32, 0xf6, 0x48, 0xf2, 0x9b, 0xaf, 0x50, 0x6f, 0x05, 0xdf, 0x6e,
0x84, 0x1d, 0x7a, 0x22, 0xfe, 0x25, 0x07, 0x2f, 0x09, 0x96, 0x4b, 0xca, 0x78, 0xc2, 0x26, 0x4f,
0xcc, 0x2e, 0x06, 0xc6, 0xe2, 0xb9, 0x50, 0xe1, 0xbc, 0x88, 0x60, 0x43, 0xdd, 0x00, 0x09, 0xcc,
0xd1, 0xef, 0xf2, 0x3e, 0x01, 0xdc, 0x04, 0x0f, 0x3d, 0x2a, 0x40, 0xbd, 0xeb, 0x72, 0x71, 0x7c,
0xcb, 0x28, 0x30, 0xd7, 0xa4, 0x57, 0xe1, 0x77, 0x9b, 0x32, 0x9e, 0xb6, 0x9f, 0xcd, 0x69, 0xf2,
0x48, 0xa1, 0xc1, 0xcf, 0xce, 0x80, 0xd9, 0x79, 0xdf, 0x43, 0x5d, 0x3b, 0x54, 0xfa, 0x68, 0x7c,
0xd5, 0x42, 0xcd, 0x1b, 0x63, 0xdd, 0x10, 0x0e, 0xe6, 0xe8, 0x77, 0x40, 0xfb, 0x6f, 0x3b, 0xc7,
0x5a, 0x83, 0x8d, 0x6b, 0xb0, 0xef, 0xfa, 0xc6, 0x3e, 0x41, 0xba, 0x1e, 0xd7, 0x0e, 0xf9, 0x17,
0x74, 0x60, 0x66, 0xc0, 0x59, 0xbb, 0xb7, 0xbe, 0x7f, 0xb8, 0x6f, 0x63, 0x94, 0xfb, 0x50, 0x8b,
0x99, 0xfa, 0x7d, 0x20, 0xe7, 0x16, 0x2c, 0xcc, 0x9e, 0xb8, 0xb3, 0xd8, 0x13, 0x42, 0xee, 0x34,
0x11, 0x38, 0x3d, 0x38, 0x0b, 0x67, 0xe1, 0x63, 0x4f, 0xfc, 0x59, 0xb8, 0xcc, 0xbe, 0x1b, 0xe9,
0x86, 0xbf, 0x09, 0x22, 0xcc, 0xd4, 0xef, 0x80, 0x76, 0xc4, 0x4a, 0x26, 0xdc, 0xb5, 0xda, 0x0a,
0xa5, 0xf2, 0x62, 0x51, 0xab, 0x4f, 0x4a, 0xa5, 0x7d, 0x40, 0xc1, 0xe8, 0xbe, 0xe4, 0x80, 0x42,
0xb7, 0x0b, 0xa0, 0xcd, 0x69, 0x46, 0xa5, 0x6a, 0x82, 0x40, 0x76, 0x1f, 0x99, 0x3f, 0xfd, 0xc7,
0xf0, 0xd5, 0xd7, 0x80, 0xf9, 0xfa, 0x5d, 0x21, 0x11, 0xc3, 0x9e, 0xa2, 0xcf, 0x9f, 0x21, 0xac,
0xae, 0xd2, 0x7c, 0x8d, 0x1a, 0x24, 0x6d, 0x4c, 0xd0, 0xb0, 0x98, 0xc3, 0x70, 0x09, 0x66, 0xdc,
0xef, 0x4a, 0xa5, 0x12, 0xb5, 0x4f, 0xfe, 0x52, 0xf2, 0x05, 0x13, 0xd6, 0x0c, 0x00, 0xfa, 0xef,
0xb0, 0xb3, 0x9a, 0xf1, 0xd6, 0xef, 0x91, 0x41, 0x31, 0x32, 0xd2, 0x3c, 0x6b, 0xf2, 0x78, 0xab,
0x85, 0xb7, 0xd6, 0xde, 0xf8, 0xa8, 0xe8, 0xdd, 0xee, 0xaf, 0xfd, 0xda, 0xee, 0x93, 0x37, 0x34,
0xfc, 0xf7, 0x7d, 0x4a, 0xc8, 0xf8, 0xd1, 0x61, 0x5a, 0x5d, 0xde, 0x93, 0x70, 0x0e, 0x79, 0x39,
0x2f, 0xd4, 0x34, 0x41, 0xa2, 0xb1, 0xa8, 0xdd, 0x27, 0xff, 0xaa, 0xfc, 0xa5, 0x49, 0x2a, 0x84,
0x42, 0xa9, 0x50, 0xf0, 0x11, 0xe9, 0xc5, 0x80, 0x31, 0xbe, 0x5e, 0x88, 0xca, 0xbb, 0x84, 0xcb,
0x40, 0xde, 0x5d, 0xe6, 0xda, 0x55, 0x2a, 0x4e, 0x0f, 0x0b, 0x54, 0xca, 0xb5, 0x4e, 0x2c, 0x66,
0x20, 0xd0, 0x7e, 0x8f, 0x8d, 0x3e, 0x0b, 0x9c, 0x3e, 0xcd, 0xea, 0x73, 0x93, 0xd4, 0x46, 0x1d,
0x3d, 0x09, 0x31, 0x48, 0x0f, 0x8e, 0x7a, 0xdf, 0x66, 0x1e, 0x18, 0x79, 0xf6, 0xdf, 0xcc, 0x90,
0x71, 0x39, 0xe0, 0xb3, 0x79, 0xfb, 0xee, 0x13, 0x02, 0x1d, 0xff, 0x81, 0xbc, 0x3b, 0x1c, 0x7f,
0x4f, 0x86, 0xcd, 0x7c, 0xd4, 0xf9, 0xbd, 0xc9, 0xf1, 0xa6, 0xbe, 0x09, 0x15, 0xf0, 0xf7, 0xc9,
0xf7, 0x10, 0x6e, 0x75, 0x34, 0x09, 0xe2, 0x16, 0x3a, 0x6b, 0xc7, 0x46, 0x94, 0x37, 0xc9, 0x18,
0x73, 0xf3, 0x3a, 0x31, 0xbd, 0xd1, 0xd4, 0xd5, 0x47, 0xf3, 0x49, 0xfe, 0xbd, 0x7b, 0x28, 0xb3,
0x3d, 0xb0, 0x1f, 0x7b, 0xd0, 0x4c, 0x2c, 0x27, 0x2d, 0xe5, 0xa6, 0x87, 0x6b, 0xd6, 0xb1, 0xc3,
0xea, 0x0c, 0xe9, 0xf1, 0xb6, 0xad, 0x3f, 0x0d, 0x95, 0x14, 0x69, 0xf6, 0x81, 0x29, 0xc0, 0xd1,
0xbb, 0xf9, 0x23, 0x65, 0x77, 0xf0, 0x22, 0xcf, 0xb4, 0x6d, 0x5a, 0x07, 0xcf, 0x60, 0x8c, 0xdb,
0x8c, 0x2f, 0xda, 0x36, 0xaf, 0xe3, 0x45, 0x85, 0x80, 0xef, 0x87, 0xa9, 0xab, 0x49, 0x84, 0x45,
0xfa, 0x1d, 0x09, 0x68, 0xd3, 0x25, 0xad, 0x0c, 0x71, 0x53, 0xbd, 0x84, 0xd9, 0x82, 0x3b, 0xbc,
0x32, 0x4f, 0x2c, 0xde, 0xef, 0x14, 0x1f, 0x8e, 0x50, 0x22, 0x6f, 0xe8, 0x1c, 0xcc, 0x2e, 0xef,
0x8c, 0xcc, 0x69, 0xf6, 0xcf, 0xaa, 0xf7, 0xcf, 0xa8, 0xf1, 0x4e, 0xab, 0xf2, 0x48, 0x7e, 0xe5,
0x92, 0xf0, 0xf2, 0xe4, 0xb9, 0x67, 0xce, 0xf1, 0xcf, 0xdd, 0x93, 0xca, 0xbd, 0x53, 0x68, 0x3e,
0x57, 0xde, 0xf8, 0x67, 0xd6, 0x05, 0xdd, 0x6a, 0x4c, 0x2a, 0x6c, 0x2d, 0x6b, 0xec, 0x69, 0xef,
0x11, 0x8a, 0xa5, 0xe6, 0xd2, 0x3f, 0x24, 0x09, 0x25, 0xf7, 0x8f, 0x91, 0x4a, 0x66, 0x7f, 0x78,
0x0e, 0xdd, 0xe7, 0x6a, 0xf5, 0xa1, 0xa0, 0x22, 0x5b, 0xcf, 0x3c, 0x8d, 0xcf, 0x76, 0x09, 0xcc,
0xd6, 0x3b, 0xdf, 0x29, 0xf6, 0x79, 0x40, 0x56, 0xfd, 0xed, 0x97, 0x9d, 0x03, 0x42, 0xcd, 0x71,
0x15, 0x4c, 0xcb, 0x27, 0x4a, 0x25, 0x18, 0xc2, 0x69, 0x66, 0xcd, 0xb7, 0x2b, 0x83, 0x02, 0xfc,
0xc9, 0x9c, 0x49, 0x61, 0x9e, 0xbc, 0x66, 0xf6, 0x85, 0x67, 0x37, 0x38, 0xc7, 0x3d, 0x3b, 0xe8,
0x76, 0x97, 0x84, 0xe9, 0xa8, 0x7e, 0x3b, 0xef, 0x7b, 0x41, 0x19, 0xd5, 0x29, 0x25, 0xac, 0xde,
0x21, 0x89, 0x66, 0xf5, 0x19, 0x1d, 0x52, 0xad, 0xfb, 0x2f, 0x3b, 0xb6, 0x41, 0x4f, 0x6c, 0x62,
0xa3, 0x71, 0xe6, 0x1f, 0x28, 0xcc, 0x99, 0x56, 0xee, 0xf0, 0xe9, 0x9b, 0x0d, 0xa4, 0x62, 0x5b,
0xba, 0xe7, 0xda, 0x07, 0x14, 0x1e, 0x8d, 0x7c, 0xec, 0x7a, 0xe1, 0x95, 0x47, 0xda, 0x6b, 0xaf,
0x6b, 0x35, 0x3e, 0x19, 0xb5, 0xfe, 0xd7, 0xeb, 0xfd, 0xae, 0xd7, 0xf9, 0x66, 0xd4, 0xfa, 0x5c,
0xab, 0xf1, 0x4a, 0xa5, 0x9d, 0x38, 0xf7, 0xcc, 0x21, 0xb0, 0xd0, 0xce, 0x3b, 0x9f, 0x8c, 0xf4,
0xdd, 0x93, 0x2b, 0xe2, 0x1e, 0xb4, 0x98, 0xda, 0x01, 0x2a, 0x68, 0x90, 0xbb, 0x4c, 0x26, 0xfb,
0x7e, 0xf5, 0x4a, 0xe4, 0x83, 0x61, 0x2f, 0x77, 0x57, 0xe3, 0xd4, 0x8c, 0xe2, 0x03, 0x49, 0x29,
0x6e, 0x73, 0x3a, 0xf3, 0x90, 0x68, 0xfa, 0x39, 0xb8, 0xc8, 0xe5, 0x22, 0x2d, 0xe2, 0x4e, 0xe3,
0xf3, 0xa6, 0xde, 0x41, 0x91, 0x4c, 0x73, 0x89, 0x08, 0xe4, 0x0a, 0x25, 0x83, 0x33, 0x7c, 0xa5,
0xb4, 0x0d, 0x7c, 0x25, 0x8e, 0x84, 0x15, 0x13, 0xfc, 0x15, 0x87, 0xc0, 0x87, 0xbe, 0x99, 0x75,
0x8d, 0x9d, 0x43, 0x06, 0xba, 0x4d, 0xad, 0x20, 0x92, 0xfb, 0xf0, 0xf0, 0xf0, 0x92, 0x85, 0xf3,
0x50, 0xf3, 0x4f, 0xc0, 0xec, 0xfe, 0xda, 0x6f, 0xb4, 0xfa, 0x51, 0xe8, 0xc0, 0xe5, 0xe2, 0x56,
0xc7, 0xc0, 0x42, 0x75, 0x4d, 0xb8, 0x73, 0xdc, 0xf3, 0xf4, 0x52, 0x26, 0x7f, 0x50, 0xcf, 0x9d,
0x0d, 0x5a, 0x8b, 0xc0, 0x2f, 0xb3, 0xce, 0xc1, 0xef, 0xbe, 0x3a, 0xdd, 0xbb, 0x5f, 0xa9, 0x16,
0x4b, 0xb4, 0xfb, 0x52, 0xe9, 0x1d, 0xb5, 0x72, 0xe7, 0x72, 0x38, 0xb3, 0xa7, 0x4d, 0xc1, 0x6a,
0x1d, 0xb2, 0xed, 0x98, 0xf7, 0xe3, 0xca, 0x00, 0x00, 0x15, 0x2d, 0x49, 0x44, 0x41, 0x54, 0x9b,
0x37, 0xea, 0x10, 0x65, 0x8d, 0xc2, 0xd0, 0x94, 0x56, 0x73, 0x8e, 0x45, 0x97, 0xe1, 0xaa, 0xcd,
0x29, 0xb9, 0xf2, 0x5a, 0x09, 0xd3, 0x08, 0x75, 0x60, 0x72, 0x87, 0x42, 0x33, 0x6b, 0xd4, 0x89,
0xde, 0x3f, 0xa3, 0x76, 0x60, 0xc4, 0x64, 0x23, 0x5a, 0x7c, 0xb9, 0x83, 0x3e, 0x4c, 0x72, 0x62,
0x42, 0x42, 0x7c, 0x2c, 0x6c, 0xbb, 0x77, 0x6e, 0x77, 0x73, 0x3a, 0x85, 0x3c, 0x92, 0x97, 0x73,
0xd7, 0xc8, 0x75, 0xa5, 0x20, 0x00, 0xf4, 0x16, 0xfc, 0xd3, 0xaa, 0x70, 0x15, 0xe6, 0x9b, 0x4a,
0x13, 0x0c, 0x9a, 0x20, 0x21, 0x77, 0x54, 0x4e, 0xb3, 0x63, 0x60, 0x01, 0xb6, 0x3e, 0x87, 0x43,
0x8a, 0xb3, 0x9f, 0xeb, 0x2d, 0xe2, 0xb9, 0x56, 0x90, 0x7d, 0x10, 0x19, 0x7c, 0x3a, 0xe0, 0xd9,
0xd3, 0xa7, 0x06, 0xad, 0x0a, 0x85, 0xce, 0xe4, 0x55, 0x74, 0xe1, 0x0e, 0x46, 0x3d, 0x92, 0xca,
0x69, 0xad, 0x9a, 0xf7, 0xb4, 0x23, 0x91, 0x76, 0xb1, 0x45, 0x75, 0x35, 0x7d, 0x59, 0xe9, 0xbd,
0x17, 0xe2, 0xf9, 0xe7, 0x22, 0xf9, 0x51, 0x21, 0xfc, 0x73, 0x11, 0xbd, 0x17, 0xe2, 0xfa, 0xb2,
0xae, 0x0d, 0xbf, 0x28, 0x43, 0xed, 0x00, 0x21, 0x43, 0xc8, 0xed, 0x46, 0x78, 0x23, 0x20, 0xd2,
0x7c, 0xb4, 0x4f, 0x76, 0xf5, 0xe1, 0x50, 0x72, 0xb7, 0x78, 0xe2, 0xee, 0x33, 0xb0, 0x69, 0x23,
0x6c, 0xdd, 0x73, 0x42, 0x49, 0x47, 0xb2, 0x1e, 0xc8, 0xcd, 0xe6, 0x06, 0x78, 0xc1, 0xd9, 0xa9,
0x34, 0x5a, 0xeb, 0xea, 0x65, 0x1c, 0x6f, 0x17, 0x41, 0x7a, 0x9a, 0x8c, 0xaf, 0x79, 0x3f, 0x25,
0x60, 0x70, 0x44, 0xea, 0x96, 0xfa, 0x1a, 0xab, 0x78, 0xaf, 0xb4, 0xaa, 0x1e, 0x7d, 0x0f, 0x21,
0x88, 0xa1, 0xe4, 0x6e, 0xd9, 0xc4, 0x03, 0xad, 0x7b, 0xa3, 0xb5, 0xee, 0x94, 0x54, 0xc1, 0xe6,
0x8f, 0x68, 0xbc, 0xb6, 0x3f, 0xfb, 0x46, 0xc7, 0x81, 0xbd, 0xcd, 0xef, 0xf7, 0x90, 0xe9, 0x66,
0x6d, 0x1b, 0xd6, 0x08, 0xd2, 0x92, 0xc9, 0x54, 0x35, 0xf8, 0x66, 0x03, 0xb6, 0x99, 0xf7, 0x48,
0xae, 0x60, 0x70, 0x86, 0x3f, 0xd8, 0x0d, 0x64, 0xa1, 0xe4, 0x6e, 0xc1, 0x5c, 0x2f, 0xeb, 0xb0,
0x0f, 0x40, 0x3f, 0x81, 0x71, 0x4e, 0x2c, 0x6f, 0xd1, 0x24, 0x20, 0xc1, 0xd5, 0x14, 0xe4, 0x6a,
0x74, 0xac, 0xd1, 0xe7, 0x4e, 0x6d, 0x5d, 0xb5, 0x0c, 0x48, 0xb9, 0x6d, 0xdb, 0x7a, 0xe6, 0xfa,
0xef, 0x5b, 0xbf, 0x5f, 0x41, 0x5f, 0x30, 0x93, 0x68, 0x25, 0xde, 0x86, 0xef, 0x05, 0x29, 0x9a,
0x97, 0x8c, 0x47, 0xe7, 0x36, 0x63, 0x9f, 0xd9, 0xfb, 0xa4, 0xd7, 0x48, 0x64, 0x0a, 0x3d, 0xb9,
0x44, 0x03, 0x94, 0xdc, 0x2d, 0x95, 0x3a, 0xf6, 0xa0, 0x7b, 0xe2, 0x4b, 0x94, 0x74, 0x4e, 0xc4,
0x94, 0x55, 0xb6, 0x12, 0xa5, 0xff, 0x91, 0xb0, 0xda, 0x3a, 0x8f, 0xda, 0xe1, 0xb7, 0xd3, 0x9b,
0x7f, 0xe0, 0x85, 0xf8, 0x0f, 0x97, 0x3d, 0x56, 0x08, 0xf1, 0x7f, 0x19, 0x14, 0x42, 0xa1, 0xa8,
0xe6, 0x0d, 0x2f, 0x3c, 0x08, 0xb9, 0xfd, 0x46, 0xa5, 0x84, 0x2d, 0x3f, 0x0e, 0x16, 0xa0, 0xf7,
0xef, 0xa1, 0x18, 0x4f, 0x98, 0x0a, 0xf7, 0xbb, 0x3c, 0xef, 0x45, 0x6a, 0x19, 0x58, 0x5e, 0x67,
0x28, 0xb9, 0x5b, 0x24, 0x0a, 0xa5, 0x12, 0xab, 0x1b, 0x7b, 0xbf, 0x07, 0x17, 0x8b, 0x98, 0x04,
0x57, 0x0d, 0xe4, 0xde, 0x46, 0x6d, 0x03, 0x80, 0x8c, 0x6d, 0xb7, 0x4f, 0x54, 0xfd, 0x9a, 0xe4,
0x9f, 0x66, 0xb3, 0x3b, 0x1c, 0x0e, 0x1e, 0x90, 0x72, 0xba, 0x38, 0x3e, 0x6e, 0x38, 0x3f, 0x0b,
0x8b, 0x66, 0xa3, 0x62, 0x7d, 0xa2, 0x10, 0x4b, 0x15, 0x9e, 0x57, 0xaa, 0x51, 0x35, 0x3f, 0x76,
0xf6, 0x29, 0x8d, 0xf0, 0x5b, 0xaa, 0x2f, 0x28, 0xb9, 0x5b, 0x24, 0xcf, 0xe9, 0x02, 0xe7, 0x73,
0xe8, 0xe7, 0xeb, 0xa0, 0x57, 0x40, 0xb0, 0x44, 0xb1, 0x3f, 0xe7, 0x56, 0xcb, 0xaa, 0xa5, 0x68,
0x81, 0x2e, 0x98, 0xd9, 0x9b, 0x92, 0x44, 0xf2, 0x8f, 0x8a, 0xc5, 0xe2, 0x5d, 0xdb, 0xb7, 0x22,
0x8f, 0x0c, 0x3e, 0xc8, 0x03, 0x1d, 0x1e, 0x54, 0x99, 0x2d, 0xcb, 0x17, 0xf5, 0xdf, 0xcc, 0x24,
0x28, 0xe7, 0xd6, 0x0b, 0xb6, 0x43, 0x20, 0x7a, 0xba, 0x37, 0x48, 0x9b, 0x3c, 0xc1, 0x3a, 0x43,
0xc9, 0xdd, 0x22, 0x89, 0xbe, 0x47, 0x47, 0xad, 0x64, 0xb4, 0x0f, 0x28, 0x48, 0x2b, 0x66, 0xaa,
0x3b, 0x1f, 0xf4, 0x61, 0xba, 0x9d, 0xff, 0x46, 0x3f, 0x60, 0x59, 0xbb, 0x52, 0x63, 0xdf, 0x03,
0x66, 0xc7, 0x96, 0x4d, 0x32, 0x19, 0xce, 0x9c, 0xe8, 0xf0, 0xcb, 0x67, 0xac, 0x9d, 0x9b, 0x50,
0x25, 0x83, 0x11, 0xb0, 0xa8, 0x41, 0x6d, 0x16, 0x90, 0x21, 0x91, 0xcc, 0xeb, 0xf2, 0x1b, 0xf4,
0x53, 0x9a, 0x14, 0x5a, 0x7b, 0x0f, 0xa9, 0x90, 0xf2, 0x1f, 0x02, 0x25, 0x77, 0xcb, 0x43, 0xae,
0x50, 0x9e, 0xbe, 0x89, 0xee, 0xc9, 0x1c, 0x8b, 0x29, 0x6b, 0xec, 0x52, 0xbb, 0x2e, 0x45, 0x70,
0x2d, 0x95, 0x61, 0x33, 0x4f, 0xa5, 0xd7, 0xb1, 0x70, 0x56, 0x4f, 0xbc, 0xda, 0x05, 0x7f, 0x22,
0x91, 0x68, 0xd1, 0xbc, 0x39, 0xd0, 0x0c, 0xfa, 0x34, 0xab, 0xcf, 0xdb, 0xdb, 0x89, 0xb2, 0x10,
0xf7, 0x81, 0xc2, 0x97, 0x2d, 0x50, 0x29, 0x7c, 0xfe, 0x8c, 0xde, 0xe4, 0xf3, 0x04, 0x97, 0x04,
0xdf, 0x6a, 0x44, 0x46, 0xec, 0x80, 0xe6, 0x9e, 0x1e, 0x93, 0x08, 0xbf, 0xfa, 0x81, 0x50, 0x72,
0xb7, 0x3c, 0x46, 0x24, 0xf2, 0x80, 0xcc, 0x5a, 0x94, 0xdc, 0xdd, 0x92, 0x2b, 0x51, 0xd9, 0xef,
0x90, 0x8c, 0xa6, 0x03, 0x9f, 0x69, 0x85, 0x1a, 0x98, 0x8e, 0xd0, 0xd4, 0x66, 0xee, 0x5e, 0xb1,
0x74, 0x09, 0x72, 0xcd, 0xc8, 0x72, 0x1b, 0x74, 0xdc, 0x1f, 0x24, 0x92, 0x0e, 0x56, 0xc7, 0xfe,
0x3d, 0xa8, 0x06, 0x9e, 0x17, 0x11, 0xac, 0xc4, 0xfb, 0x35, 0x80, 0x88, 0xcd, 0xa7, 0xc3, 0xc1,
0xe1, 0x0e, 0x8e, 0xad, 0x24, 0x2b, 0xbc, 0xfd, 0x52, 0x6d, 0x4e, 0x5e, 0x7d, 0x41, 0xc9, 0xdd,
0xf2, 0x18, 0x16, 0xcb, 0x7c, 0xd3, 0xd1, 0x8b, 0x52, 0xbc, 0x52, 0xab, 0x08, 0x82, 0xe0, 0xf3,
0x22, 0x83, 0x51, 0x72, 0x64, 0xed, 0xde, 0x4a, 0xd0, 0xdf, 0x00, 0x1c, 0x39, 0x64, 0xbf, 0xdc,
0x66, 0xf1, 0x8a, 0x65, 0x4b, 0xfe, 0xfc, 0x7d, 0x2f, 0x71, 0x7d, 0xa4, 0x5d, 0x9d, 0x9d, 0x7f,
0x3b, 0xa0, 0xca, 0xe7, 0x06, 0xf9, 0x2a, 0xd5, 0x67, 0xd1, 0x4c, 0x2c, 0x68, 0x81, 0xd3, 0xb3,
0xbc, 0xef, 0x8c, 0x15, 0x66, 0x3e, 0xd5, 0x73, 0x26, 0x7b, 0x2c, 0x94, 0xdc, 0x2d, 0x0f, 0xfd,
0xc8, 0xfd, 0x17, 0x20, 0x77, 0xfd, 0x4c, 0xe3, 0x53, 0x72, 0xa7, 0x30, 0x20, 0x46, 0x96, 0xbb,
0x58, 0x2c, 0x96, 0x48, 0x88, 0xa6, 0xfa, 0xa5, 0x5d, 0x6c, 0x4a, 0xee, 0x14, 0x86, 0x02, 0x57,
0xee, 0x9e, 0x7a, 0x95, 0x7b, 0x5c, 0x4c, 0x34, 0xe8, 0xb2, 0x3b, 0xda, 0xdb, 0x4e, 0xfe, 0xec,
0x9f, 0x50, 0xa2, 0x6f, 0x57, 0xa7, 0x93, 0xea, 0x4e, 0xa6, 0xe4, 0x3e, 0x8a, 0x5c, 0x2e, 0xb7,
0x79, 0xb7, 0x3b, 0xc4, 0x7a, 0xd2, 0xa7, 0xdd, 0x5d, 0xf8, 0x49, 0xe2, 0x29, 0x74, 0xc0, 0x68,
0x72, 0x5f, 0xba, 0x68, 0x3e, 0x99, 0x2c, 0xf6, 0x94, 0xdc, 0x47, 0x39, 0xb8, 0x7f, 0x1f, 0x70,
0xd9, 0xc3, 0xc2, 0x82, 0x29, 0x9f, 0xff, 0x6b, 0xe9, 0x57, 0x0b, 0xe4, 0x66, 0x13, 0xc4, 0xcb,
0xd2, 0x31, 0x9a, 0xdc, 0x3d, 0xdd, 0x5c, 0xc8, 0xd4, 0x87, 0x92, 0xfb, 0xdb, 0xa4, 0x84, 0x78,
0xe0, 0xaf, 0xe3, 0x47, 0x1c, 0xc1, 0xeb, 0x6b, 0x57, 0x2e, 0x83, 0xd7, 0x7b, 0x76, 0xef, 0xd2,
0xa5, 0x82, 0x14, 0x18, 0x46, 0xc4, 0x72, 0xe3, 0xc8, 0x3d, 0x28, 0xc0, 0x8f, 0x4c, 0x7d, 0x3e,
0x76, 0xb9, 0x57, 0xd1, 0x2a, 0x81, 0xb3, 0xbe, 0x5e, 0xb2, 0x08, 0xde, 0xe0, 0x77, 0xd8, 0xc1,
0x0e, 0x1c, 0x09, 0xf4, 0xf3, 0xd5, 0xa5, 0x8e, 0x14, 0xaa, 0x50, 0x72, 0xd7, 0x19, 0xfd, 0xcb,
0x5d, 0x24, 0x14, 0x7e, 0x39, 0x73, 0x1a, 0x18, 0xdf, 0xb4, 0xb6, 0x8c, 0x07, 0x5d, 0x50, 0x28,
0x14, 0xcb, 0x16, 0x2f, 0x04, 0x1e, 0xbc, 0x79, 0x63, 0x3c, 0x29, 0xb1, 0xa0, 0xb7, 0x17, 0x9c,
0x0c, 0xac, 0xfa, 0xcd, 0x6b, 0xf0, 0x2f, 0x74, 0x5a, 0x6d, 0x4d, 0x4d, 0x47, 0x87, 0xca, 0x6d,
0x83, 0xd3, 0x68, 0x95, 0x15, 0x0c, 0x3a, 0x1d, 0xea, 0x0e, 0x49, 0x24, 0x12, 0x30, 0x12, 0x80,
0x9f, 0x15, 0x0c, 0x0d, 0x0d, 0x71, 0x39, 0x1c, 0x92, 0x77, 0x31, 0x31, 0x30, 0x4b, 0xb9, 0xdb,
0x7f, 0xa4, 0x72, 0x87, 0x83, 0xd2, 0xa8, 0xb3, 0x86, 0xfa, 0xb1, 0xd9, 0x8d, 0x3f, 0x7f, 0xff,
0x0d, 0xfc, 0x02, 0xf4, 0xf6, 0x8e, 0x4e, 0x1d, 0xff, 0xb1, 0xe7, 0xd7, 0x99, 0xd6, 0x56, 0x2d,
0x8c, 0xd1, 0xec, 0x4b, 0xe7, 0xa2, 0xa3, 0xd6, 0x7e, 0xbb, 0x0a, 0xbc, 0x78, 0x54, 0xf4, 0x70,
0xfe, 0xec, 0x19, 0x40, 0xee, 0xe0, 0xf5, 0xc8, 0xc8, 0xc8, 0x9c, 0xe9, 0xd6, 0x99, 0xe9, 0xa3,
0x69, 0x6c, 0xea, 0x6a, 0x6b, 0xa7, 0x4f, 0x9e, 0xf4, 0xf4, 0xc9, 0x63, 0xe7, 0x93, 0xc7, 0xb7,
0x6d, 0xda, 0xf0, 0xb1, 0x8d, 0x0a, 0x8c, 0x20, 0x77, 0xad, 0xf8, 0x78, 0xe5, 0x1e, 0x1a, 0x1c,
0x04, 0x04, 0xbd, 0x6f, 0xef, 0x1e, 0xdc, 0x77, 0xaf, 0x67, 0xa4, 0x83, 0x77, 0x81, 0x6a, 0x87,
0x87, 0x47, 0xf7, 0x1f, 0x00, 0xb9, 0x87, 0x87, 0x9c, 0x81, 0xde, 0x8a, 0x8e, 0x8a, 0xd8, 0xfb,
0xdf, 0x5f, 0xa0, 0xd7, 0xa5, 0xc5, 0xc5, 0x8b, 0xe6, 0xcd, 0x79, 0xfb, 0xae, 0xe5, 0x76, 0x38,
0x78, 0x00, 0x28, 0x7b, 0xcd, 0xea, 0x95, 0xae, 0x4e, 0x27, 0x57, 0x2c, 0x5d, 0x92, 0x78, 0x3e,
0x0e, 0x3a, 0x07, 0x34, 0xf0, 0xd6, 0x93, 0x3e, 0xfd, 0x75, 0xe7, 0x0e, 0x92, 0xf5, 0x9f, 0x48,
0xe0, 0xca, 0xdd, 0x2b, 0x95, 0xd6, 0xad, 0x7e, 0x11, 0x01, 0x9e, 0xdc, 0xb7, 0x50, 0x72, 0x57,
0x0b, 0x19, 0xb9, 0x97, 0x14, 0x3f, 0x02, 0x6a, 0x9e, 0x3b, 0x63, 0xaa, 0x58, 0xa4, 0xd6, 0xef,
0x4e, 0x27, 0x8e, 0x81, 0x73, 0x7e, 0x5c, 0x33, 0x9a, 0x96, 0x0a, 0xc8, 0x3d, 0x32, 0x2c, 0x14,
0x3a, 0x8e, 0x2b, 0xf7, 0xe3, 0x47, 0x0f, 0xef, 0xd8, 0xb2, 0x11, 0x6a, 0xbc, 0xc1, 0x57, 0x05,
0x74, 0x90, 0x22, 0x42, 0x43, 0xc0, 0xeb, 0x8b, 0x17, 0x92, 0x6c, 0x16, 0xce, 0x1b, 0xe8, 0xef,
0x2f, 0xb8, 0x9f, 0x3f, 0x6b, 0xda, 0x14, 0x64, 0xaf, 0xe9, 0x63, 0xc0, 0x32, 0xe4, 0x1e, 0x3c,
0xd1, 0xe5, 0x6e, 0x08, 0x40, 0x6f, 0xbe, 0x93, 0xcd, 0x16, 0x8b, 0x4d, 0x10, 0x37, 0xc2, 0x6c,
0xd1, 0x51, 0xee, 0xaa, 0xd1, 0xc1, 0x29, 0xb9, 0x13, 0x41, 0xcd, 0xaa, 0x9a, 0x0f, 0x3a, 0xc9,
0xfd, 0x0c, 0x25, 0xf7, 0xb7, 0x94, 0xdc, 0x2d, 0x11, 0x4a, 0xee, 0x3a, 0x43, 0xc9, 0xdd, 0xf2,
0x18, 0x91, 0x50, 0x72, 0xd7, 0x11, 0x4a, 0xee, 0x96, 0xc7, 0x44, 0x90, 0x7b, 0x21, 0x25, 0x77,
0x0a, 0x72, 0x18, 0x47, 0xee, 0xed, 0x2c, 0x16, 0xfc, 0x1a, 0x39, 0xaf, 0x87, 0x85, 0x92, 0x3b,
0x85, 0x01, 0x31, 0x9c, 0xdc, 0x07, 0xfa, 0xfb, 0x83, 0x02, 0xfc, 0x66, 0x58, 0x5b, 0x59, 0x7d,
0xfa, 0x8f, 0xef, 0x56, 0xfd, 0x1b, 0x3e, 0x0e, 0xad, 0x7a, 0x02, 0xb6, 0x6d, 0xd3, 0x06, 0x6c,
0x12, 0x52, 0x4a, 0xee, 0x14, 0x06, 0x44, 0xbf, 0x72, 0x57, 0x2a, 0x95, 0x39, 0x77, 0xef, 0xac,
0xfa, 0x66, 0x19, 0x6a, 0xf2, 0x1b, 0x57, 0xee, 0xb0, 0x4d, 0xb3, 0xfa, 0xdc, 0xc3, 0xd5, 0x99,
0xcf, 0x1f, 0x4d, 0x49, 0x2a, 0xed, 0x64, 0x77, 0x1d, 0x3f, 0x84, 0x99, 0x66, 0xf2, 0x21, 0x90,
0x7b, 0x52, 0x61, 0x2b, 0x56, 0xee, 0xe9, 0x4f, 0x28, 0xb9, 0x53, 0x60, 0xd0, 0x8b, 0xdc, 0xe9,
0x3f, 0x6f, 0x5a, 0xb6, 0xe0, 0x4b, 0x82, 0xb5, 0x1e, 0xb3, 0xa6, 0x4e, 0xfe, 0x75, 0xe7, 0x0e,
0xc8, 0xbe, 0x5b, 0xb9, 0x82, 0xe0, 0xcc, 0x19, 0x93, 0x27, 0x45, 0xfe, 0xbc, 0x05, 0x25, 0xf7,
0x6e, 0xf7, 0x93, 0xf2, 0x21, 0xb5, 0x91, 0x11, 0xf2, 0x68, 0xdd, 0x0e, 0xa7, 0x55, 0x42, 0xcd,
0xd8, 0x7a, 0xe4, 0x85, 0xdd, 0x31, 0x78, 0x2c, 0x31, 0x4a, 0xee, 0x96, 0x07, 0xae, 0xdc, 0x3d,
0xb5, 0x6d, 0xdd, 0x77, 0x6d, 0x11, 0xd5, 0x8f, 0xb6, 0xee, 0x7d, 0x02, 0x81, 0xbf, 0x8f, 0xf7,
0x8c, 0x29, 0x5f, 0x68, 0xd5, 0xba, 0x03, 0xdb, 0xf8, 0xe3, 0x3a, 0x48, 0x12, 0x4a, 0xa9, 0x84,
0x17, 0x81, 0x9e, 0xb5, 0x6d, 0xdf, 0xbb, 0x93, 0x20, 0x7f, 0x73, 0xa7, 0x40, 0xe4, 0x7b, 0x05,
0x1d, 0x13, 0xf8, 0x54, 0x42, 0x79, 0x1b, 0xcf, 0xb0, 0xe1, 0x51, 0x29, 0xb9, 0x5b, 0x1e, 0xfa,
0x95, 0x3b, 0x92, 0x2a, 0x1a, 0x6d, 0xd7, 0xf6, 0xad, 0x04, 0x72, 0x5f, 0x30, 0x67, 0x56, 0x52,
0x42, 0x3c, 0x76, 0x92, 0xbb, 0x37, 0x25, 0x91, 0xbe, 0x70, 0x16, 0xb2, 0x7c, 0x86, 0xcd, 0xbc,
0xde, 0xa4, 0x58, 0x82, 0xbb, 0xb8, 0x50, 0xc4, 0xb4, 0xc3, 0xc4, 0x2e, 0x76, 0x4d, 0x7a, 0x45,
0x57, 0x1f, 0x2d, 0xe7, 0xc3, 0xa1, 0xe4, 0x6e, 0x79, 0x18, 0x4e, 0xee, 0x30, 0x32, 0x99, 0xac,
0xb0, 0xe0, 0x01, 0xfc, 0xdf, 0xda, 0x9a, 0x6a, 0xe4, 0x83, 0x1a, 0x2c, 0x92, 0xb6, 0xd6, 0xae,
0x93, 0x87, 0x51, 0x0d, 0x3c, 0x18, 0xbf, 0x12, 0xa7, 0x3f, 0xb8, 0x00, 0x7a, 0xf0, 0xbe, 0xe8,
0x5c, 0x4e, 0x76, 0x3e, 0xf9, 0xd1, 0xb9, 0x64, 0x23, 0xd3, 0x6b, 0x0b, 0x25, 0x77, 0xcb, 0xc3,
0x08, 0x72, 0xd7, 0x81, 0xde, 0xe4, 0xf3, 0xf4, 0x79, 0xd3, 0x51, 0x8a, 0xe7, 0x85, 0x07, 0x11,
0x5f, 0x75, 0xa5, 0x94, 0x75, 0xf8, 0x34, 0x26, 0x6b, 0xda, 0xbb, 0x00, 0x63, 0x7e, 0x19, 0xb5,
0xf5, 0x1d, 0xfd, 0x7a, 0xac, 0xe1, 0x5b, 0x82, 0xdc, 0x4c, 0x25, 0x8f, 0x8a, 0x90, 0xe6, 0x60,
0xfb, 0x57, 0xfc, 0xb9, 0x18, 0xe4, 0x11, 0x5a, 0x65, 0xe5, 0x87, 0xff, 0x79, 0x89, 0x4c, 0x91,
0x52, 0xc2, 0x4a, 0x2c, 0x68, 0xc5, 0x58, 0x0b, 0xca, 0x12, 0x80, 0x3d, 0xd0, 0x6c, 0xe0, 0xda,
0xe4, 0x22, 0xe6, 0xe5, 0xd2, 0xb6, 0xac, 0x67, 0x1d, 0xf7, 0x5f, 0x73, 0xca, 0x5b, 0xfa, 0x9a,
0xbb, 0x87, 0xf9, 0x83, 0x12, 0x99, 0xdc, 0x48, 0x11, 0xc4, 0x8d, 0x80, 0x11, 0xe4, 0xde, 0xdc,
0xd4, 0x68, 0x7b, 0x60, 0xdf, 0xec, 0x69, 0xd6, 0xa0, 0x03, 0x33, 0xd3, 0xda, 0xea, 0xa7, 0xb5,
0xdf, 0x85, 0x87, 0x9c, 0x21, 0x58, 0xe8, 0x0a, 0x50, 0xca, 0x64, 0xdc, 0x20, 0x5f, 0x94, 0xdc,
0x41, 0x0f, 0xa7, 0xf7, 0x42, 0xbc, 0xc6, 0x3b, 0xf2, 0xba, 0x86, 0xbe, 0x1d, 0xa4, 0x39, 0x06,
0x17, 0x79, 0xa5, 0x55, 0xf9, 0x66, 0xd6, 0x9d, 0xb9, 0xd5, 0x10, 0x99, 0xd3, 0x14, 0x95, 0xd3,
0xac, 0xd6, 0x72, 0x9b, 0xcf, 0xa2, 0x8d, 0x0e, 0x59, 0xcc, 0x3d, 0x3a, 0x9d, 0x33, 0xac, 0xb6,
0x75, 0xa7, 0x37, 0x37, 0x4d, 0xfd, 0xe2, 0x33, 0x75, 0x83, 0xf1, 0xff, 0xfc, 0xfb, 0x1b, 0x32,
0x7b, 0xd4, 0x35, 0x22, 0x93, 0x2b, 0xfd, 0x32, 0xeb, 0x08, 0x6e, 0x55, 0x9f, 0xe6, 0x9e, 0x6b,
0xef, 0xf7, 0xe0, 0x68, 0xe4, 0x63, 0xcf, 0xd4, 0x2a, 0xff, 0xac, 0xfa, 0x94, 0x47, 0xcc, 0x6a,
0xd6, 0x00, 0x41, 0xc8, 0x5c, 0xb3, 0xc5, 0xd0, 0x72, 0x8f, 0x0a, 0x0f, 0x03, 0x1f, 0x31, 0x68,
0xdd, 0xe0, 0x23, 0x9c, 0xee, 0xee, 0x05, 0x73, 0x67, 0x4d, 0xf9, 0xfc, 0x5f, 0xc4, 0x1b, 0xc7,
0x64, 0x82, 0xde, 0xae, 0x53, 0x47, 0xd0, 0x8a, 0x9f, 0x3b, 0x95, 0x1f, 0x17, 0xa5, 0xf1, 0xa6,
0x3a, 0x7a, 0x84, 0xfe, 0x99, 0xb5, 0xb8, 0x59, 0x9c, 0xf4, 0x62, 0xa7, 0x62, 0x9f, 0xd7, 0xb3,
0x07, 0x89, 0x3a, 0x33, 0x3c, 0x2e, 0x77, 0xce, 0x74, 0x6b, 0xac, 0xd6, 0x77, 0x6c, 0xd9, 0xa4,
0xb1, 0xf6, 0x24, 0x31, 0xaa, 0xdc, 0xd5, 0x98, 0x9d, 0x77, 0xbe, 0x4b, 0xfc, 0x8b, 0xc0, 0x1b,
0xf5, 0x99, 0x65, 0x1d, 0x5d, 0x02, 0xa2, 0x06, 0xcc, 0x4c, 0x50, 0x27, 0x77, 0x82, 0x18, 0x91,
0x5a, 0xc9, 0xfd, 0xf6, 0xcd, 0x1b, 0xe0, 0x53, 0x06, 0xe2, 0x3e, 0xea, 0xe8, 0x70, 0x37, 0xfb,
0xf6, 0xc0, 0xc0, 0x00, 0xf9, 0xba, 0x49, 0xbb, 0x3b, 0xbb, 0x30, 0xfb, 0x56, 0x9b, 0x67, 0x4d,
0xe6, 0x06, 0x93, 0xdd, 0xa6, 0x9c, 0x4f, 0xeb, 0x0e, 0xc8, 0xa8, 0xb1, 0xf7, 0x21, 0x95, 0x98,
0x5b, 0x9f, 0x72, 0x7f, 0xfb, 0x2e, 0x93, 0xb0, 0xcd, 0xa2, 0xf9, 0x48, 0xad, 0xdb, 0x1f, 0x3c,
0x40, 0xfe, 0xe6, 0x35, 0x02, 0xfa, 0x18, 0xa3, 0xb9, 0x67, 0x03, 0x0a, 0xf5, 0x68, 0xf6, 0xfe,
0x05, 0xa0, 0x15, 0xb7, 0xf5, 0xce, 0x47, 0x85, 0x84, 0x26, 0x69, 0x87, 0x4e, 0x17, 0xfa, 0x5f,
0x79, 0x9d, 0x58, 0xd8, 0xca, 0x55, 0xbf, 0x17, 0xce, 0xb4, 0xe8, 0x49, 0xee, 0x9b, 0x89, 0xfb,
0xee, 0x0c, 0x3a, 0xfd, 0x5c, 0x74, 0xd4, 0xc6, 0x1f, 0xd7, 0x41, 0x61, 0x95, 0x80, 0x81, 0x2e,
0x4d, 0x57, 0xa7, 0xe6, 0xa8, 0xa5, 0xd2, 0xce, 0x0e, 0x6c, 0x1b, 0x0f, 0x8c, 0x6d, 0xfb, 0x3f,
0x61, 0x55, 0x05, 0xf9, 0xdb, 0x04, 0xb7, 0x53, 0xce, 0x10, 0x80, 0x4e, 0x88, 0x5f, 0x66, 0xad,
0x6f, 0x1a, 0xcd, 0xed, 0xfc, 0xf3, 0xa3, 0x61, 0x25, 0x87, 0x82, 0x8b, 0xc6, 0x2c, 0x48, 0x3b,
0x3b, 0x95, 0x50, 0xae, 0x59, 0xee, 0x6f, 0xdf, 0x45, 0x47, 0x5a, 0xf3, 0xed, 0x58, 0x9e, 0x78,
0x1f, 0x4f, 0x77, 0xf2, 0xd5, 0x35, 0x13, 0xa4, 0x72, 0x05, 0x77, 0x40, 0xfc, 0xba, 0xad, 0xff,
0x7a, 0x59, 0x07, 0xe8, 0xde, 0x81, 0x5f, 0x4c, 0xe7, 0xf8, 0xe7, 0xe0, 0x2b, 0x71, 0xd0, 0x43,
0xf3, 0x97, 0xe1, 0x48, 0xd0, 0xc3, 0xe0, 0x9b, 0x0d, 0x65, 0x4d, 0xbd, 0xa6, 0xbe, 0x09, 0x15,
0x0c, 0x2d, 0x77, 0x2f, 0x77, 0xd7, 0x9f, 0xb7, 0x6e, 0xea, 0x13, 0xa8, 0x64, 0xa8, 0xcc, 0xb9,
0x93, 0x0d, 0x04, 0x00, 0x8e, 0x93, 0xac, 0x24, 0x3f, 0x2a, 0x04, 0x34, 0xea, 0x58, 0xd1, 0x77,
0x39, 0xff, 0x4d, 0x32, 0x75, 0x99, 0x21, 0x20, 0xfb, 0x64, 0x66, 0xb9, 0xcd, 0x57, 0xce, 0x27,
0x8f, 0x1b, 0xb4, 0x2a, 0xc6, 0x07, 0x74, 0x5d, 0x2e, 0x16, 0x31, 0x03, 0x33, 0x6b, 0x8f, 0x86,
0x97, 0x12, 0xf7, 0x1a, 0x8f, 0x84, 0x16, 0x47, 0xdd, 0x69, 0xe4, 0x9b, 0x22, 0x19, 0x2f, 0x16,
0x7c, 0xb9, 0xa7, 0xe8, 0x4d, 0xee, 0x35, 0xd5, 0xd5, 0x33, 0xa7, 0x4e, 0x86, 0xf6, 0x1c, 0x27,
0xc4, 0xc7, 0x5d, 0x48, 0x3c, 0x0f, 0x86, 0xad, 0xa0, 0x8d, 0xff, 0x72, 0xe6, 0x34, 0x68, 0xef,
0x3c, 0x49, 0x06, 0xef, 0xe7, 0xb2, 0xb6, 0x6f, 0xc0, 0x2a, 0x7e, 0xb4, 0xa5, 0x3f, 0xf8, 0xc7,
0x50, 0xf1, 0x43, 0xad, 0xef, 0xfc, 0x83, 0xf9, 0xa4, 0xa3, 0xbd, 0xbd, 0xac, 0xec, 0xa9, 0x46,
0x03, 0xdd, 0xb8, 0x6b, 0x57, 0xaf, 0x90, 0x39, 0xd3, 0xe4, 0xd6, 0xd2, 0xa2, 0xc5, 0x47, 0x82,
0x24, 0xbf, 0x8a, 0x13, 0x74, 0xb3, 0xfe, 0xef, 0xc8, 0xc7, 0x04, 0xba, 0xf7, 0x48, 0x2a, 0xcf,
0x7d, 0x65, 0xe2, 0x00, 0x80, 0x40, 0xee, 0x7e, 0x86, 0x94, 0x3b, 0x4c, 0x4f, 0x0f, 0xbf, 0xfa,
0xcd, 0x6b, 0x5a, 0x65, 0x05, 0x78, 0xa1, 0x73, 0x6d, 0x7b, 0x12, 0x62, 0x18, 0x8b, 0xe7, 0xe2,
0xb6, 0xf4, 0x2d, 0xab, 0x96, 0x72, 0xfc, 0x3d, 0x45, 0xf5, 0x35, 0x3a, 0x17, 0xae, 0x2d, 0xa4,
0x5a, 0xf7, 0xac, 0xcc, 0x0c, 0xf0, 0x5d, 0x9f, 0x3d, 0x6d, 0xca, 0x87, 0xdc, 0xb6, 0x05, 0xc1,
0x1f, 0x94, 0x24, 0x16, 0xb4, 0xb8, 0x24, 0xbd, 0x52, 0x27, 0x7a, 0xc7, 0x80, 0xc2, 0xe8, 0x3c,
0xba, 0xa9, 0xaa, 0x27, 0x34, 0x70, 0xeb, 0x6e, 0x08, 0xfa, 0xd2, 0xd3, 0x88, 0x53, 0x5b, 0xb2,
0xed, 0xf6, 0xf1, 0xe3, 0xa2, 0x44, 0x8d, 0xf5, 0x06, 0xad, 0x86, 0x66, 0xb9, 0xc7, 0x46, 0x9f,
0x45, 0xae, 0x83, 0xd3, 0xb9, 0xed, 0xc4, 0x45, 0x29, 0x95, 0x4a, 0x39, 0xdd, 0xba, 0x99, 0x8c,
0xcb, 0xc1, 0xb7, 0x1e, 0xbe, 0x7c, 0xa0, 0x5f, 0xa1, 0x8f, 0xdd, 0xdc, 0x35, 0xed, 0x03, 0xa1,
0x77, 0x9a, 0x8e, 0x60, 0xe7, 0x41, 0xa0, 0x47, 0x3a, 0x9e, 0x79, 0xe7, 0xf3, 0xe9, 0x46, 0xc8,
0x28, 0x84, 0xc2, 0x12, 0xe5, 0x0e, 0x31, 0x54, 0x52, 0xc4, 0xf1, 0x72, 0x46, 0xe5, 0x11, 0x41,
0xdb, 0x8c, 0x2f, 0x5a, 0x56, 0x2c, 0xee, 0xf8, 0xfd, 0x17, 0xd0, 0xf0, 0xf3, 0xa3, 0xc3, 0xfa,
0x6f, 0x64, 0x8c, 0xbc, 0x7a, 0x21, 0x61, 0xb6, 0x80, 0x4f, 0x5c, 0xde, 0x27, 0x00, 0x9f, 0xac,
0xce, 0xa6, 0x10, 0x09, 0x35, 0xc8, 0x1d, 0x8c, 0x5a, 0xb0, 0x0f, 0x22, 0xb1, 0x2b, 0x9e, 0x75,
0x46, 0x21, 0x1c, 0x01, 0x77, 0x45, 0x74, 0xf3, 0x1f, 0x68, 0x73, 0xa7, 0xb6, 0x7c, 0xbd, 0x90,
0xb5, 0x63, 0x63, 0xb7, 0xfb, 0x29, 0x5e, 0x78, 0x50, 0x5f, 0xe6, 0x55, 0x09, 0xab, 0x4d, 0x87,
0x7a, 0x36, 0xb3, 0x07, 0x7d, 0x2e, 0x55, 0xe0, 0x8a, 0x1e, 0x74, 0x7e, 0xf2, 0x5e, 0x19, 0x3c,
0xcb, 0x0a, 0x12, 0xcb, 0x95, 0x3b, 0xcc, 0xe0, 0x83, 0x3c, 0x8e, 0xb7, 0x2b, 0x63, 0xc9, 0x97,
0x06, 0xfc, 0xe8, 0x55, 0xad, 0xfd, 0xb7, 0x9d, 0xe2, 0xa6, 0x06, 0x22, 0xb9, 0xdb, 0xfd, 0xb5,
0x5f, 0xdd, 0x34, 0x53, 0x5e, 0xce, 0x5d, 0xbd, 0xdc, 0xb6, 0xc1, 0xe5, 0xae, 0xc6, 0x98, 0xeb,
0x56, 0x77, 0x7b, 0xb9, 0xf4, 0x5e, 0x4a, 0x54, 0x8c, 0x68, 0xb1, 0x04, 0x8f, 0x23, 0x10, 0x62,
0xd7, 0xf1, 0x41, 0xe6, 0x76, 0x89, 0xc6, 0xe9, 0x33, 0x52, 0x33, 0x3f, 0x01, 0xe4, 0x0e, 0x23,
0xed, 0xee, 0x04, 0x9d, 0xfb, 0x6e, 0x97, 0x63, 0x8c, 0xa5, 0xf3, 0x4d, 0x26, 0x77, 0xa5, 0x52,
0xb9, 0x7d, 0xf3, 0x46, 0xe2, 0xd8, 0x77, 0x97, 0x92, 0x35, 0x27, 0x05, 0xd7, 0x88, 0xa9, 0xe4,
0x8e, 0x34, 0x86, 0xcd, 0x3c, 0x5e, 0x48, 0xc0, 0xf0, 0x93, 0x12, 0x38, 0x80, 0x2b, 0x31, 0xbc,
0x7e, 0x91, 0x5b, 0x4a, 0x15, 0x56, 0xf1, 0xb6, 0x5e, 0xf7, 0x8c, 0xd3, 0xa1, 0x57, 0x2b, 0x77,
0xf5, 0x73, 0x64, 0x66, 0x2b, 0x77, 0x24, 0x40, 0x0c, 0x22, 0x7a, 0x93, 0xe0, 0x6a, 0x0a, 0xff,
0x6c, 0x08, 0xc7, 0xc7, 0xad, 0x7d, 0xf7, 0x36, 0xc6, 0xb2, 0x05, 0xa3, 0x0b, 0x2d, 0x55, 0x6b,
0xae, 0x7f, 0xb9, 0x63, 0xf1, 0xf5, 0xf6, 0xac, 0xac, 0x50, 0x9b, 0xa8, 0x4d, 0x67, 0x94, 0x0a,
0x05, 0xe8, 0x64, 0x2b, 0x24, 0x08, 0x13, 0x13, 0x98, 0x48, 0xb3, 0x89, 0x44, 0xc0, 0x6b, 0xa0,
0x93, 0x27, 0x65, 0xb7, 0x8f, 0xd0, 0x2a, 0x06, 0x72, 0x6f, 0xf3, 0x63, 0xc2, 0xb9, 0x81, 0xde,
0x9d, 0x0e, 0xfb, 0x5b, 0x96, 0x7f, 0xa5, 0xc1, 0x29, 0x33, 0xad, 0x78, 0x11, 0xc1, 0x72, 0x31,
0xa9, 0x89, 0xd5, 0x7b, 0x15, 0x5d, 0x47, 0x23, 0x4a, 0xb1, 0xa2, 0xf7, 0xbc, 0xf2, 0x66, 0x44,
0x62, 0xd8, 0x85, 0x09, 0x13, 0x55, 0xee, 0x04, 0x28, 0xe5, 0x72, 0x85, 0x50, 0x28, 0x1f, 0x1c,
0x30, 0x6c, 0xdf, 0x1d, 0xc6, 0x40, 0x72, 0x37, 0x32, 0xc0, 0x65, 0xa2, 0xc6, 0x3a, 0xa0, 0x69,
0xb6, 0xdd, 0x3e, 0xdc, 0x47, 0x63, 0x63, 0x2d, 0xc1, 0xde, 0x5d, 0x04, 0x49, 0x18, 0x61, 0x7a,
0x06, 0xc5, 0xbe, 0x57, 0xd1, 0xe9, 0x70, 0x81, 0x39, 0x9d, 0x7d, 0x52, 0x58, 0xcd, 0x35, 0xdc,
0x5d, 0xe8, 0x4f, 0xee, 0xc6, 0x7b, 0x02, 0x68, 0x26, 0x7c, 0x5c, 0x72, 0x47, 0x31, 0x98, 0x9f,
0xdb, 0xe5, 0x72, 0x0c, 0x57, 0xf1, 0xe0, 0x37, 0x94, 0x6d, 0xff, 0x27, 0x19, 0xd1, 0xc7, 0xdf,
0xa3, 0xdb, 0xfb, 0x3d, 0x40, 0x4f, 0x4b, 0x9d, 0x79, 0x74, 0xbb, 0xdc, 0x50, 0xe3, 0x57, 0x4a,
0xee, 0x3a, 0xf3, 0x51, 0xcb, 0x1d, 0x02, 0x8c, 0x56, 0x7b, 0x12, 0x63, 0x59, 0x3b, 0x37, 0xe3,
0xea, 0x9e, 0xe3, 0xeb, 0x2e, 0x61, 0x31, 0x89, 0x4b, 0xb8, 0xf1, 0x94, 0x75, 0xe8, 0xcc, 0x23,
0x94, 0xfe, 0x8e, 0x86, 0x97, 0x16, 0xd7, 0x18, 0xa4, 0x8d, 0x1f, 0x95, 0x7b, 0x06, 0x3a, 0x8d,
0x30, 0x25, 0x77, 0x32, 0x50, 0x72, 0x1f, 0xa7, 0x27, 0x29, 0x96, 0xf9, 0xc3, 0xb7, 0x58, 0xc5,
0xb3, 0xb6, 0xad, 0x1f, 0x7c, 0x90, 0x47, 0x7c, 0x6d, 0x41, 0x55, 0xf7, 0xe1, 0x30, 0x74, 0x57,
0xfe, 0x64, 0x4c, 0xd9, 0x2b, 0x86, 0x80, 0xf8, 0x42, 0x1d, 0x10, 0x51, 0x72, 0xd7, 0x15, 0x4a,
0xee, 0x68, 0x40, 0x4b, 0xdf, 0xba, 0x7a, 0x19, 0x5a, 0xf4, 0x73, 0xac, 0xf9, 0xd1, 0x61, 0xc4,
0x17, 0xa6, 0x16, 0xb7, 0x61, 0x7b, 0x35, 0xde, 0xa9, 0x34, 0x96, 0xbe, 0xe7, 0xa1, 0x28, 0xb9,
0xeb, 0x0c, 0x25, 0x77, 0x1c, 0xa4, 0x7c, 0x2e, 0x76, 0xe7, 0x25, 0x30, 0x5e, 0x88, 0xbf, 0x42,
0x42, 0x34, 0x59, 0x1b, 0x75, 0xa7, 0x11, 0xbd, 0xf9, 0xd2, 0x3d, 0x37, 0xf8, 0x56, 0x83, 0x7e,
0xab, 0x47, 0xc9, 0x5d, 0x67, 0x28, 0xb9, 0xe3, 0xa3, 0x94, 0xcb, 0xb9, 0x81, 0xde, 0x68, 0xc5,
0xcf, 0xf8, 0x82, 0x17, 0x41, 0xb4, 0xf9, 0x52, 0x26, 0x57, 0x62, 0xf7, 0xa1, 0x1d, 0x0a, 0x2c,
0xd4, 0xef, 0xb0, 0x95, 0x92, 0xbb, 0xce, 0x50, 0x72, 0x57, 0x0b, 0xae, 0xe2, 0x19, 0x8b, 0xe7,
0x12, 0x6f, 0xbe, 0x7c, 0x52, 0xcf, 0x77, 0xc4, 0x74, 0xe2, 0xfd, 0x32, 0xeb, 0xa4, 0xfa, 0xdb,
0x2c, 0xab, 0x4e, 0xee, 0x9d, 0x94, 0xdc, 0x35, 0x41, 0xc9, 0x9d, 0x08, 0x79, 0x9f, 0xa0, 0xdb,
0xf5, 0x38, 0x7a, 0xe4, 0xfa, 0xeb, 0x36, 0x61, 0xf5, 0x6b, 0x82, 0xab, 0xbc, 0xd3, 0xd1, 0x5a,
0x3c, 0x12, 0x56, 0x52, 0xd6, 0xd8, 0xa3, 0xaf, 0x5a, 0x51, 0x72, 0xd7, 0x19, 0xc3, 0xca, 0xdd,
0xdd, 0xc5, 0x09, 0x5a, 0x71, 0x90, 0x7a, 0xe9, 0xa2, 0xb6, 0xd7, 0x9a, 0x09, 0x03, 0x79, 0xd9,
0xad, 0xab, 0xbf, 0x46, 0x77, 0xe2, 0xc3, 0x4e, 0x13, 0xac, 0x38, 0xc8, 0x7c, 0xda, 0xee, 0x10,
0xa8, 0x12, 0x11, 0xee, 0xa0, 0x5e, 0x23, 0xc2, 0xe9, 0x47, 0xee, 0x3b, 0x37, 0x51, 0x72, 0x57,
0x8b, 0x0e, 0x72, 0x87, 0x76, 0xf8, 0x06, 0x07, 0xfa, 0xef, 0xdc, 0xb6, 0x65, 0x74, 0x1d, 0xe5,
0x4b, 0xbd, 0xad, 0xa3, 0x34, 0x26, 0x40, 0xd6, 0xdc, 0x20, 0x1f, 0xf4, 0xb4, 0xeb, 0x9e, 0x9f,
0x45, 0x35, 0x6f, 0xd4, 0x5d, 0xd2, 0xdd, 0x27, 0x72, 0x4b, 0xae, 0x44, 0xf7, 0x67, 0xd2, 0x6b,
0x86, 0xc5, 0x32, 0xbd, 0x54, 0x89, 0x92, 0xbb, 0xce, 0x18, 0x4a, 0xee, 0xed, 0xed, 0xac, 0xc9,
0x9f, 0xfd, 0x73, 0xfe, 0xec, 0x19, 0x32, 0x99, 0xac, 0xa7, 0x87, 0x6f, 0x3d, 0xe9, 0xd3, 0xe9,
0x93, 0x27, 0x41, 0x29, 0x54, 0x2d, 0x8e, 0xd1, 0xad, 0x09, 0x2b, 0x16, 0xab, 0xf4, 0xe0, 0x97,
0x2d, 0x10, 0x5c, 0x49, 0x51, 0x77, 0x3e, 0xee, 0x80, 0xd5, 0x35, 0xb1, 0x9c, 0xc1, 0xd1, 0x4f,
0x00, 0x44, 0x20, 0x77, 0x3f, 0x4a, 0xee, 0x3a, 0x61, 0x10, 0xb9, 0x83, 0x16, 0x71, 0xb9, 0xcd,
0x57, 0xa0, 0x45, 0xa7, 0x55, 0x8e, 0xed, 0x3c, 0xbf, 0x97, 0x97, 0x0b, 0xfe, 0xbb, 0x72, 0xf9,
0x32, 0x92, 0xab, 0x0e, 0x61, 0xb6, 0x6c, 0xf8, 0xa9, 0xb6, 0xc6, 0xc4, 0x9f, 0xca, 0x48, 0x45,
0x79, 0xdb, 0x96, 0x1f, 0x50, 0x8b, 0xc9, 0xf8, 0xe7, 0x22, 0x08, 0x2e, 0xf1, 0xbf, 0x5e, 0x8f,
0x92, 0xe3, 0xb1, 0xc8, 0x27, 0x15, 0xad, 0x7d, 0x7a, 0xa9, 0x0f, 0x25, 0x77, 0x9d, 0x31, 0x88,
0xdc, 0x1d, 0xed, 0x6d, 0x81, 0xb8, 0xe3, 0x62, 0xa2, 0x91, 0x07, 0xbd, 0x3d, 0xdc, 0xc0, 0xc1,
0x03, 0xfb, 0xfe, 0x80, 0x8f, 0x08, 0x85, 0x23, 0x82, 0xde, 0x5e, 0xf0, 0x05, 0x68, 0x6c, 0xa8,
0xe7, 0x74, 0x8f, 0x05, 0x13, 0xec, 0xe8, 0x68, 0xaf, 0xa9, 0xae, 0x56, 0x28, 0xc6, 0x9e, 0x63,
0x80, 0xe3, 0x50, 0xde, 0x08, 0x2e, 0x87, 0x23, 0x97, 0xcb, 0x07, 0xfa, 0xfb, 0xab, 0x68, 0x95,
0x43, 0xea, 0x23, 0x29, 0x1b, 0x02, 0x31, 0xbd, 0xa9, 0xfd, 0xf7, 0x5d, 0xe8, 0xee, 0x3b, 0x61,
0x38, 0xb8, 0x90, 0xec, 0x46, 0xd4, 0x5e, 0x6f, 0xc7, 0x90, 0xe2, 0x27, 0x0d, 0xfa, 0xf9, 0x71,
0xfb, 0x7f, 0x7b, 0x67, 0xfe, 0xd4, 0xc4, 0x19, 0xc6, 0xf1, 0xfe, 0x21, 0x1d, 0x1c, 0x5a, 0x0a,
0x85, 0xaa, 0x48, 0x6d, 0x47, 0x66, 0xac, 0x62, 0xc7, 0xe3, 0x17, 0xb5, 0xc7, 0x54, 0x64, 0x14,
0xe8, 0x28, 0xc3, 0x08, 0x72, 0xd4, 0x82, 0x65, 0x38, 0x0c, 0x10, 0xae, 0x10, 0x2e, 0x47, 0xa0,
0x2d, 0x08, 0x16, 0x19, 0x3a, 0x9c, 0xc2, 0xa0, 0x23, 0x11, 0x4a, 0xa0, 0xc4, 0x58, 0x20, 0x81,
0x8e, 0x22, 0x02, 0x53, 0xc9, 0x01, 0xe4, 0x30, 0x27, 0x77, 0x0e, 0x48, 0x08, 0xf4, 0x8d, 0xb1,
0x14, 0xde, 0xdd, 0x6c, 0xb2, 0x99, 0x25, 0x10, 0xd8, 0xef, 0xbc, 0x3f, 0x2c, 0x9b, 0x3d, 0x9e,
0x30, 0x9f, 0x7d, 0xf3, 0xbc, 0xef, 0x3e, 0xef, 0xf3, 0x90, 0xb8, 0x3b, 0x2c, 0xe2, 0x71, 0xaf,
0xae, 0xfa, 0x0d, 0x3b, 0x50, 0xde, 0x52, 0x0a, 0x78, 0xed, 0xbf, 0x25, 0xb0, 0xdd, 0x5d, 0x4c,
0xb0, 0xdd, 0x50, 0x57, 0x0b, 0xb6, 0xef, 0x55, 0x94, 0x83, 0x6d, 0x01, 0x9f, 0x0f, 0xb6, 0xf9,
0x3c, 0x73, 0xec, 0xb8, 0xd7, 0x07, 0xfb, 0x06, 0xb8, 0x1c, 0xb0, 0x71, 0xd0, 0xc7, 0xeb, 0x6a,
0x68, 0x30, 0x70, 0x8d, 0xc0, 0x76, 0x5c, 0x6c, 0xcc, 0xe5, 0x8b, 0x17, 0xf0, 0x7f, 0x59, 0x07,
0x05, 0x70, 0x17, 0x5f, 0xb9, 0x84, 0xc0, 0x9d, 0x86, 0x71, 0x4a, 0x01, 0x1a, 0xee, 0xec, 0x31,
0x62, 0x56, 0xfa, 0x92, 0xb8, 0x3b, 0x2c, 0x82, 0x71, 0x07, 0x8e, 0x87, 0x39, 0xbf, 0xbd, 0xbb,
0x1b, 0x6a, 0xea, 0x29, 0xd0, 0x97, 0x7b, 0xec, 0x7b, 0x1f, 0x1c, 0xd0, 0xfe, 0xc4, 0x1c, 0x82,
0x02, 0x70, 0x3f, 0x15, 0x70, 0xcc, 0xf2, 0x11, 0x8f, 0x37, 0x0e, 0xf6, 0x83, 0xfe, 0xde, 0xf2,
0xe7, 0xc7, 0x1e, 0xee, 0x5c, 0x4e, 0xff, 0xda, 0x66, 0xdc, 0xd9, 0x2c, 0x96, 0xe5, 0xd3, 0x96,
0xe6, 0x07, 0x27, 0x03, 0xbe, 0x40, 0x5e, 0x7f, 0x8b, 0xb4, 0xc4, 0x1f, 0xc7, 0x8b, 0x7b, 0xe1,
0xc3, 0xd7, 0x24, 0xee, 0x3b, 0x50, 0x44, 0xe2, 0x0e, 0xbc, 0x0e, 0x00, 0x25, 0xa0, 0x96, 0xf9,
0x47, 0x87, 0xb5, 0x63, 0x7a, 0xfe, 0xec, 0x06, 0x07, 0x80, 0x51, 0xec, 0x84, 0x50, 0x08, 0x70,
0x3f, 0xfd, 0x65, 0x80, 0x65, 0xff, 0x4e, 0xc7, 0xfd, 0xea, 0x65, 0xe4, 0x5c, 0x24, 0xc6, 0x29,
0x28, 0xb8, 0xe7, 0xf5, 0x3c, 0xdd, 0x62, 0xdc, 0x25, 0x24, 0xee, 0xb6, 0x44, 0xbe, 0x66, 0xb2,
0x2d, 0x47, 0x70, 0x7f, 0x04, 0xe3, 0x1e, 0x0d, 0x70, 0x1f, 0x25, 0x71, 0xdf, 0x66, 0x91, 0xb8,
0xdb, 0xd6, 0x92, 0x80, 0x27, 0x0e, 0x0b, 0xc6, 0x8f, 0x3b, 0x03, 0xc2, 0x9d, 0x45, 0xe2, 0xbe,
0xdd, 0x22, 0x71, 0xb7, 0x2d, 0xe2, 0x70, 0x57, 0x12, 0x62, 0x0f, 0x61, 0xb8, 0x8f, 0x92, 0xb8,
0x5b, 0xd1, 0x5e, 0xc6, 0x7d, 0x79, 0x42, 0x20, 0x8d, 0x0e, 0x87, 0x70, 0x57, 0xe4, 0x65, 0x62,
0xbc, 0x43, 0x28, 0x66, 0xf0, 0xa0, 0xfc, 0xc3, 0xd1, 0xf4, 0xee, 0xd6, 0x7e, 0x31, 0x21, 0xf6,
0x2c, 0xe8, 0x8d, 0xa9, 0x35, 0x70, 0xfe, 0x0f, 0xea, 0xef, 0x43, 0x72, 0xeb, 0x29, 0x8b, 0xc1,
0xc3, 0x09, 0xbf, 0x18, 0x0e, 0x09, 0x24, 0xaa, 0x6a, 0xb6, 0x0b, 0x89, 0xc4, 0xdd, 0xb6, 0x8c,
0x6a, 0x95, 0x39, 0xf7, 0xd5, 0x66, 0x5c, 0xe4, 0xe9, 0x49, 0x18, 0x39, 0x6a, 0x1e, 0x0d, 0x4a,
0xa1, 0xb0, 0x99, 0x08, 0x0a, 0x83, 0xa8, 0xc0, 0x77, 0x30, 0xe4, 0x8d, 0xc9, 0xef, 0x81, 0x70,
0xcf, 0x7e, 0x30, 0x66, 0x5c, 0x41, 0x7f, 0xfc, 0x4c, 0x7a, 0x9d, 0x82, 0x06, 0x87, 0x76, 0x4a,
0xe3, 0xa3, 0x0d, 0x12, 0x62, 0x1e, 0x3f, 0x17, 0x12, 0x89, 0xbb, 0x6d, 0x81, 0x5e, 0x5c, 0x59,
0x98, 0x03, 0xc7, 0x45, 0x7e, 0x77, 0x4e, 0xf7, 0xf2, 0x85, 0xb5, 0x53, 0x40, 0x07, 0x9c, 0x51,
0x3f, 0x0c, 0x11, 0x09, 0x1e, 0x80, 0x5a, 0x96, 0x23, 0x39, 0xcc, 0x36, 0x6a, 0x46, 0x63, 0x48,
0xb9, 0xff, 0x1c, 0xbe, 0x72, 0x76, 0x67, 0x53, 0xbf, 0xc4, 0xda, 0x29, 0x60, 0xa8, 0x2d, 0xfa,
0x3e, 0x08, 0xfe, 0x75, 0xa2, 0x67, 0x10, 0x92, 0x57, 0xd0, 0xb5, 0x44, 0xe2, 0x6e, 0x97, 0xe6,
0x9a, 0xeb, 0xf9, 0x9f, 0x1f, 0x80, 0xe3, 0x08, 0x30, 0x97, 0xf3, 0xf5, 0xbd, 0x9e, 0x8e, 0xbf,
0xf3, 0x0c, 0xe6, 0x92, 0xd6, 0x75, 0x9f, 0xe9, 0x78, 0x92, 0xcd, 0x57, 0x93, 0xb3, 0x89, 0x77,
0xb9, 0xd0, 0x35, 0xaf, 0xdd, 0x6a, 0xcb, 0x6b, 0xb5, 0x5a, 0xc1, 0x74, 0xcd, 0x5c, 0x24, 0xac,
0x8c, 0x7f, 0xc4, 0x77, 0xa3, 0xf1, 0x3c, 0x5f, 0xaf, 0xe9, 0xea, 0x4a, 0x87, 0xcd, 0x70, 0x5d,
0x91, 0xb8, 0xdb, 0x25, 0xe0, 0x0f, 0xc8, 0xa9, 0xc9, 0x70, 0x07, 0x1f, 0xf4, 0xb5, 0x6e, 0x08,
0xab, 0x1e, 0x9b, 0x40, 0xb6, 0x70, 0xb3, 0x1c, 0x41, 0x67, 0xca, 0xe3, 0x84, 0x72, 0x2e, 0x77,
0x0c, 0x5f, 0x92, 0x82, 0xb9, 0xc5, 0x25, 0x5a, 0xdd, 0x50, 0x44, 0x1a, 0x5c, 0x88, 0xf4, 0x7a,
0x76, 0xe7, 0x2f, 0x6d, 0x58, 0xa1, 0xc5, 0xfa, 0x91, 0x61, 0x51, 0xf0, 0x05, 0xd8, 0x93, 0xf9,
0x31, 0x6a, 0x59, 0x48, 0x64, 0x6a, 0x5b, 0x57, 0x11, 0x89, 0xbb, 0xbd, 0x5a, 0xe8, 0xea, 0x10,
0x9e, 0x39, 0x0e, 0x7b, 0xf0, 0x59, 0x94, 0xd5, 0x15, 0xac, 0x9c, 0x61, 0xa8, 0xa5, 0x07, 0xde,
0x79, 0xf3, 0xa9, 0x8c, 0xb4, 0x9a, 0xa1, 0x8a, 0x4e, 0xc1, 0x94, 0x4a, 0x8b, 0x7a, 0x2e, 0x18,
0x7a, 0x3e, 0x19, 0x94, 0x66, 0x36, 0x8c, 0xc4, 0x95, 0xf6, 0xa1, 0x5e, 0x21, 0x36, 0xb7, 0xab,
0xf1, 0x2f, 0x11, 0xb6, 0xd9, 0x0a, 0x1a, 0x1c, 0xbd, 0x0c, 0xba, 0xf6, 0x99, 0x5a, 0xab, 0xe1,
0x9c, 0xbb, 0x5b, 0x24, 0xee, 0x38, 0x04, 0xbc, 0x17, 0x08, 0x9d, 0xb7, 0xc4, 0xa7, 0x9a, 0x74,
0xe8, 0xbc, 0xae, 0xab, 0xaa, 0x67, 0x92, 0x72, 0x87, 0x85, 0x8a, 0xec, 0xff, 0x8d, 0xc2, 0xb8,
0x9e, 0xd5, 0x69, 0xae, 0x2d, 0x95, 0xdd, 0x19, 0x49, 0xed, 0xb0, 0xd4, 0x16, 0xb5, 0xd6, 0xa2,
0x72, 0x98, 0x65, 0x98, 0x9d, 0xfa, 0xda, 0xdb, 0x84, 0x84, 0x8a, 0xbc, 0x2c, 0xa4, 0xc1, 0xca,
0xa2, 0xdc, 0x3d, 0xe8, 0xb5, 0x5b, 0x44, 0xe2, 0x8e, 0x4f, 0xc8, 0x19, 0x3d, 0x33, 0xf1, 0xd4,
0x14, 0x7b, 0x00, 0xaa, 0x61, 0x8b, 0xf2, 0xea, 0x51, 0x92, 0xec, 0xe1, 0x6a, 0x49, 0x25, 0xec,
0x4a, 0xa6, 0xd0, 0xe6, 0xbd, 0x8c, 0x0a, 0xb9, 0x3c, 0x1d, 0xf6, 0xbe, 0xcc, 0xac, 0xe7, 0x65,
0xad, 0x12, 0x51, 0x21, 0xd4, 0x45, 0x45, 0xe2, 0x8e, 0x4f, 0x26, 0xbd, 0x1e, 0x95, 0x78, 0x51,
0x48, 0xa0, 0x96, 0xdb, 0x67, 0xe7, 0x45, 0x58, 0xa3, 0x2a, 0x7a, 0xeb, 0x3f, 0x94, 0xbb, 0x5c,
0x64, 0x5e, 0x1a, 0xb4, 0x5e, 0xbf, 0x2d, 0xae, 0xa4, 0x37, 0xa3, 0x71, 0xb4, 0xb9, 0x5f, 0xa2,
0x5e, 0x5c, 0xb6, 0xe7, 0xfa, 0x9a, 0x5e, 0xf6, 0x54, 0xd0, 0x37, 0x48, 0x23, 0x15, 0x39, 0x69,
0x2b, 0x73, 0xc4, 0xc4, 0xdc, 0xbb, 0xa8, 0x48, 0xdc, 0x1d, 0x91, 0xba, 0xe2, 0x67, 0xde, 0x41,
0x4f, 0xd4, 0x6e, 0xde, 0x88, 0x73, 0xc5, 0x96, 0x66, 0xc9, 0x38, 0x2e, 0x5b, 0xe4, 0xf0, 0x66,
0x5a, 0x38, 0xd2, 0x1a, 0xd6, 0x24, 0x70, 0xe5, 0xab, 0xba, 0x27, 0x9a, 0xfa, 0xc4, 0xec, 0x31,
0xd5, 0xa4, 0x4a, 0xeb, 0x40, 0xb1, 0x6f, 0x73, 0xe9, 0x6a, 0xb4, 0xf2, 0x18, 0xaa, 0xd2, 0xdb,
0xab, 0xa6, 0xdd, 0x53, 0x3a, 0xdc, 0x31, 0xa1, 0xe3, 0x6e, 0x30, 0x18, 0x5e, 0x0e, 0xbd, 0xd8,
0xd8, 0x62, 0xa3, 0x22, 0x1b, 0xeb, 0xeb, 0x36, 0xee, 0xe1, 0xf3, 0xb7, 0xad, 0x38, 0xd1, 0x4e,
0x90, 0x7e, 0x64, 0x58, 0x1c, 0x1e, 0x8a, 0xa4, 0x6a, 0xf2, 0xdc, 0x29, 0x25, 0x8d, 0x6a, 0x72,
0xba, 0xc3, 0x60, 0x7e, 0x39, 0x50, 0x94, 0x3b, 0xee, 0xed, 0x8e, 0x34, 0x49, 0x78, 0xfc, 0xc8,
0x6c, 0x4b, 0x83, 0x93, 0xed, 0xd9, 0x99, 0xb2, 0xda, 0xbb, 0xff, 0x3d, 0x38, 0xb0, 0x5e, 0x3f,
0x16, 0xd9, 0x02, 0x8e, 0xfa, 0x13, 0x52, 0x24, 0xde, 0xd5, 0xf5, 0xae, 0xac, 0x1c, 0x82, 0x30,
0xf3, 0x64, 0x5f, 0x5c, 0x94, 0xa6, 0xef, 0x99, 0x13, 0x6c, 0xd0, 0x3e, 0x1f, 0x94, 0x53, 0x93,
0xcd, 0x69, 0xff, 0x91, 0x66, 0x78, 0xba, 0xa9, 0x8a, 0x0b, 0x9c, 0x60, 0x83, 0xab, 0x08, 0xcb,
0x99, 0x11, 0x08, 0xf8, 0x96, 0xd5, 0x18, 0x50, 0xfb, 0xf6, 0xfc, 0x59, 0xbc, 0x4b, 0x4e, 0x77,
0xb1, 0x80, 0x87, 0xa0, 0xcc, 0x47, 0x99, 0x00, 0x59, 0x6f, 0xb2, 0xe4, 0x9b, 0xb3, 0x4d, 0xb5,
0x26, 0x0d, 0x91, 0x0b, 0x0e, 0xc1, 0x70, 0x73, 0xbe, 0xa3, 0x0d, 0xf8, 0x4e, 0x7c, 0x3f, 0x1f,
0x6b, 0xf7, 0x55, 0x80, 0x1f, 0x99, 0x65, 0xbb, 0x7c, 0xfd, 0xbd, 0x23, 0x1b, 0xbe, 0xbb, 0x5a,
0xad, 0xda, 0xef, 0xe5, 0xb1, 0x91, 0xf5, 0x88, 0xf0, 0x30, 0xe7, 0x58, 0xe6, 0x5a, 0x5a, 0x99,
0x9d, 0x51, 0x97, 0x15, 0xf3, 0x7c, 0x3e, 0xc4, 0xe0, 0x5e, 0x70, 0xc2, 0x5f, 0x9e, 0x71, 0x6b,
0xfa, 0xde, 0xaf, 0x4b, 0xbc, 0x71, 0xbc, 0xfd, 0x85, 0x49, 0xa7, 0x5b, 0xe2, 0x8f, 0x4f, 0x57,
0x57, 0xca, 0xb3, 0x28, 0xc2, 0xd3, 0xc7, 0x30, 0xee, 0xc2, 0x3b, 0xfc, 0x89, 0xaa, 0xa4, 0x70,
0x0f, 0xc6, 0xc3, 0xd8, 0x23, 0xdb, 0x43, 0x55, 0xbd, 0x4e, 0xe7, 0x7f, 0xd8, 0xcf, 0xc2, 0x7a,
0x6a, 0x4a, 0x92, 0x13, 0x6c, 0x72, 0x69, 0x69, 0x07, 0x38, 0xb2, 0x54, 0x38, 0x9e, 0x0c, 0x9d,
0xcb, 0x03, 0x1f, 0x09, 0x8e, 0x7e, 0x36, 0x75, 0xf1, 0xab, 0x37, 0x09, 0x37, 0xc0, 0x63, 0xa0,
0xc8, 0xa5, 0x2a, 0xf3, 0xb3, 0x81, 0xff, 0xad, 0x2c, 0xc8, 0x51, 0xd0, 0x33, 0x15, 0xd9, 0x69,
0xb2, 0xe4, 0x78, 0xf1, 0x95, 0x4b, 0xc2, 0x13, 0xfe, 0xf6, 0x54, 0xa8, 0xe3, 0xf9, 0x79, 0xcb,
0x12, 0xe3, 0xe6, 0xdb, 0x1f, 0x6f, 0xf7, 0x3f, 0x60, 0x47, 0xcb, 0xae, 0x99, 0x19, 0x93, 0xc9,
0x74, 0x68, 0xbf, 0x77, 0x4a, 0x62, 0xc2, 0x56, 0x5b, 0xb3, 0x9b, 0xa4, 0x61, 0xf7, 0x28, 0x0b,
0x73, 0x26, 0xce, 0x9e, 0xb4, 0x07, 0x7d, 0x87, 0xdb, 0xe4, 0xf9, 0x33, 0x0a, 0x7a, 0xc6, 0x02,
0xb3, 0x7d, 0xbb, 0xbf, 0xae, 0x6b, 0xe8, 0x3d, 0x83, 0x61, 0x59, 0x43, 0x6a, 0x2b, 0x35, 0x2f,
0x95, 0xc8, 0x3b, 0x18, 0xa2, 0xd2, 0x22, 0x41, 0x52, 0xfc, 0x48, 0x80, 0xff, 0xab, 0x43, 0xde,
0x38, 0x9a, 0xef, 0xe6, 0x01, 0xa8, 0xa7, 0x1b, 0xff, 0x53, 0x1f, 0x69, 0xcc, 0x35, 0xe5, 0x6d,
0xba, 0xa6, 0xf7, 0x29, 0x39, 0xb1, 0x88, 0x57, 0xf6, 0xce, 0xbb, 0x93, 0x22, 0x50, 0x26, 0xf0,
0x10, 0x70, 0x7a, 0x67, 0xea, 0x6b, 0x54, 0xa5, 0x45, 0x60, 0x98, 0x0b, 0x3c, 0x19, 0xe0, 0xb7,
0x48, 0x6f, 0x44, 0x4a, 0xc2, 0x43, 0x45, 0x21, 0x81, 0xe2, 0xb0, 0x60, 0x69, 0x74, 0xf8, 0x9b,
0x9f, 0x7e, 0x90, 0xa7, 0x27, 0x81, 0x4f, 0xc1, 0x31, 0x33, 0xb5, 0xd5, 0xda, 0x81, 0x7e, 0x83,
0xcc, 0xa9, 0xc5, 0x8a, 0x77, 0xa5, 0xfe, 0x05, 0x34, 0x91, 0x5b, 0x5a, 0x71, 0xf0, 0xe8, 0x07,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE tune_diff_pair_length_legend_xpm[1] = {{ png, sizeof( png ), "tune_diff_pair_length_legend_xpm" }};
//EOF

View File

@ -0,0 +1,362 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x62, 0x08, 0x02, 0x00, 0x00, 0x01, 0x81, 0xbc, 0x69,
0xd2, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x1e, 0xc2, 0x00, 0x00, 0x1e,
0xc2, 0x01, 0x6e, 0xd0, 0x75, 0x3e, 0x00, 0x00, 0x00, 0x09, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f,
0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x89, 0x2a, 0x8d, 0x06, 0x00, 0x00, 0x15, 0x65, 0x49,
0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0x5d, 0x89, 0x5f, 0x13, 0xd7, 0x1a, 0xed, 0x7f, 0xf1, 0x6c,
0x5d, 0x00, 0x37, 0xac, 0x56, 0xad, 0x6d, 0xad, 0xb6, 0xd5, 0xda, 0x45, 0x5f, 0xad, 0x4f, 0xfb,
0xac, 0xaf, 0x8b, 0xad, 0xd6, 0xf7, 0x6c, 0x1b, 0x54, 0x04, 0x91, 0x55, 0x14, 0x10, 0x41, 0x14,
0x14, 0x14, 0x5b, 0x15, 0x5c, 0xd9, 0x41, 0x01, 0xc1, 0x8d, 0x4d, 0x76, 0x64, 0x47, 0x05, 0x64,
0x0b, 0x88, 0x0a, 0x84, 0x7d, 0xdf, 0x03, 0x01, 0x02, 0xef, 0x9b, 0xdc, 0x38, 0x0c, 0x59, 0x27,
0xc9, 0x4c, 0x26, 0x81, 0x39, 0xbf, 0x43, 0x7e, 0x93, 0xc9, 0xcc, 0xbd, 0x5f, 0x0e, 0x27, 0x77,
0xee, 0xdc, 0xb9, 0xcb, 0x5b, 0x13, 0xe4, 0x30, 0x32, 0x32, 0x42, 0xf2, 0x48, 0x09, 0xbc, 0x45,
0xe6, 0x20, 0xb3, 0x03, 0xfb, 0x0c, 0xde, 0xf9, 0x07, 0xf5, 0x19, 0x38, 0x1e, 0x3d, 0x22, 0xbd,
0x73, 0xfe, 0xdc, 0x77, 0x28, 0xcb, 0x80, 0x12, 0xbc, 0x55, 0x59, 0x59, 0xf9, 0xe0, 0xfe, 0x7d,
0x99, 0x0c, 0x0c, 0x8b, 0xf4, 0x38, 0x77, 0x83, 0x48, 0xc7, 0xd3, 0x21, 0x4e, 0x7e, 0x4f, 0x55,
0xcb, 0x00, 0xfe, 0xc8, 0xeb, 0xab, 0xc6, 0x7f, 0x82, 0xac, 0x44, 0x5b, 0x37, 0x6f, 0x1a, 0x1c,
0x1c, 0x44, 0xdb, 0x39, 0xd5, 0x5d, 0x6a, 0x66, 0x10, 0x17, 0x1b, 0x03, 0xaf, 0xa1, 0xc1, 0x81,
0x03, 0x03, 0x03, 0x12, 0xc7, 0xf5, 0xf7, 0xf7, 0xe3, 0xdb, 0xdc, 0xa6, 0xfe, 0x09, 0xd2, 0x90,
0x2b, 0x11, 0xc7, 0x25, 0x41, 0xde, 0x39, 0x26, 0xc7, 0x1e, 0xaa, 0x96, 0x01, 0x11, 0x76, 0xa1,
0xa5, 0x1c, 0x87, 0x18, 0xce, 0xf1, 0x38, 0xc5, 0xa7, 0x71, 0x5c, 0x13, 0x39, 0x4e, 0xb1, 0x4a,
0x29, 0x23, 0x03, 0xca, 0xa1, 0xf5, 0x0c, 0x5a, 0x4f, 0x1f, 0xaf, 0xfb, 0xe5, 0x7b, 0xaa, 0x48,
0xf6, 0x1b, 0x50, 0x5f, 0x10, 0xb5, 0xb5, 0xb5, 0xa9, 0x97, 0x22, 0xa9, 0xd4, 0x73, 0x72, 0xb2,
0xa5, 0x43, 0x56, 0xf5, 0x4b, 0x28, 0x4a, 0x5d, 0xa5, 0x84, 0x64, 0xa7, 0x2e, 0xaf, 0x74, 0x0b,
0x0e, 0x0a, 0x94, 0x28, 0xdd, 0x80, 0x2a, 0xfd, 0xac, 0x26, 0x14, 0xfc, 0x74, 0x9d, 0x3d, 0x82,
0xa4, 0x77, 0xc2, 0x91, 0xea, 0xfc, 0x6e, 0x3d, 0x4e, 0xbb, 0x49, 0x7c, 0x20, 0x91, 0x0a, 0xaf,
0xae, 0xf6, 0xc2, 0x79, 0x2f, 0xe9, 0xfd, 0xa4, 0x52, 0x07, 0x58, 0x9a, 0x9b, 0x75, 0x76, 0x76,
0x18, 0xce, 0x9e, 0x95, 0x9d, 0x95, 0xa9, 0x20, 0x15, 0x95, 0x53, 0x97, 0xa9, 0x8c, 0xf9, 0xc5,
0x1c, 0x99, 0x27, 0x5c, 0x4f, 0x7e, 0xad, 0x5a, 0xea, 0x44, 0x60, 0xc5, 0x99, 0x43, 0x8c, 0x53,
0x64, 0x85, 0x82, 0x73, 0x62, 0x8a, 0x5a, 0xc8, 0x14, 0x67, 0x40, 0x7a, 0x4b, 0x1b, 0xed, 0xa6,
0x4e, 0x61, 0x29, 0x06, 0xa4, 0x2c, 0x76, 0xdf, 0x4b, 0x17, 0xd1, 0xa5, 0x54, 0x9b, 0x50, 0x27,
0x7a, 0x79, 0x85, 0x50, 0x51, 0xe1, 0x33, 0xcd, 0x82, 0x51, 0x19, 0x6a, 0x46, 0xbf, 0x72, 0xe9,
0x12, 0x32, 0x25, 0x32, 0x1c, 0xa3, 0xf6, 0xd5, 0x87, 0x0c, 0xa8, 0xd4, 0x5e, 0xfb, 0x10, 0x47,
0xbf, 0x7a, 0xd5, 0x0a, 0x1b, 0x4b, 0x0b, 0x92, 0xe7, 0x5c, 0x08, 0x8a, 0x81, 0x12, 0xf3, 0x55,
0xab, 0x64, 0x3d, 0x51, 0x26, 0xe0, 0x48, 0xb3, 0x93, 0x8f, 0xd4, 0x8c, 0x4e, 0x19, 0x64, 0x68,
0x6f, 0x34, 0xe7, 0x6d, 0xc5, 0xe7, 0xc8, 0xbc, 0x80, 0x49, 0x63, 0xef, 0x6f, 0xbb, 0x90, 0x6d,
0xe0, 0x0b, 0xa4, 0x71, 0x3b, 0xd4, 0x08, 0x4e, 0x29, 0x24, 0xa3, 0x87, 0xfc, 0x76, 0xfd, 0xfc,
0x23, 0x5c, 0xad, 0xa0, 0x00, 0x59, 0xba, 0x68, 0xfe, 0xaa, 0xe5, 0x4b, 0x53, 0x53, 0x92, 0x17,
0x1a, 0xcc, 0x31, 0x5e, 0x60, 0x08, 0xdb, 0xe8, 0x18, 0x05, 0x97, 0xaa, 0xd6, 0xd6, 0x56, 0x78,
0x5d, 0xb7, 0x66, 0xf5, 0xba, 0xb5, 0xab, 0xf1, 0x9d, 0x70, 0x7c, 0x61, 0x5d, 0x0f, 0x0d, 0xc1,
0x8b, 0xa2, 0x0f, 0xbf, 0x15, 0xf6, 0xd9, 0x9a, 0x8f, 0x80, 0x8d, 0x8d, 0x0d, 0x64, 0xce, 0x51,
0xb5, 0x16, 0x02, 0xc7, 0x07, 0x3f, 0xae, 0x53, 0x27, 0x3a, 0x65, 0x10, 0x6b, 0xdf, 0x26, 0xd2,
0x4c, 0x1a, 0x91, 0xf9, 0x8d, 0x01, 0x19, 0x75, 0x88, 0x17, 0x62, 0xab, 0x21, 0x0e, 0x55, 0x43,
0x47, 0x80, 0x5b, 0x11, 0x38, 0xd1, 0x29, 0xbc, 0xdc, 0x37, 0xf1, 0x15, 0x55, 0x9c, 0xd0, 0xc2,
0x5d, 0x03, 0xad, 0x98, 0xd6, 0xd1, 0xb7, 0x5d, 0x38, 0xd3, 0xe2, 0xe6, 0xa8, 0x9b, 0x54, 0x1e,
0x3d, 0x79, 0xec, 0xf8, 0x6e, 0xeb, 0xc6, 0x0d, 0xeb, 0xa9, 0x4a, 0x8d, 0x0c, 0x28, 0x0b, 0x7d,
0xc1, 0xbc, 0xd9, 0x54, 0x25, 0x45, 0x12, 0x94, 0x85, 0x3e, 0x36, 0x36, 0x26, 0xef, 0x23, 0x3e,
0x9f, 0x4f, 0x55, 0x2e, 0x44, 0xa8, 0x1f, 0xba, 0x74, 0xeb, 0x66, 0x77, 0xd7, 0x94, 0xd6, 0x29,
0xbc, 0xa5, 0xa9, 0xa7, 0xa7, 0x5b, 0xed, 0x5c, 0x14, 0x40, 0xcd, 0xd0, 0xc9, 0x54, 0x18, 0x8b,
0x8b, 0x0a, 0xe1, 0x98, 0xe6, 0xa6, 0x26, 0x1d, 0x0a, 0x7d, 0x78, 0x78, 0x98, 0x7c, 0xe8, 0x3e,
0x17, 0xff, 0xd6, 0xa1, 0xd0, 0x11, 0xb2, 0x32, 0x1f, 0x2b, 0x3e, 0x80, 0x57, 0x27, 0xae, 0x0b,
0xe8, 0x5c, 0xe8, 0xe4, 0x41, 0x57, 0xe8, 0xa8, 0xed, 0xe7, 0x82, 0xf7, 0x39, 0x79, 0xcd, 0x42,
0x32, 0xe9, 0xe1, 0xed, 0x27, 0xdd, 0x56, 0x24, 0xdd, 0x74, 0x04, 0x1c, 0x14, 0x8c, 0xd1, 0xab,
0xba, 0x4a, 0x37, 0x69, 0x10, 0x90, 0xa9, 0x67, 0x3a, 0x99, 0x23, 0x2d, 0xfc, 0x0a, 0xe0, 0x60,
0x1a, 0x43, 0x9f, 0x3f, 0xf7, 0x1d, 0x08, 0xfd, 0x9b, 0xaf, 0xbf, 0x20, 0x73, 0xc2, 0xa9, 0x7b,
0x55, 0x64, 0x2a, 0x92, 0x28, 0x4d, 0xa0, 0xed, 0xcd, 0x67, 0x07, 0x4f, 0xdc, 0xd7, 0x34, 0x4c,
0x59, 0x10, 0xab, 0xfe, 0xfb, 0x9e, 0xdd, 0x68, 0x03, 0x6e, 0x38, 0x14, 0x9f, 0xc0, 0x71, 0x4b,
0xb2, 0x0f, 0x2b, 0x25, 0x93, 0xf4, 0xc7, 0x1f, 0xac, 0x74, 0x77, 0x73, 0x1d, 0x1e, 0x15, 0x9a,
0x39, 0x45, 0x6b, 0x12, 0xa2, 0x3c, 0x48, 0x86, 0xee, 0x74, 0xcc, 0x5e, 0xb1, 0x79, 0x38, 0xae,
0x89, 0x4e, 0x11, 0xe5, 0x32, 0x3f, 0x32, 0x9e, 0x6f, 0x80, 0xaa, 0x03, 0xb6, 0x56, 0x87, 0xf1,
0x9d, 0x23, 0x63, 0x42, 0xf5, 0xaa, 0xfb, 0x4a, 0x31, 0x25, 0xf4, 0x8e, 0x8e, 0x76, 0xb8, 0xdf,
0xdb, 0xbc, 0xf1, 0xab, 0x09, 0x51, 0x75, 0xca, 0xf1, 0xe8, 0x11, 0x81, 0x40, 0xf0, 0xcd, 0xd7,
0x5f, 0x92, 0x0f, 0x1d, 0x6d, 0x10, 0xbf, 0x3c, 0xfc, 0x4c, 0xb5, 0x11, 0x3a, 0x9e, 0xe5, 0xf7,
0xdb, 0xfe, 0x05, 0xaf, 0xf5, 0xf5, 0xbc, 0x07, 0xf7, 0xee, 0xa2, 0x3d, 0x47, 0xed, 0x6c, 0xd1,
0x06, 0x99, 0xd0, 0x89, 0xe8, 0x1e, 0x1c, 0xa1, 0x31, 0x74, 0xb8, 0x49, 0x85, 0x5c, 0xe1, 0x95,
0xcc, 0x09, 0x9c, 0x63, 0x0f, 0xaf, 0xa7, 0xd6, 0xa8, 0x94, 0x07, 0x8d, 0xa1, 0x67, 0x67, 0x66,
0x82, 0xde, 0xf8, 0x33, 0x3e, 0xca, 0xe3, 0x80, 0x53, 0xae, 0xa6, 0xd4, 0xa8, 0x7a, 0x96, 0x52,
0x28, 0x29, 0xd7, 0xf1, 0xfb, 0x6b, 0xa0, 0xd5, 0x8d, 0xa7, 0x10, 0x04, 0x14, 0x8e, 0x6a, 0x64,
0x03, 0x27, 0xee, 0x77, 0x4f, 0xf1, 0xa1, 0xee, 0xfe, 0xfa, 0x66, 0x7a, 0xad, 0x92, 0x8a, 0x00,
0x6a, 0x94, 0xc7, 0xe8, 0x1c, 0x7f, 0xf0, 0x42, 0x96, 0x1a, 0x41, 0xe3, 0x70, 0x08, 0x2c, 0x24,
0xd9, 0x76, 0x4f, 0x86, 0xb6, 0x21, 0xa5, 0x7a, 0x7c, 0x73, 0xcd, 0x86, 0xce, 0x04, 0xa6, 0x6f,
0xe8, 0x8c, 0xb7, 0xb7, 0xc8, 0x63, 0xbb, 0x8f, 0xb7, 0x92, 0xd0, 0xa9, 0x7d, 0xb8, 0x45, 0x21,
0xdb, 0xbc, 0xdd, 0x75, 0xce, 0x30, 0x56, 0x16, 0xe6, 0xb1, 0x0f, 0x1f, 0xc0, 0x46, 0x5d, 0x6d,
0xad, 0xcc, 0x9a, 0xc5, 0xf4, 0x80, 0xce, 0xe9, 0x0e, 0xe0, 0x56, 0x94, 0x7f, 0xbb, 0xe9, 0x2b,
0xb8, 0xc4, 0x7f, 0xb7, 0x65, 0x33, 0xd3, 0xb1, 0xd0, 0x05, 0x2d, 0xe9, 0x4e, 0xfe, 0x99, 0x60,
0x7a, 0x5a, 0xaa, 0xe1, 0xec, 0x59, 0xd7, 0xaf, 0xfa, 0xee, 0xd9, 0xb5, 0xf3, 0xc3, 0x15, 0xef,
0x91, 0xcf, 0x82, 0xa6, 0xbb, 0x60, 0x9a, 0xc0, 0x80, 0xee, 0x70, 0x17, 0xa6, 0xf9, 0xb3, 0x62,
0xd4, 0xc0, 0x96, 0x93, 0x35, 0x59, 0x2f, 0x64, 0x75, 0x97, 0x81, 0xbd, 0x7b, 0x76, 0xa3, 0x36,
0x0e, 0x9c, 0xfb, 0x39, 0x7f, 0x68, 0xc2, 0x9d, 0x3f, 0xfe, 0x87, 0x98, 0xda, 0x22, 0xc3, 0xb9,
0xac, 0xee, 0x32, 0x80, 0xfb, 0xbd, 0xa1, 0xa1, 0xde, 0x68, 0xce, 0xdb, 0x54, 0xf9, 0xfd, 0xd0,
0xc1, 0x03, 0xf8, 0x1e, 0x56, 0x77, 0x19, 0xd0, 0x42, 0x9f, 0x0f, 0x56, 0x77, 0x19, 0x20, 0xea,
0x1e, 0xf5, 0xa4, 0xc9, 0x36, 0xb4, 0xd4, 0xca, 0xbf, 0xd0, 0xfa, 0xfa, 0x13, 0xab, 0x6b, 0x18,
0x2d, 0xaf, 0x16, 0x58, 0x5d, 0x2d, 0xb0, 0xbc, 0x92, 0x0f, 0x3c, 0xec, 0x0b, 0xcc, 0xb3, 0xf0,
0xc9, 0xb3, 0xb8, 0x9c, 0x7b, 0x08, 0x78, 0x09, 0x98, 0x63, 0x7e, 0x31, 0xc7, 0xec, 0xef, 0x6c,
0xb3, 0xbf, 0xb2, 0xe0, 0x46, 0xff, 0xa0, 0x77, 0x26, 0xd0, 0xf6, 0xe6, 0x53, 0xc7, 0x88, 0x72,
0x62, 0x47, 0x68, 0x3d, 0xd6, 0x7d, 0x6c, 0x6c, 0x8c, 0xa6, 0xde, 0x51, 0xa0, 0xbb, 0xeb, 0x9d,
0x0a, 0xf4, 0xf0, 0x00, 0xc8, 0xf1, 0x48, 0xb5, 0xbc, 0xf6, 0xc4, 0xda, 0xaf, 0xd0, 0xc6, 0x5f,
0xc4, 0x00, 0x78, 0x2d, 0xb2, 0x09, 0x10, 0x31, 0xb0, 0x18, 0x68, 0x8b, 0x18, 0x04, 0x7c, 0x2e,
0x66, 0x30, 0x62, 0x09, 0xa2, 0xe5, 0x8d, 0x67, 0x1c, 0x87, 0x18, 0x94, 0xda, 0x3e, 0x87, 0x87,
0xe3, 0xe3, 0xe3, 0xfa, 0xaa, 0x7b, 0x6b, 0x4b, 0x0b, 0x7e, 0x99, 0xa2, 0x3c, 0x1b, 0x67, 0x8f,
0x20, 0xec, 0xe9, 0xc8, 0xa5, 0xbc, 0xae, 0x01, 0x35, 0x47, 0x97, 0x10, 0x11, 0x1a, 0x1c, 0xb4,
0xd0, 0x60, 0x0e, 0x0a, 0x35, 0x30, 0x55, 0xdc, 0x11, 0xe6, 0x54, 0x84, 0xb6, 0xbb, 0x08, 0x6a,
0x02, 0xb1, 0xee, 0x99, 0x8f, 0x33, 0x24, 0xea, 0x1b, 0x78, 0x8b, 0x2a, 0xdc, 0x37, 0x86, 0x04,
0x05, 0x6a, 0x92, 0x87, 0xa5, 0x6f, 0x3e, 0xe8, 0x7e, 0xc8, 0x27, 0x4f, 0xd3, 0x60, 0xdf, 0x60,
0xe9, 0xa2, 0xf9, 0x28, 0x48, 0x34, 0xb0, 0xe6, 0xe9, 0xeb, 0x6e, 0xac, 0x23, 0x9d, 0x53, 0x74,
0x47, 0xbf, 0x80, 0xaa, 0x2c, 0xe8, 0x86, 0x64, 0xf9, 0x8e, 0x3f, 0xaf, 0xc1, 0x01, 0x5f, 0xef,
0x56, 0x68, 0xc8, 0xbe, 0x3f, 0xf7, 0xaa, 0x9d, 0x07, 0xc7, 0x35, 0x11, 0x74, 0x97, 0xf7, 0x98,
0x41, 0x31, 0x5a, 0xa5, 0xfa, 0x7e, 0xd9, 0xdb, 0x5a, 0xa3, 0x8d, 0xcd, 0x1b, 0xbf, 0x44, 0x9d,
0x13, 0x84, 0xc2, 0x71, 0xa4, 0xfb, 0xe3, 0x4a, 0x5a, 0xba, 0x00, 0xd2, 0x01, 0x25, 0xba, 0xe3,
0x65, 0xce, 0x47, 0x2b, 0x97, 0x27, 0xc4, 0x29, 0x19, 0x29, 0x23, 0x0f, 0xa0, 0x3b, 0xd6, 0xaf,
0x4d, 0x45, 0xdd, 0x8d, 0xe7, 0x1b, 0xf8, 0xdf, 0xbc, 0x81, 0xbf, 0x7d, 0x7f, 0x19, 0xd6, 0x81,
0xf7, 0x83, 0xe5, 0xcb, 0xa4, 0x8f, 0x1c, 0x1e, 0x11, 0xa2, 0xa2, 0xa6, 0xe0, 0xb5, 0xde, 0x14,
0xf1, 0x8a, 0x74, 0xdf, 0xb8, 0x61, 0xfd, 0xed, 0xb0, 0xd0, 0xe1, 0x37, 0x80, 0xaf, 0x0d, 0xaf,
0x71, 0xb1, 0x31, 0x42, 0xa1, 0x10, 0x6c, 0x58, 0xc9, 0xc5, 0xba, 0xf7, 0x3f, 0xb8, 0x77, 0x17,
0xae, 0x69, 0x2d, 0xcd, 0xcd, 0xd6, 0x87, 0x0f, 0xc1, 0xdb, 0x9e, 0xee, 0xee, 0xf7, 0xdf, 0x7b,
0x57, 0x22, 0x4d, 0xb5, 0x75, 0x27, 0x8e, 0xe1, 0x9a, 0x10, 0xd5, 0xd9, 0x65, 0x1e, 0xd9, 0x37,
0x34, 0x8a, 0x74, 0x2f, 0xad, 0xef, 0x53, 0x29, 0x0b, 0x06, 0x21, 0x57, 0xf7, 0xc8, 0xf0, 0xdb,
0xd2, 0xcd, 0x23, 0x20, 0x3d, 0xea, 0x9f, 0xdf, 0xd9, 0xd9, 0x51, 0x5f, 0xcf, 0x9b, 0x10, 0xe9,
0x6e, 0x67, 0x6d, 0xf9, 0xc5, 0xba, 0x4f, 0xc2, 0x42, 0x82, 0x79, 0xbc, 0xba, 0xed, 0x5b, 0xb7,
0xc0, 0x4e, 0xb8, 0x7b, 0x24, 0x9e, 0x85, 0x74, 0x3f, 0x71, 0x47, 0xd1, 0x30, 0x0c, 0x69, 0x48,
0xeb, 0x2e, 0x0f, 0x50, 0xac, 0x23, 0xdd, 0x5f, 0xb4, 0x90, 0xea, 0x55, 0xad, 0x0b, 0x98, 0xd4,
0x9d, 0x78, 0x51, 0x5d, 0xb6, 0x78, 0x01, 0x55, 0x19, 0x84, 0x65, 0xf1, 0x90, 0x28, 0x94, 0xd4,
0x64, 0xe4, 0x61, 0xbf, 0x67, 0x3a, 0x64, 0x71, 0xd0, 0x27, 0x9f, 0xbe, 0x2c, 0xa8, 0xc5, 0x14,
0xbf, 0xa3, 0x9e, 0x22, 0x70, 0xbd, 0xa2, 0x24, 0xe9, 0x86, 0xae, 0x21, 0x53, 0xd7, 0x04, 0x24,
0x7a, 0x43, 0x27, 0x2d, 0xfd, 0x09, 0x89, 0x30, 0x75, 0x4f, 0x41, 0x79, 0xf9, 0x88, 0x7a, 0x35,
0xeb, 0x38, 0x26, 0x75, 0x2f, 0x17, 0x61, 0xef, 0x9e, 0xdd, 0xe5, 0xa4, 0xe1, 0xea, 0x97, 0x68,
0xef, 0x16, 0x26, 0xcd, 0xc9, 0xfb, 0x23, 0x87, 0x98, 0xf8, 0xa2, 0x66, 0x6d, 0x7e, 0x1f, 0x6b,
0xcf, 0x54, 0x3c, 0x77, 0xdd, 0xa4, 0x6d, 0x48, 0xe9, 0x84, 0x6e, 0x3e, 0xf7, 0x98, 0x09, 0x60,
0x75, 0x67, 0x06, 0xac, 0xee, 0xcc, 0x80, 0xd5, 0x9d, 0x19, 0xb0, 0xba, 0x33, 0x03, 0x8d, 0x74,
0x6f, 0x71, 0x73, 0x7c, 0xb1, 0x68, 0x2e, 0x4b, 0x95, 0xd8, 0x76, 0xfe, 0xb4, 0xa6, 0xba, 0xd3,
0x81, 0xbc, 0xdc, 0x1c, 0xc3, 0xd9, 0xb3, 0x16, 0xcc, 0x9b, 0x7d, 0xde, 0xf3, 0x2c, 0xd3, 0xb1,
0xd0, 0x08, 0x9d, 0xd3, 0x1d, 0x6f, 0x89, 0x5b, 0xb2, 0xd0, 0xa8, 0xaf, 0x4f, 0x6f, 0xda, 0x5b,
0x54, 0x85, 0x2e, 0xea, 0x6e, 0x63, 0x69, 0x41, 0xb2, 0x65, 0x46, 0x7f, 0xa1, 0x73, 0xba, 0x03,
0xbc, 0xbd, 0x3c, 0x51, 0x33, 0x51, 0x7b, 0x3b, 0x05, 0xd3, 0xf7, 0xe8, 0x26, 0xb4, 0xa1, 0x3b,
0xc9, 0xc1, 0x00, 0x80, 0xe1, 0xa1, 0xa1, 0x1f, 0xb6, 0x6f, 0x43, 0xdb, 0x81, 0xfe, 0x7e, 0x7f,
0xee, 0xfd, 0x2f, 0xc9, 0x13, 0x2b, 0xb9, 0x5c, 0x35, 0x02, 0x63, 0x10, 0xda, 0xd0, 0xbd, 0xb1,
0x81, 0xd4, 0x3c, 0x07, 0x08, 0x46, 0x73, 0xde, 0xde, 0xff, 0xe7, 0xef, 0xbe, 0x97, 0x2f, 0x81,
0xdf, 0x5b, 0x9a, 0xc9, 0xb6, 0xed, 0x24, 0x25, 0x25, 0xaa, 0x15, 0x1a, 0x63, 0x60, 0x46, 0x77,
0xc5, 0xc5, 0x77, 0x6b, 0x4b, 0x4b, 0xe1, 0x33, 0x25, 0xf3, 0xf9, 0x0d, 0x0f, 0x0f, 0x13, 0xdf,
0xb2, 0xba, 0xcb, 0x00, 0x51, 0xf7, 0x27, 0x05, 0xf9, 0x60, 0xe4, 0x5c, 0x8d, 0xbb, 0x31, 0x41,
0x22, 0xdb, 0xbe, 0xfd, 0x06, 0x7f, 0xcb, 0xea, 0x2e, 0x03, 0x48, 0xf7, 0xb6, 0xb6, 0x36, 0xa8,
0x95, 0xa3, 0x0b, 0x26, 0x25, 0xba, 0x8b, 0x07, 0x95, 0x8a, 0x86, 0x3a, 0xb2, 0xba, 0xcb, 0x00,
0xe8, 0xbe, 0xd8, 0x68, 0x1e, 0xf1, 0x79, 0xd6, 0x4f, 0x3b, 0xb6, 0x6b, 0xd8, 0x2f, 0x55, 0xa2,
0xd7, 0xc9, 0xcf, 0x3f, 0xec, 0xd0, 0xc2, 0x17, 0xa1, 0x10, 0xda, 0xf3, 0xfb, 0xf5, 0xab, 0xbe,
0xb8, 0x4c, 0x14, 0xfa, 0x7d, 0xf9, 0xbb, 0x8b, 0x87, 0xf8, 0x7c, 0xd6, 0xef, 0x32, 0x40, 0x2c,
0xdf, 0xad, 0x0e, 0x99, 0x53, 0xa5, 0xbb, 0xe1, 0xec, 0x59, 0xf8, 0x5c, 0x0d, 0xac, 0xee, 0x32,
0x20, 0x5d, 0x9f, 0x79, 0xf5, 0xea, 0xa5, 0x86, 0x69, 0xa6, 0x26, 0x27, 0x11, 0xdf, 0xb2, 0xba,
0xcb, 0x80, 0x4a, 0xf5, 0x77, 0xf5, 0xc0, 0xea, 0x2e, 0x03, 0xac, 0xee, 0xd2, 0xd0, 0xb6, 0xee,
0x1d, 0xfd, 0x82, 0x33, 0x0f, 0xaa, 0x8e, 0x04, 0x3f, 0xc7, 0x3a, 0xbf, 0xbf, 0xe9, 0xff, 0x8e,
0x75, 0x7e, 0x17, 0xf5, 0x7f, 0x3f, 0x2c, 0xea, 0xff, 0x8e, 0x75, 0x7e, 0xf7, 0xc9, 0x3b, 0x24,
0xea, 0xff, 0x6e, 0x7e, 0x29, 0xe7, 0x10, 0xea, 0xfc, 0xfe, 0x77, 0x36, 0xd6, 0xf9, 0xfd, 0x42,
0x96, 0xa9, 0x77, 0xa6, 0xe5, 0xe5, 0x5c, 0xfb, 0xa0, 0xe2, 0x9b, 0xe9, 0x93, 0x93, 0xf2, 0xe9,
0x9f, 0xee, 0xc4, 0x09, 0x70, 0xee, 0x46, 0x47, 0xa9, 0x34, 0x61, 0x0e, 0x49, 0x46, 0x46, 0x84,
0xa3, 0x0d, 0xaf, 0x2b, 0x21, 0x4a, 0x27, 0xd8, 0x21, 0xc3, 0xc9, 0x7e, 0x22, 0xc7, 0x1e, 0xde,
0xca, 0xc2, 0xba, 0xad, 0xe9, 0x9f, 0xee, 0xc4, 0x37, 0x5f, 0x6f, 0x58, 0xef, 0x75, 0xc6, 0x83,
0xf2, 0x3c, 0xc0, 0xef, 0x7d, 0x43, 0xa3, 0xfb, 0x9c, 0xc4, 0xc3, 0x04, 0x38, 0x8e, 0xb1, 0x66,
0x17, 0x73, 0xb0, 0x41, 0x07, 0xc4, 0x71, 0x07, 0x01, 0x93, 0xe3, 0x0e, 0xf0, 0x41, 0x07, 0x36,
0xf8, 0xb8, 0x83, 0x60, 0xf4, 0xfa, 0x66, 0xd0, 0x41, 0x40, 0xf1, 0x01, 0xcf, 0x0c, 0x5c, 0xfd,
0x63, 0xb7, 0xcb, 0xf4, 0x58, 0xf7, 0x81, 0x81, 0x01, 0x9a, 0x06, 0x1d, 0x80, 0xee, 0x07, 0x5d,
0xc4, 0x1d, 0xc7, 0x9c, 0x23, 0xd5, 0xe9, 0x8d, 0x2d, 0x13, 0x05, 0x2f, 0x5a, 0x38, 0xc7, 0xc5,
0xd2, 0x5f, 0x0c, 0x8c, 0xa2, 0x2a, 0x59, 0xed, 0x60, 0x52, 0x77, 0xbc, 0x33, 0xff, 0xee, 0x9d,
0x3f, 0x51, 0x9b, 0x87, 0x6b, 0x48, 0x36, 0x52, 0x27, 0x8b, 0x4b, 0x41, 0x7b, 0x7a, 0x7b, 0x7b,
0xfb, 0x6f, 0xbf, 0xfc, 0x8c, 0x42, 0x35, 0x5e, 0xb2, 0xd4, 0xdc, 0x2b, 0x0d, 0x52, 0x76, 0xf3,
0xf2, 0xd7, 0x3c, 0x65, 0x6d, 0x42, 0xac, 0x7b, 0x25, 0x97, 0x4b, 0xbc, 0xed, 0x56, 0x30, 0x73,
0xa2, 0x1a, 0xb0, 0x74, 0xbd, 0x03, 0xd2, 0x58, 0x04, 0x14, 0x6b, 0x9e, 0x54, 0xf8, 0xad, 0x30,
0x62, 0x9c, 0xae, 0xce, 0xc7, 0x79, 0x9d, 0x7c, 0x4c, 0x77, 0x4f, 0xff, 0xf3, 0xf1, 0x9a, 0xde,
0x13, 0x68, 0x13, 0x93, 0xf3, 0xfd, 0x10, 0xf9, 0xf1, 0x07, 0x2b, 0xf1, 0x23, 0x42, 0x82, 0x02,
0x7b, 0x7b, 0xd4, 0x9f, 0x8c, 0x98, 0xdb, 0xd4, 0x6f, 0x79, 0x22, 0x12, 0xa4, 0x51, 0x69, 0x11,
0x12, 0x05, 0x20, 0x0e, 0x09, 0xea, 0xed, 0xed, 0x85, 0x3d, 0x50, 0xc3, 0x01, 0xdd, 0xad, 0xfd,
0x65, 0xf7, 0x8e, 0xd7, 0x4d, 0x4c, 0xb9, 0xae, 0x76, 0x74, 0xb4, 0x4b, 0x7c, 0xcc, 0xe7, 0x0f,
0xae, 0x5f, 0xfb, 0xf1, 0x86, 0xcf, 0xd6, 0xaa, 0x9d, 0xc1, 0x9d, 0x82, 0x46, 0xd0, 0x9d, 0x43,
0xe9, 0x04, 0x57, 0x05, 0xf9, 0x79, 0xc4, 0x4b, 0x91, 0x75, 0xd0, 0x73, 0xd0, 0xdd, 0x54, 0xb3,
0xb9, 0x94, 0xb4, 0x0c, 0x25, 0xba, 0xff, 0xf0, 0xfd, 0x77, 0xf9, 0x79, 0xb9, 0x9a, 0x5c, 0x6c,
0xfd, 0xd3, 0x6b, 0x31, 0xdd, 0x1d, 0xd4, 0x5c, 0x4d, 0x40, 0xba, 0xc4, 0xab, 0x28, 0xc7, 0xae,
0xcc, 0x6d, 0xad, 0xad, 0x0b, 0x0d, 0xe6, 0xa0, 0x3d, 0xb6, 0x21, 0x25, 0xa0, 0x3b, 0xc7, 0x23,
0x4d, 0xed, 0x20, 0xb5, 0x0f, 0x25, 0xba, 0x23, 0xc5, 0xf7, 0xfd, 0xb9, 0xf7, 0xc2, 0x39, 0x2f,
0xf5, 0x32, 0x00, 0xdd, 0x51, 0x87, 0x6c, 0x55, 0x4f, 0xfc, 0xf4, 0xe3, 0x0f, 0x51, 0xe3, 0x17,
0x7a, 0x9b, 0x98, 0x90, 0x10, 0xf3, 0xe0, 0xbe, 0x44, 0xb3, 0x0c, 0x02, 0xd4, 0x2c, 0xb1, 0x51,
0xac, 0x9e, 0x19, 0xea, 0x45, 0xc8, 0x08, 0x14, 0xe9, 0x9e, 0x9c, 0x94, 0xb8, 0xe9, 0x8b, 0xcf,
0x27, 0x34, 0x1b, 0x4f, 0xac, 0xb6, 0xee, 0xc4, 0x1c, 0x6b, 0x6b, 0x6a, 0x50, 0xc1, 0x72, 0x37,
0xea, 0x8e, 0xf4, 0x91, 0x36, 0x41, 0xcf, 0xb1, 0xc1, 0xb1, 0xe7, 0x95, 0x4c, 0x34, 0xab, 0x53,
0x50, 0xa4, 0xfb, 0x82, 0x79, 0xb3, 0xb7, 0x7d, 0xfb, 0xcd, 0xae, 0x9f, 0x7f, 0x04, 0xc2, 0x77,
0xae, 0x79, 0x8d, 0x2d, 0x35, 0xb3, 0x79, 0xe3, 0x57, 0xff, 0xfc, 0xea, 0x0b, 0x07, 0x7b, 0x3b,
0xf8, 0x97, 0xa0, 0xe9, 0x24, 0x57, 0x2d, 0x5f, 0xba, 0x7d, 0xeb, 0x96, 0xb0, 0x90, 0xa0, 0x3b,
0x11, 0xe1, 0x20, 0x50, 0x70, 0x60, 0x40, 0x6b, 0x4b, 0x0b, 0x9e, 0x08, 0x25, 0xba, 0x37, 0x36,
0x36, 0x20, 0xdd, 0x4b, 0x4b, 0x9e, 0x4b, 0x1f, 0x89, 0x74, 0xd7, 0x70, 0xae, 0x3c, 0x2d, 0x43,
0x91, 0xee, 0x68, 0x00, 0x1f, 0x42, 0xa0, 0xbf, 0xdf, 0xca, 0x65, 0x4b, 0x60, 0x27, 0x2a, 0x55,
0x91, 0x28, 0xeb, 0xd6, 0x60, 0x6b, 0x30, 0x8c, 0x8f, 0x8f, 0xc3, 0x2f, 0x03, 0x2d, 0xde, 0x00,
0x15, 0xa1, 0x53, 0xae, 0x2e, 0xc4, 0x44, 0xfc, 0xa8, 0xd0, 0x7d, 0x42, 0x34, 0xd1, 0x36, 0xd4,
0xdc, 0x65, 0x1e, 0x09, 0xb7, 0xb8, 0x90, 0x85, 0xbc, 0x95, 0x89, 0x74, 0x13, 0x72, 0x75, 0xb7,
0xb7, 0xb5, 0x36, 0x37, 0xdd, 0x4f, 0xfc, 0x14, 0x09, 0xb1, 0xf6, 0xa3, 0x55, 0xf8, 0x36, 0xd4,
0x73, 0x9a, 0x1a, 0x1b, 0xa1, 0xd8, 0x85, 0xed, 0xe5, 0x4b, 0x16, 0xc1, 0xab, 0xf1, 0x02, 0xc3,
0xf5, 0x9f, 0xac, 0x21, 0x9e, 0x45, 0x95, 0xee, 0x0a, 0x60, 0x13, 0x50, 0x84, 0xdd, 0x1f, 0x5c,
0xce, 0x55, 0x35, 0x0b, 0x06, 0x21, 0x57, 0x77, 0xe9, 0xbb, 0x27, 0x10, 0xf4, 0xa8, 0x9d, 0xad,
0x84, 0xee, 0x13, 0xa2, 0x1e, 0x2f, 0x9f, 0x7f, 0xba, 0x06, 0x2e, 0x80, 0x07, 0xf7, 0x9b, 0x08,
0x85, 0xc2, 0x17, 0x55, 0x95, 0xc4, 0x11, 0xc6, 0xd7, 0x53, 0x6a, 0xe8, 0xd6, 0xdd, 0x36, 0x10,
0xd3, 0xdd, 0xec, 0x92, 0x1e, 0xea, 0x8e, 0x16, 0x52, 0xf9, 0x64, 0xf5, 0x07, 0x68, 0x43, 0x93,
0x0a, 0xbb, 0x04, 0x8e, 0x84, 0x95, 0x61, 0xba, 0xcb, 0x5f, 0x73, 0x51, 0x73, 0xd8, 0x85, 0x96,
0x62, 0x59, 0xb8, 0xc9, 0xa8, 0xea, 0xe8, 0x2c, 0xc4, 0xba, 0xc3, 0x25, 0x91, 0x78, 0xbf, 0x2a,
0x6f, 0x45, 0x18, 0x35, 0x60, 0x72, 0x2a, 0x09, 0x1b, 0xc4, 0x16, 0x48, 0x41, 0x23, 0x81, 0x3c,
0xa4, 0x57, 0xb4, 0x6b, 0x6d, 0xb4, 0x26, 0x55, 0x90, 0x31, 0x6e, 0x98, 0xd8, 0x48, 0xa0, 0x21,
0xce, 0x3f, 0xac, 0x42, 0x8a, 0x94, 0xd4, 0xf5, 0x52, 0x95, 0xa6, 0x4c, 0x70, 0x4e, 0x62, 0x43,
0xc2, 0xcd, 0x4e, 0x27, 0x0f, 0x0c, 0x8f, 0xd2, 0x9a, 0x11, 0x55, 0x98, 0xd4, 0xbd, 0xaa, 0xb2,
0x92, 0xda, 0x46, 0x31, 0xa7, 0x88, 0x0a, 0x8e, 0x63, 0x2c, 0xc8, 0x71, 0xf8, 0xda, 0x13, 0x4a,
0x12, 0x54, 0x80, 0xd0, 0x37, 0xa3, 0xc2, 0x0f, 0x5f, 0xc8, 0xec, 0x1b, 0xd2, 0x03, 0xe9, 0xa7,
0x5c, 0x57, 0xdf, 0x5d, 0x68, 0xb4, 0xe7, 0xd7, 0x9d, 0xe4, 0x4f, 0x26, 0xce, 0x92, 0x8d, 0xd3,
0x3f, 0xbd, 0xe6, 0xe8, 0xad, 0x32, 0x93, 0x37, 0x0d, 0xee, 0x26, 0xbe, 0xb4, 0x8b, 0x8e, 0x60,
0x1f, 0x56, 0x8a, 0x3f, 0x09, 0xb1, 0xf2, 0x2f, 0x3c, 0x7b, 0xbf, 0x8a, 0xc2, 0x65, 0xad, 0x28,
0xa4, 0x50, 0x38, 0x3e, 0x81, 0xeb, 0x5e, 0x55, 0x55, 0x59, 0x5e, 0x5e, 0x9e, 0x95, 0xf9, 0x98,
0xfc, 0x60, 0x6d, 0x80, 0x9c, 0xc1, 0xda, 0x0f, 0xf0, 0xef, 0x7f, 0xe4, 0x2a, 0x65, 0x73, 0xfd,
0x90, 0xc1, 0xe9, 0x7b, 0x55, 0x8c, 0x0f, 0xc7, 0x56, 0x4a, 0xb8, 0xdd, 0x99, 0xd0, 0xf0, 0xb9,
0x36, 0x36, 0x8f, 0x39, 0x3e, 0xbb, 0x3a, 0x4e, 0xc7, 0x18, 0x8e, 0xcb, 0x23, 0xdb, 0xa0, 0xe2,
0xac, 0x2a, 0x06, 0x66, 0xe1, 0x19, 0x1d, 0x13, 0x1e, 0x8f, 0xac, 0xd8, 0x7f, 0x26, 0x95, 0x73,
0x3c, 0x8e, 0xe3, 0x1c, 0x47, 0xe1, 0x74, 0xed, 0x54, 0x91, 0x02, 0xdd, 0x59, 0xa8, 0x0d, 0x56,
0x77, 0x66, 0xc0, 0xea, 0xce, 0x0c, 0x58, 0xdd, 0x99, 0x01, 0xab, 0x3b, 0x33, 0x60, 0x75, 0x67,
0x06, 0xac, 0xee, 0xcc, 0x80, 0xd5, 0x9d, 0x19, 0xb0, 0xba, 0x33, 0x03, 0xf5, 0x75, 0x17, 0x0a,
0x04, 0x8c, 0xaf, 0x25, 0xa4, 0x8f, 0xd4, 0x54, 0xf7, 0x71, 0x81, 0x80, 0xf1, 0xb9, 0x5c, 0xf4,
0x8f, 0xc6, 0x06, 0x14, 0xf8, 0x9d, 0xf1, 0x05, 0xa8, 0xf4, 0x8e, 0xbc, 0x5f, 0x77, 0x68, 0xaa,
0xfb, 0x0c, 0x41, 0x51, 0xe1, 0x33, 0xe3, 0xf9, 0x06, 0x8b, 0x8d, 0xe6, 0x99, 0x1d, 0xd8, 0x77,
0xc6, 0xfd, 0x94, 0xbd, 0xad, 0xf5, 0xf2, 0x25, 0x8b, 0x0c, 0xde, 0xf9, 0x07, 0x3e, 0x2d, 0x37,
0x0b, 0x3d, 0x02, 0x6b, 0x77, 0x25, 0xd8, 0xb5, 0xf3, 0x27, 0x30, 0x37, 0xea, 0xaa, 0x82, 0xe3,
0x51, 0x7c, 0x5c, 0x6a, 0x4a, 0x32, 0x9a, 0x7c, 0x9e, 0x85, 0x1e, 0x81, 0xb5, 0xbb, 0x12, 0x0c,
0xf1, 0xf9, 0x7b, 0x7f, 0xdb, 0x85, 0x3f, 0xf2, 0x5f, 0x68, 0x30, 0x67, 0xcf, 0xae, 0x9d, 0x21,
0x41, 0x81, 0x12, 0xd3, 0xb0, 0xb0, 0xd0, 0x0b, 0xb0, 0x76, 0x57, 0x0d, 0xbc, 0xba, 0x5a, 0xdf,
0xcb, 0x97, 0x56, 0x2d, 0x5f, 0x0a, 0xd6, 0x97, 0xe8, 0x06, 0xca, 0x42, 0xf7, 0x31, 0x7d, 0xec,
0xde, 0xd8, 0xd0, 0x40, 0xc7, 0x4a, 0x74, 0x5b, 0x37, 0x6f, 0x02, 0x67, 0x07, 0x07, 0x06, 0x10,
0x77, 0xda, 0x58, 0x5a, 0xc0, 0x4e, 0x8f, 0x53, 0x27, 0x29, 0xcf, 0x2e, 0x29, 0x29, 0x51, 0xbf,
0x16, 0xff, 0xd2, 0x2f, 0xb0, 0x76, 0x57, 0x8e, 0x84, 0xb8, 0xb8, 0xaf, 0x37, 0xac, 0xc3, 0xeb,
0x33, 0x46, 0x73, 0xde, 0x86, 0xfa, 0xcc, 0xeb, 0x57, 0xb4, 0x2c, 0x64, 0xc1, 0xda, 0x9d, 0x56,
0xcc, 0x08, 0xbb, 0x8f, 0x8f, 0x8f, 0xc7, 0xc7, 0xc6, 0x7c, 0xb9, 0xee, 0x53, 0xcd, 0x67, 0x78,
0xd2, 0x10, 0xc5, 0x45, 0x85, 0xeb, 0xd6, 0xae, 0xbe, 0x17, 0x1d, 0x85, 0xfa, 0x2d, 0x49, 0x83,
0xb5, 0x3b, 0xad, 0x98, 0xce, 0x76, 0x7f, 0xf9, 0xb2, 0x7a, 0xdf, 0x9f, 0xbf, 0x13, 0x3b, 0xf4,
0xeb, 0x82, 0xdd, 0x89, 0xf1, 0xfc, 0xef, 0xb7, 0x5f, 0x25, 0xa6, 0xd6, 0x65, 0xed, 0x4e, 0x2b,
0xa6, 0x9b, 0xdd, 0x07, 0x07, 0x07, 0x2f, 0x9c, 0xf7, 0x5a, 0xb6, 0x78, 0x81, 0xc4, 0x4c, 0x0b,
0xba, 0x69, 0x77, 0x9c, 0x4b, 0x16, 0x18, 0x9e, 0xf5, 0x38, 0xdd, 0xd7, 0xd7, 0xc7, 0xda, 0x9d,
0x56, 0x4c, 0x2b, 0xbb, 0xc7, 0xc5, 0xc5, 0x06, 0xdc, 0xbc, 0xf1, 0xc9, 0x47, 0x1f, 0xc8, 0xb4,
0x14, 0x30, 0xf6, 0xe1, 0x83, 0xa6, 0xc6, 0x46, 0x06, 0x99, 0x9c, 0x98, 0x28, 0x2f, 0xb6, 0xd5,
0xef, 0xaf, 0xb8, 0xea, 0xeb, 0x73, 0x27, 0x32, 0x82, 0xb5, 0x3b, 0x7d, 0x98, 0x56, 0x76, 0x27,
0x56, 0x66, 0x7a, 0x7b, 0x7a, 0xdc, 0xdd, 0x5c, 0x17, 0xcf, 0x37, 0xd0, 0xe5, 0xd2, 0x7d, 0xb1,
0xd1, 0xbc, 0x93, 0x27, 0x9c, 0xbb, 0xba, 0x3a, 0xf1, 0x03, 0xd8, 0xd2, 0x9d, 0x56, 0x4c, 0x5b,
0xbb, 0x13, 0x51, 0x5e, 0x56, 0xb6, 0x67, 0xd7, 0x2f, 0xba, 0x63, 0xf7, 0x5f, 0x7e, 0xfc, 0x4f,
0xc9, 0x73, 0xd9, 0xa3, 0x78, 0x59, 0xbb, 0xd3, 0x8a, 0x19, 0x61, 0x77, 0x3d, 0x02, 0x6b, 0x77,
0x5a, 0xc1, 0xda, 0x5d, 0xb7, 0xc0, 0xda, 0x9d, 0x56, 0xcc, 0x2c, 0xbb, 0xf7, 0x0d, 0x8d, 0x96,
0x35, 0xf4, 0xf2, 0x3a, 0xf9, 0x75, 0x1d, 0x18, 0x6b, 0x81, 0xed, 0xfc, 0x9a, 0xf6, 0x41, 0xe0,
0xeb, 0xb6, 0xc1, 0x57, 0x22, 0xbe, 0x6c, 0x1d, 0x00, 0x56, 0xb7, 0x0c, 0xbc, 0x10, 0xb1, 0xaa,
0x19, 0xb1, 0xbf, 0xb2, 0xb9, 0x9f, 0xdb, 0x24, 0x66, 0x45, 0x23, 0xc6, 0xf2, 0xc6, 0xbe, 0xb2,
0x06, 0x8c, 0xa5, 0xc0, 0xfa, 0xbe, 0x92, 0xfa, 0xde, 0xe7, 0x3c, 0x8c, 0xc5, 0xc0, 0xba, 0xde,
0xa2, 0xba, 0xde, 0xc2, 0xba, 0x9e, 0xc2, 0xda, 0x9e, 0x67, 0xc0, 0x9a, 0x9e, 0xa7, 0x35, 0xd8,
0x36, 0xa4, 0xdf, 0xd6, 0x27, 0x50, 0x10, 0x21, 0x6b, 0x77, 0x5a, 0xf1, 0xd6, 0xd8, 0xd8, 0x98,
0x60, 0x5a, 0xa0, 0xb6, 0xb6, 0x36, 0x2b, 0xf3, 0x31, 0x71, 0x4f, 0xdf, 0xe0, 0x90, 0xef, 0xa3,
0x2a, 0xfb, 0xc0, 0xa7, 0xe6, 0x67, 0x92, 0xf6, 0x39, 0xc7, 0xec, 0x77, 0xb8, 0xcf, 0x20, 0xf7,
0x11, 0xe6, 0x69, 0xe0, 0x38, 0x3c, 0x34, 0x71, 0x49, 0xb0, 0xbb, 0xf1, 0xe4, 0x44, 0x14, 0xb7,
0xe0, 0xf5, 0x14, 0x73, 0xb3, 0x76, 0xa7, 0x15, 0x8a, 0x4a, 0xf7, 0xfb, 0xf7, 0xa2, 0x17, 0x19,
0xce, 0xd5, 0x97, 0x25, 0x38, 0x89, 0xa5, 0xbb, 0x4b, 0x54, 0xa5, 0xa9, 0x77, 0x16, 0xe3, 0x53,
0x6d, 0x90, 0xe4, 0xc1, 0x33, 0xa9, 0xae, 0xd1, 0x95, 0x28, 0x72, 0xd6, 0xee, 0xb4, 0x42, 0xae,
0xdd, 0x6f, 0x85, 0x86, 0xe0, 0x4f, 0x40, 0x9a, 0x9b, 0x9a, 0xb4, 0x19, 0x93, 0x7a, 0x40, 0x76,
0x3f, 0x19, 0xc5, 0x35, 0x39, 0x1e, 0x47, 0x34, 0x13, 0xc7, 0x31, 0xc6, 0xe2, 0x4a, 0x81, 0x73,
0x44, 0x79, 0x5c, 0x61, 0x33, 0xd4, 0x43, 0x1a, 0xba, 0x86, 0x5a, 0x7a, 0x87, 0x5b, 0x7b, 0x87,
0xa1, 0x52, 0x01, 0x6c, 0x07, 0xf6, 0x0b, 0x3a, 0xde, 0xb0, 0x73, 0x40, 0xd0, 0x35, 0x30, 0x02,
0xec, 0x1e, 0x14, 0xb3, 0x87, 0x3f, 0xd2, 0x2b, 0xe6, 0x28, 0xd4, 0x85, 0x10, 0xfb, 0x87, 0x46,
0x07, 0x86, 0x81, 0x63, 0xc0, 0x41, 0x81, 0x98, 0x7c, 0xc1, 0xd8, 0xd0, 0x88, 0x98, 0xc3, 0x23,
0x42, 0x8c, 0xa3, 0x18, 0x05, 0xa3, 0xc2, 0x91, 0x31, 0x8c, 0x70, 0x22, 0xe4, 0x9b, 0x56, 0xd1,
0xee, 0x12, 0xc5, 0xb5, 0xbb, 0xfe, 0x44, 0xd2, 0xf7, 0xce, 0xf1, 0x67, 0xee, 0x57, 0xb1, 0x76,
0xa7, 0x15, 0xb2, 0xed, 0xee, 0x7d, 0xce, 0x93, 0xd8, 0x3c, 0x6c, 0x34, 0xe7, 0xed, 0xf2, 0xb2,
0x32, 0x2d, 0x47, 0xa6, 0x2a, 0x4a, 0xab, 0x6a, 0x4e, 0xfa, 0x46, 0x11, 0x0d, 0x64, 0xfd, 0x57,
0x66, 0x74, 0x7e, 0x3d, 0xd3, 0x71, 0x4d, 0x41, 0x57, 0x57, 0x67, 0xf8, 0xad, 0xb0, 0xdf, 0xf7,
0xec, 0x46, 0xcb, 0x13, 0x6e, 0x3d, 0x74, 0xde, 0xcc, 0x2b, 0x95, 0x18, 0xb3, 0x87, 0xef, 0xed,
0x6a, 0x1e, 0x65, 0x53, 0x17, 0xb2, 0x90, 0x80, 0x0c, 0xbb, 0x1f, 0xb1, 0xb1, 0x92, 0xf9, 0xd8,
0x2f, 0x3d, 0x35, 0x45, 0xfb, 0xf1, 0x91, 0x44, 0x72, 0x79, 0xfb, 0xd1, 0xbf, 0xe2, 0x9d, 0x3d,
0x82, 0xc4, 0x25, 0xba, 0x5b, 0xb2, 0x7f, 0xca, 0x6b, 0xa6, 0x83, 0xc2, 0x26, 0x0d, 0xf7, 0xbf,
0x79, 0xe3, 0xa7, 0x1d, 0xdb, 0xe7, 0xcf, 0x7d, 0x47, 0xa6, 0xa4, 0xdf, 0x6e, 0xfa, 0x7a, 0x02,
0xab, 0x7a, 0x71, 0x39, 0x0e, 0xe2, 0x95, 0x7d, 0xdc, 0x3c, 0xfd, 0x8f, 0xf8, 0x66, 0xc0, 0xed,
0x2f, 0xd3, 0xb1, 0x4f, 0x4f, 0x48, 0xda, 0xfd, 0xbf, 0xbb, 0x7f, 0x95, 0xf7, 0x94, 0x1b, 0x78,
0x3b, 0x2c, 0x94, 0x91, 0x28, 0x15, 0x63, 0x4c, 0x38, 0x6e, 0x13, 0x5c, 0x62, 0x79, 0x22, 0x12,
0xd9, 0x9d, 0x73, 0x3a, 0x25, 0x32, 0x97, 0xc7, 0x74, 0x50, 0x93, 0x88, 0x8b, 0x79, 0x28, 0xb1,
0xd4, 0x2c, 0xce, 0xa4, 0xc4, 0x47, 0xe8, 0x98, 0xb3, 0x0f, 0xaa, 0x38, 0xa2, 0x3a, 0x18, 0xd8,
0xdd, 0xcc, 0x29, 0xda, 0x2e, 0xac, 0x94, 0xd9, 0x98, 0xa7, 0x2b, 0xa6, 0xd8, 0xfd, 0xe5, 0xcb,
0xea, 0xdc, 0xec, 0x6c, 0x9c, 0x09, 0xf1, 0x71, 0xdf, 0x6f, 0xdb, 0x42, 0xdc, 0x03, 0xec, 0xee,
0xea, 0x92, 0x48, 0x02, 0xbf, 0x1a, 0x5c, 0xbb, 0xe2, 0xa3, 0xc5, 0xc8, 0x27, 0xf1, 0xa8, 0xb4,
0xcd, 0xf4, 0x6c, 0x1a, 0x6e, 0x77, 0xdb, 0xe0, 0xe7, 0x50, 0x93, 0x66, 0x24, 0x12, 0x05, 0x28,
0x2a, 0x2c, 0xc4, 0x57, 0xb4, 0x46, 0xfc, 0x6e, 0xcb, 0xe4, 0x52, 0xe0, 0x70, 0x63, 0x60, 0xe5,
0x57, 0x88, 0xdb, 0xdd, 0xca, 0x37, 0xbf, 0xa2, 0x51, 0x3f, 0x5a, 0x08, 0xf4, 0x0b, 0x8a, 0x5a,
0x66, 0x3a, 0x3a, 0xda, 0xa1, 0x96, 0xa9, 0xf8, 0xfc, 0xc8, 0xf0, 0xdb, 0xf0, 0x9f, 0x3b, 0xe3,
0x7e, 0x0a, 0xad, 0x3a, 0x91, 0x99, 0x91, 0x4e, 0x69, 0x78, 0xa4, 0x10, 0x90, 0x51, 0xcb, 0x71,
0x4d, 0x44, 0x76, 0x87, 0x5a, 0x81, 0x53, 0x04, 0x65, 0x8b, 0xce, 0x51, 0x05, 0xb3, 0x03, 0xfb,
0xd0, 0x22, 0xc8, 0xf5, 0x3c, 0xde, 0x86, 0xcf, 0xd6, 0x4a, 0x57, 0x0e, 0x85, 0xe3, 0xe3, 0xb6,
0x21, 0x25, 0xb8, 0xdd, 0x39, 0xee, 0xa9, 0x69, 0x15, 0x0c, 0xcc, 0x6f, 0x3a, 0xed, 0xa1, 0x91,
0xdd, 0x5f, 0xbf, 0x7a, 0x65, 0x38, 0x7b, 0xd6, 0x8a, 0xa5, 0xc6, 0xa3, 0xa3, 0xa3, 0x3d, 0xdd,
0xdd, 0x0b, 0x0d, 0xe6, 0x40, 0x25, 0xb5, 0xa5, 0xb9, 0x99, 0xea, 0x20, 0x95, 0xc0, 0x3f, 0x1d,
0xb3, 0x3b, 0xb8, 0xc4, 0xc6, 0x35, 0x5c, 0x0b, 0x76, 0xff, 0xfc, 0xd3, 0x35, 0x3f, 0x7e, 0xff,
0x6f, 0x1e, 0xaf, 0x0e, 0x19, 0x17, 0xbe, 0x7e, 0x56, 0xa6, 0xdc, 0x35, 0x73, 0xdc, 0x5c, 0x4e,
0x14, 0xe4, 0x4b, 0xce, 0x86, 0xdc, 0xdb, 0xd3, 0x73, 0xfa, 0xe4, 0x94, 0x71, 0xae, 0xa3, 0x50,
0x1f, 0x13, 0xd9, 0x1d, 0x7e, 0xb4, 0xfb, 0x1d, 0xee, 0x9b, 0x9c, 0x49, 0xcb, 0x7a, 0xd1, 0x39,
0xc1, 0x82, 0x6a, 0xa8, 0x6f, 0x77, 0xb8, 0x0f, 0x5b, 0xfd, 0xfe, 0x72, 0xf8, 0x7f, 0x3f, 0x2f,
0x2e, 0x42, 0x7b, 0x92, 0x13, 0x1f, 0xa1, 0xe9, 0xf9, 0xa9, 0x5d, 0x3e, 0x51, 0x29, 0x90, 0xdd,
0xdf, 0x3c, 0xc1, 0xa1, 0xdd, 0xee, 0xc6, 0xa2, 0x5e, 0x96, 0x2b, 0x97, 0x2d, 0x29, 0x2a, 0x7c,
0x26, 0x10, 0x08, 0x0a, 0x9f, 0x3d, 0x25, 0x7e, 0x7a, 0xcd, 0xd7, 0xe7, 0x3d, 0xe3, 0x85, 0x68,
0xce, 0x82, 0x1f, 0xb6, 0x7f, 0x47, 0x32, 0x4d, 0xc1, 0xa8, 0xd0, 0x46, 0xb4, 0xca, 0x17, 0xe2,
0x01, 0xaf, 0x8c, 0xbc, 0x97, 0x6c, 0x73, 0x24, 0xf5, 0x50, 0xdf, 0xee, 0x26, 0x7f, 0xec, 0x85,
0x7f, 0xea, 0x15, 0x9f, 0xcb, 0xc4, 0x9d, 0x50, 0x98, 0xc1, 0xce, 0x5d, 0x84, 0x85, 0x5a, 0x87,
0xf8, 0xfc, 0xb6, 0xb6, 0xb6, 0xf1, 0xf1, 0xf1, 0xf2, 0xb2, 0xb2, 0x97, 0xd5, 0xd5, 0x68, 0x27,
0xaf, 0xae, 0xf6, 0x49, 0x7e, 0x3e, 0x78, 0x85, 0x78, 0x58, 0x69, 0x49, 0x49, 0x7e, 0x5e, 0x2e,
0xbe, 0x74, 0x4e, 0x6b, 0x6b, 0x2b, 0x9c, 0x88, 0x1f, 0x50, 0x5f, 0xcf, 0x93, 0xf7, 0xc0, 0x8b,
0x11, 0xbb, 0x43, 0xfc, 0xd2, 0x1f, 0xdd, 0x89, 0x08, 0xc7, 0x57, 0xab, 0x05, 0xc2, 0xb5, 0xee,
0xc6, 0xb5, 0x2b, 0x64, 0xd2, 0x1c, 0x1a, 0x19, 0x43, 0x8b, 0x7c, 0x89, 0x1f, 0x3c, 0x79, 0x67,
0x3e, 0xad, 0x51, 0x7f, 0xa9, 0x4f, 0x16, 0xf2, 0xa0, 0xa6, 0xdd, 0xe1, 0xae, 0x54, 0x41, 0x03,
0x0e, 0x10, 0x7c, 0x8f, 0x8e, 0x8c, 0x8b, 0x8d, 0xc1, 0xa7, 0x25, 0x4a, 0x4c, 0x88, 0x87, 0x6d,
0xb4, 0x50, 0x77, 0x57, 0x67, 0xe7, 0x62, 0xa3, 0x79, 0xa8, 0x1a, 0xf0, 0xe5, 0xfa, 0x4f, 0x71,
0x5b, 0x78, 0x7a, 0xb8, 0x43, 0x6d, 0x01, 0x6d, 0x1f, 0xe0, 0xfc, 0xf1, 0xd3, 0x8e, 0xed, 0x2f,
0xaa, 0x2a, 0x8d, 0x17, 0x18, 0xa6, 0xa6, 0x24, 0xcb, 0x8b, 0x93, 0x11, 0xbb, 0xcb, 0xfb, 0xed,
0xf1, 0xf9, 0x83, 0x6b, 0x3f, 0x5c, 0xb5, 0x7a, 0xd5, 0x8a, 0x8f, 0x56, 0x2e, 0x47, 0x8b, 0xc0,
0x92, 0xc1, 0xc0, 0xf0, 0x28, 0x5a, 0x5b, 0x0d, 0xd1, 0xec, 0xef, 0xec, 0x62, 0x1e, 0xbd, 0xeb,
0xcd, 0xcc, 0x4c, 0xa8, 0x63, 0x77, 0xb8, 0x7c, 0xc3, 0xff, 0x1b, 0x2c, 0x28, 0x73, 0x1a, 0xad,
0xbe, 0xbe, 0x3e, 0xf8, 0x08, 0x0e, 0x88, 0x8a, 0x8c, 0x98, 0x10, 0xd9, 0x1d, 0x5f, 0x7d, 0xa8,
0xb3, 0xb3, 0x03, 0xf6, 0x43, 0x39, 0x8d, 0xde, 0x42, 0xdd, 0xf7, 0xc1, 0xbd, 0xbb, 0xb0, 0x11,
0x71, 0xfb, 0xd6, 0x87, 0x2b, 0xde, 0x7b, 0xff, 0xbd, 0x77, 0xff, 0xf8, 0xdf, 0x1e, 0x73, 0xd3,
0xfd, 0xb0, 0x81, 0xa7, 0x86, 0x9a, 0x7d, 0xf2, 0x72, 0x15, 0x2d, 0xb0, 0xe7, 0xa7, 0x4b, 0x76,
0x57, 0x0f, 0xbd, 0xfc, 0x11, 0xb4, 0xa4, 0x1d, 0xe2, 0xa1, 0x4b, 0xb9, 0x6c, 0xd3, 0x3b, 0x1d,
0x50, 0xd9, 0xee, 0x50, 0x7a, 0xa1, 0x91, 0xa0, 0x69, 0xf2, 0x9f, 0x3a, 0xe5, 0xe6, 0x64, 0xa3,
0x32, 0x1e, 0x2a, 0x30, 0x60, 0x77, 0xb4, 0x6c, 0xdf, 0x84, 0x1c, 0xbb, 0xc3, 0x31, 0x58, 0xdd,
0xa0, 0xa0, 0x60, 0x02, 0x5b, 0x0f, 0xbe, 0x6d, 0xd3, 0x17, 0x9f, 0xa3, 0x65, 0x2d, 0xe1, 0x7e,
0x0e, 0x4e, 0xbc, 0xea, 0xeb, 0x23, 0x14, 0x0a, 0xb7, 0x7d, 0xfb, 0x8d, 0xad, 0xd5, 0x61, 0x79,
0xd9, 0x4d, 0xb1, 0xbb, 0x73, 0xfc, 0x91, 0x30, 0x7a, 0x1f, 0x00, 0xd3, 0x61, 0xf7, 0xce, 0x01,
0x81, 0x8d, 0xff, 0xa4, 0xdd, 0x0f, 0xfb, 0xe6, 0x55, 0x36, 0xb3, 0x0d, 0x91, 0xd4, 0x43, 0xd3,
0x86, 0x48, 0xaa, 0x00, 0xe6, 0x6e, 0x55, 0x77, 0xdd, 0x3f, 0xec, 0x19, 0x8d, 0x73, 0xbc, 0xd8,
0xee, 0x4e, 0xb1, 0xee, 0xf7, 0xab, 0xa8, 0x8d, 0x4d, 0x0b, 0xe8, 0x1b, 0x1a, 0xb5, 0x0b, 0x9e,
0xac, 0xbb, 0x9b, 0x9c, 0x4d, 0xcf, 0xac, 0x64, 0x1b, 0x22, 0xa9, 0xc7, 0x14, 0xbb, 0xc3, 0xfd,
0xa2, 0x82, 0x71, 0xcd, 0xc0, 0x63, 0x47, 0x6c, 0x99, 0x0a, 0x54, 0x1e, 0x06, 0x86, 0xc7, 0x2c,
0x6e, 0x16, 0xe2, 0x46, 0x31, 0xf5, 0xca, 0xc8, 0xe0, 0xea, 0xa5, 0x51, 0xf0, 0x07, 0xab, 0xe8,
0x47, 0xeb, 0x74, 0x5b, 0xd7, 0x3b, 0x29, 0xe9, 0x23, 0x24, 0x4b, 0x77, 0xa8, 0x39, 0x6c, 0xf9,
0xe7, 0x46, 0x99, 0x5e, 0xff, 0xcb, 0xfb, 0x1c, 0x23, 0x21, 0x2a, 0x40, 0x7b, 0x9f, 0xc0, 0x8e,
0x50, 0xe5, 0xe5, 0x38, 0xc5, 0x9d, 0x8a, 0xe6, 0x2a, 0x3f, 0x4d, 0x27, 0x31, 0x3c, 0x2a, 0xb4,
0x0a, 0x28, 0x26, 0x7e, 0x97, 0x93, 0x51, 0xfa, 0xfa, 0x5d, 0x74, 0x16, 0xb2, 0x2b, 0x33, 0xc4,
0x39, 0x6f, 0x11, 0xe1, 0x6e, 0x52, 0xcb, 0x91, 0x29, 0x85, 0x73, 0x54, 0xa5, 0xa9, 0x4b, 0x3c,
0xa1, 0xa3, 0x6f, 0xac, 0xcb, 0x9d, 0x0a, 0xa6, 0x83, 0xd2, 0x08, 0x43, 0x23, 0x63, 0x16, 0x7e,
0x93, 0xbf, 0x5e, 0xac, 0x53, 0xe7, 0xe5, 0xdc, 0xb8, 0x62, 0x6d, 0x3f, 0xb6, 0x9b, 0xc6, 0x90,
0x5b, 0x77, 0x3f, 0x6a, 0x67, 0x83, 0x7b, 0x3d, 0x23, 0x3d, 0x4d, 0x8b, 0x21, 0x29, 0x42, 0x53,
0xf7, 0xd0, 0xd5, 0x94, 0x1a, 0x7b, 0x28, 0xd1, 0x1d, 0xa6, 0x74, 0x16, 0xb7, 0xf0, 0x4a, 0xbf,
0x9d, 0xa3, 0x5b, 0x7d, 0x7d, 0xd5, 0xc3, 0xc8, 0x98, 0xd0, 0x31, 0xbc, 0x5c, 0xa2, 0x2b, 0xfc,
0x81, 0x93, 0x89, 0x0e, 0xb7, 0x4a, 0xa3, 0x9f, 0x34, 0xf5, 0xf2, 0x47, 0x98, 0x0e, 0x50, 0xbf,
0xa1, 0xe8, 0x56, 0xd5, 0xdd, 0xcd, 0xd5, 0x70, 0xf6, 0x2c, 0x6e, 0x05, 0x2d, 0x45, 0xa6, 0x5d,
0x68, 0x29, 0xc7, 0x2d, 0x89, 0xe3, 0x9a, 0x48, 0x8a, 0x27, 0x13, 0x39, 0x27, 0x12, 0x38, 0x53,
0x2d, 0x8e, 0x68, 0xee, 0xfd, 0x38, 0xe1, 0x69, 0xe3, 0xeb, 0xb6, 0x41, 0x3a, 0x82, 0x64, 0x0a,
0x1d, 0xfd, 0x02, 0x97, 0x88, 0x72, 0x93, 0xe3, 0xb1, 0xd2, 0xdf, 0x17, 0x5b, 0x34, 0xf8, 0x78,
0x3c, 0xc7, 0xe5, 0x11, 0xc7, 0x25, 0x81, 0x25, 0x19, 0xda, 0x86, 0x94, 0xe2, 0x33, 0x72, 0x4a,
0xda, 0x1d, 0xad, 0xa2, 0xad, 0x05, 0xb8, 0xfa, 0x25, 0xca, 0x5c, 0x7b, 0x5b, 0xe9, 0x82, 0xdc,
0xd8, 0xbf, 0xfc, 0xd8, 0xc3, 0xc3, 0x7f, 0x67, 0x1f, 0x8f, 0xac, 0xc8, 0xa9, 0x96, 0xec, 0x9e,
0x39, 0xcd, 0x70, 0x2d, 0xad, 0xd6, 0x2e, 0xa4, 0xc4, 0xf4, 0x6c, 0x1a, 0xde, 0x21, 0x9e, 0xa5,
0xaa, 0x54, 0x64, 0x77, 0xad, 0xc1, 0x2b, 0xb6, 0x1a, 0xfc, 0x4a, 0x92, 0x2e, 0x51, 0x5c, 0xaf,
0x98, 0xea, 0x9b, 0xe9, 0xb5, 0xcf, 0x6a, 0xba, 0xfb, 0x87, 0x46, 0x99, 0x8a, 0x99, 0x59, 0x54,
0xb7, 0x0c, 0x3c, 0x2a, 0x69, 0x0b, 0xce, 0xe4, 0x9d, 0x8b, 0xad, 0x3e, 0x75, 0xb7, 0xd2, 0xe5,
0x0e, 0xd7, 0x2d, 0xba, 0x92, 0xa5, 0x52, 0x7a, 0xc6, 0x56, 0x0b, 0x85, 0x4c, 0xdb, 0x9d, 0x05,
0x0b, 0xed, 0x83, 0xb5, 0x3b, 0x8b, 0x19, 0x04, 0xd6, 0xee, 0x2c, 0x66, 0x10, 0x58, 0xbb, 0xb3,
0x98, 0x41, 0x60, 0xed, 0xce, 0x62, 0x06, 0x81, 0xb5, 0x3b, 0x8b, 0x19, 0x04, 0xd6, 0xee, 0x2c,
0x66, 0x10, 0x58, 0xbb, 0xb3, 0x98, 0x41, 0x60, 0xc6, 0xee, 0xe3, 0x00, 0x81, 0x80, 0x25, 0x4b,
0x2d, 0x50, 0xc8, 0xe7, 0x33, 0x6d, 0x77, 0x81, 0xa0, 0xc5, 0xcd, 0xf1, 0xc5, 0xa2, 0xb9, 0x2c,
0x59, 0xd2, 0x4b, 0x63, 0x83, 0xb6, 0xf3, 0xa7, 0x59, 0xbb, 0xb3, 0x9c, 0x19, 0xd4, 0x09, 0xbb,
0x8f, 0x8c, 0x0c, 0x71, 0xcb, 0x87, 0x2a, 0x59, 0xb2, 0xa4, 0x99, 0xdc, 0xf2, 0xe1, 0xaa, 0xc9,
0x51, 0x32, 0xff, 0x07, 0xaa, 0x57, 0x6f, 0xac, 0x69, 0xfa, 0xc1, 0x9f, 0x00, 0x00, 0x00, 0x00,
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE tune_diff_pair_skew_legend_xpm[1] = {{ png, sizeof( png ), "tune_diff_pair_skew_legend_xpm" }};
//EOF

View File

@ -0,0 +1,655 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0xa2, 0x08, 0x02, 0x00, 0x00, 0x01, 0x90, 0x54, 0x77,
0x66, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x1e, 0xc2, 0x00, 0x00, 0x1e,
0xc2, 0x01, 0x6e, 0xd0, 0x75, 0x3e, 0x00, 0x00, 0x00, 0x09, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f,
0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x89, 0x2a, 0x8d, 0x06, 0x00, 0x00, 0x20, 0x00, 0x49,
0x44, 0x41, 0x54, 0x78, 0x9c, 0xec, 0x5d, 0x87, 0x5f, 0x14, 0x47, 0xfb, 0xf7, 0xbf, 0xf8, 0x25,
0xaf, 0x89, 0xd1, 0x18, 0x45, 0x45, 0x40, 0x63, 0x09, 0x56, 0x14, 0x03, 0xaf, 0xbd, 0xc5, 0x82,
0x05, 0x15, 0x45, 0x2c, 0x09, 0x28, 0x16, 0x90, 0x2e, 0x28, 0x0a, 0x8a, 0xd1, 0x68, 0x6c, 0x49,
0x34, 0x18, 0xa3, 0xd1, 0xe4, 0x35, 0x89, 0x46, 0xd4, 0x20, 0xbd, 0x88, 0x20, 0x20, 0xed, 0x80,
0xa3, 0x2b, 0x45, 0x3d, 0x3a, 0x07, 0x47, 0xbb, 0xf2, 0x9b, 0xbb, 0x81, 0x61, 0xbd, 0xdd, 0xdb,
0x9d, 0xbd, 0x9b, 0xbb, 0x83, 0x83, 0xef, 0x67, 0x3e, 0x7c, 0xf6, 0x86, 0xd9, 0x67, 0x9e, 0xfd,
0xee, 0xec, 0xd4, 0x67, 0x9e, 0x19, 0xa6, 0xd0, 0x0d, 0x0d, 0x09, 0x71, 0xec, 0x09, 0x86, 0xe1,
0xcb, 0xfa, 0xe4, 0x3f, 0xff, 0x47, 0xfd, 0x19, 0x39, 0x6e, 0x6c, 0xa1, 0xcf, 0x11, 0x70, 0x51,
0x1c, 0xe8, 0x07, 0xae, 0x09, 0x64, 0xa0, 0x26, 0x1d, 0x5e, 0x4c, 0x34, 0xfb, 0x0c, 0xe6, 0xad,
0x29, 0x0f, 0x2d, 0x33, 0xc8, 0x72, 0x76, 0x42, 0xd7, 0x36, 0xb3, 0xac, 0xc1, 0xdf, 0xca, 0xf0,
0x6b, 0xc4, 0x32, 0x68, 0x2d, 0x2c, 0x40, 0xd7, 0x40, 0xf7, 0xd6, 0x5e, 0x14, 0x1d, 0xf5, 0x25,
0x93, 0x81, 0x38, 0x2f, 0x87, 0x31, 0x5e, 0xe8, 0xef, 0x83, 0x9b, 0x81, 0xd9, 0xa7, 0x9f, 0x68,
0x95, 0x81, 0x37, 0x6e, 0x06, 0x00, 0xe6, 0x63, 0x47, 0x8b, 0xc5, 0xe2, 0xe5, 0x8b, 0x17, 0x82,
0x0b, 0x5a, 0x06, 0xb9, 0x8c, 0xb7, 0x14, 0xfa, 0x7a, 0xf1, 0xc8, 0x80, 0x05, 0x30, 0x03, 0x7b,
0xdb, 0x79, 0x28, 0x66, 0xc7, 0xb6, 0x2d, 0xe0, 0xaf, 0xd0, 0xf7, 0x08, 0xa1, 0x0c, 0x04, 0xca,
0x0c, 0xa8, 0x9f, 0xc5, 0x26, 0x87, 0x75, 0xe0, 0xaf, 0xc0, 0xdd, 0x8d, 0x54, 0x06, 0x79, 0x8c,
0xf1, 0x8c, 0x9f, 0x02, 0xc9, 0x0c, 0xb2, 0x76, 0x6c, 0xad, 0xb9, 0x7b, 0x5b, 0x3d, 0x83, 0xd6,
0x02, 0x41, 0xd5, 0xcd, 0x1b, 0x3d, 0x21, 0xfc, 0x1a, 0x0c, 0xb5, 0x4f, 0x1e, 0xd1, 0xef, 0x5f,
0x64, 0x67, 0xdb, 0x93, 0x41, 0x3e, 0x73, 0x06, 0x00, 0x99, 0x9b, 0x37, 0x80, 0xe7, 0x00, 0x1f,
0x44, 0x49, 0x70, 0x20, 0x0c, 0x1a, 0x9f, 0x20, 0xc9, 0xd6, 0x46, 0xd3, 0xd7, 0xcf, 0x92, 0x01,
0x1d, 0xec, 0x14, 0xc9, 0xa3, 0x27, 0x59, 0x30, 0x65, 0x20, 0x20, 0x95, 0x01, 0xf3, 0x7b, 0x23,
0x99, 0x41, 0xea, 0xca, 0x65, 0xf4, 0x48, 0xf0, 0xda, 0xd4, 0x62, 0xe4, 0x72, 0xb9, 0x96, 0x19,
0xbc, 0xf9, 0xe3, 0x2e, 0x3d, 0x32, 0xc3, 0x71, 0x23, 0xf5, 0xa7, 0xeb, 0xde, 0xdd, 0xcd, 0xcd,
0xcd, 0xbb, 0x9d, 0xb7, 0x6b, 0x93, 0x81, 0x82, 0x89, 0x25, 0x96, 0xe6, 0x45, 0x9b, 0x0c, 0xa8,
0x12, 0x9b, 0xd2, 0x9e, 0xab, 0x49, 0x6f, 0x6b, 0x6b, 0x23, 0x90, 0x01, 0x40, 0xf5, 0x6f, 0xbf,
0x66, 0x38, 0x6e, 0xe8, 0xa8, 0xae, 0xc2, 0x4c, 0xcf, 0x3b, 0x03, 0x46, 0x74, 0xd5, 0xd5, 0x4a,
0xca, 0x4a, 0xc8, 0x48, 0x17, 0xe4, 0xf5, 0x7d, 0x5c, 0x25, 0x27, 0x82, 0x00, 0x51, 0x5d, 0x0d,
0xf5, 0xf2, 0xee, 0x6e, 0x70, 0x91, 0xe7, 0xb6, 0x57, 0x57, 0xe9, 0x54, 0xc4, 0xcf, 0xb4, 0x46,
0xd7, 0xa0, 0x42, 0x15, 0xfa, 0x79, 0xd5, 0xc7, 0xc5, 0x90, 0x91, 0xce, 0x58, 0x78, 0x88, 0xd5,
0xa0, 0x54, 0x41, 0xa8, 0x95, 0xd7, 0x8b, 0x74, 0xf6, 0x48, 0x66, 0xe9, 0x4d, 0x8d, 0x8d, 0xfa,
0x92, 0x5e, 0x5d, 0xa5, 0x2c, 0xd7, 0x09, 0x71, 0xca, 0xfe, 0x25, 0xec, 0xa3, 0x91, 0x94, 0xce,
0x09, 0xbd, 0x4b, 0x6f, 0x97, 0x48, 0xa8, 0x31, 0xe0, 0x53, 0x20, 0xaf, 0x7b, 0x4d, 0x75, 0x35,
0xea, 0x3d, 0x64, 0xbb, 0x38, 0x13, 0x96, 0xce, 0x19, 0x3f, 0x8c, 0xde, 0x9a, 0x83, 0x20, 0x97,
0x76, 0x6b, 0x21, 0x1d, 0xfe, 0x2b, 0xd9, 0xce, 0x96, 0xa3, 0x35, 0x6f, 0xce, 0x78, 0xc1, 0x2e,
0x02, 0x5e, 0xa8, 0x8d, 0x35, 0xe8, 0x60, 0x63, 0x86, 0x93, 0x81, 0xc2, 0x82, 0x7c, 0xed, 0xa5,
0x03, 0xa4, 0x3b, 0xac, 0xd5, 0xa3, 0x74, 0xf6, 0xa2, 0x6d, 0x20, 0xe9, 0x57, 0x2e, 0x5d, 0x9c,
0xc6, 0xd4, 0x1d, 0xe2, 0x90, 0x9e, 0xb3, 0xc7, 0xa5, 0xab, 0x56, 0x44, 0x8d, 0xc9, 0xd8, 0xe4,
0x20, 0x97, 0x4a, 0xd5, 0xa4, 0x6b, 0x02, 0x56, 0xe7, 0x20, 0x7b, 0x97, 0x33, 0xba, 0xce, 0xdb,
0xef, 0x8a, 0xfe, 0xa5, 0x53, 0x99, 0xa1, 0x42, 0xb0, 0xdf, 0x95, 0x71, 0x9c, 0x46, 0x46, 0x3a,
0x27, 0xae, 0x5c, 0xbe, 0x84, 0x1b, 0x2e, 0x5d, 0x8c, 0xb3, 0x9e, 0x06, 0x68, 0x50, 0x0b, 0x6d,
0xc5, 0x42, 0xa3, 0x69, 0x4f, 0x05, 0x78, 0x23, 0x8c, 0x2f, 0xa5, 0x34, 0x34, 0x18, 0x68, 0x99,
0x68, 0x33, 0x87, 0xf1, 0xae, 0xec, 0xc3, 0xee, 0x4f, 0xcc, 0xc6, 0xe4, 0xec, 0x62, 0xa8, 0x0f,
0x35, 0x41, 0x2f, 0xda, 0x33, 0xe2, 0xd9, 0x22, 0x7b, 0x96, 0xfa, 0xcb, 0x65, 0x87, 0x13, 0x7c,
0x60, 0xf8, 0x1e, 0x30, 0x65, 0x1a, 0x4e, 0x7b, 0xa0, 0x53, 0x4b, 0x4e, 0x36, 0x3d, 0x7e, 0xd2,
0xc4, 0xf1, 0xf4, 0x94, 0x15, 0x17, 0xce, 0xe2, 0xc8, 0x34, 0x90, 0xf6, 0xe2, 0xdc, 0x1c, 0x7c,
0x46, 0x41, 0x4a, 0xc6, 0x89, 0x10, 0x3a, 0xf8, 0x69, 0xcf, 0x59, 0xc5, 0x68, 0x82, 0x38, 0x8f,
0xaf, 0xf6, 0x0c, 0xb3, 0x2c, 0x74, 0xf0, 0xd0, 0xde, 0xd9, 0x69, 0x6b, 0x60, 0x80, 0x5f, 0x80,
0xaf, 0xf7, 0xf7, 0xe7, 0xcf, 0x65, 0x67, 0xbd, 0x84, 0x91, 0x0d, 0xf5, 0xf5, 0x8d, 0x0d, 0x0d,
0x9c, 0xf7, 0x8a, 0xf3, 0x72, 0xf9, 0x69, 0xef, 0xc7, 0x30, 0x85, 0x43, 0x87, 0xa1, 0x4a, 0xce,
0xc0, 0xd6, 0x5e, 0xa0, 0xd4, 0xfe, 0xc7, 0xab, 0x97, 0x61, 0x65, 0xfa, 0xe7, 0xbd, 0x3f, 0xe8,
0xc1, 0x6e, 0xbe, 0x0d, 0xf8, 0xd7, 0x8e, 0x6d, 0x5b, 0x94, 0xda, 0xfb, 0x30, 0xcc, 0x6e, 0xd1,
0x61, 0x50, 0xed, 0xd5, 0x22, 0x85, 0xaa, 0xc9, 0xd1, 0x92, 0xe2, 0x62, 0xb5, 0x78, 0x90, 0x32,
0x66, 0xb2, 0x25, 0x8e, 0x58, 0x83, 0x69, 0xcf, 0xdc, 0xe9, 0x2f, 0x60, 0x9e, 0xb2, 0x91, 0x83,
0xc4, 0x05, 0x1e, 0x07, 0x39, 0xc5, 0x1a, 0xa8, 0xad, 0xd5, 0xa4, 0x3d, 0x0b, 0xa2, 0x2c, 0xcc,
0x39, 0x3f, 0x80, 0x61, 0xf5, 0x71, 0xd1, 0xf4, 0x2e, 0x07, 0x7b, 0x28, 0xf0, 0xf1, 0xcc, 0xcd,
0xc9, 0xe1, 0x15, 0x04, 0x8f, 0x23, 0xc0, 0x8d, 0x6a, 0x91, 0x59, 0x59, 0x2f, 0xb9, 0xef, 0xcd,
0xcc, 0x48, 0x5d, 0xb9, 0x8c, 0x51, 0x8d, 0xf4, 0xf5, 0x6b, 0xb4, 0xe1, 0xbe, 0xab, 0xae, 0x96,
0x57, 0x7b, 0xae, 0x50, 0x4d, 0x4b, 0xaa, 0xa5, 0x8f, 0x8f, 0x8d, 0xd5, 0xd4, 0x1d, 0xc2, 0x87,
0xf6, 0x25, 0xa7, 0x2c, 0x2c, 0x04, 0x28, 0xd4, 0xf1, 0xa6, 0x06, 0x27, 0xb1, 0x38, 0x5f, 0x40,
0x7f, 0x5a, 0xce, 0xce, 0x3b, 0x27, 0x74, 0x2a, 0xf7, 0x51, 0x96, 0x13, 0x31, 0xdf, 0x40, 0x6b,
0x01, 0x87, 0xf6, 0x23, 0x87, 0x7f, 0xa0, 0x85, 0x02, 0x3a, 0x69, 0x2f, 0x70, 0x77, 0xc3, 0xd4,
0xfe, 0xcd, 0xdd, 0xdb, 0x2c, 0xda, 0x7f, 0x69, 0x33, 0x07, 0x96, 0x22, 0xd0, 0xf5, 0x37, 0x1f,
0x3b, 0x7a, 0xfa, 0xe7, 0x56, 0x20, 0xf2, 0xcc, 0xa9, 0x50, 0x4e, 0xb1, 0xba, 0xd6, 0x39, 0x40,
0xa7, 0x2c, 0xa7, 0x2d, 0x38, 0xc9, 0x9e, 0x2d, 0xb4, 0x53, 0x8b, 0x34, 0x72, 0xc9, 0x81, 0x80,
0x5f, 0x70, 0x57, 0x7d, 0x1d, 0xe3, 0x7f, 0x0b, 0xbd, 0x3c, 0x94, 0x8b, 0x11, 0xb4, 0x3e, 0xe3,
0xb9, 0x6f, 0xc3, 0x8c, 0xf9, 0xd5, 0xaa, 0x21, 0x7b, 0xe7, 0x76, 0xc6, 0x7a, 0xed, 0xdd, 0xfd,
0xbf, 0x34, 0xdd, 0x52, 0x53, 0x5d, 0xad, 0x63, 0xa6, 0x86, 0x1b, 0x9d, 0xd0, 0xd1, 0x92, 0x95,
0xd9, 0xf4, 0x22, 0x55, 0xeb, 0xdb, 0xc9, 0xa8, 0xae, 0x36, 0xe8, 0x3e, 0x77, 0xf6, 0x5b, 0x96,
0x21, 0x79, 0xbe, 0xbf, 0x37, 0x43, 0xf3, 0xe7, 0xed, 0x61, 0x1c, 0xd5, 0xd5, 0xc0, 0x52, 0x8e,
0xa1, 0xa2, 0xd1, 0x96, 0x13, 0xe1, 0x0a, 0x4f, 0x57, 0x57, 0x17, 0x20, 0x3e, 0xd9, 0x7e, 0x01,
0x8c, 0x97, 0x75, 0x74, 0xe0, 0xe7, 0x42, 0x5e, 0x75, 0xf8, 0x09, 0xde, 0xb9, 0x7d, 0x8b, 0xfe,
0x2f, 0xa8, 0x5f, 0x5d, 0x4c, 0x14, 0x8a, 0xe9, 0xee, 0xea, 0x82, 0x17, 0xb2, 0x8e, 0x76, 0x87,
0x4f, 0x3e, 0x22, 0xbf, 0x76, 0xc4, 0x17, 0x97, 0x2f, 0x7e, 0x4f, 0x8f, 0x7c, 0xb1, 0x7e, 0x8d,
0xb2, 0x3d, 0xae, 0xe9, 0xfb, 0x3a, 0x51, 0x3d, 0x93, 0xfa, 0x3c, 0x05, 0x5c, 0x80, 0x21, 0xb9,
0xf1, 0x27, 0x11, 0x18, 0x55, 0x8f, 0x54, 0x1a, 0x7e, 0x78, 0x52, 0x63, 0x80, 0xba, 0x52, 0xd5,
0x1c, 0x1f, 0xf8, 0x5b, 0x57, 0x57, 0x0b, 0x2e, 0x44, 0x11, 0x0f, 0x40, 0x32, 0xd1, 0xe3, 0x08,
0x9c, 0x5c, 0x0c, 0xa4, 0x7a, 0xd1, 0x51, 0x5f, 0x3a, 0x9d, 0x40, 0x75, 0x99, 0x4c, 0xa6, 0x16,
0x09, 0x92, 0xc5, 0x4e, 0x9d, 0x8c, 0x93, 0x8b, 0x81, 0x54, 0x8f, 0xb6, 0x62, 0xee, 0xfc, 0xd0,
0x17, 0x72, 0xd3, 0x56, 0xaf, 0xc0, 0x2c, 0x33, 0x06, 0x52, 0x5d, 0x59, 0xab, 0x30, 0x4d, 0x24,
0x53, 0xad, 0x62, 0x7a, 0x6c, 0x63, 0x02, 0x7c, 0xfa, 0x9d, 0xea, 0x98, 0xc5, 0x80, 0xb1, 0x68,
0x31, 0x62, 0x70, 0xa8, 0x8e, 0xdf, 0x61, 0xd2, 0x45, 0x75, 0x76, 0xc3, 0x33, 0x2a, 0xf8, 0xb1,
0x3e, 0xc5, 0x72, 0x22, 0x4e, 0x32, 0x66, 0xd5, 0xa7, 0xe0, 0xa9, 0x4e, 0x9c, 0xf5, 0xa3, 0x7e,
0x3e, 0x81, 0x01, 0x7e, 0x0e, 0x6b, 0x56, 0x2b, 0x54, 0x6b, 0xb3, 0x4f, 0xff, 0x7d, 0x92, 0x18,
0x1f, 0x07, 0x62, 0x4e, 0x1e, 0x0f, 0xa2, 0x27, 0xd6, 0x4d, 0x75, 0xd2, 0xac, 0xa3, 0xd9, 0xe7,
0xec, 0xac, 0x97, 0xa0, 0xe3, 0x91, 0xf2, 0x2c, 0xd9, 0x62, 0xdc, 0x98, 0x75, 0xab, 0x57, 0x32,
0x26, 0xee, 0x5f, 0xac, 0xf3, 0x02, 0xa3, 0xea, 0x31, 0x03, 0x43, 0xf5, 0xef, 0x2f, 0xa8, 0xc5,
0xe0, 0xa8, 0xde, 0xd2, 0xd2, 0xa2, 0x30, 0x7e, 0xe5, 0xa8, 0x41, 0x75, 0x96, 0xf9, 0x54, 0x10,
0xe0, 0x7f, 0xfb, 0xa9, 0xea, 0x0a, 0x95, 0x61, 0xa5, 0xa6, 0xbb, 0x60, 0xe5, 0x5b, 0x7c, 0x2c,
0xa0, 0x1f, 0xaa, 0x3e, 0x49, 0x2d, 0x72, 0xdb, 0xe6, 0x8d, 0x0a, 0x1a, 0x1a, 0x53, 0x92, 0x95,
0xaa, 0x6b, 0x36, 0x52, 0x43, 0x30, 0xa6, 0xea, 0x55, 0x55, 0x95, 0x12, 0x09, 0x83, 0xa9, 0x98,
0x72, 0x02, 0x95, 0xc9, 0xc2, 0x54, 0x0d, 0xc6, 0x54, 0x5d, 0x13, 0x12, 0xe7, 0xcf, 0xc5, 0x29,
0x33, 0xfd, 0x51, 0x75, 0x98, 0xfe, 0xe9, 0x84, 0x71, 0xec, 0x69, 0xc8, 0xab, 0x0e, 0x3e, 0x44,
0xf0, 0xc1, 0xa9, 0x95, 0x04, 0xa5, 0xea, 0x9f, 0xf3, 0x50, 0xbd, 0x2e, 0x2a, 0x12, 0x0e, 0xf6,
0xa4, 0xaa, 0x1a, 0x93, 0x11, 0x14, 0x6b, 0x1d, 0x6a, 0xa0, 0x58, 0xee, 0xf4, 0x84, 0x9b, 0xe1,
0xf8, 0x46, 0xb1, 0xf4, 0x8e, 0x1a, 0x5f, 0xd5, 0x01, 0x24, 0xe5, 0x65, 0x7d, 0x53, 0x1d, 0x1e,
0x07, 0x41, 0xcd, 0x83, 0x8c, 0x80, 0x7a, 0x4c, 0x81, 0xf8, 0xae, 0x17, 0x80, 0xf7, 0x98, 0x97,
0x98, 0xc0, 0x77, 0xc9, 0x00, 0xaa, 0xce, 0xf7, 0x2e, 0x10, 0x84, 0x41, 0xfe, 0x9a, 0x34, 0xe1,
0x57, 0x60, 0x8a, 0x7a, 0x05, 0x15, 0x7a, 0x7b, 0x72, 0xa7, 0xa6, 0x80, 0xce, 0xfa, 0x9b, 0x9a,
0x1a, 0x23, 0x4c, 0x3b, 0xe6, 0xec, 0x71, 0xe1, 0xab, 0x3d, 0x5d, 0x75, 0xd8, 0x76, 0x72, 0xda,
0xd1, 0xb2, 0x40, 0xcb, 0xcf, 0x14, 0x6a, 0xdf, 0xf9, 0xee, 0x2d, 0x66, 0x7a, 0x2d, 0xca, 0x3a,
0x27, 0xb4, 0xaf, 0x61, 0x70, 0xea, 0x2f, 0x6a, 0xe2, 0x7e, 0xa4, 0x3a, 0x2c, 0xf7, 0x98, 0x89,
0x55, 0xaa, 0x5b, 0x69, 0x9d, 0x17, 0x23, 0x74, 0xaa, 0xd7, 0x81, 0x42, 0x2d, 0xb9, 0x0c, 0x56,
0x31, 0x8c, 0x29, 0xd9, 0x55, 0x7f, 0x91, 0x96, 0xc6, 0x37, 0x77, 0x5d, 0x55, 0xaf, 0xfc, 0xf9,
0x27, 0xcc, 0x94, 0x2c, 0xaa, 0x83, 0xef, 0x75, 0xf4, 0x88, 0xe1, 0x7c, 0x73, 0xd7, 0x55, 0x75,
0x30, 0x80, 0xc7, 0x4c, 0x99, 0xdc, 0xbb, 0xa1, 0x84, 0x0e, 0x34, 0x6f, 0xea, 0xb2, 0xc3, 0x29,
0x38, 0x28, 0x30, 0x23, 0xfd, 0xc5, 0x02, 0x9b, 0xd9, 0xa0, 0x07, 0xcf, 0x2e, 0x53, 0x57, 0xd5,
0xe3, 0xac, 0xa7, 0x61, 0xa6, 0x2c, 0x0e, 0xf2, 0x67, 0xfc, 0xd7, 0x1f, 0x77, 0xef, 0xc0, 0x0b,
0xb4, 0x1c, 0x09, 0x54, 0xf7, 0xf3, 0x3e, 0xa2, 0x69, 0xe3, 0x04, 0x82, 0x4e, 0xaa, 0xe7, 0x1f,
0xdc, 0x8f, 0xf3, 0xa5, 0xe2, 0x0f, 0x37, 0x79, 0x81, 0xc0, 0x2a, 0x64, 0x9c, 0xf5, 0x74, 0xd6,
0x24, 0x4a, 0x23, 0x0c, 0xd0, 0x8f, 0xd5, 0x31, 0x23, 0x3a, 0x74, 0x55, 0xbd, 0x34, 0xf4, 0x04,
0xd0, 0x2c, 0xd3, 0x91, 0x61, 0xbc, 0xa3, 0x84, 0x4c, 0xaa, 0x69, 0xb6, 0x1f, 0x96, 0x6f, 0x5d,
0xd6, 0x50, 0x09, 0x74, 0x7a, 0x61, 0x79, 0x50, 0x2e, 0x35, 0xfe, 0x73, 0x9f, 0x1a, 0x0f, 0x7a,
0x0a, 0x30, 0x5e, 0xde, 0xcd, 0x60, 0x35, 0x1e, 0x1b, 0x13, 0xdd, 0x2f, 0x96, 0x4e, 0xa1, 0xf5,
0x1d, 0x3d, 0x3c, 0x5f, 0xb2, 0x88, 0x88, 0x7c, 0x46, 0x90, 0x1c, 0x6a, 0x80, 0x61, 0x01, 0xa8,
0x2b, 0x33, 0xb7, 0x6e, 0xce, 0x75, 0xdd, 0xf3, 0xea, 0x92, 0xfa, 0x40, 0x89, 0x38, 0x8c, 0xb9,
0xe4, 0x6b, 0x68, 0xc8, 0x64, 0x95, 0xd7, 0x7f, 0xcc, 0x3f, 0xec, 0x1e, 0x3f, 0xd3, 0x5a, 0xad,
0x74, 0x44, 0x5b, 0x4e, 0xcc, 0xd8, 0xe4, 0x00, 0x46, 0x33, 0x5a, 0x6c, 0xe1, 0xd2, 0x0e, 0x03,
0x86, 0x77, 0x50, 0x1b, 0xb1, 0xef, 0x1e, 0xd6, 0x84, 0xda, 0xc7, 0x11, 0xcf, 0x16, 0xda, 0xd1,
0xbf, 0xc4, 0xb8, 0x2f, 0xa6, 0x25, 0xce, 0x9b, 0x0b, 0xde, 0xc1, 0xd3, 0xf1, 0x66, 0xea, 0x63,
0x41, 0xf3, 0xf1, 0xe0, 0x1d, 0x10, 0x7e, 0x80, 0xf7, 0x31, 0x30, 0x78, 0xff, 0xdf, 0xef, 0x77,
0x61, 0x5b, 0xc0, 0xab, 0x4e, 0x2d, 0x7e, 0x7f, 0x6c, 0x0b, 0xaa, 0x91, 0xee, 0xa6, 0x26, 0xb5,
0x34, 0x5d, 0xbd, 0x4b, 0xe6, 0x10, 0xaf, 0xaf, 0x5c, 0x4c, 0x98, 0x33, 0x0b, 0xdd, 0x92, 0xbe,
0x61, 0x9d, 0xac, 0x5d, 0xa2, 0xd0, 0x03, 0x06, 0x00, 0xef, 0x8d, 0x0d, 0x0d, 0x39, 0xd9, 0x59,
0x20, 0x04, 0xf8, 0x7a, 0xc3, 0x0b, 0xee, 0x5b, 0x52, 0x92, 0xc1, 0x38, 0xae, 0xa7, 0x85, 0x59,
0xb6, 0xb8, 0x53, 0xf4, 0x4e, 0x53, 0xca, 0x6e, 0x4a, 0xa3, 0x29, 0x16, 0x8b, 0x77, 0x39, 0x3b,
0xa1, 0x17, 0x4c, 0x7d, 0x61, 0x64, 0x9e, 0x84, 0x82, 0x01, 0xc0, 0x3b, 0x02, 0xa3, 0x09, 0x02,
0x1d, 0xe5, 0x67, 0xc3, 0x10, 0x65, 0x6f, 0xef, 0xfd, 0xae, 0x29, 0x19, 0x9c, 0x97, 0x90, 0xf6,
0x6e, 0x48, 0x82, 0x10, 0xe4, 0xe5, 0x41, 0xd2, 0x7f, 0x09, 0xff, 0x59, 0x2e, 0x95, 0xa6, 0x2e,
0x5f, 0x02, 0xe5, 0x68, 0xec, 0xac, 0x69, 0x0b, 0x53, 0xe3, 0xbd, 0x3e, 0xb6, 0xcf, 0x12, 0xb8,
0xad, 0x88, 0x6d, 0xcf, 0x11, 0xac, 0xb2, 0xa8, 0x96, 0x16, 0xab, 0x96, 0x2d, 0x81, 0x17, 0xd4,
0x8d, 0x96, 0xd9, 0x2e, 0x3b, 0x7a, 0xa6, 0x11, 0xbd, 0x0e, 0x6b, 0xa9, 0x37, 0x13, 0x4c, 0x8d,
0xf7, 0xe7, 0xcb, 0x7a, 0x4a, 0x68, 0xe9, 0xa9, 0x13, 0x38, 0x32, 0x21, 0xef, 0x8c, 0xfb, 0xf9,
0x20, 0xe4, 0x9d, 0x9d, 0x51, 0xe6, 0x3d, 0xf6, 0x46, 0x4d, 0xa9, 0x29, 0xf8, 0xda, 0xb2, 0xc3,
0xa4, 0x78, 0x07, 0xbd, 0x40, 0x54, 0xd8, 0x71, 0xec, 0xe1, 0x30, 0x1b, 0xea, 0xc2, 0x23, 0x1e,
0xc4, 0x2b, 0x7a, 0x93, 0xe2, 0x1d, 0x6e, 0xfc, 0x8a, 0xc4, 0xb6, 0x0a, 0x01, 0x60, 0x5c, 0x97,
0x53, 0x43, 0x91, 0xca, 0x78, 0x24, 0x92, 0xc9, 0xe8, 0x57, 0x6b, 0x98, 0x16, 0xef, 0x79, 0xbc,
0x79, 0xc7, 0x41, 0x51, 0xef, 0x4c, 0x02, 0xe6, 0x06, 0x3d, 0x1c, 0xe8, 0x8b, 0xf7, 0x33, 0xa7,
0x42, 0xff, 0xfe, 0xf3, 0x1e, 0x59, 0x99, 0xc6, 0xe7, 0xdd, 0x0f, 0x6b, 0x6b, 0x21, 0x0e, 0xf4,
0xc2, 0x7b, 0x52, 0x62, 0x82, 0xb7, 0xa7, 0xc7, 0x8a, 0x25, 0x8b, 0x2a, 0x2b, 0x5f, 0x13, 0x14,
0xcb, 0x83, 0x77, 0x3c, 0x8b, 0x1c, 0x4c, 0x14, 0xf7, 0x95, 0xf7, 0xfe, 0xcd, 0xfb, 0xc8, 0xe1,
0x1f, 0x48, 0x55, 0x40, 0xad, 0x96, 0x48, 0x24, 0xba, 0xfd, 0xeb, 0x2f, 0xe0, 0xef, 0xdd, 0xdf,
0x94, 0xbe, 0xa0, 0x8a, 0x8b, 0x8b, 0x7e, 0xfa, 0xe1, 0x0a, 0xb8, 0x80, 0x93, 0xeb, 0x7f, 0xdd,
0xfb, 0x1f, 0x8e, 0x58, 0xe3, 0xf3, 0x8e, 0xb7, 0x9d, 0x13, 0x07, 0x7a, 0xb1, 0x6c, 0xa7, 0xff,
0x4c, 0x88, 0x8b, 0x03, 0x23, 0x72, 0x30, 0x20, 0x4c, 0x79, 0x96, 0x0c, 0x7e, 0x6e, 0xdf, 0xb2,
0xb9, 0xb5, 0xb5, 0xd5, 0xe7, 0x88, 0x72, 0x0f, 0x01, 0xd5, 0x9b, 0x19, 0x3b, 0x30, 0x78, 0xcf,
0xd5, 0x0b, 0xef, 0xbd, 0xed, 0x6a, 0xbf, 0xe6, 0x5d, 0x7f, 0x30, 0x1a, 0xef, 0x03, 0xa2, 0xbc,
0xeb, 0x0f, 0x74, 0xfb, 0x21, 0x35, 0x20, 0xde, 0x31, 0x2d, 0x2e, 0x31, 0xd1, 0xc7, 0x3b, 0x93,
0xdf, 0x42, 0xed, 0x60, 0x5a, 0xbc, 0x0b, 0xd4, 0x79, 0xdf, 0xef, 0xfa, 0xb5, 0x16, 0x9b, 0xea,
0x36, 0x39, 0xac, 0x03, 0xb7, 0xcc, 0x99, 0xf1, 0x05, 0xfc, 0xd9, 0xd7, 0x9f, 0xc1, 0x30, 0xb6,
0xc3, 0x84, 0x29, 0xf3, 0x0e, 0x5a, 0x0e, 0x2d, 0x66, 0x8f, 0x15, 0xbd, 0xbc, 0x83, 0x30, 0x76,
0xd4, 0x88, 0x96, 0x96, 0x16, 0xc4, 0x3b, 0x5f, 0x13, 0x27, 0x16, 0x98, 0x32, 0xef, 0x08, 0x65,
0xa5, 0xa5, 0xf4, 0xc4, 0x80, 0xd6, 0xbd, 0x2e, 0xce, 0xa3, 0x3e, 0xfa, 0x90, 0xea, 0x6a, 0x0f,
0xe2, 0x65, 0x66, 0x06, 0xf5, 0x67, 0xc5, 0x85, 0x73, 0x50, 0x6c, 0xda, 0xea, 0x15, 0x5a, 0x29,
0xce, 0x00, 0x53, 0xe5, 0x9d, 0xdb, 0x2e, 0x0a, 0x3a, 0xea, 0xb1, 0x1c, 0x3f, 0xb6, 0x45, 0xb3,
0xc1, 0x25, 0x84, 0x5c, 0xda, 0x0d, 0xbd, 0x22, 0x80, 0x50, 0x17, 0x15, 0xc9, 0x43, 0x63, 0xcd,
0x30, 0x31, 0xde, 0xf3, 0x30, 0x79, 0x6f, 0x97, 0x48, 0xc0, 0x20, 0x23, 0x3a, 0xea, 0xa9, 0x97,
0xc7, 0xa1, 0xcd, 0x1b, 0xd6, 0x73, 0x66, 0xfd, 0xea, 0xca, 0xc5, 0xc8, 0x5e, 0x73, 0x50, 0x22,
0x6b, 0xb0, 0x83, 0x94, 0x77, 0x2d, 0x50, 0x76, 0x26, 0x14, 0x4d, 0x76, 0x96, 0x9f, 0x3d, 0xad,
0xa3, 0xb4, 0x01, 0xc0, 0x3b, 0xa8, 0x9d, 0x51, 0xf3, 0x08, 0xc2, 0xf8, 0xcf, 0x3e, 0xd5, 0x94,
0xb2, 0x8f, 0x77, 0xd2, 0xf6, 0x97, 0x10, 0x1d, 0x35, 0xd5, 0xb1, 0xd3, 0xa6, 0xa0, 0x82, 0xff,
0xea, 0xe2, 0x79, 0xad, 0x45, 0x0d, 0x00, 0xde, 0x01, 0x3a, 0xda, 0xdb, 0x21, 0xe9, 0xec, 0x83,
0x5b, 0x7d, 0xf3, 0x0e, 0x51, 0x1b, 0xf9, 0x04, 0xb4, 0xdb, 0xa8, 0xec, 0xc7, 0x4c, 0xb6, 0x2a,
0x0a, 0xf4, 0x6b, 0x2d, 0xe4, 0x67, 0x7c, 0xa5, 0x8d, 0x8b, 0x1c, 0xcc, 0x00, 0x4a, 0x44, 0xfa,
0x86, 0x75, 0xc5, 0xc7, 0x8f, 0x76, 0xbe, 0x7d, 0x43, 0xe4, 0x81, 0x0f, 0xb8, 0x7d, 0xc3, 0x9e,
0x00, 0xba, 0xb2, 0xd1, 0x37, 0xef, 0x08, 0x25, 0xc1, 0x41, 0xb1, 0x53, 0x3f, 0xd7, 0x82, 0x19,
0xa5, 0x73, 0x1f, 0xc0, 0x7b, 0xea, 0xca, 0x65, 0x58, 0x61, 0xd5, 0x72, 0xac, 0xb0, 0x62, 0x69,
0xb2, 0xfd, 0x82, 0x68, 0x95, 0xef, 0x19, 0x6a, 0x88, 0x9e, 0x64, 0x51, 0x1a, 0x8a, 0xb5, 0xf6,
0xa6, 0x35, 0xf0, 0x79, 0xff, 0xdc, 0xc2, 0xdc, 0xdd, 0x95, 0xe3, 0x2d, 0xf2, 0x02, 0x68, 0x6c,
0x5f, 0xff, 0x74, 0xb5, 0x38, 0xd0, 0x0f, 0x8c, 0x69, 0xf3, 0x0f, 0xee, 0x17, 0xb8, 0xbb, 0xb1,
0x84, 0x42, 0x6f, 0x0f, 0x43, 0xd4, 0x33, 0x65, 0x61, 0xa1, 0xb1, 0xd3, 0xa7, 0xa0, 0x17, 0x20,
0x70, 0x77, 0xe5, 0xbe, 0x47, 0x2b, 0x60, 0xf2, 0x0e, 0x7a, 0x32, 0xb0, 0xd6, 0xb2, 0x9b, 0x47,
0xde, 0xd8, 0x14, 0x13, 0x86, 0xac, 0xdf, 0xe5, 0xd0, 0x45, 0x0e, 0x0c, 0xa5, 0xa1, 0xc1, 0xc4,
0x33, 0x80, 0x4e, 0xa7, 0x70, 0xca, 0xbb, 0xee, 0xfe, 0x84, 0x74, 0x84, 0xa1, 0xdb, 0xd5, 0xae,
0xba, 0x5a, 0x54, 0x27, 0x12, 0x9c, 0xde, 0x83, 0x18, 0xe2, 0x9d, 0x1d, 0xf2, 0xa4, 0xf9, 0x36,
0x90, 0x20, 0xd0, 0xea, 0x12, 0x94, 0x4b, 0xe1, 0x9d, 0x63, 0x33, 0xcc, 0xe0, 0xe4, 0x5d, 0xd1,
0x94, 0x9e, 0x86, 0xfa, 0x3c, 0xf2, 0xae, 0x4e, 0x52, 0x62, 0x87, 0x78, 0xe7, 0x46, 0xb2, 0xfd,
0x97, 0x90, 0x23, 0x16, 0xcf, 0x62, 0x7c, 0x01, 0xdd, 0xf2, 0x69, 0xcd, 0x7b, 0xc8, 0x89, 0xe3,
0x19, 0xe9, 0x2f, 0xc6, 0x8c, 0xfc, 0x98, 0x94, 0x3e, 0x2c, 0x30, 0x1a, 0xef, 0x19, 0x8e, 0x1b,
0x7b, 0xc7, 0xdc, 0x61, 0xa4, 0x64, 0xa2, 0xcf, 0x28, 0x6e, 0x06, 0xfb, 0xce, 0x19, 0x06, 0xde,
0x6b, 0x6b, 0x45, 0xb0, 0x7b, 0xf3, 0xe4, 0xd1, 0x23, 0x67, 0xa7, 0xad, 0xf4, 0x5b, 0xde, 0xbd,
0xc5, 0xdd, 0x6b, 0x89, 0x03, 0xa3, 0xf1, 0x8e, 0x16, 0x71, 0x04, 0x07, 0x18, 0x8e, 0x6e, 0xd2,
0x52, 0x66, 0xaf, 0xe1, 0x75, 0xce, 0x5e, 0x17, 0xf6, 0x94, 0x74, 0xde, 0xa9, 0x73, 0xf4, 0x4b,
0x17, 0xda, 0x47, 0x3c, 0xfc, 0xe7, 0xca, 0xa5, 0x8b, 0xe0, 0x1a, 0xee, 0x0d, 0x9b, 0x36, 0xc9,
0x02, 0x7c, 0x0a, 0xe0, 0xc2, 0xcb, 0xe3, 0x30, 0x8a, 0xd4, 0x05, 0x46, 0xe3, 0x5d, 0xda, 0xd6,
0x86, 0xec, 0x0e, 0x19, 0x8f, 0x16, 0xe2, 0x0b, 0xc9, 0xab, 0x0a, 0xd4, 0x49, 0x6d, 0x7c, 0x96,
0xc4, 0x9e, 0x78, 0xf0, 0xd6, 0xef, 0x00, 0x75, 0x4f, 0xff, 0x45, 0x4c, 0x55, 0x5e, 0xfb, 0x41,
0x17, 0x51, 0x60, 0xc4, 0x84, 0x0c, 0xde, 0x4b, 0x43, 0x8e, 0x73, 0xa6, 0x1f, 0xd4, 0xbc, 0x2b,
0x54, 0x2d, 0xe1, 0xd3, 0xde, 0x52, 0x9f, 0xb9, 0xd9, 0x41, 0xbb, 0xbe, 0x0d, 0xda, 0x79, 0x07,
0x42, 0xd5, 0xf5, 0x1f, 0xb1, 0x6e, 0x19, 0xe4, 0xbc, 0x43, 0xa0, 0xba, 0x1e, 0x84, 0xf8, 0x99,
0xd6, 0xd5, 0xbf, 0xde, 0xc0, 0xb9, 0xab, 0x31, 0x25, 0x39, 0x6d, 0xed, 0x6a, 0x74, 0x63, 0x9e,
0xdb, 0xd7, 0x98, 0xd9, 0xa1, 0x29, 0xe5, 0x71, 0x9f, 0x8d, 0xd2, 0x41, 0x6b, 0x9d, 0xd0, 0x2f,
0x78, 0x87, 0x28, 0x0d, 0x09, 0x46, 0x75, 0x05, 0x0c, 0x09, 0xb3, 0x67, 0x40, 0xa7, 0x21, 0xe5,
0xe7, 0xce, 0x94, 0x7f, 0x77, 0xb6, 0xe4, 0xf8, 0x51, 0xa1, 0xef, 0x91, 0x64, 0xbb, 0x05, 0x6a,
0x33, 0x6e, 0xc5, 0x47, 0x79, 0x9b, 0x47, 0x8f, 0x1c, 0xfe, 0xc1, 0x02, 0x9b, 0xd9, 0xfa, 0x78,
0x0a, 0x4c, 0xf4, 0x23, 0xde, 0x11, 0x44, 0x0f, 0xef, 0xe7, 0xed, 0xfb, 0x46, 0xed, 0x1d, 0xa8,
0x85, 0x4c, 0xc7, 0x8d, 0x65, 0xdf, 0x7f, 0xd7, 0xa2, 0x4f, 0xe8, 0xf5, 0x19, 0xfb, 0x23, 0xef,
0x7a, 0x87, 0x4c, 0xd6, 0x2a, 0x2c, 0x68, 0x4c, 0x4d, 0x69, 0x48, 0x4a, 0x68, 0xc9, 0xc9, 0xea,
0x6e, 0x69, 0x36, 0xbc, 0x0a, 0x83, 0x88, 0xf7, 0xd6, 0xc2, 0xfc, 0xa2, 0x40, 0xbf, 0xb4, 0xd5,
0x2b, 0x51, 0x4b, 0x8e, 0x42, 0xe2, 0xbc, 0x39, 0x42, 0x1f, 0xcf, 0xb7, 0x7f, 0x13, 0x36, 0x1c,
0x67, 0x41, 0x3f, 0xe2, 0x3d, 0x23, 0x23, 0x83, 0xc5, 0x3b, 0xf6, 0xe9, 0x53, 0xa1, 0x3c, 0x4e,
0xb7, 0x7a, 0x3f, 0x3c, 0x3a, 0x1d, 0x9a, 0xb9, 0xcb, 0x19, 0x67, 0x25, 0x28, 0xf9, 0xcb, 0xf9,
0x65, 0x67, 0xb8, 0x5d, 0xe2, 0xeb, 0x8e, 0x7e, 0xc4, 0x3b, 0x3b, 0x46, 0x7d, 0xf4, 0xa1, 0x36,
0x8e, 0xe0, 0xe5, 0xf2, 0x22, 0x4a, 0x67, 0x09, 0x85, 0xa8, 0x89, 0x13, 0x40, 0xa3, 0x9d, 0x68,
0x33, 0x87, 0x71, 0xa1, 0x2e, 0x7d, 0xe3, 0x7a, 0x4d, 0x67, 0x47, 0x93, 0xc2, 0xc0, 0xe0, 0x3d,
0x29, 0x21, 0x1e, 0x74, 0xfb, 0xf8, 0x1e, 0x36, 0xd1, 0x59, 0x2b, 0x4a, 0x77, 0x58, 0x4b, 0x25,
0x34, 0x6d, 0xd5, 0xf2, 0x92, 0x13, 0x41, 0xca, 0xc3, 0xa6, 0x55, 0x1e, 0x11, 0x7f, 0xb8, 0xaa,
0xb4, 0xc1, 0xef, 0x7c, 0xfb, 0x46, 0xe9, 0xb7, 0xe0, 0xc0, 0x7e, 0xea, 0x86, 0xf9, 0x28, 0x4b,
0xf3, 0x57, 0x97, 0xf5, 0xe8, 0x1d, 0x62, 0x60, 0xf0, 0x8e, 0x7a, 0xdc, 0xb1, 0x31, 0xd1, 0x98,
0xb7, 0x74, 0x54, 0x57, 0x25, 0xd9, 0xce, 0x43, 0x3c, 0x3e, 0x5f, 0xb6, 0xf8, 0x2d, 0xcd, 0x81,
0x10, 0xe4, 0x1d, 0xa1, 0xfd, 0xf5, 0xab, 0x42, 0x1f, 0x4f, 0xea, 0x7b, 0x2a, 0x0b, 0x0b, 0x21,
0xf3, 0x00, 0x34, 0x0c, 0x00, 0xde, 0x2f, 0x9e, 0xff, 0x8e, 0x6a, 0x3f, 0x83, 0x73, 0x8b, 0xac,
0xbd, 0x1d, 0x6d, 0xb5, 0x8e, 0x54, 0x9d, 0x04, 0x0e, 0x6a, 0x1c, 0x7a, 0xb2, 0xab, 0x57, 0x2e,
0xd3, 0x23, 0xab, 0xc2, 0xaf, 0x9f, 0x31, 0x1f, 0x3f, 0x65, 0xf8, 0x87, 0x3d, 0x03, 0x60, 0x3c,
0x1f, 0x58, 0x7c, 0x31, 0x00, 0x78, 0x87, 0x3e, 0x09, 0xf6, 0x7d, 0xb3, 0x17, 0x5e, 0x88, 0xc5,
0x62, 0xce, 0x5b, 0x0a, 0x3c, 0x0f, 0x23, 0xd2, 0x4b, 0x82, 0x19, 0xbc, 0x43, 0x43, 0xa8, 0xf1,
0xfe, 0xf7, 0x9f, 0xf7, 0xcc, 0x46, 0x8f, 0x84, 0x6f, 0xd7, 0xbb, 0xf7, 0x6c, 0x82, 0xd8, 0x29,
0x93, 0xdb, 0xab, 0x2a, 0x09, 0x3c, 0xc6, 0xfb, 0x18, 0x00, 0xbc, 0x43, 0x1c, 0x3b, 0x1a, 0x80,
0x99, 0x12, 0x54, 0xd6, 0x7d, 0x43, 0x59, 0x0d, 0x1e, 0xc1, 0x44, 0x22, 0xd1, 0x9e, 0x9d, 0x3b,
0xd4, 0x4e, 0xba, 0x98, 0x68, 0xf6, 0x19, 0xfa, 0xaa, 0x9a, 0xd2, 0x52, 0xa3, 0x7a, 0x4d, 0x51,
0xf2, 0xf6, 0x93, 0xb4, 0xf8, 0x80, 0x30, 0x41, 0xde, 0x93, 0xed, 0x6c, 0x7b, 0x66, 0xe1, 0x77,
0x6b, 0x9c, 0x85, 0x07, 0xbc, 0x8f, 0x19, 0xf9, 0x31, 0xe8, 0x62, 0xaa, 0xc5, 0x8f, 0x1d, 0x35,
0x02, 0xd5, 0x66, 0xe5, 0xe7, 0x28, 0xfe, 0x25, 0x48, 0x77, 0xed, 0x4d, 0x8d, 0xf7, 0x8a, 0x4b,
0x17, 0x7a, 0x56, 0x6e, 0xc7, 0x9b, 0x89, 0x99, 0xcf, 0xca, 0x53, 0x02, 0xf0, 0xee, 0xb8, 0x71,
0xbd, 0x1a, 0xef, 0xbb, 0x9c, 0x9d, 0xa4, 0x52, 0xe9, 0x62, 0xfb, 0x05, 0x53, 0xad, 0x7a, 0xdc,
0x15, 0x64, 0xef, 0xda, 0x09, 0xa5, 0xbd, 0xdc, 0xe6, 0xa8, 0x83, 0xee, 0x0c, 0x30, 0x35, 0xde,
0xb3, 0xb6, 0x6f, 0x81, 0x4c, 0xb1, 0xef, 0xcd, 0x00, 0xbc, 0x3b, 0x39, 0x6e, 0xba, 0xac, 0x5a,
0x51, 0x82, 0x08, 0xf4, 0xf7, 0x45, 0xee, 0x5a, 0xb3, 0x5e, 0x66, 0xc2, 0x0b, 0xea, 0x0a, 0x41,
0x5b, 0x49, 0x91, 0x96, 0xaa, 0x33, 0xc1, 0xa4, 0x78, 0xef, 0x6e, 0x6e, 0x42, 0x34, 0x35, 0x24,
0xc4, 0xb1, 0xa4, 0x54, 0xe3, 0xfd, 0xda, 0x8f, 0x57, 0x6b, 0xdf, 0x3f, 0x2b, 0x1b, 0x21, 0x65,
0xe9, 0xa2, 0x48, 0x3d, 0x98, 0x9c, 0x98, 0x14, 0xef, 0x35, 0x77, 0x6e, 0xf5, 0x4c, 0xe2, 0xcf,
0x9a, 0x81, 0x23, 0xf3, 0x92, 0x6a, 0x63, 0xe6, 0xa3, 0x88, 0x87, 0xf4, 0x83, 0x47, 0x11, 0xd0,
0xe6, 0xd5, 0x6c, 0x97, 0x1d, 0xd8, 0xca, 0x72, 0xc3, 0xa4, 0x78, 0x47, 0x1c, 0xe5, 0xed, 0xc3,
0x5a, 0x03, 0x09, 0x3e, 0x16, 0xf4, 0x22, 0x2d, 0x2d, 0x2d, 0xf5, 0x39, 0x4b, 0x1a, 0x78, 0x5c,
0x14, 0x9c, 0x3b, 0xc3, 0x54, 0x15, 0x07, 0x26, 0xc5, 0xbb, 0xd0, 0xf7, 0x48, 0xef, 0x4a, 0x08,
0xf7, 0xd9, 0xf4, 0x33, 0xa7, 0x4f, 0x81, 0x67, 0x88, 0xb1, 0x27, 0x93, 0x54, 0x94, 0xa1, 0x86,
0x9a, 0x71, 0xf0, 0xa5, 0x1d, 0x4c, 0x8a, 0x77, 0xc1, 0x81, 0x7d, 0xec, 0xdd, 0x76, 0x2a, 0x66,
0x4d, 0x9f, 0x0a, 0x78, 0xb7, 0x9e, 0xfa, 0x79, 0x2b, 0x2b, 0x9a, 0xab, 0xab, 0x51, 0x9b, 0xd1,
0xdd, 0x4c, 0x6c, 0xa6, 0xde, 0xa4, 0x78, 0xcf, 0x73, 0xdb, 0xdb, 0x33, 0x46, 0x3d, 0xa1, 0x71,
0x8c, 0x4a, 0x05, 0x8e, 0xbb, 0x10, 0x69, 0x5b, 0x1b, 0xe2, 0x5d, 0xd3, 0x51, 0xa0, 0x5a, 0x60,
0x50, 0xf3, 0x8e, 0x03, 0x99, 0x64, 0x88, 0x77, 0x2e, 0xe4, 0xb9, 0x7d, 0xad, 0x07, 0xde, 0x25,
0x7d, 0xbc, 0xab, 0x0e, 0x66, 0x24, 0x82, 0x21, 0xde, 0x39, 0x20, 0x6b, 0x1f, 0x50, 0xbc, 0xef,
0x77, 0xc5, 0xb5, 0x66, 0xc1, 0x84, 0xf1, 0x78, 0x6f, 0xef, 0xe3, 0x5d, 0xc3, 0xd8, 0x4a, 0x0b,
0xe8, 0x85, 0xf7, 0x73, 0xdf, 0x86, 0x1d, 0xd8, 0xe7, 0x1a, 0x1d, 0xf5, 0x94, 0xa0, 0x4c, 0xa3,
0xf1, 0xde, 0xd1, 0xc7, 0x7b, 0x67, 0x3f, 0xe7, 0x1d, 0xce, 0xe7, 0x8d, 0xfa, 0xe8, 0x43, 0x82,
0x32, 0xf9, 0xf1, 0xae, 0x79, 0xce, 0x9d, 0x2f, 0x64, 0x1d, 0x1d, 0x7d, 0xbc, 0x6b, 0xf6, 0x33,
0xcc, 0x17, 0xe4, 0x79, 0x6f, 0x6e, 0x6a, 0x9a, 0x3b, 0x53, 0xe9, 0xb9, 0x65, 0xcc, 0xc8, 0x8f,
0xd5, 0xbc, 0x4d, 0xeb, 0x02, 0xa3, 0xf1, 0xde, 0x39, 0x40, 0x78, 0x5f, 0xba, 0xd0, 0xee, 0xf5,
0xab, 0x0a, 0xa9, 0x54, 0x1a, 0xf5, 0x34, 0x12, 0x9e, 0xa8, 0x19, 0x13, 0x1d, 0xf5, 0xe7, 0xbd,
0x3f, 0xea, 0xeb, 0xeb, 0x6e, 0xde, 0x08, 0xef, 0xec, 0x54, 0x5a, 0x9e, 0xfe, 0xfa, 0xcb, 0x8d,
0xf4, 0x17, 0x2f, 0x5a, 0x5a, 0x5a, 0x9a, 0x9b, 0x9b, 0x3b, 0xda, 0xdb, 0x9b, 0x1a, 0x1b, 0x39,
0xc5, 0x1a, 0x8b, 0x77, 0x79, 0x67, 0x67, 0x1f, 0xef, 0xd8, 0xc7, 0x3c, 0x71, 0x42, 0x2f, 0x7e,
0xdd, 0x02, 0x03, 0xfc, 0x60, 0x80, 0x15, 0xce, 0x62, 0xfb, 0x05, 0x8a, 0xde, 0xca, 0x47, 0x69,
0xd2, 0xff, 0xcf, 0x03, 0x70, 0xe1, 0xeb, 0xa5, 0x9c, 0xa7, 0x9d, 0x3e, 0xd9, 0xd2, 0x1a, 0xcf,
0xd7, 0x23, 0x16, 0xef, 0xfb, 0xf4, 0xc0, 0x7b, 0xd7, 0x40, 0xe0, 0xfd, 0xe1, 0x83, 0xfb, 0x7b,
0x5d, 0x9c, 0xd1, 0xcf, 0x35, 0xab, 0x96, 0xdf, 0xb9, 0x7d, 0x8b, 0xca, 0xbb, 0xbd, 0xed, 0x3c,
0x90, 0x20, 0x21, 0x4e, 0x79, 0x2e, 0xae, 0x42, 0xe5, 0x58, 0x6f, 0x93, 0xc3, 0x3a, 0x1c, 0xc9,
0xc6, 0xe3, 0xbd, 0x6b, 0x00, 0xf0, 0x3e, 0x72, 0xf8, 0x07, 0x54, 0x4f, 0xf6, 0x12, 0x49, 0x1b,
0xa0, 0x5b, 0x8d, 0xf7, 0x1b, 0x3f, 0x5f, 0xff, 0x6a, 0xc5, 0xd2, 0xa3, 0x7e, 0x3e, 0xa5, 0x25,
0x25, 0xb9, 0x39, 0x39, 0x05, 0xf9, 0x02, 0x61, 0x61, 0x01, 0xa7, 0x64, 0xa3, 0xf1, 0xde, 0x4d,
0xe1, 0x9d, 0x90, 0xa3, 0x05, 0x85, 0xa9, 0x8d, 0x9b, 0xf4, 0xc2, 0x7b, 0xf7, 0x10, 0xef, 0x1c,
0xd0, 0x0b, 0xef, 0xd2, 0x3e, 0xde, 0x3b, 0xde, 0xd4, 0x90, 0x12, 0x3b, 0xc4, 0x3b, 0x07, 0xe4,
0x52, 0xe9, 0x10, 0xef, 0x1c, 0x60, 0xe4, 0x1d, 0xf4, 0x62, 0xf3, 0x05, 0x1a, 0x0d, 0x0b, 0x18,
0x71, 0x2a, 0x84, 0xe2, 0xaf, 0x45, 0x46, 0xe1, 0xbd, 0x86, 0xbf, 0x61, 0xac, 0x06, 0x98, 0x18,
0xef, 0xdf, 0x50, 0x79, 0xaf, 0xaa, 0xaa, 0x84, 0x2e, 0x4f, 0xf8, 0xf2, 0x0e, 0x4d, 0x68, 0x40,
0xdf, 0x4c, 0xf9, 0x43, 0x26, 0x1b, 0xe2, 0x9d, 0x03, 0x14, 0xde, 0x03, 0x2d, 0x27, 0x98, 0x21,
0xe3, 0xaf, 0xef, 0xcf, 0x9f, 0xd3, 0x74, 0x58, 0x3d, 0xcb, 0x09, 0xf6, 0x30, 0x14, 0x0b, 0x0b,
0xfb, 0x78, 0x27, 0x77, 0x9a, 0x99, 0xa9, 0xf2, 0x1e, 0x04, 0xaa, 0x17, 0xc4, 0x9d, 0x76, 0xe5,
0x1d, 0x84, 0x90, 0x13, 0xc7, 0x15, 0x72, 0x39, 0xe2, 0x9d, 0xa0, 0xa1, 0xa4, 0xc9, 0xf2, 0x0e,
0x63, 0x40, 0x49, 0xd7, 0x8e, 0x77, 0xaa, 0x53, 0xc9, 0x98, 0xc9, 0x96, 0x50, 0x6c, 0x2b, 0xb9,
0x5d, 0xaf, 0xa6, 0xca, 0x7b, 0x20, 0x35, 0xbe, 0x9e, 0xb6, 0x3e, 0xe7, 0xe7, 0x7d, 0x64, 0x81,
0xcd, 0xec, 0x0d, 0x6b, 0xbf, 0xb2, 0x32, 0x67, 0x38, 0x9e, 0x5a, 0x2e, 0x7f, 0xcf, 0x6e, 0x20,
0x71, 0xde, 0x5c, 0x28, 0x56, 0xf4, 0xf0, 0x01, 0x6f, 0xbd, 0x35, 0x60, 0x50, 0xf0, 0x4e, 0x07,
0x28, 0xd1, 0x70, 0x5c, 0xfd, 0xf4, 0xdf, 0x27, 0x9c, 0x62, 0xb3, 0x9c, 0xb6, 0xe0, 0x9b, 0x29,
0x60, 0x62, 0x90, 0xf2, 0x5e, 0x5b, 0xab, 0xb4, 0x07, 0x06, 0xec, 0x7b, 0x1e, 0x3a, 0xc0, 0x29,
0x16, 0x99, 0x43, 0x65, 0x6e, 0xdd, 0x8c, 0xa9, 0x2d, 0x27, 0x06, 0x29, 0xef, 0x11, 0x0f, 0xff,
0x81, 0x17, 0x8b, 0xed, 0x17, 0x54, 0x94, 0x97, 0xb3, 0x27, 0x6e, 0x48, 0x4e, 0x44, 0x4d, 0xab,
0xa4, 0xa2, 0x0c, 0x4b, 0x5d, 0x2e, 0x0c, 0x18, 0xde, 0x8f, 0x07, 0x72, 0x9b, 0x85, 0xe2, 0xf3,
0x3e, 0x7f, 0xce, 0x4c, 0x7f, 0x1f, 0xaf, 0xa8, 0xa7, 0x91, 0x98, 0x1b, 0x77, 0x9e, 0xfd, 0xb7,
0xc7, 0x3b, 0x54, 0x51, 0x00, 0x99, 0x23, 0x9c, 0x06, 0x29, 0xef, 0x0a, 0xd5, 0xba, 0x18, 0x67,
0x49, 0x47, 0x28, 0x3b, 0x75, 0x02, 0x15, 0xf9, 0xe6, 0xf4, 0x34, 0xcc, 0xbb, 0x58, 0x30, 0x78,
0x79, 0xe7, 0x07, 0xb9, 0x0c, 0x39, 0x44, 0x4b, 0x5d, 0xbe, 0x44, 0xde, 0xad, 0xeb, 0xfa, 0xa5,
0x69, 0xf1, 0xbe, 0xbf, 0x97, 0x77, 0xa2, 0xb6, 0xea, 0x10, 0x35, 0x77, 0x6e, 0xa3, 0x22, 0x2f,
0x70, 0x77, 0x53, 0xc8, 0x75, 0xb2, 0x51, 0x1d, 0x00, 0xbc, 0x8f, 0x1e, 0x31, 0x9c, 0x3a, 0x70,
0x17, 0x89, 0x34, 0x1a, 0x53, 0xe8, 0x95, 0x77, 0x05, 0xa5, 0x63, 0x03, 0x42, 0xee, 0xd7, 0xbb,
0xa4, 0x62, 0xed, 0x7d, 0x76, 0x0c, 0x00, 0xde, 0xc1, 0xa8, 0x07, 0x91, 0x3e, 0x7d, 0xb2, 0x25,
0x4b, 0x4a, 0x7d, 0xf3, 0xae, 0xa0, 0x9c, 0x09, 0x0a, 0x42, 0xc2, 0xdc, 0xd9, 0xd5, 0xbf, 0x84,
0x6b, 0x27, 0x67, 0x00, 0xf0, 0x0e, 0x60, 0x3d, 0x75, 0x32, 0xe4, 0x9d, 0x7a, 0x3c, 0x30, 0x1d,
0x02, 0xfd, 0xf3, 0x0e, 0x20, 0xf4, 0x39, 0x82, 0xa8, 0x87, 0x9d, 0xfa, 0xca, 0xf0, 0x6b, 0x0a,
0x99, 0x94, 0xfb, 0x4e, 0x0a, 0x86, 0x55, 0xdd, 0xbc, 0x81, 0x15, 0x6e, 0x5c, 0xaf, 0x0a, 0xbf,
0x86, 0x13, 0xde, 0xfe, 0xef, 0xf7, 0x86, 0xc4, 0x78, 0x82, 0xa6, 0x26, 0x0a, 0xd5, 0xc0, 0x1d,
0x90, 0xbe, 0x69, 0xfd, 0x5a, 0xf6, 0x64, 0x86, 0xe1, 0x5d, 0xa1, 0xf2, 0xfc, 0x4e, 0x75, 0x66,
0x00, 0x42, 0xb4, 0xd5, 0xc4, 0x97, 0xdb, 0x1c, 0x41, 0x2f, 0x13, 0xd4, 0x45, 0xa0, 0x55, 0x67,
0x0f, 0x8d, 0x29, 0xc9, 0xc3, 0x5e, 0xac, 0xfb, 0x8a, 0x7a, 0x3f, 0xc1, 0x90, 0x68, 0x33, 0xbb,
0xd0, 0xdb, 0x53, 0xf4, 0xf0, 0x3e, 0x91, 0x47, 0xdd, 0xba, 0x69, 0x03, 0x67, 0x1a, 0x83, 0xf1,
0xae, 0x50, 0x9d, 0x9d, 0x93, 0xb3, 0x1b, 0xcb, 0xb7, 0x0a, 0x3d, 0xd4, 0xc7, 0xc5, 0xe8, 0x91,
0x77, 0x14, 0x52, 0x96, 0x2c, 0x2c, 0x0c, 0x3b, 0x95, 0x9b, 0x93, 0xa3, 0xef, 0x90, 0xd3, 0x6b,
0xff, 0x2e, 0x0c, 0xf2, 0x67, 0x4f, 0x79, 0xe6, 0x74, 0x28, 0x91, 0x1c, 0x0b, 0x7e, 0xff, 0x2d,
0xdf, 0xeb, 0x70, 0xcc, 0x64, 0x2b, 0xde, 0xbc, 0xe7, 0xec, 0xd9, 0x49, 0xf2, 0xb0, 0x83, 0x55,
0xcb, 0x01, 0xcb, 0x09, 0xb3, 0x67, 0xd0, 0x33, 0x03, 0xa5, 0x83, 0xe0, 0x7a, 0x3c, 0x23, 0x30,
0xcb, 0xbb, 0x58, 0x2c, 0xe6, 0x7b, 0x82, 0x19, 0x07, 0xe4, 0x72, 0x50, 0xb5, 0x96, 0x84, 0x04,
0x17, 0xf9, 0xfb, 0x14, 0x1e, 0x39, 0xc4, 0x7e, 0xd8, 0x01, 0x08, 0x4a, 0xde, 0x49, 0x66, 0x4f,
0x41, 0x57, 0x43, 0x7d, 0x65, 0xf8, 0x75, 0x34, 0x90, 0x81, 0x21, 0x76, 0xda, 0x14, 0x51, 0x04,
0xb1, 0xa9, 0x54, 0x3a, 0x30, 0x79, 0x87, 0xce, 0x1f, 0x36, 0xac, 0xfd, 0x4a, 0x7f, 0x9a, 0x70,
0x42, 0xef, 0xfd, 0x99, 0x56, 0x61, 0x81, 0xe0, 0x80, 0x1b, 0xa2, 0x3e, 0xca, 0x7c, 0x7c, 0xcd,
0x6f, 0xb7, 0xb8, 0x6f, 0xd3, 0x0a, 0x38, 0xbc, 0xe7, 0x0b, 0x04, 0xa8, 0x57, 0xca, 0xde, 0x3b,
0xd2, 0x2b, 0x0c, 0xd4, 0x8f, 0x2c, 0xff, 0xf6, 0x34, 0xf2, 0xa6, 0x16, 0x6d, 0x39, 0xb1, 0x29,
0x35, 0x45, 0x1f, 0xb9, 0x08, 0xf6, 0xbb, 0x72, 0xf2, 0x4e, 0x1d, 0x82, 0x4d, 0x9b, 0x64, 0xa1,
0x0f, 0x35, 0x70, 0x60, 0xb8, 0xfe, 0xfb, 0xbb, 0x07, 0x7f, 0x21, 0xcf, 0x22, 0x29, 0x0b, 0xed,
0xe4, 0x9d, 0xc4, 0xdc, 0xed, 0x23, 0xe0, 0xf0, 0x0e, 0x61, 0x3b, 0x77, 0x16, 0xf1, 0xdc, 0x79,
0xc1, 0xa0, 0xe3, 0xa6, 0xea, 0x5b, 0xbf, 0xa0, 0x0a, 0x07, 0x67, 0x6b, 0x2f, 0x5f, 0x0c, 0xf1,
0xae, 0x11, 0xc8, 0x45, 0x3b, 0x18, 0x77, 0x90, 0x5a, 0x43, 0x40, 0x18, 0xe2, 0x5d, 0x33, 0x64,
0xb2, 0xa4, 0x2f, 0xe7, 0x43, 0x76, 0x48, 0xad, 0x21, 0x20, 0x0c, 0xf1, 0xce, 0x86, 0xb2, 0xb0,
0x10, 0xd4, 0xad, 0x54, 0x10, 0xed, 0x51, 0x0c, 0xf1, 0xce, 0x06, 0x59, 0x47, 0x7b, 0xb4, 0x55,
0x4f, 0x03, 0x2b, 0x7a, 0x1c, 0x41, 0x50, 0xf2, 0x10, 0xef, 0x1c, 0xc8, 0xd9, 0xe3, 0xa2, 0x8f,
0xd6, 0x55, 0xe0, 0x3e, 0xc4, 0x3b, 0x2b, 0xf8, 0x3a, 0x8a, 0xc1, 0x84, 0x8e, 0xbc, 0xaf, 0x59,
0xb5, 0x9c, 0xf0, 0xfc, 0x81, 0x66, 0x18, 0x87, 0xf7, 0xca, 0x6b, 0x3d, 0xae, 0x06, 0x53, 0x57,
0x2c, 0x23, 0x28, 0x56, 0x47, 0xde, 0x01, 0xe9, 0x2b, 0x97, 0x2e, 0x6e, 0xa8, 0xaf, 0x27, 0xa8,
0x92, 0x26, 0x18, 0x87, 0xf7, 0x77, 0x0f, 0xfe, 0x86, 0x04, 0x25, 0xdb, 0x7f, 0x49, 0x50, 0xac,
0x2e, 0xbc, 0x47, 0x45, 0xfe, 0xeb, 0xeb, 0xe5, 0x59, 0x5b, 0x2b, 0x9a, 0x33, 0xe3, 0x0b, 0x82,
0x2a, 0x69, 0x82, 0x71, 0x78, 0x47, 0x96, 0x40, 0x09, 0x73, 0x48, 0xd6, 0xb3, 0xd9, 0x2e, 0x3b,
0xa0, 0xd8, 0xd2, 0xd3, 0x27, 0xd9, 0x53, 0xd2, 0x79, 0x1f, 0x3d, 0x62, 0x38, 0xbc, 0xd0, 0x54,
0xd5, 0x50, 0x3d, 0x7c, 0xea, 0x0e, 0xe3, 0xf0, 0x8e, 0x0e, 0xd2, 0x8b, 0x9a, 0x38, 0x41, 0xc7,
0x85, 0x79, 0x2a, 0x9e, 0x2f, 0x5b, 0x0c, 0xc5, 0xbe, 0xfe, 0xf1, 0x0a, 0x7b, 0x4a, 0x3a, 0xef,
0xd4, 0x79, 0x9b, 0x33, 0xa7, 0x94, 0x2e, 0xe0, 0x6d, 0x66, 0x59, 0x07, 0x06, 0xf8, 0xed, 0xd9,
0xb9, 0x63, 0xdf, 0x37, 0x7b, 0xbb, 0xbb, 0xbb, 0xe7, 0xce, 0xfc, 0xe2, 0xdc, 0x99, 0x30, 0x27,
0xc7, 0x4d, 0x96, 0x13, 0xcc, 0x74, 0x57, 0xd5, 0x38, 0xbc, 0xcb, 0xa5, 0xdd, 0xe8, 0xf8, 0x0e,
0x62, 0x9e, 0xd6, 0x65, 0x32, 0xd4, 0x3d, 0x6d, 0xce, 0x4c, 0x67, 0x4f, 0xab, 0xc6, 0xbb, 0xe7,
0xa1, 0x03, 0x7f, 0xdc, 0xbd, 0x83, 0x7e, 0xc2, 0x22, 0xef, 0xba, 0x77, 0xb7, 0x42, 0xb5, 0xb5,
0x1c, 0xfc, 0x2d, 0x12, 0x16, 0x42, 0xde, 0xc1, 0xf5, 0xad, 0x9b, 0x58, 0xc7, 0xed, 0xb0, 0xc3,
0x68, 0xeb, 0xda, 0xa9, 0x2b, 0x97, 0xf5, 0xd4, 0xc5, 0x27, 0x8e, 0x11, 0x11, 0x58, 0x17, 0x15,
0xd9, 0x33, 0xdf, 0x69, 0x65, 0xc1, 0x39, 0x1c, 0x53, 0xe3, 0x5d, 0xad, 0x6e, 0x31, 0xfb, 0xf4,
0x93, 0xd2, 0x92, 0x92, 0x43, 0xee, 0xfb, 0x14, 0xbd, 0x2c, 0x9b, 0x0e, 0xef, 0xe8, 0x18, 0x82,
0x17, 0x5f, 0xad, 0x24, 0x22, 0x50, 0xe8, 0xeb, 0x05, 0x05, 0x66, 0x53, 0x36, 0x8c, 0x6b, 0xc2,
0x20, 0xed, 0xbf, 0x03, 0xb4, 0xe4, 0x66, 0xa3, 0xb9, 0x49, 0x51, 0xc4, 0x3f, 0x3a, 0x4a, 0xeb,
0x7c, 0xf7, 0x16, 0xcd, 0xef, 0xbf, 0xba, 0x72, 0x91, 0x33, 0xfd, 0xe0, 0xe5, 0x1d, 0x20, 0x7b,
0xe7, 0xf6, 0x9e, 0x22, 0xbf, 0x4e, 0xd7, 0x25, 0x37, 0x74, 0x54, 0x9c, 0xb2, 0x83, 0x24, 0xe7,
0x9e, 0xf3, 0x19, 0xd4, 0xbc, 0xd7, 0x3e, 0x8e, 0xe8, 0x9b, 0x8e, 0xd7, 0x61, 0x2b, 0xc5, 0xeb,
0x1f, 0x2e, 0x23, 0x39, 0xa5, 0x27, 0xb9, 0x0f, 0x45, 0x54, 0x0c, 0x72, 0xde, 0x15, 0x4a, 0xdb,
0xab, 0xbe, 0xf3, 0x34, 0x2a, 0xce, 0x9f, 0xd5, 0x42, 0x42, 0x7d, 0x42, 0x1c, 0x5a, 0xc6, 0x4a,
0xc7, 0x73, 0xed, 0xa1, 0x18, 0xe2, 0x5d, 0xde, 0xd9, 0x99, 0xb2, 0xc8, 0x1e, 0x51, 0x5f, 0x76,
0x9a, 0xdf, 0x39, 0x26, 0x6f, 0xff, 0xba, 0x87, 0x36, 0xdb, 0x81, 0x6e, 0x4c, 0x5b, 0x91, 0x90,
0xf3, 0x16, 0x6a, 0x3f, 0x9d, 0xac, 0x27, 0x2e, 0x5e, 0x30, 0xbe, 0x7d, 0x64, 0x5b, 0x71, 0x51,
0xdc, 0xf4, 0xa9, 0x88, 0x7a, 0xd0, 0x2d, 0x91, 0x62, 0x9c, 0xe0, 0x01, 0x46, 0x5b, 0xc5, 0xc7,
0x02, 0xd0, 0x5d, 0x4f, 0xc7, 0x9b, 0xd5, 0xdc, 0xfe, 0x15, 0x27, 0x3b, 0x30, 0xec, 0x44, 0xbc,
0x93, 0x3d, 0xba, 0x99, 0x17, 0x8c, 0xcf, 0x3b, 0x40, 0x73, 0x66, 0x46, 0xfc, 0x2c, 0x6b, 0xaa,
0x99, 0x0d, 0xe0, 0x54, 0x93, 0x91, 0x93, 0xac, 0x5d, 0x52, 0x76, 0x26, 0x14, 0x1d, 0x26, 0x01,
0x6d, 0x43, 0x2a, 0xaf, 0xf3, 0x38, 0x75, 0x06, 0x92, 0x8e, 0x0e, 0x35, 0x30, 0x0a, 0xfa, 0x05,
0xef, 0x00, 0x1d, 0x35, 0xd5, 0x68, 0xbb, 0x22, 0x0a, 0xa0, 0x9f, 0x03, 0xba, 0xf9, 0xa5, 0xa7,
0x43, 0x2a, 0x2e, 0x5d, 0x28, 0x0b, 0x0b, 0x29, 0x3e, 0xea, 0x9b, 0xb5, 0x63, 0x5b, 0x94, 0xa5,
0x39, 0x35, 0x4d, 0x92, 0xad, 0x4d, 0x7d, 0x7c, 0x2c, 0xaf, 0xbc, 0x04, 0x79, 0x79, 0x80, 0x77,
0xa9, 0x94, 0x9f, 0x05, 0x2f, 0x59, 0xf4, 0x17, 0xde, 0x21, 0x4a, 0x82, 0x03, 0xa3, 0x27, 0x59,
0xaa, 0xb1, 0xaf, 0x29, 0x80, 0xba, 0x05, 0xbc, 0x09, 0x59, 0x47, 0x87, 0x16, 0x19, 0xe1, 0x58,
0xb9, 0xea, 0x15, 0xfd, 0x8b, 0x77, 0x00, 0x50, 0xb9, 0x17, 0x07, 0xfa, 0x51, 0xab, 0x11, 0x7a,
0x88, 0xb3, 0x9e, 0x2e, 0x0c, 0xf0, 0xa9, 0xcb, 0x17, 0xe8, 0xef, 0xf0, 0x55, 0x89, 0x44, 0xa2,
0xd7, 0xc7, 0xec, 0x77, 0xbc, 0x23, 0xb4, 0x64, 0xbf, 0x2c, 0x3d, 0x79, 0x4c, 0xe8, 0xe7, 0x95,
0xbd, 0xdb, 0x39, 0xdd, 0x61, 0x6d, 0xd6, 0xce, 0xed, 0x85, 0x5e, 0x87, 0x41, 0xbd, 0xaf, 0x3c,
0xb8, 0x83, 0xdc, 0x14, 0xa6, 0xb1, 0xd0, 0x7f, 0x79, 0x1f, 0x82, 0xee, 0x00, 0x95, 0x70, 0xab,
0xb0, 0xe0, 0xdd, 0xfd, 0xbf, 0x4a, 0x4f, 0x9f, 0x04, 0xb5, 0x88, 0xd0, 0xdf, 0x27, 0xff, 0xe0,
0xbe, 0xdc, 0xbd, 0xbb, 0x40, 0x33, 0x99, 0xb1, 0xd1, 0x21, 0xc3, 0x71, 0x03, 0x28, 0xcd, 0xb9,
0xae, 0x7b, 0x0a, 0x3c, 0x0f, 0x81, 0x1a, 0x1b, 0x0c, 0x5d, 0x2b, 0x2e, 0x9c, 0xad, 0x8f, 0x89,
0x6a, 0x7f, 0xfd, 0x8a, 0xac, 0x9d, 0x47, 0xff, 0xc1, 0x50, 0x71, 0x67, 0x86, 0x5c, 0x2e, 0x97,
0x0e, 0x40, 0x74, 0xb7, 0x4b, 0xea, 0xe2, 0x63, 0x41, 0xef, 0x24, 0xdf, 0xe3, 0x40, 0xca, 0xe2,
0x85, 0x51, 0x16, 0xe6, 0x98, 0x7d, 0x14, 0xb5, 0x10, 0x33, 0x65, 0x52, 0xfa, 0xfa, 0x35, 0x42,
0x7f, 0xef, 0xf2, 0xb3, 0xa7, 0x5b, 0x0b, 0x89, 0x39, 0x7f, 0x31, 0x3a, 0x86, 0x8a, 0x3b, 0x79,
0x78, 0x1c, 0x74, 0x0f, 0x3d, 0x19, 0x6c, 0xc8, 0x1c, 0xdb, 0x2b, 0x5f, 0x83, 0x91, 0xa4, 0xc0,
0xdd, 0x2d, 0xee, 0x8b, 0xa9, 0xda, 0x95, 0x6f, 0xf6, 0x90, 0xb4, 0x60, 0x3e, 0xe8, 0xde, 0x54,
0x85, 0x5f, 0x27, 0x78, 0xae, 0x8c, 0x51, 0x30, 0x54, 0xdc, 0x09, 0x63, 0xcb, 0x26, 0x07, 0x38,
0x09, 0x71, 0x60, 0x9f, 0xab, 0xbe, 0xf3, 0x02, 0x03, 0x9d, 0x57, 0x97, 0x2e, 0x08, 0xdc, 0x5d,
0xa3, 0xad, 0x2c, 0x58, 0xc7, 0x3a, 0xd3, 0x52, 0x57, 0x2c, 0x15, 0x1c, 0x70, 0xeb, 0xd9, 0xe3,
0x19, 0x72, 0xbc, 0xec, 0xdb, 0x53, 0x15, 0x17, 0xbf, 0xcb, 0x50, 0x4d, 0x04, 0x94, 0x9c, 0x08,
0x52, 0xf6, 0x73, 0x40, 0x67, 0x7d, 0xd7, 0xce, 0x67, 0x0b, 0xed, 0xd8, 0x07, 0xad, 0xf1, 0x33,
0xad, 0x41, 0x4a, 0xd0, 0x3b, 0xe2, 0xbb, 0x59, 0xb7, 0x9f, 0x60, 0xa8, 0xb8, 0x13, 0x03, 0xe8,
0xff, 0x2c, 0xb2, 0xb3, 0xa5, 0xce, 0x31, 0x73, 0x6e, 0x72, 0xd6, 0x1a, 0xed, 0x55, 0x95, 0x60,
0xf8, 0x98, 0xb2, 0xe8, 0xbf, 0x8c, 0x85, 0x12, 0x94, 0xfe, 0x8c, 0x8d, 0xeb, 0x41, 0x21, 0xae,
0xb9, 0x7d, 0x93, 0x65, 0x83, 0xc1, 0x0f, 0x57, 0xaf, 0xd0, 0x0f, 0x45, 0x90, 0x77, 0x77, 0xb5,
0xe4, 0x64, 0x55, 0x5c, 0x3c, 0x5f, 0xe4, 0xef, 0xfd, 0x7c, 0xd9, 0x62, 0x64, 0xf2, 0xa1, 0x36,
0x3b, 0x93, 0xb5, 0x7d, 0x6b, 0xf9, 0xb9, 0x30, 0x69, 0x6b, 0xab, 0x9e, 0x1e, 0x50, 0x4f, 0x18,
0x2a, 0xee, 0x64, 0xd0, 0xd1, 0xde, 0x8e, 0xfc, 0x27, 0x50, 0x83, 0xbd, 0xed, 0x3c, 0xb2, 0x1b,
0x06, 0xbb, 0x1a, 0xea, 0x8b, 0x8f, 0x1f, 0x4d, 0xee, 0xdd, 0xb6, 0xf1, 0x5e, 0x87, 0x7b, 0xb2,
0x55, 0xfe, 0xa1, 0xfd, 0x15, 0xe7, 0xcf, 0x62, 0xba, 0xa8, 0xbf, 0x7a, 0xe5, 0x72, 0x37, 0xd7,
0x19, 0x20, 0xe2, 0xfc, 0xbc, 0x92, 0xe0, 0xa0, 0x2c, 0xa7, 0x2d, 0xa8, 0xdc, 0x3f, 0x36, 0x1b,
0xf3, 0xc4, 0x6c, 0x0c, 0xbc, 0xce, 0x74, 0xdc, 0x58, 0x71, 0xe1, 0x9c, 0xee, 0x8e, 0x78, 0x0c,
0x86, 0xa1, 0xe2, 0x4e, 0x00, 0xf5, 0xf5, 0x75, 0xe6, 0x63, 0x47, 0xd3, 0xcb, 0x3a, 0xf2, 0xda,
0x22, 0x91, 0xb4, 0x11, 0xc9, 0xa8, 0x2a, 0xfc, 0xda, 0xcb, 0x6d, 0x8e, 0xf4, 0x82, 0x9e, 0xb2,
0xd0, 0x1e, 0x54, 0xf6, 0x92, 0xb2, 0x52, 0x5e, 0xd2, 0x94, 0xc5, 0x9d, 0x72, 0x3c, 0x02, 0x23,
0xda, 0x25, 0x92, 0xc7, 0x8f, 0x22, 0x5c, 0xf7, 0xee, 0x1e, 0xff, 0xe9, 0x27, 0xf0, 0x71, 0x56,
0x8c, 0x18, 0xfe, 0x5e, 0x4d, 0x3f, 0x61, 0x5c, 0x81, 0xe7, 0xc1, 0x86, 0xc4, 0x78, 0x1d, 0x1e,
0xcb, 0x70, 0x18, 0x2a, 0xee, 0xe4, 0x71, 0xec, 0x68, 0xc0, 0x65, 0xd5, 0x11, 0xc6, 0x04, 0xd1,
0xdd, 0xd8, 0x50, 0x1c, 0xe4, 0x1f, 0x3b, 0x6d, 0x8a, 0x5a, 0x41, 0x4f, 0xb6, 0xb3, 0x2d, 0x39,
0x1e, 0x08, 0xaa, 0x7c, 0x4c, 0x39, 0x62, 0xb1, 0xd8, 0xdb, 0xd3, 0x23, 0xf2, 0xc9, 0xe3, 0xa4,
0x84, 0xf8, 0xb9, 0x33, 0xad, 0x37, 0xae, 0x5f, 0x9b, 0x18, 0xaf, 0x7e, 0x12, 0x76, 0x79, 0x59,
0x99, 0xc5, 0xb8, 0x31, 0x9a, 0xbe, 0xde, 0x27, 0xae, 0x7b, 0x18, 0xd4, 0xb0, 0x5f, 0xa0, 0x34,
0x46, 0xe8, 0xf7, 0x1d, 0xfa, 0xa1, 0xe2, 0x4e, 0x1e, 0xc4, 0x8b, 0x7b, 0x5b, 0x71, 0x91, 0xd0,
0xf7, 0x88, 0x5a, 0x37, 0x3a, 0xca, 0xc2, 0x5c, 0xe8, 0xeb, 0x25, 0xce, 0xcb, 0xe5, 0x25, 0x4a,
0x24, 0x12, 0xc1, 0x52, 0xeb, 0xf6, 0xf5, 0x9e, 0x53, 0x21, 0x27, 0x9f, 0x25, 0x27, 0xfd, 0x7f,
0x7b, 0x67, 0xe2, 0xd5, 0xc4, 0xb5, 0x06, 0xf0, 0xf7, 0x5f, 0xb4, 0xa7, 0x9e, 0x67, 0x6b, 0x6d,
0xd5, 0x08, 0x22, 0x28, 0x22, 0x22, 0x8a, 0x88, 0x28, 0x22, 0xd5, 0xd7, 0xba, 0x80, 0xa2, 0xd6,
0xdd, 0xa2, 0x80, 0x82, 0x82, 0x10, 0x08, 0x61, 0x71, 0x17, 0xc5, 0x15, 0x50, 0x5a, 0xdc, 0xb1,
0xd6, 0x56, 0xc5, 0xad, 0x56, 0xb6, 0x10, 0x90, 0xdd, 0x05, 0x42, 0x02, 0x24, 0x10, 0x56, 0x45,
0x40, 0x90, 0x35, 0x10, 0x48, 0xe0, 0x7d, 0x71, 0x34, 0x0d, 0x93, 0x41, 0x43, 0xe6, 0x4e, 0x12,
0xc8, 0xfc, 0xce, 0x3d, 0x9e, 0x6c, 0xde, 0xf9, 0xa2, 0xbf, 0xb9, 0xb9, 0x77, 0xe6, 0xde, 0xfb,
0x75, 0x0e, 0xd1, 0xff, 0xe6, 0x15, 0x15, 0x5a, 0x4c, 0x99, 0x8c, 0x73, 0xdd, 0x63, 0xab, 0x22,
0xb9, 0x38, 0x0c, 0x55, 0x8b, 0xbd, 0x76, 0xe0, 0x8c, 0x4f, 0xb3, 0xb4, 0x80, 0x13, 0xd2, 0xc0,
0x2f, 0xdd, 0xd0, 0xba, 0xa3, 0x07, 0xad, 0xee, 0x5d, 0xe5, 0x22, 0x65, 0xba, 0x70, 0x65, 0xc9,
0xb0, 0xb3, 0x2d, 0x3f, 0x18, 0xd1, 0x3f, 0xfc, 0xec, 0x7b, 0x98, 0xee, 0xd8, 0x2c, 0xb9, 0xd8,
0x98, 0x68, 0xd9, 0xd0, 0x73, 0x29, 0xa4, 0x52, 0xe9, 0xda, 0xd5, 0xae, 0xe0, 0xf7, 0x3c, 0xdb,
0x59, 0x4a, 0xdd, 0x85, 0x1f, 0x27, 0x84, 0x49, 0x1b, 0x1b, 0x44, 0xa1, 0xc1, 0xb8, 0xcb, 0x38,
0xf0, 0x14, 0xc6, 0xc7, 0x1a, 0xcd, 0x7a, 0xd2, 0x13, 0xb4, 0xee, 0xe8, 0x41, 0xa8, 0x3b, 0xf4,
0x61, 0x84, 0xa1, 0xc1, 0xb8, 0x76, 0x3d, 0x6b, 0xd1, 0x02, 0x18, 0x20, 0x6a, 0x57, 0x21, 0xa6,
0xfb, 0xc6, 0x75, 0xee, 0xf0, 0x38, 0x26, 0xfa, 0xdc, 0x50, 0xc3, 0x68, 0xdf, 0x5d, 0x5e, 0xee,
0xae, 0x2b, 0xa5, 0x1f, 0x77, 0x4a, 0x69, 0x6f, 0x6f, 0x5f, 0xf1, 0xe3, 0x52, 0x4f, 0x8f, 0xed,
0xaa, 0x9f, 0x91, 0x4b, 0x7b, 0x60, 0xc0, 0x80, 0xeb, 0xd8, 0x70, 0x66, 0x5a, 0x2a, 0xb6, 0xa8,
0x35, 0xd4, 0xe9, 0x06, 0xb4, 0xee, 0xe8, 0x41, 0xa8, 0xbb, 0xf8, 0xe8, 0x41, 0xae, 0xad, 0x8d,
0xaa, 0x4f, 0xdc, 0x39, 0xb3, 0xe1, 0x45, 0xad, 0x2b, 0xfc, 0xac, 0xee, 0x51, 0x91, 0xc7, 0x16,
0x39, 0xd8, 0xb7, 0xb5, 0xb6, 0x6a, 0x52, 0x9b, 0x5c, 0x22, 0x11, 0x86, 0xb2, 0x70, 0xd3, 0xf6,
0x72, 0x97, 0xb9, 0xbc, 0x4a, 0xb8, 0xaa, 0x75, 0x84, 0x94, 0x42, 0xeb, 0x8e, 0x1e, 0x54, 0xba,
0xb7, 0x17, 0xbe, 0xe0, 0x79, 0x0f, 0xea, 0x22, 0x27, 0x31, 0x26, 0x82, 0x5e, 0x7d, 0x6d, 0x1a,
0xb9, 0x48, 0xc8, 0x27, 0x74, 0xbf, 0x79, 0x23, 0xc1, 0xda, 0xd2, 0xa2, 0xb6, 0xb6, 0x66, 0x58,
0x15, 0x76, 0x96, 0x0a, 0x4a, 0xfc, 0x7c, 0x71, 0x7d, 0x2d, 0x61, 0x08, 0x13, 0xed, 0x66, 0xad,
0xa8, 0xa0, 0x75, 0x47, 0x0f, 0x2a, 0xdd, 0xc5, 0x91, 0x47, 0x70, 0x9b, 0x6f, 0xe6, 0x2f, 0xff,
0xdf, 0x9b, 0xbb, 0xb7, 0xc9, 0xd7, 0x8c, 0x11, 0x7d, 0xee, 0x2c, 0x96, 0xac, 0x87, 0xcb, 0xe1,
0x4c, 0x9b, 0x62, 0x52, 0xcc, 0x1b, 0xde, 0xa8, 0x57, 0x49, 0xe5, 0xa9, 0x13, 0xca, 0x2c, 0x3f,
0x58, 0xc9, 0xf9, 0x61, 0x49, 0xfd, 0xad, 0x9b, 0xa8, 0xe2, 0x44, 0x08, 0xad, 0x3b, 0x7a, 0x90,
0xe8, 0x2e, 0x6b, 0x6f, 0x57, 0x2e, 0xea, 0x55, 0x96, 0xd2, 0xe0, 0x00, 0x24, 0x59, 0x01, 0xa1,
0x51, 0x9f, 0x35, 0x63, 0x9a, 0xe9, 0xc4, 0xef, 0x2c, 0xa7, 0x4e, 0x31, 0x37, 0x65, 0xa4, 0xa5,
0xa6, 0x90, 0xa9, 0xad, 0xed, 0x59, 0x7e, 0xe1, 0xc7, 0x2d, 0x84, 0x94, 0x37, 0xbc, 0x44, 0xd4,
0x6f, 0xca, 0xac, 0x05, 0xb4, 0xee, 0xe8, 0x41, 0xa2, 0xbb, 0xa4, 0xb2, 0xa2, 0x64, 0x9f, 0xdf,
0xa0, 0x9e, 0x8c, 0x09, 0x43, 0x14, 0xc6, 0x22, 0x1f, 0x5e, 0x4d, 0x75, 0x95, 0xea, 0x0d, 0x60,
0x90, 0x3e, 0xf2, 0xd8, 0x91, 0x4b, 0x17, 0xe3, 0xb5, 0x2e, 0x7f, 0x9c, 0x8f, 0xe1, 0x07, 0xf8,
0xe1, 0xce, 0x4c, 0xad, 0xd7, 0x80, 0x50, 0x0a, 0xad, 0x3b, 0x7a, 0x90, 0xe8, 0xde, 0x51, 0x5c,
0x54, 0xec, 0xbd, 0x73, 0xd0, 0x85, 0xed, 0xe9, 0x16, 0xa8, 0xf2, 0x26, 0x43, 0x1f, 0x66, 0xb6,
0x95, 0x25, 0x48, 0x0f, 0x7f, 0x92, 0x9f, 0xe3, 0x20, 0xeb, 0xea, 0x14, 0xaa, 0x64, 0x3a, 0xf9,
0xd0, 0x7d, 0x67, 0x07, 0x69, 0x7e, 0xf3, 0x4b, 0x67, 0xd0, 0xba, 0xa3, 0x07, 0x8d, 0xee, 0x3c,
0xd0, 0x7d, 0xd0, 0x38, 0x35, 0xcd, 0xd2, 0xa2, 0xfc, 0x20, 0xb2, 0x34, 0xe1, 0x08, 0x91, 0x4b,
0xba, 0xd4, 0xfb, 0x5d, 0x30, 0x5a, 0xed, 0x55, 0xcb, 0xfa, 0xa9, 0x77, 0x68, 0xdd, 0xd1, 0x83,
0x4e, 0xf7, 0x9d, 0x23, 0x44, 0x77, 0x89, 0xba, 0xee, 0x65, 0x21, 0x41, 0xb4, 0xee, 0x46, 0x01,
0x55, 0x9d, 0x19, 0x83, 0xd5, 0xbd, 0x7b, 0x08, 0xdd, 0xdf, 0x36, 0xe9, 0x3b, 0x34, 0x3c, 0xb4,
0xee, 0xe8, 0x31, 0x3e, 0xdd, 0xbb, 0x09, 0x74, 0x67, 0xd1, 0xba, 0x93, 0xe3, 0x55, 0x5d, 0xdd,
0x37, 0x63, 0xbe, 0x84, 0x02, 0x03, 0xac, 0x7e, 0x43, 0xbd, 0x4d, 0x3d, 0x60, 0x84, 0xba, 0xf7,
0x74, 0xab, 0x0f, 0x55, 0xcb, 0x58, 0xcc, 0xde, 0xa6, 0x21, 0x93, 0x84, 0xea, 0x8b, 0x11, 0xa3,
0x3b, 0xf8, 0x6d, 0x3b, 0x73, 0x06, 0x88, 0x5e, 0x53, 0x53, 0x0d, 0xc6, 0x6f, 0x5a, 0x8f, 0x2c,
0x89, 0x3b, 0x72, 0x28, 0xd4, 0x1d, 0xd1, 0x95, 0x19, 0xb4, 0xc8, 0x7b, 0x7a, 0x44, 0x04, 0x9d,
0x19, 0xa6, 0x94, 0xd6, 0x5d, 0x6b, 0xbc, 0x77, 0x7a, 0x7c, 0xfd, 0xd5, 0x17, 0xf9, 0xb9, 0xb9,
0xf0, 0xf8, 0xf2, 0xc5, 0x78, 0x78, 0x7c, 0xf4, 0xb0, 0xf6, 0x53, 0x47, 0x28, 0xc5, 0xf0, 0x2f,
0x44, 0xa2, 0x45, 0x31, 0x57, 0x8c, 0x50, 0x77, 0xc3, 0x9b, 0x47, 0x30, 0x32, 0x74, 0xbf, 0x72,
0xe9, 0x22, 0xf8, 0x7d, 0xfa, 0xe4, 0x09, 0xe5, 0x2b, 0x3b, 0xb6, 0x6f, 0x85, 0x57, 0xee, 0x27,
0xde, 0xd5, 0x63, 0x54, 0x43, 0x61, 0x6c, 0xba, 0xf7, 0x4b, 0xa5, 0x04, 0xba, 0xb3, 0x68, 0xdd,
0xb5, 0x42, 0x35, 0x51, 0x24, 0xae, 0x40, 0xaf, 0x46, 0x39, 0x03, 0xdb, 0x79, 0xa1, 0xc3, 0x62,
0xc7, 0xf9, 0x87, 0x0f, 0x44, 0xb8, 0xbb, 0xae, 0x74, 0x71, 0x5a, 0xb8, 0x6e, 0x8d, 0xeb, 0x99,
0x53, 0x51, 0x0b, 0xe7, 0xcf, 0x0b, 0x0b, 0x51, 0x64, 0xc6, 0x49, 0x49, 0x4e, 0xb2, 0xb6, 0xb4,
0x88, 0x8a, 0x3c, 0x76, 0x20, 0x3c, 0xcc, 0x8c, 0x31, 0xe1, 0xd1, 0xc3, 0x07, 0xf0, 0xe2, 0xb6,
0xcd, 0x1b, 0xf7, 0xec, 0xf6, 0x86, 0x07, 0x21, 0x41, 0x81, 0x9b, 0x7f, 0x5e, 0x87, 0x2a, 0x60,
0x64, 0xba, 0xef, 0x1a, 0xd1, 0xba, 0x07, 0x6a, 0xb8, 0x64, 0x56, 0x97, 0x18, 0xba, 0xee, 0x52,
0xa9, 0x74, 0xaa, 0xc9, 0xa4, 0x09, 0xe3, 0xc6, 0xb6, 0xb7, 0xb7, 0xe3, 0xde, 0x12, 0x57, 0x54,
0x80, 0xee, 0x53, 0x26, 0x7d, 0x8f, 0xad, 0x04, 0x05, 0xdd, 0x93, 0xfe, 0x79, 0x0c, 0x0f, 0x7a,
0x7b, 0x7b, 0xe1, 0x4c, 0x68, 0x7b, 0xbf, 0xac, 0x26, 0x3b, 0xeb, 0x29, 0x18, 0x0f, 0x0f, 0xe0,
0x33, 0xf1, 0x71, 0x17, 0xe0, 0x37, 0xc1, 0x71, 0xde, 0x5c, 0xa8, 0x90, 0xc5, 0x0c, 0xc0, 0x2a,
0x81, 0xdf, 0x07, 0xf8, 0x30, 0x66, 0x3f, 0x2a, 0x10, 0xe9, 0xce, 0x1b, 0x31, 0xba, 0xf7, 0x4a,
0x45, 0x04, 0x43, 0x55, 0x5a, 0xf7, 0xe1, 0xb3, 0x76, 0xb5, 0x2b, 0xe8, 0x98, 0xfc, 0xe4, 0x1f,
0xc2, 0x77, 0xff, 0xfc, 0xe3, 0x26, 0xbc, 0xeb, 0xe2, 0xe4, 0x38, 0xf0, 0x5e, 0x77, 0x2e, 0x47,
0xb1, 0xec, 0x12, 0xd3, 0xbd, 0xe3, 0xfd, 0x9a, 0x1a, 0xa5, 0xee, 0xb3, 0x66, 0x4c, 0x7b, 0x78,
0x5f, 0x91, 0x47, 0xba, 0xf5, 0xdd, 0xbb, 0x79, 0xb6, 0xb3, 0xb0, 0x46, 0xfd, 0xea, 0xe5, 0x4b,
0x8b, 0x1c, 0xec, 0xbb, 0x25, 0x12, 0xa8, 0xe1, 0xb7, 0xb8, 0xf3, 0xa8, 0x62, 0x36, 0x3e, 0xdd,
0x7b, 0x89, 0x74, 0x67, 0x52, 0x9d, 0x33, 0x5d, 0x0b, 0x0c, 0x5d, 0x77, 0x84, 0x40, 0x03, 0xdf,
0xa4, 0x93, 0x6b, 0x05, 0x46, 0xa7, 0x7b, 0x5f, 0x2f, 0x71, 0x67, 0x86, 0xd6, 0xdd, 0x18, 0x30,
0x3e, 0xdd, 0xfb, 0x08, 0x75, 0xef, 0xa9, 0x7f, 0xad, 0xef, 0xd0, 0xf0, 0xd0, 0xba, 0xa3, 0x47,
0xa1, 0xfb, 0xd9, 0x33, 0x24, 0x2b, 0x51, 0xd7, 0x3d, 0xd5, 0x60, 0x75, 0x97, 0x11, 0xe9, 0x1e,
0x4c, 0xeb, 0x6e, 0x1c, 0xe8, 0x45, 0x77, 0xb9, 0x5c, 0xae, 0x5c, 0x49, 0x4d, 0x05, 0xdd, 0x43,
0xef, 0x78, 0xdf, 0x2f, 0x93, 0x11, 0xe9, 0x8e, 0x66, 0x25, 0x0a, 0x5a, 0x68, 0xdd, 0xd1, 0x83,
0x4e, 0x77, 0xcf, 0xcf, 0xea, 0xce, 0x2b, 0x2a, 0x5a, 0xb3, 0x6a, 0x05, 0x76, 0x59, 0x56, 0xc0,
0xe7, 0x93, 0x3c, 0xe8, 0x27, 0x70, 0x77, 0x5b, 0x05, 0x87, 0x30, 0x37, 0x65, 0xc4, 0xff, 0x1a,
0x87, 0xdf, 0x59, 0x52, 0x2e, 0x23, 0x98, 0x33, 0x43, 0xeb, 0x6e, 0x24, 0xa0, 0xd1, 0x9d, 0x3f,
0xa4, 0xee, 0x6d, 0xad, 0xad, 0x87, 0xf6, 0x87, 0x4f, 0x18, 0x37, 0x16, 0x77, 0x17, 0x42, 0x07,
0xba, 0xab, 0x96, 0xa5, 0xce, 0x4e, 0x39, 0xd9, 0x59, 0x8a, 0xf7, 0xe4, 0x72, 0x02, 0xdd, 0x83,
0x02, 0x7a, 0x5e, 0xd5, 0x51, 0x17, 0x8f, 0x76, 0xd0, 0xba, 0xa3, 0x87, 0x3a, 0xdd, 0x85, 0x11,
0x6c, 0x75, 0xed, 0x94, 0x65, 0xbd, 0xbb, 0x9b, 0xa7, 0xc7, 0x76, 0x8a, 0xca, 0x74, 0x33, 0x53,
0xc2, 0x83, 0x42, 0x7b, 0x7f, 0xf5, 0x62, 0x3c, 0xad, 0xbb, 0xf1, 0x42, 0x75, 0xeb, 0x3e, 0xf0,
0xbe, 0xa7, 0x7e, 0xf3, 0x46, 0xc2, 0xcc, 0xe9, 0xe6, 0x7a, 0x69, 0xdd, 0xbf, 0x19, 0xf3, 0xa5,
0xaf, 0xb7, 0xe7, 0xab, 0xba, 0x7f, 0x6d, 0x16, 0x85, 0xb1, 0x92, 0x4d, 0x27, 0xab, 0x46, 0x5b,
0xe2, 0xbf, 0x57, 0x22, 0x2e, 0xa7, 0x2e, 0x1e, 0xed, 0xa0, 0x75, 0x47, 0x0f, 0x95, 0xba, 0x87,
0xa9, 0x7f, 0xb2, 0xb9, 0xf9, 0x6d, 0x28, 0x2b, 0x68, 0xfc, 0xd8, 0x31, 0x9a, 0xe8, 0x0e, 0xe7,
0xc9, 0xed, 0xbf, 0x6e, 0x6d, 0xdf, 0xb2, 0x71, 0xc9, 0xa2, 0x05, 0x9b, 0xd6, 0xaf, 0x3d, 0x7c,
0x20, 0x42, 0xc3, 0x84, 0x9b, 0xa0, 0xbb, 0xd3, 0x82, 0xf9, 0xd8, 0x8d, 0x3c, 0x75, 0xca, 0x0f,
0x86, 0xe3, 0xb6, 0x13, 0x2b, 0xdc, 0xbe, 0xa5, 0xb5, 0x20, 0x4f, 0x93, 0x9a, 0x75, 0x09, 0xad,
0x3b, 0x7a, 0x28, 0xd3, 0xdd, 0x9c, 0x50, 0x77, 0xcd, 0x69, 0x6a, 0x6a, 0x84, 0x86, 0x79, 0xdb,
0xe6, 0x8d, 0xca, 0x57, 0x92, 0x93, 0x9e, 0x40, 0x6b, 0xed, 0xe7, 0xbb, 0x9b, 0x64, 0xb4, 0xf5,
0xb7, 0x6e, 0xe6, 0x2c, 0x5d, 0xa2, 0x1a, 0x6d, 0xe6, 0x02, 0x7b, 0x4d, 0x72, 0xc7, 0xeb, 0x18,
0x5a, 0x77, 0xf4, 0x18, 0xac, 0xee, 0x80, 0xfd, 0x1c, 0x1b, 0xf0, 0xdb, 0x76, 0xe6, 0x8c, 0x90,
0xa0, 0x40, 0x68, 0xaa, 0x3f, 0xbb, 0xbf, 0xbb, 0x86, 0x48, 0x2a, 0xc5, 0xa5, 0x4c, 0x7f, 0x82,
0x4b, 0xef, 0x06, 0x76, 0x71, 0x86, 0xd6, 0x1d, 0x3d, 0x86, 0xac, 0xfb, 0x87, 0xca, 0x3b, 0x3a,
0xee, 0xdd, 0xbd, 0xb3, 0x63, 0xdb, 0x16, 0xc6, 0x77, 0xdf, 0x82, 0xfd, 0x8b, 0x1d, 0xe7, 0x93,
0xaf, 0xb3, 0x2a, 0xfa, 0x4c, 0xa6, 0xc3, 0x3c, 0xd5, 0x80, 0xd3, 0x6d, 0xac, 0x2b, 0x0e, 0xed,
0x27, 0x5f, 0x33, 0x42, 0x68, 0xdd, 0xd1, 0xb3, 0x3f, 0x2c, 0x14, 0x85, 0xee, 0xc5, 0xc8, 0x75,
0x7f, 0x70, 0x2f, 0x11, 0xe4, 0x0e, 0x63, 0x0f, 0xda, 0x9b, 0x69, 0xdd, 0x1a, 0xc5, 0x24, 0x3c,
0x71, 0xc5, 0xf0, 0x32, 0x7f, 0xa8, 0x23, 0xeb, 0x68, 0x17, 0xc2, 0x80, 0xd5, 0x84, 0xa1, 0x1a,
0x73, 0xce, 0x0f, 0xce, 0xd5, 0x17, 0x62, 0x48, 0xd6, 0x8c, 0x10, 0x5a, 0x77, 0xf4, 0x18, 0xac,
0xee, 0x03, 0xef, 0xb7, 0x10, 0xdb, 0xb0, 0x76, 0x0d, 0xf4, 0xe0, 0xb1, 0x6b, 0x2c, 0x26, 0x13,
0xc6, 0xfb, 0xee, 0xf2, 0x6a, 0x43, 0x94, 0x83, 0xa0, 0x43, 0x50, 0x5c, 0x12, 0xb0, 0x17, 0xd7,
0xa5, 0xc9, 0x71, 0x59, 0x5c, 0x75, 0x3a, 0x6a, 0x60, 0xc0, 0x20, 0xd6, 0x16, 0xd3, 0xba, 0xa3,
0xc7, 0x90, 0x75, 0xa7, 0x9a, 0xf6, 0x97, 0xcf, 0x05, 0x7e, 0x3e, 0x38, 0xe3, 0x39, 0xd6, 0x56,
0xa2, 0xf0, 0x10, 0x43, 0xd8, 0x76, 0x86, 0xd6, 0x1d, 0x3d, 0xc8, 0x74, 0xdf, 0x3d, 0xf2, 0x74,
0x07, 0xba, 0x6b, 0xaa, 0x85, 0xec, 0x20, 0xf5, 0x84, 0xdd, 0x45, 0xbf, 0x6c, 0xad, 0x8d, 0x8f,
0x1b, 0xe8, 0xd7, 0x67, 0xfa, 0x79, 0x5a, 0x77, 0x04, 0xe0, 0x32, 0xca, 0x87, 0xb3, 0x43, 0xce,
0x9d, 0x3e, 0xa5, 0xfa, 0x8a, 0x16, 0x75, 0x12, 0xe8, 0x3e, 0xcd, 0xbc, 0xdc, 0x20, 0xb7, 0xd5,
0x55, 0x47, 0xde, 0xd3, 0x53, 0x71, 0xf8, 0xc0, 0xd3, 0x45, 0x0b, 0x70, 0xc6, 0x27, 0x9b, 0x4e,
0xe6, 0xef, 0xd9, 0x55, 0x77, 0x39, 0xbe, 0x5f, 0x86, 0xe6, 0x8a, 0xd0, 0x70, 0xa1, 0x75, 0x47,
0x03, 0x8b, 0x19, 0x30, 0xd4, 0xbd, 0xfd, 0x93, 0x27, 0x22, 0xb5, 0xa8, 0x70, 0x44, 0xeb, 0x8e,
0xd1, 0x9a, 0x9f, 0x57, 0xc6, 0x0a, 0x24, 0x4c, 0xc3, 0x9d, 0xef, 0xba, 0x1c, 0xbe, 0x4b, 0x97,
0xa8, 0x4c, 0xc7, 0x21, 0xd1, 0xba, 0x23, 0x03, 0x5a, 0x74, 0x75, 0xd7, 0x7f, 0x4f, 0xb8, 0xae,
0x5d, 0x6d, 0xa0, 0x3b, 0x7f, 0x84, 0xeb, 0x8e, 0xf1, 0xe6, 0xee, 0xed, 0x92, 0x7d, 0x7b, 0x53,
0xcc, 0x09, 0xd2, 0xd8, 0x27, 0x99, 0x30, 0x0a, 0xdc, 0x56, 0x8a, 0xc2, 0x58, 0x0d, 0x89, 0x77,
0x74, 0x93, 0xb2, 0x8f, 0xd6, 0x1d, 0x25, 0xd8, 0xda, 0x59, 0x65, 0x21, 0x93, 0x26, 0xa0, 0x43,
0x30, 0x4a, 0x74, 0xcc, 0x4c, 0x34, 0x61, 0x00, 0x00, 0x07, 0xa9, 0x49, 0x44, 0x41, 0x54, 0xc7,
0x78, 0x97, 0x95, 0x29, 0x0a, 0x0d, 0xce, 0xb4, 0xb7, 0x53, 0x97, 0xfe, 0x43, 0x3f, 0xc7, 0xcc,
0x24, 0xdb, 0x65, 0x71, 0xc9, 0xbe, 0x3d, 0x30, 0xa8, 0xad, 0x8e, 0x3d, 0xd7, 0x92, 0x91, 0xde,
0x55, 0x2e, 0xec, 0x7b, 0xd7, 0x82, 0x36, 0xab, 0xd9, 0x7f, 0x9a, 0x39, 0x29, 0x2f, 0xb7, 0x6e,
0xcc, 0x72, 0x72, 0x34, 0xdc, 0xb2, 0x78, 0x61, 0xce, 0xd2, 0x25, 0x79, 0x3f, 0x2d, 0x7b, 0xe6,
0xee, 0xc6, 0xf7, 0xf1, 0x2a, 0x63, 0x31, 0xe1, 0x1f, 0xae, 0x32, 0x2a, 0xb2, 0xe9, 0xc9, 0x63,
0x45, 0x9e, 0x68, 0xbd, 0x0e, 0x7d, 0xd4, 0xc9, 0xe4, 0xa6, 0x63, 0x93, 0xa8, 0xa0, 0x33, 0x42,
0xa6, 0x9e, 0x51, 0xa6, 0x3b, 0x86, 0xac, 0xab, 0xb3, 0x36, 0x2e, 0xb6, 0x94, 0xe9, 0xcf, 0x9d,
0x33, 0x7b, 0x28, 0xef, 0x09, 0xce, 0x84, 0x29, 0x93, 0x53, 0x2d, 0xcc, 0x60, 0xa4, 0x4e, 0xa6,
0x3c, 0x5f, 0xbb, 0xba, 0x99, 0x93, 0xaa, 0xd0, 0x3d, 0x7f, 0xd5, 0x72, 0xcd, 0x8f, 0x6d, 0x68,
0x25, 0xcd, 0x6a, 0x7a, 0xc1, 0xea, 0x55, 0xa5, 0xc1, 0x81, 0xc5, 0x47, 0x0f, 0xe5, 0xde, 0xbf,
0x9b, 0xc1, 0xe5, 0xea, 0xbd, 0x24, 0x5c, 0xbf, 0x76, 0xf7, 0xce, 0x6d, 0x92, 0x95, 0xe4, 0xfd,
0xf9, 0x47, 0xa1, 0xa7, 0x07, 0x4e, 0xf7, 0x92, 0x30, 0x96, 0xde, 0xbf, 0x1d, 0x92, 0x92, 0x99,
0x9a, 0xfa, 0x22, 0x3e, 0xae, 0x94, 0x1d, 0xfc, 0x72, 0xdb, 0x66, 0xce, 0x2c, 0x2b, 0x1d, 0x78,
0x52, 0xe0, 0xba, 0x62, 0x34, 0xe8, 0xae, 0x5a, 0x92, 0x18, 0x13, 0x73, 0x97, 0x2e, 0x81, 0xb6,
0xbf, 0xe1, 0x7e, 0x62, 0x3f, 0x95, 0x2b, 0xd9, 0x74, 0x00, 0x15, 0xad, 0xfb, 0x95, 0x4b, 0x17,
0x27, 0x8c, 0x1b, 0xab, 0x3a, 0x71, 0xd7, 0x30, 0xe8, 0x97, 0x88, 0xcb, 0x5f, 0xdf, 0xb8, 0x26,
0x8a, 0x60, 0xc3, 0xd0, 0xf6, 0xc5, 0x86, 0x75, 0x4f, 0x17, 0x3a, 0x70, 0xac, 0xad, 0x92, 0x06,
0xdf, 0xa0, 0x45, 0xa3, 0x3b, 0xf4, 0x90, 0x1a, 0xee, 0xdd, 0x45, 0x58, 0x1a, 0x1f, 0x24, 0x36,
0x3e, 0xbc, 0x8f, 0xb0, 0x34, 0x24, 0xde, 0x7e, 0x95, 0x70, 0xad, 0x36, 0x3e, 0x4e, 0x7c, 0xfc,
0x28, 0x74, 0xec, 0x84, 0xec, 0xa0, 0xa2, 0x1d, 0xdb, 0xb2, 0x9d, 0x17, 0xa5, 0x4c, 0x35, 0xfd,
0xc4, 0xd7, 0xcb, 0x76, 0x5a, 0x08, 0x63, 0xa0, 0xd6, 0xfc, 0x5c, 0x7d, 0xff, 0x5f, 0x6a, 0x09,
0x72, 0xdd, 0x8f, 0x1d, 0x3e, 0xa4, 0x9c, 0xad, 0xce, 0x2b, 0x2a, 0x42, 0x18, 0x2a, 0x55, 0xc8,
0xe5, 0xbd, 0x2d, 0xcd, 0x3d, 0xf5, 0xaf, 0x25, 0x55, 0xe2, 0xce, 0xb2, 0xd2, 0xce, 0x52, 0x01,
0xc9, 0xd2, 0xfb, 0xb6, 0x69, 0x04, 0x0f, 0x55, 0xe5, 0xd2, 0x9e, 0xb6, 0x17, 0xcf, 0xc4, 0xc7,
0x8f, 0x40, 0x5f, 0x30, 0x73, 0x81, 0x3d, 0xa1, 0xf4, 0x70, 0x4a, 0x94, 0xf8, 0xfb, 0xbe, 0xbe,
0x71, 0x7d, 0x80, 0x74, 0x06, 0x22, 0x1d, 0x83, 0x56, 0xf7, 0x3d, 0xbb, 0xbd, 0x71, 0x97, 0x8c,
0x52, 0x92, 0x93, 0xd0, 0x06, 0x3c, 0x22, 0x18, 0xc1, 0xba, 0x0f, 0x42, 0x2e, 0x6f, 0xe1, 0x72,
0xa0, 0xed, 0xcf, 0x5d, 0xea, 0xa2, 0x2e, 0x7d, 0xb2, 0x09, 0x03, 0xa4, 0x6f, 0x7c, 0x70, 0x4f,
0xdf, 0x51, 0x0e, 0x03, 0x84, 0xba, 0x63, 0x3b, 0xb1, 0xa9, 0x97, 0x84, 0x6b, 0x06, 0x9a, 0xdb,
0x9a, 0x3a, 0x46, 0x8b, 0xee, 0x1f, 0xe9, 0xef, 0xeb, 0x7b, 0x75, 0xfd, 0x8a, 0x60, 0xaf, 0x0f,
0x2e, 0x73, 0x39, 0x94, 0xb4, 0x19, 0xd3, 0xa1, 0x7b, 0x63, 0x80, 0x9b, 0x9f, 0x10, 0xd2, 0x21,
0xe0, 0xf3, 0x77, 0x7b, 0x91, 0xd7, 0x7d, 0xf3, 0x86, 0xf5, 0xb3, 0xad, 0x2c, 0xb1, 0x62, 0x65,
0x61, 0x36, 0x7e, 0xec, 0x18, 0xe5, 0x53, 0x28, 0xd7, 0xae, 0x5c, 0xa6, 0x22, 0x78, 0x83, 0x65,
0xb4, 0xe9, 0xae, 0x04, 0x7a, 0xfc, 0x02, 0x3f, 0x1f, 0xf5, 0xe1, 0x4e, 0xd1, 0x2f, 0x5b, 0x1a,
0xee, 0x1b, 0xe2, 0x36, 0xd9, 0x38, 0x50, 0xe9, 0xae, 0x4a, 0x69, 0x89, 0x60, 0xfe, 0xdc, 0xd9,
0xa8, 0x22, 0x1c, 0x89, 0x8c, 0x5a, 0xdd, 0x07, 0xde, 0xb7, 0xf4, 0x95, 0xc7, 0x8f, 0xe5, 0x0e,
0x5e, 0x54, 0x06, 0x05, 0x5e, 0xa9, 0x3a, 0x77, 0x5a, 0xdf, 0xd1, 0x7d, 0x06, 0x5a, 0x77, 0x2a,
0x18, 0xcd, 0xba, 0x63, 0xb4, 0x64, 0xa4, 0xf3, 0x7d, 0xbc, 0x70, 0xc6, 0x67, 0x3b, 0x3b, 0x55,
0xc7, 0x92, 0xdd, 0xc6, 0x91, 0x52, 0x68, 0xdd, 0xa9, 0x60, 0xf4, 0xeb, 0x0e, 0x74, 0x96, 0xf0,
0x4b, 0x02, 0xf1, 0x59, 0xcc, 0x0b, 0xdc, 0x56, 0x35, 0xdc, 0xbb, 0xa3, 0xef, 0xd0, 0x86, 0x84,
0xd6, 0x9d, 0x0a, 0x8c, 0x42, 0x77, 0xa0, 0xad, 0x20, 0x8f, 0xe7, 0xb5, 0x13, 0x67, 0x3c, 0x9c,
0x03, 0x5d, 0x15, 0x22, 0x7d, 0x87, 0x46, 0x0c, 0x91, 0xee, 0x53, 0x69, 0xdd, 0x49, 0x62, 0x2c,
0xba, 0x03, 0xb5, 0x17, 0x7f, 0xcd, 0x5a, 0xbc, 0x50, 0x55, 0x20, 0xee, 0x5c, 0x5b, 0xf1, 0x89,
0xa3, 0xfa, 0x8e, 0x8b, 0x18, 0x5a, 0x77, 0x2a, 0x30, 0x22, 0xdd, 0x7b, 0x9b, 0xdf, 0x0a, 0xd9,
0x41, 0xb8, 0x06, 0x5e, 0xb1, 0x0d, 0xb9, 0x81, 0x6d, 0x0e, 0x81, 0x01, 0x1d, 0x30, 0xdc, 0x90,
0x43, 0xc7, 0xba, 0xa7, 0xa5, 0xa6, 0xec, 0xf6, 0xda, 0xc9, 0x0e, 0x66, 0x92, 0x39, 0xa2, 0xa1,
0x61, 0x44, 0xba, 0x03, 0xe2, 0xc8, 0xc3, 0xe9, 0xb3, 0x67, 0x0d, 0xee, 0xc1, 0xaf, 0x6c, 0x4e,
0xd3, 0x7e, 0x9a, 0x2e, 0x75, 0xe8, 0x57, 0x77, 0x2c, 0xef, 0x95, 0xaf, 0xb7, 0x27, 0xfc, 0x09,
0xd2, 0x93, 0x39, 0xa8, 0x41, 0x61, 0x5c, 0xba, 0xbf, 0xfe, 0x3d, 0x21, 0x7b, 0x89, 0xd3, 0xa0,
0x4b, 0x34, 0x4b, 0x9c, 0x14, 0x53, 0x0c, 0x0c, 0x0f, 0x3d, 0xea, 0x2e, 0x93, 0xc9, 0x66, 0x98,
0x4f, 0x99, 0x6a, 0x32, 0x49, 0x2e, 0x97, 0xc7, 0xc7, 0x5d, 0xf8, 0xfa, 0xab, 0x2f, 0x62, 0xa3,
0x0d, 0x6e, 0x3f, 0x30, 0xed, 0x30, 0x2e, 0xdd, 0xdf, 0xa6, 0x24, 0xe5, 0xaf, 0xf8, 0x51, 0xd5,
0xa1, 0xcc, 0xf9, 0x76, 0xd5, 0x31, 0x64, 0x97, 0x51, 0x53, 0x41, 0x7b, 0x51, 0x61, 0xb1, 0xd7,
0x8e, 0x41, 0x77, 0x85, 0x2d, 0xa7, 0x91, 0x4c, 0x12, 0xaf, 0xa1, 0xee, 0x5b, 0x37, 0x6d, 0x00,
0xc5, 0x0b, 0x5f, 0xbe, 0xc0, 0x9e, 0x6e, 0xde, 0xb0, 0x1e, 0x9e, 0xa6, 0xa7, 0xa5, 0x69, 0x7e,
0x14, 0x8f, 0xad, 0x9b, 0xb5, 0x0e, 0x92, 0x52, 0x8c, 0x4b, 0xf7, 0xd6, 0x82, 0xbc, 0xc2, 0x6d,
0x9b, 0x54, 0x1d, 0xe2, 0x58, 0x5b, 0x95, 0x1f, 0x39, 0xa0, 0xef, 0xb8, 0x08, 0x68, 0xc9, 0xe4,
0x3e, 0x73, 0x77, 0x1b, 0x34, 0xb0, 0x9e, 0x63, 0x53, 0x19, 0xa5, 0xcd, 0xb2, 0x57, 0x25, 0x9a,
0xe8, 0x7e, 0x3e, 0x26, 0x1a, 0xe4, 0x8e, 0x39, 0x7b, 0x46, 0xb9, 0xae, 0xbc, 0x5b, 0x22, 0x31,
0x37, 0x65, 0x7c, 0xfb, 0xdf, 0xaf, 0xea, 0x5f, 0x7f, 0x98, 0x7f, 0x21, 0x14, 0x96, 0x95, 0x08,
0xf8, 0x79, 0xb9, 0x39, 0xd0, 0xf6, 0x17, 0xf3, 0x78, 0xfd, 0xfd, 0xfd, 0x8f, 0x1e, 0x3e, 0x88,
0x3b, 0x1f, 0x53, 0x5b, 0x5b, 0xa3, 0x88, 0xbc, 0xb9, 0xf9, 0xc9, 0xe3, 0xbf, 0xe1, 0x01, 0x7c,
0x46, 0x58, 0x56, 0x9a, 0x93, 0x9d, 0x75, 0x21, 0x36, 0x3a, 0xeb, 0x69, 0x26, 0x99, 0xc8, 0x51,
0x61, 0x5c, 0xba, 0x4b, 0x1b, 0xde, 0x94, 0xb1, 0x98, 0xb8, 0xd1, 0x2a, 0x8c, 0x5f, 0x7b, 0x5b,
0x9a, 0xf5, 0x1d, 0x1a, 0x9e, 0xca, 0x53, 0x27, 0x32, 0xec, 0x6c, 0x55, 0xe3, 0x84, 0xdf, 0xa5,
0xc6, 0x47, 0x0f, 0xc9, 0xd4, 0xf9, 0x59, 0xdd, 0x9f, 0x15, 0xe4, 0x83, 0xeb, 0x0e, 0x76, 0xb6,
0x61, 0x6c, 0x96, 0x6a, 0x09, 0xf4, 0xf7, 0x83, 0xd7, 0xad, 0x2c, 0xcc, 0xb0, 0x3d, 0x25, 0xa1,
0x6f, 0xb3, 0xc8, 0xc1, 0x1e, 0xfb, 0x2b, 0xcb, 0x97, 0xb9, 0x44, 0x84, 0xb2, 0xb1, 0xc7, 0x93,
0xbe, 0x1b, 0x57, 0x29, 0x16, 0x43, 0x25, 0x73, 0x6d, 0x66, 0xc2, 0xd3, 0x93, 0xc7, 0x23, 0x57,
0xfc, 0xb8, 0x14, 0x7b, 0xeb, 0x54, 0xd4, 0xf1, 0x5d, 0x9e, 0x3b, 0xc8, 0x04, 0x8f, 0x04, 0xe3,
0xd2, 0x1d, 0xa8, 0x38, 0xbc, 0x1f, 0xb7, 0x7c, 0x26, 0x77, 0x99, 0x4b, 0xfd, 0xad, 0x9b, 0xfa,
0x8e, 0x6b, 0x10, 0xdd, 0x35, 0xd5, 0xa5, 0x41, 0xfb, 0x70, 0xa7, 0x65, 0x69, 0x70, 0x40, 0x77,
0x5d, 0x2d, 0x99, 0x6a, 0x3f, 0xad, 0xbb, 0x44, 0xd2, 0x35, 0xf9, 0xfb, 0x6f, 0x27, 0x8e, 0xff,
0xa6, 0xb3, 0xb3, 0x53, 0xfd, 0xdd, 0xab, 0x97, 0x2f, 0x81, 0xf1, 0x6b, 0x56, 0xad, 0x18, 0x78,
0xaf, 0xfb, 0x5e, 0x9f, 0x5d, 0xd8, 0xeb, 0xbf, 0x6c, 0xd9, 0x74, 0xfd, 0xea, 0x87, 0x79, 0x66,
0xd0, 0xe3, 0x87, 0xe6, 0x5c, 0x55, 0x77, 0x65, 0xba, 0x66, 0xf8, 0x0c, 0x7c, 0x92, 0x4c, 0xf0,
0x48, 0x30, 0x3a, 0xdd, 0x3b, 0x8a, 0x79, 0x7c, 0x5f, 0x6f, 0xfc, 0xe5, 0xc8, 0xe0, 0xc0, 0xee,
0xea, 0x2a, 0x7d, 0x87, 0xf6, 0x2f, 0x70, 0x4e, 0xa6, 0xdb, 0x58, 0xab, 0x46, 0xf8, 0xd4, 0xd1,
0xa1, 0xe6, 0x7c, 0x34, 0xc9, 0x6a, 0x3f, 0xad, 0x3b, 0xb4, 0xc4, 0x20, 0x74, 0x6a, 0x4a, 0xf2,
0x50, 0x1f, 0x80, 0xe6, 0x19, 0x3e, 0x10, 0xce, 0x0e, 0xa1, 0x75, 0x1f, 0x49, 0x54, 0xc7, 0x9e,
0xcb, 0x72, 0x72, 0x54, 0x95, 0x29, 0xc5, 0xdc, 0x4c, 0x14, 0xc6, 0x92, 0x75, 0x76, 0xe8, 0x3b,
0x34, 0x05, 0xb5, 0xf1, 0x71, 0xf0, 0x83, 0xa3, 0x1a, 0x5e, 0xb2, 0x09, 0x43, 0x08, 0xe1, 0x75,
0xb4, 0x93, 0xac, 0x99, 0xbe, 0xcd, 0x64, 0x8c, 0xba, 0x2b, 0xb2, 0x3c, 0x47, 0xb0, 0x71, 0xd9,
0x26, 0x52, 0xa7, 0x99, 0x8b, 0xc2, 0x43, 0x14, 0x3b, 0x3d, 0xe8, 0x95, 0x9a, 0xb8, 0xd8, 0xbc,
0x9f, 0x96, 0xe1, 0x7e, 0x7c, 0x04, 0xfe, 0xbe, 0x1d, 0xc5, 0x08, 0x96, 0xdb, 0xd1, 0xba, 0x1b,
0xa3, 0xee, 0x80, 0x5c, 0x22, 0x01, 0xb9, 0x41, 0x71, 0x55, 0xab, 0x92, 0x26, 0x4f, 0x2a, 0x65,
0xee, 0x6b, 0x7f, 0xf9, 0x5c, 0x2f, 0x21, 0xc9, 0x3a, 0x3b, 0xcb, 0xf7, 0x87, 0x72, 0xe7, 0xe2,
0x77, 0xa4, 0xe0, 0xfb, 0x78, 0xb7, 0x21, 0xca, 0xfa, 0x42, 0xeb, 0x6e, 0xa4, 0xba, 0x03, 0xfd,
0xbd, 0xd2, 0xf2, 0x83, 0xe1, 0x19, 0x76, 0x73, 0x70, 0x7a, 0xe5, 0xb8, 0x38, 0x57, 0x1c, 0x3d,
0x28, 0xeb, 0xea, 0xd2, 0x65, 0x30, 0x8d, 0x0f, 0x12, 0x05, 0x7b, 0x77, 0x27, 0x31, 0x26, 0xe2,
0x4e, 0xbf, 0xb2, 0xe0, 0x80, 0xce, 0xb2, 0x52, 0x54, 0x47, 0xa1, 0x75, 0x37, 0x5e, 0xdd, 0x31,
0x5e, 0x5d, 0xbb, 0x5c, 0xb8, 0x75, 0x13, 0xce, 0x78, 0x28, 0x2f, 0xb7, 0x6c, 0xa8, 0x3a, 0x1d,
0x25, 0x97, 0x50, 0x2e, 0xfd, 0xdb, 0x94, 0x24, 0x70, 0x3a, 0x75, 0xda, 0x54, 0x5c, 0x00, 0xdc,
0x39, 0xb3, 0x45, 0xfb, 0x43, 0xfb, 0xda, 0xc9, 0x6e, 0x25, 0x17, 0x1f, 0x77, 0xe1, 0xf4, 0xc9,
0x13, 0x58, 0x09, 0x09, 0x0a, 0x34, 0x37, 0x65, 0x28, 0x9f, 0x42, 0xd1, 0xfc, 0xe6, 0xd1, 0xe8,
0xc0, 0xd8, 0x75, 0x07, 0xa4, 0x6f, 0xea, 0x45, 0x61, 0x21, 0x5c, 0x5b, 0x1b, 0x75, 0xe9, 0x61,
0xc8, 0x08, 0x7d, 0x9e, 0x0e, 0x3e, 0x0f, 0xf9, 0x41, 0xfb, 0xda, 0x5a, 0xe1, 0x74, 0x2a, 0xde,
0xb5, 0x53, 0x7d, 0x4d, 0x6d, 0x92, 0x09, 0x43, 0xe0, 0xe7, 0xdb, 0xf8, 0x37, 0xa9, 0x4b, 0xec,
0x4a, 0x24, 0x92, 0x2e, 0x2b, 0x0b, 0x33, 0xc2, 0xa5, 0xd9, 0xfe, 0x7b, 0x7c, 0x90, 0x1c, 0x62,
0x04, 0x41, 0xeb, 0xfe, 0x81, 0xb6, 0xe7, 0xcf, 0x84, 0x21, 0x4c, 0x8e, 0x95, 0xa5, 0xba, 0xf4,
0xe0, 0xdf, 0xf3, 0xb5, 0x6e, 0x30, 0xba, 0x85, 0x96, 0x58, 0xde, 0xd3, 0x4d, 0xe6, 0x28, 0x9d,
0x65, 0x25, 0x95, 0x27, 0x8e, 0x09, 0xf6, 0xfa, 0x70, 0x66, 0x12, 0x1d, 0x68, 0xf2, 0xa4, 0x22,
0x8f, 0x6d, 0x35, 0x17, 0x62, 0x06, 0xe4, 0xda, 0xec, 0x91, 0x3d, 0x14, 0x72, 0xb9, 0xdc, 0xd1,
0xde, 0x0e, 0xe7, 0xfa, 0xf1, 0xa3, 0x47, 0x10, 0x1e, 0x62, 0xa4, 0x40, 0xeb, 0x3e, 0x08, 0xe8,
0x28, 0x8b, 0xc2, 0x58, 0x59, 0x6a, 0x1b, 0x93, 0xff, 0x3b, 0x71, 0x65, 0xba, 0x45, 0x81, 0xdb,
0x2a, 0x38, 0x31, 0xc4, 0xc7, 0x0e, 0x35, 0x3e, 0xbc, 0xd7, 0x25, 0x2a, 0x1b, 0xea, 0xf2, 0x65,
0xbf, 0x54, 0xda, 0x5d, 0x57, 0xdb, 0x92, 0xc9, 0xad, 0x8e, 0x39, 0x2b, 0x0c, 0x0f, 0xe1, 0x79,
0x79, 0x64, 0xd8, 0xcf, 0x1d, 0xaa, 0xda, 0xd4, 0xe9, 0xe6, 0x25, 0xfb, 0xf6, 0xbc, 0xfe, 0xfd,
0x3a, 0x75, 0x5b, 0x5e, 0xba, 0xbb, 0xae, 0x54, 0xba, 0xae, 0xbc, 0x52, 0x6e, 0x6c, 0xd0, 0xba,
0x13, 0x20, 0xef, 0xe9, 0xa9, 0xbb, 0x14, 0x5f, 0x1a, 0xb8, 0x8f, 0x3b, 0x87, 0xa0, 0x87, 0xa3,
0x5e, 0x52, 0xa6, 0x9a, 0x72, 0x66, 0x59, 0x41, 0x6f, 0x1b, 0x84, 0xce, 0xb0, 0xb3, 0x4d, 0xb7,
0xb1, 0x06, 0x7d, 0x35, 0xfc, 0x8b, 0x30, 0x72, 0x28, 0x3f, 0x18, 0xd1, 0x5d, 0x53, 0xad, 0x83,
0xef, 0xe5, 0xeb, 0xed, 0x09, 0xae, 0x27, 0x3f, 0xf9, 0x47, 0x07, 0xc7, 0x32, 0x4c, 0x68, 0xdd,
0x3f, 0x85, 0x5c, 0xda, 0xd3, 0x70, 0x3f, 0x11, 0xda, 0xfb, 0x17, 0x1b, 0xd6, 0xa5, 0x5a, 0xe0,
0x47, 0x93, 0xda, 0x95, 0x24, 0xc6, 0xc4, 0x6c, 0x67, 0x27, 0x01, 0xd3, 0xff, 0x79, 0x04, 0xfb,
0xaf, 0x0b, 0xe7, 0xaf, 0x5c, 0xbe, 0xa4, 0xcb, 0xf2, 0xdb, 0xaf, 0x71, 0x24, 0x6b, 0x48, 0x25,
0xb1, 0x8b, 0xb7, 0xde, 0xa1, 0x75, 0xd7, 0x14, 0xc5, 0x1e, 0x7d, 0xcf, 0x0b, 0x2a, 0x4f, 0x47,
0x09, 0x43, 0x59, 0x3c, 0xef, 0x1d, 0x39, 0x2e, 0xce, 0xd0, 0xff, 0xc6, 0x5d, 0x3a, 0x24, 0x68,
0xbf, 0xcd, 0xcd, 0x9e, 0x2e, 0xb0, 0x7f, 0xb9, 0x71, 0x7d, 0x59, 0x30, 0xb3, 0xfc, 0x40, 0x58,
0xd3, 0xe3, 0x47, 0xbd, 0x6f, 0x9b, 0xf4, 0xfd, 0x55, 0x8c, 0x17, 0x5a, 0x77, 0x52, 0xf4, 0xf7,
0xf5, 0x49, 0xdf, 0xd4, 0x77, 0x08, 0xf8, 0x6d, 0x2f, 0x9e, 0xbd, 0xcb, 0xc9, 0x6a, 0xe6, 0x72,
0x5a, 0x9e, 0x66, 0xb4, 0x16, 0xe4, 0x75, 0xf0, 0x8a, 0x24, 0xd5, 0x55, 0x3a, 0xb8, 0x8e, 0x49,
0x33, 0x2c, 0xfe, 0x0f, 0x35, 0xf0, 0x0d, 0xe1, 0x1b, 0xb4, 0xe3, 0xaf, 0x00, 0x00, 0x00, 0x00,
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE tune_single_track_length_legend_xpm[1] = {{ png, sizeof( png ), "tune_single_track_length_legend_xpm" }};
//EOF

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -204,7 +204,8 @@ set( COMMON_SRCS
wildcards_and_files_ext.cpp wildcards_and_files_ext.cpp
worksheet.cpp worksheet.cpp
wxwineda.cpp wxwineda.cpp
wxunittext.cpp wx_unit_binder.cpp
wx_status_popup.cpp
xnode.cpp xnode.cpp
zoom.cpp zoom.cpp
) )

View File

@ -1,8 +1,8 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com * Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -225,7 +225,7 @@ bool EDA_ITEM::operator<( const EDA_ITEM& aItem ) const
return false; return false;
} }
#ifdef USE_EDA_ITEM_OP_EQ // see base_struct.h for explanations
EDA_ITEM& EDA_ITEM::operator=( const EDA_ITEM& aItem ) EDA_ITEM& EDA_ITEM::operator=( const EDA_ITEM& aItem )
{ {
if( &aItem != this ) if( &aItem != this )
@ -241,7 +241,7 @@ EDA_ITEM& EDA_ITEM::operator=( const EDA_ITEM& aItem )
return *this; return *this;
} }
#endif
const BOX2I EDA_ITEM::ViewBBox() const const BOX2I EDA_ITEM::ViewBBox() const
{ {

View File

@ -226,24 +226,26 @@ void EDA_BASE_FRAME::LoadSettings( wxConfigBase* aCfg )
{ {
int maximized = 0; int maximized = 0;
wxString text = m_FrameName + wxT( "Pos_x" ); wxString baseCfgName = GetName();
wxString text = baseCfgName + wxT( "Pos_x" );
aCfg->Read( text, &m_FramePos.x ); aCfg->Read( text, &m_FramePos.x );
text = m_FrameName + wxT( "Pos_y" ); text = baseCfgName + wxT( "Pos_y" );
aCfg->Read( text, &m_FramePos.y ); aCfg->Read( text, &m_FramePos.y );
text = m_FrameName + wxT( "Size_x" ); text = baseCfgName + wxT( "Size_x" );
aCfg->Read( text, &m_FrameSize.x, 600 ); aCfg->Read( text, &m_FrameSize.x, 600 );
text = m_FrameName + wxT( "Size_y" ); text = baseCfgName + wxT( "Size_y" );
aCfg->Read( text, &m_FrameSize.y, 400 ); aCfg->Read( text, &m_FrameSize.y, 400 );
text = m_FrameName + wxT( "Maximized" ); text = baseCfgName + wxT( "Maximized" );
aCfg->Read( text, &maximized, 0 ); aCfg->Read( text, &maximized, 0 );
if( m_hasAutoSave ) if( m_hasAutoSave )
{ {
text = m_FrameName + entryAutoSaveInterval; text = baseCfgName + entryAutoSaveInterval;
aCfg->Read( text, &m_autoSaveInterval, DEFAULT_AUTO_SAVE_INTERVAL ); aCfg->Read( text, &m_autoSaveInterval, DEFAULT_AUTO_SAVE_INTERVAL );
} }
@ -261,7 +263,7 @@ void EDA_BASE_FRAME::LoadSettings( wxConfigBase* aCfg )
if( maximized ) if( maximized )
Maximize(); Maximize();
aCfg->Read( m_FrameName + entryPerspective, &m_perspective ); aCfg->Read( baseCfgName + entryPerspective, &m_perspective );
} }
@ -272,27 +274,29 @@ void EDA_BASE_FRAME::SaveSettings( wxConfigBase* aCfg )
if( IsIconized() ) if( IsIconized() )
return; return;
wxString baseCfgName = GetName();
m_FrameSize = GetSize(); m_FrameSize = GetSize();
m_FramePos = GetPosition(); m_FramePos = GetPosition();
text = m_FrameName + wxT( "Pos_x" ); text = baseCfgName + wxT( "Pos_x" );
aCfg->Write( text, (long) m_FramePos.x ); aCfg->Write( text, (long) m_FramePos.x );
text = m_FrameName + wxT( "Pos_y" ); text = baseCfgName + wxT( "Pos_y" );
aCfg->Write( text, (long) m_FramePos.y ); aCfg->Write( text, (long) m_FramePos.y );
text = m_FrameName + wxT( "Size_x" ); text = baseCfgName + wxT( "Size_x" );
aCfg->Write( text, (long) m_FrameSize.x ); aCfg->Write( text, (long) m_FrameSize.x );
text = m_FrameName + wxT( "Size_y" ); text = baseCfgName + wxT( "Size_y" );
aCfg->Write( text, (long) m_FrameSize.y ); aCfg->Write( text, (long) m_FrameSize.y );
text = m_FrameName + wxT( "Maximized" ); text = baseCfgName + wxT( "Maximized" );
aCfg->Write( text, IsMaximized() ); aCfg->Write( text, IsMaximized() );
if( m_hasAutoSave ) if( m_hasAutoSave )
{ {
text = m_FrameName + entryAutoSaveInterval; text = baseCfgName + entryAutoSaveInterval;
aCfg->Write( text, m_autoSaveInterval ); aCfg->Write( text, m_autoSaveInterval );
} }
@ -303,7 +307,7 @@ void EDA_BASE_FRAME::SaveSettings( wxConfigBase* aCfg )
// printf( "perspective(%s): %s\n", // printf( "perspective(%s): %s\n",
// TO_UTF8( m_FrameName + entryPerspective ), TO_UTF8( perspective ) ); // TO_UTF8( m_FrameName + entryPerspective ), TO_UTF8( perspective ) );
aCfg->Write( m_FrameName + entryPerspective, perspective ); aCfg->Write( baseCfgName + entryPerspective, perspective );
} }

View File

@ -251,7 +251,7 @@ void HOTKEY_SECTION_PAGE::Restore()
} }
void InstallHotkeyFrame( EDA_DRAW_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys ) void InstallHotkeyFrame( EDA_BASE_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys )
{ {
HOTKEYS_EDITOR_DIALOG dialog( aParent, aHotkeys ); HOTKEYS_EDITOR_DIALOG dialog( aParent, aHotkeys );
@ -264,7 +264,7 @@ void InstallHotkeyFrame( EDA_DRAW_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys )
} }
HOTKEYS_EDITOR_DIALOG::HOTKEYS_EDITOR_DIALOG( EDA_DRAW_FRAME* aParent, HOTKEYS_EDITOR_DIALOG::HOTKEYS_EDITOR_DIALOG( EDA_BASE_FRAME* aParent,
EDA_HOTKEY_CONFIG* aHotkeys ) : EDA_HOTKEY_CONFIG* aHotkeys ) :
HOTKEYS_EDITOR_DIALOG_BASE( aParent ), HOTKEYS_EDITOR_DIALOG_BASE( aParent ),
m_parent( aParent ), m_parent( aParent ),

View File

@ -642,17 +642,19 @@ void EDA_DRAW_FRAME::LoadSettings( wxConfigBase* aCfg )
{ {
EDA_BASE_FRAME::LoadSettings( aCfg ); EDA_BASE_FRAME::LoadSettings( aCfg );
aCfg->Read( m_FrameName + CursorShapeEntryKeyword, &m_cursorShape, ( long )0 ); wxString baseCfgName = GetName();
aCfg->Read( baseCfgName + CursorShapeEntryKeyword, &m_cursorShape, ( long )0 );
bool btmp; bool btmp;
if( aCfg->Read( m_FrameName + ShowGridEntryKeyword, &btmp ) ) if( aCfg->Read( baseCfgName + ShowGridEntryKeyword, &btmp ) )
SetGridVisibility( btmp ); SetGridVisibility( btmp );
int itmp; int itmp;
if( aCfg->Read( m_FrameName + GridColorEntryKeyword, &itmp ) ) if( aCfg->Read( baseCfgName + GridColorEntryKeyword, &itmp ) )
SetGridColor( ColorFromInt( itmp ) ); SetGridColor( ColorFromInt( itmp ) );
aCfg->Read( m_FrameName + LastGridSizeIdKeyword, &m_LastGridSizeId, 0L ); aCfg->Read( baseCfgName + LastGridSizeIdKeyword, &m_LastGridSizeId, 0L );
// m_LastGridSizeId is an offset, expected to be >= 0 // m_LastGridSizeId is an offset, expected to be >= 0
if( m_LastGridSizeId < 0 ) if( m_LastGridSizeId < 0 )
@ -664,10 +666,12 @@ void EDA_DRAW_FRAME::SaveSettings( wxConfigBase* aCfg )
{ {
EDA_BASE_FRAME::SaveSettings( aCfg ); EDA_BASE_FRAME::SaveSettings( aCfg );
aCfg->Write( m_FrameName + CursorShapeEntryKeyword, m_cursorShape ); wxString baseCfgName = GetName();
aCfg->Write( m_FrameName + ShowGridEntryKeyword, IsGridVisible() );
aCfg->Write( m_FrameName + GridColorEntryKeyword, ( long ) GetGridColor() ); aCfg->Write( baseCfgName + CursorShapeEntryKeyword, m_cursorShape );
aCfg->Write( m_FrameName + LastGridSizeIdKeyword, ( long ) m_LastGridSizeId ); aCfg->Write( baseCfgName + ShowGridEntryKeyword, IsGridVisible() );
aCfg->Write( baseCfgName + GridColorEntryKeyword, ( long ) GetGridColor() );
aCfg->Write( baseCfgName + LastGridSizeIdKeyword, ( long ) m_LastGridSizeId );
} }

View File

@ -227,15 +227,18 @@ static void DrawGraphicTextPline( EDA_RECT* aClipBox,
coord[ik + 1].x, coord[ik + 1].y ); coord[ik + 1].x, coord[ik + 1].y );
} }
} }
else if( aSketchMode ) else if( aDC )
{ {
for( int ik = 0; ik < (point_count - 1); ik++ ) if( aSketchMode )
GRCSegm( aClipBox, aDC, coord[ik].x, coord[ik].y, {
coord[ik + 1].x, coord[ik + 1].y, aWidth, aColor ); for( int ik = 0; ik < (point_count - 1); ik++ )
GRCSegm( aClipBox, aDC, coord[ik].x, coord[ik].y,
coord[ik + 1].x, coord[ik + 1].y, aWidth, aColor );
}
else
GRPoly( aClipBox, aDC, point_count, coord, 0,
aWidth, aColor, aColor );
} }
else
GRPoly( aClipBox, aDC, point_count, coord, 0,
aWidth, aColor, aColor );
} }

View File

@ -60,6 +60,7 @@ bool SEG::PointCloserThan( const VECTOR2I& aP, int aDist ) const
if( num > ( dist_sq + 100 ) ) if( num > ( dist_sq + 100 ) )
return false; return false;
else if( num < ( dist_sq - 100 ) ) else if( num < ( dist_sq - 100 ) )
return true; return true;
} }

View File

@ -419,7 +419,7 @@ int KeyCodeFromKeyName( const wxString& keyname )
* Displays the current hotkey list * Displays the current hotkey list
* aList = a EDA_HOTKEY_CONFIG list(Null terminated) * aList = a EDA_HOTKEY_CONFIG list(Null terminated)
*/ */
void DisplayHotkeyList( EDA_DRAW_FRAME* aFrame, struct EDA_HOTKEY_CONFIG* aDescList ) void DisplayHotkeyList( EDA_BASE_FRAME* aFrame, struct EDA_HOTKEY_CONFIG* aDescList )
{ {
wxString keyname; wxString keyname;
EDA_HOTKEY** list; EDA_HOTKEY** list;
@ -534,7 +534,9 @@ int EDA_BASE_FRAME::WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList,
} }
else else
{ {
wxConfigBase* config = GetNewConfig( m_FrameName ); wxFileName fn( GetName() );
fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
wxConfigBase* config = GetNewConfig( fn.GetFullPath() );
config->Write( HOTKEYS_CONFIG_KEY, msg ); config->Write( HOTKEYS_CONFIG_KEY, msg );
delete config; delete config;
} }
@ -546,7 +548,10 @@ int EDA_BASE_FRAME::WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList,
int EDA_BASE_FRAME::ReadHotkeyConfigFile( const wxString& aFilename, int EDA_BASE_FRAME::ReadHotkeyConfigFile( const wxString& aFilename,
struct EDA_HOTKEY_CONFIG* aDescList ) struct EDA_HOTKEY_CONFIG* aDescList )
{ {
wxFile cfgfile( aFilename ); wxFileName fn( aFilename );
fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
wxFile cfgfile( fn.GetFullPath() );
if( !cfgfile.IsOpened() ) // There is a problem to open file if( !cfgfile.IsOpened() ) // There is a problem to open file
return 0; return 0;
@ -574,7 +579,10 @@ int EDA_BASE_FRAME::ReadHotkeyConfigFile( const wxString& aFilename,
void ReadHotkeyConfig( const wxString& Appname, struct EDA_HOTKEY_CONFIG* aDescList ) void ReadHotkeyConfig( const wxString& Appname, struct EDA_HOTKEY_CONFIG* aDescList )
{ {
wxConfigBase* config = GetNewConfig( Appname ); wxFileName fn( Appname );
fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
wxConfigBase* config = GetNewConfig( fn.GetFullPath() );
if( !config->HasEntry( HOTKEYS_CONFIG_KEY ) ) if( !config->HasEntry( HOTKEYS_CONFIG_KEY ) )
{ {
@ -596,7 +604,7 @@ void ReadHotkeyConfig( const wxString& Appname, struct EDA_HOTKEY_CONFIG* aDescL
*/ */
int EDA_BASE_FRAME::ReadHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList ) int EDA_BASE_FRAME::ReadHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList )
{ {
::ReadHotkeyConfig( m_FrameName, aDescList ); ::ReadHotkeyConfig( GetName(), aDescList );
return 1; return 1;
} }
@ -677,7 +685,8 @@ void ParseHotkeyConfig( const wxString& data,
} }
void EDA_BASE_FRAME::ImportHotkeyConfigFromFile( EDA_HOTKEY_CONFIG* aDescList ) void EDA_BASE_FRAME::ImportHotkeyConfigFromFile( EDA_HOTKEY_CONFIG* aDescList,
const wxString& aDefaultShortname )
{ {
wxString ext = DEFAULT_HOTKEY_FILENAME_EXT; wxString ext = DEFAULT_HOTKEY_FILENAME_EXT;
wxString mask = wxT( "*." ) + ext; wxString mask = wxT( "*." ) + ext;
@ -687,12 +696,12 @@ void EDA_BASE_FRAME::ImportHotkeyConfigFromFile( EDA_HOTKEY_CONFIG* aDescList )
#else #else
wxString path = wxGetCwd(); wxString path = wxGetCwd();
#endif #endif
wxFileName fn( aDefaultShortname );
fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
wxString filename = Kiface().Name() + wxT( '.' ) + ext; wxString filename = EDA_FileSelector( _( "Read Hotkey Configuration File:" ),
filename = EDA_FileSelector( _( "Read Hotkey Configuration File:" ),
path, path,
filename, fn.GetFullPath(),
ext, ext,
mask, mask,
this, this,
@ -706,7 +715,8 @@ void EDA_BASE_FRAME::ImportHotkeyConfigFromFile( EDA_HOTKEY_CONFIG* aDescList )
} }
void EDA_BASE_FRAME::ExportHotkeyConfigToFile( EDA_HOTKEY_CONFIG* aDescList ) void EDA_BASE_FRAME::ExportHotkeyConfigToFile( EDA_HOTKEY_CONFIG* aDescList,
const wxString& aDefaultShortname )
{ {
wxString ext = DEFAULT_HOTKEY_FILENAME_EXT; wxString ext = DEFAULT_HOTKEY_FILENAME_EXT;
wxString mask = wxT( "*." ) + ext; wxString mask = wxT( "*." ) + ext;
@ -716,12 +726,12 @@ void EDA_BASE_FRAME::ExportHotkeyConfigToFile( EDA_HOTKEY_CONFIG* aDescList )
#else #else
wxString path = wxGetCwd(); wxString path = wxGetCwd();
#endif #endif
wxFileName fn( aDefaultShortname );
fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
wxString filename = Kiface().Name() + wxT( "." ) + ext; wxString filename = EDA_FileSelector( _( "Write Hotkey Configuration File:" ),
filename = EDA_FileSelector( _( "Write Hotkey Configuration File:" ),
path, path,
filename, fn.GetFullPath(),
ext, ext,
mask, mask,
this, this,

View File

@ -48,6 +48,7 @@ KIWAY_PLAYER::KIWAY_PLAYER( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType
m_modal_loop( 0 ), m_modal_resultant_parent( 0 ) m_modal_loop( 0 ), m_modal_resultant_parent( 0 )
{ {
// DBG( printf("KIWAY_EXPRESS::wxEVENT_ID:%d\n", KIWAY_EXPRESS::wxEVENT_ID );) // DBG( printf("KIWAY_EXPRESS::wxEVENT_ID:%d\n", KIWAY_EXPRESS::wxEVENT_ID );)
m_modal_ret_val = 0;
} }

View File

@ -564,7 +564,7 @@ struct VIEW::drawItem
bool operator()( VIEW_ITEM* aItem ) bool operator()( VIEW_ITEM* aItem )
{ {
// Conditions that have te be fulfilled for an item to be drawn // Conditions that have te be fulfilled for an item to be drawn
bool drawCondition = aItem->ViewIsVisible() && bool drawCondition = aItem->isRenderable() &&
aItem->ViewGetLOD( layer ) < view->m_scale; aItem->ViewGetLOD( layer ) < view->m_scale;
if( !drawCondition ) if( !drawCondition )
return true; return true;

View File

@ -29,17 +29,6 @@
using namespace KIGFX; using namespace KIGFX;
void VIEW_ITEM::ViewSetVisible( bool aIsVisible )
{
// update only if the visibility has really changed
if( m_visible != aIsVisible )
{
m_visible = aIsVisible;
ViewUpdate( APPEARANCE );
}
}
void VIEW_ITEM::ViewRelease() void VIEW_ITEM::ViewRelease()
{ {
if( m_view && m_view->IsDynamic() ) if( m_view && m_view->IsDynamic() )

View File

@ -0,0 +1,65 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014-2015 CERN
* Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* Transient mouse following popup window implementation.
*/
#include <wx_status_popup.h>
#include <wxPcbStruct.h>
WX_STATUS_POPUP::WX_STATUS_POPUP( PCB_EDIT_FRAME* aParent ) :
wxPopupWindow( aParent )
{
m_panel = new wxPanel( this, wxID_ANY );
m_panel->SetBackgroundColour( *wxLIGHT_GREY );
m_topSizer = new wxBoxSizer( wxVERTICAL );
m_panel->SetSizer( m_topSizer );
}
void WX_STATUS_POPUP::updateSize()
{
m_topSizer->Fit( m_panel );
SetClientSize( m_panel->GetSize() );
}
WX_STATUS_POPUP::~WX_STATUS_POPUP()
{
}
void WX_STATUS_POPUP::Popup( wxWindow* )
{
Show( true );
Raise();
}
void WX_STATUS_POPUP::Move( const wxPoint& aWhere )
{
SetPosition ( aWhere );
}

76
common/wx_unit_binder.cpp Normal file
View File

@ -0,0 +1,76 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014-2015 CERN
* Author: Maciej Suminski <maciej.suminski@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <wx/stattext.h>
#include <wx/sizer.h>
#include <wx/textctrl.h>
#include <limits>
#include <base_units.h>
#if wxCHECK_VERSION( 2, 9, 0 )
#include <wx/valnum.h>
#endif
#include <boost/optional.hpp>
#include "wx_unit_binder.h"
WX_UNIT_BINDER::WX_UNIT_BINDER( wxWindow* aParent, wxTextCtrl* aTextInput, wxStaticText* aUnitLabel, wxSpinButton* aSpinButton )
{
// Use the currently selected units
m_units = g_UserUnit;
m_textCtrl = aTextInput;
m_textCtrl->SetValue( wxT( "0" ) );
m_unitLabel = aUnitLabel;
m_unitLabel->SetLabel( GetAbbreviatedUnitsLabel( m_units ) );
}
WX_UNIT_BINDER::~WX_UNIT_BINDER()
{
}
void WX_UNIT_BINDER::SetValue( int aValue )
{
wxString s = StringFromValue( m_units, aValue, false );
m_textCtrl->SetValue( s );
m_unitLabel->SetLabel( GetAbbreviatedUnitsLabel( m_units ) );
}
int WX_UNIT_BINDER::GetValue() const
{
wxString s = m_textCtrl->GetValue();
return ValueFromString( m_units, s );
}
void WX_UNIT_BINDER::Enable( bool aEnable )
{
m_textCtrl->Enable( aEnable );
m_unitLabel->Enable( aEnable );
}

View File

@ -76,7 +76,6 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( KIWAY* aKiway, CVPCB_MAINFRA
wxDefaultPosition, wxDefaultSize, wxDefaultPosition, wxDefaultSize,
KICAD_DEFAULT_DRAWFRAME_STYLE, FOOTPRINTVIEWER_FRAME_NAME ) KICAD_DEFAULT_DRAWFRAME_STYLE, FOOTPRINTVIEWER_FRAME_NAME )
{ {
m_FrameName = FOOTPRINTVIEWER_FRAME_NAME;
m_showAxis = true; // true to draw axis. m_showAxis = true; // true to draw axis.
// Give an icon // Give an icon

View File

@ -104,7 +104,6 @@ CVPCB_MAINFRAME::CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent ) :
KIWAY_PLAYER( aKiway, aParent, FRAME_CVPCB, wxT( "CvPCB" ), wxDefaultPosition, KIWAY_PLAYER( aKiway, aParent, FRAME_CVPCB, wxT( "CvPCB" ), wxDefaultPosition,
wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, CVPCB_MAINFRAME_NAME ) wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, CVPCB_MAINFRAME_NAME )
{ {
m_FrameName = CVPCB_MAINFRAME_NAME;
m_compListBox = NULL; m_compListBox = NULL;
m_footprintListBox = NULL; m_footprintListBox = NULL;
m_libListBox = NULL; m_libListBox = NULL;

View File

@ -258,7 +258,7 @@ void DIALOG_EESCHEMA_OPTIONS::OnDeleteButtonClick( wxCommandEvent& event )
// If the selectedField is still not in the templateField range now, // If the selectedField is still not in the templateField range now,
// make sure we stay in range and when there are no fields present // make sure we stay in range and when there are no fields present
// move to -1 // move to -1
if( selectedField >= templateFields.size() ) if( selectedField >= int( templateFields.size() ) )
selectedField = templateFields.size() - 1; selectedField = templateFields.size() - 1;
// Update the display to reflect the new data // Update the display to reflect the new data

View File

@ -44,13 +44,13 @@ protected:
* edit panel * edit panel
* selectedField = -1 when no valid item selected * selectedField = -1 when no valid item selected
*/ */
size_t selectedField; int selectedField;
/** @brief return true if aFieldId is a valid field selection /** @brief return true if aFieldId is a valid field selection
*/ */
bool fieldSelectionValid( size_t aFieldId ) bool fieldSelectionValid( int aFieldId )
{ {
return ( aFieldId >= 0 ) && ( aFieldId < templateFields.size() ); return ( aFieldId >= 0 ) && ( aFieldId < int( templateFields.size() ) );
} }
/** /**

View File

@ -116,7 +116,8 @@ SCH_TEXT* SCH_EDIT_FRAME::CreateNewText( wxDC* aDC, int aType )
lastTextItalic = textItem->IsItalic(); lastTextItalic = textItem->IsItalic();
lastTextOrientation = textItem->GetOrientation(); lastTextOrientation = textItem->GetOrientation();
if( (aType == SCH_GLOBAL_LABEL_T) || (aType == SCH_HIERARCHICAL_LABEL_T) ) if( ( textItem->Type() == SCH_GLOBAL_LABEL_T ) ||
( textItem->Type() == SCH_HIERARCHICAL_LABEL_T ) )
{ {
lastGlobalLabelShape = textItem->GetShape(); lastGlobalLabelShape = textItem->GetShape();
} }

View File

@ -229,7 +229,7 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
// Must be called before creating the main frame in order to // Must be called before creating the main frame in order to
// display the real hotkeys in menus or tool tips // display the real hotkeys in menus or tool tips
ReadHotkeyConfig( wxT("SchematicFrame"), g_Eeschema_Hokeys_Descr ); ReadHotkeyConfig( SCH_EDIT_FRAME_NAME, g_Eeschema_Hokeys_Descr );
wxConfigLoadSetups( KifaceSettings(), cfg_params() ); wxConfigLoadSetups( KifaceSettings(), cfg_params() );

View File

@ -177,11 +177,11 @@ void LIB_EDIT_FRAME::Process_Config( wxCommandEvent& event )
break; break;
case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG: case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG:
ExportHotkeyConfigToFile( g_Eeschema_Hokeys_Descr ); ExportHotkeyConfigToFile( g_Eeschema_Hokeys_Descr, wxT( "eeschema" ) );
break; break;
case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG: case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG:
ImportHotkeyConfigFromFile( g_Eeschema_Hokeys_Descr ); ImportHotkeyConfigFromFile( g_Eeschema_Hokeys_Descr, wxT( "eeschema" ) );
break; break;
case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST: case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST:
@ -282,11 +282,11 @@ void SCH_EDIT_FRAME::Process_Config( wxCommandEvent& event )
// Hotkey IDs // Hotkey IDs
case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG: case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG:
ExportHotkeyConfigToFile( g_Eeschema_Hokeys_Descr ); ExportHotkeyConfigToFile( g_Eeschema_Hokeys_Descr, wxT( "eeschema" ) );
break; break;
case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG: case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG:
ImportHotkeyConfigFromFile( g_Eeschema_Hokeys_Descr ); ImportHotkeyConfigFromFile( g_Eeschema_Hokeys_Descr, wxT( "eeschema" ) );
break; break;
case ID_PREFERENCES_HOTKEY_SHOW_EDITOR: case ID_PREFERENCES_HOTKEY_SHOW_EDITOR:

View File

@ -296,12 +296,12 @@ void SCH_EDIT_FRAME::OnSelectUnit( wxCommandEvent& aEvent )
if( LIB_PART* part = Prj().SchLibs()->FindLibPart( component->GetPartName() ) ) if( LIB_PART* part = Prj().SchLibs()->FindLibPart( component->GetPartName() ) )
{ {
wxCHECK_RET( (unit >= 1) && (unit <= part->GetUnitCount()), int unitCount = part->GetUnitCount();
wxCHECK_RET( (unit >= 1) && (unit <= unitCount),
wxString::Format( wxT( "Cannot select unit %d from component " ), unit ) + wxString::Format( wxT( "Cannot select unit %d from component " ), unit ) +
part->GetName() ); part->GetName() );
int unitCount = part->GetUnitCount();
if( unitCount <= 1 || component->GetUnit() == unit ) if( unitCount <= 1 || component->GetUnit() == unit )
return; return;

View File

@ -184,7 +184,6 @@ LIB_EDIT_FRAME::LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
{ {
wxASSERT( aParent ); wxASSERT( aParent );
m_FrameName = GetLibEditFrameName();
m_showAxis = true; // true to draw axis m_showAxis = true; // true to draw axis
m_configPath = wxT( "LibraryEditor" ); m_configPath = wxT( "LibraryEditor" );
SetShowDeMorgan( false ); SetShowDeMorgan( false );

View File

@ -115,6 +115,7 @@ SCH_COMPONENT::SCH_COMPONENT( const wxPoint& aPos, SCH_ITEM* aParent ) :
SCH_ITEM( aParent, SCH_COMPONENT_T ) SCH_ITEM( aParent, SCH_COMPONENT_T )
{ {
Init( aPos ); Init( aPos );
m_currentSheetPath = NULL;
} }
@ -128,6 +129,7 @@ SCH_COMPONENT::SCH_COMPONENT( LIB_PART& aPart, SCH_SHEET_PATH* sheet, int unit,
m_convert = convert; m_convert = convert;
m_part_name = aPart.GetName(); m_part_name = aPart.GetName();
m_part = aPart.SharedPtr(); m_part = aPart.SharedPtr();
m_currentSheetPath = NULL;
SetTimeStamp( GetNewTimeStamp() ); SetTimeStamp( GetNewTimeStamp() );

View File

@ -301,14 +301,12 @@ BEGIN_EVENT_TABLE( SCH_EDIT_FRAME, EDA_DRAW_FRAME )
END_EVENT_TABLE() END_EVENT_TABLE()
#define SCH_EDIT_FRAME_NAME wxT( "SchematicFrame" )
SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ): SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ):
SCH_BASE_FRAME( aKiway, aParent, FRAME_SCH, wxT( "Eeschema" ), SCH_BASE_FRAME( aKiway, aParent, FRAME_SCH, wxT( "Eeschema" ),
wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, SCH_EDIT_FRAME_NAME ), wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, SCH_EDIT_FRAME_NAME ),
m_item_to_repeat( 0 ) m_item_to_repeat( 0 )
{ {
m_FrameName = SCH_EDIT_FRAME_NAME;
m_showAxis = false; // true to show axis m_showAxis = false; // true to show axis
m_showBorderAndTitleBlock = true; // true to show sheet references m_showBorderAndTitleBlock = true; // true to show sheet references
m_CurrentSheet = new SCH_SHEET_PATH; m_CurrentSheet = new SCH_SHEET_PATH;

View File

@ -30,6 +30,7 @@
#ifndef WX_EESCHEMA_STRUCT_H #ifndef WX_EESCHEMA_STRUCT_H
#define WX_EESCHEMA_STRUCT_H #define WX_EESCHEMA_STRUCT_H
#include <sch_base_frame.h> #include <sch_base_frame.h>
#include <config_params.h> #include <config_params.h>
#include <class_undoredo_container.h> #include <class_undoredo_container.h>
@ -106,6 +107,8 @@ enum SCH_SEARCH_T {
}; };
#define SCH_EDIT_FRAME_NAME wxT( "SchematicFrame" )
/** /**
* Schematic editor (Eeschema) main window. * Schematic editor (Eeschema) main window.
*/ */

View File

@ -92,7 +92,6 @@ LIB_VIEW_FRAME::LIB_VIEW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
if( aFrameType == FRAME_SCH_VIEWER_MODAL ) if( aFrameType == FRAME_SCH_VIEWER_MODAL )
SetModal( true ); SetModal( true );
m_FrameName = GetLibViewerFrameName();
m_configPath = wxT( "LibraryViewer" ); m_configPath = wxT( "LibraryViewer" );
// Give an icon // Give an icon

View File

@ -140,7 +140,7 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
// Must be called before creating the main frame in order to // Must be called before creating the main frame in order to
// display the real hotkeys in menus or tool tips // display the real hotkeys in menus or tool tips
ReadHotkeyConfig( wxT("GerberFrame"), s_Gerbview_Hokeys_Descr ); ReadHotkeyConfig( GERBVIEW_FRAME_NAME, s_Gerbview_Hokeys_Descr );
return true; return true;
} }

View File

@ -55,11 +55,11 @@ void GERBVIEW_FRAME::Process_Config( wxCommandEvent& event )
{ {
// Hotkey IDs // Hotkey IDs
case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG: case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG:
ExportHotkeyConfigToFile( s_Gerbview_Hokeys_Descr ); ExportHotkeyConfigToFile( s_Gerbview_Hokeys_Descr, wxT( "gerbview" ) );
break; break;
case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG: case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG:
ImportHotkeyConfigFromFile( s_Gerbview_Hokeys_Descr ); ImportHotkeyConfigFromFile( s_Gerbview_Hokeys_Descr, wxT( "gerbview" ) );
break; break;
case ID_PREFERENCES_HOTKEY_SHOW_EDITOR: case ID_PREFERENCES_HOTKEY_SHOW_EDITOR:

View File

@ -62,8 +62,6 @@ static const wxString cfgShowBorderAndTitleBlock( wxT( "ShowBorderAndTitleBloc
/* class GERBVIEW_FRAME for GerbView */ /* class GERBVIEW_FRAME for GerbView */
/*************************************/ /*************************************/
#define GERBVIEW_FRAME_NAME wxT( "GerberFrame" )
GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent ): GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent ):
EDA_DRAW_FRAME( aKiway, aParent, FRAME_GERBER, wxT( "GerbView" ), EDA_DRAW_FRAME( aKiway, aParent, FRAME_GERBER, wxT( "GerbView" ),
wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, GERBVIEW_FRAME_NAME ) wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, GERBVIEW_FRAME_NAME )
@ -78,7 +76,6 @@ GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent ):
PAGE_INFO pageInfo( wxT( "GERBER" ) ); PAGE_INFO pageInfo( wxT( "GERBER" ) );
SetPageSettings( pageInfo ); SetPageSettings( pageInfo );
m_FrameName = GERBVIEW_FRAME_NAME;
m_show_layer_manager_tools = true; m_show_layer_manager_tools = true;
m_showAxis = true; // true to show X and Y axis on screen m_showAxis = true; // true to show X and Y axis on screen

View File

@ -81,6 +81,8 @@ public:
* is the main window used in GerbView. * is the main window used in GerbView.
*/ */
#define GERBVIEW_FRAME_NAME wxT( "GerberFrame" )
class GERBVIEW_FRAME : public EDA_DRAW_FRAME // PCB_BASE_FRAME class GERBVIEW_FRAME : public EDA_DRAW_FRAME // PCB_BASE_FRAME
{ {
GBR_LAYOUT* m_gerberLayout; GBR_LAYOUT* m_gerberLayout;

View File

@ -146,6 +146,9 @@ public:
#define HIGHLIGHTED (1 << 25) ///< item is drawn in normal colors, when the rest is darkened #define HIGHLIGHTED (1 << 25) ///< item is drawn in normal colors, when the rest is darkened
#define BRIGHTENED (1 << 26) ///< item is drawn with a bright contour #define BRIGHTENED (1 << 26) ///< item is drawn with a bright contour
#define DP_COUPLED (1 << 27) ///< item is coupled with another item making a differential pair
///< (applies to segments only)
#define EDA_ITEM_ALL_FLAGS -1 #define EDA_ITEM_ALL_FLAGS -1
typedef unsigned STATUS_FLAGS; typedef unsigned STATUS_FLAGS;
@ -488,6 +491,7 @@ public:
*/ */
static bool Sort( const EDA_ITEM* aLeft, const EDA_ITEM* aRight ) { return *aLeft < *aRight; } static bool Sort( const EDA_ITEM* aLeft, const EDA_ITEM* aRight ) { return *aLeft < *aRight; }
#if 0
/** /**
* Operator assignment * Operator assignment
* is used to assign the members of \a aItem to another object. * is used to assign the members of \a aItem to another object.
@ -496,6 +500,8 @@ public:
* as there is a known issue with wxString buffers. * as there is a known issue with wxString buffers.
*/ */
virtual EDA_ITEM& operator=( const EDA_ITEM& aItem ); virtual EDA_ITEM& operator=( const EDA_ITEM& aItem );
#define USE_EDA_ITEM_OP_EQ
#endif
/// @copydoc VIEW_ITEM::ViewBBox() /// @copydoc VIEW_ITEM::ViewBBox()
virtual const BOX2I ViewBBox() const; virtual const BOX2I ViewBBox() const;

View File

@ -546,5 +546,8 @@ EXTERN_BITMAP( zoom_out_xpm )
EXTERN_BITMAP( zoom_page_xpm ) EXTERN_BITMAP( zoom_page_xpm )
EXTERN_BITMAP( zoom_selection_xpm ) EXTERN_BITMAP( zoom_selection_xpm )
EXTERN_BITMAP( zoom_xpm ) EXTERN_BITMAP( zoom_xpm )
EXTERN_BITMAP( tune_diff_pair_length_legend_xpm )
EXTERN_BITMAP( tune_diff_pair_skew_legend_xpm )
EXTERN_BITMAP( tune_single_track_length_legend_xpm )
#endif // BITMAPS_H_ #endif // BITMAPS_H_

View File

@ -31,6 +31,23 @@
#include <class_netclass.h> #include <class_netclass.h>
#include <config_params.h> #include <config_params.h>
// Some default values for the board editor and the fp editor (given in mm)
#define DEFAULT_TEXT_MODULE_SIZE 1.0
#define DEFAULT_GR_MODULE_THICKNESS 0.15 // given in mm
// Board thickness, mainly for 3D view:
#define DEFAULT_BOARD_THICKNESS_MM 1.6
// Default values for some board items (given in mm)
#define DEFAULT_TEXT_PCB_SIZE 1.5
#define DEFAULT_TEXT_PCB_THICKNESS 0.3
#define DEFAULT_PCB_EDGE_THICKNESS 0.15
#define DEFAULT_GRAPHIC_THICKNESS 0.2
#define DEFAULT_SOLDERMASK_CLEARANCE 0.2
#define DEFAULT_SOLDERMASK_MIN_WIDTH Millimeter2iu( 0.0 )
/** /**
* Struct VIA_DIMENSION * Struct VIA_DIMENSION
* is a small helper container to handle a stock of specific vias each with * is a small helper container to handle a stock of specific vias each with

View File

@ -129,6 +129,23 @@ public:
m_List.erase( m_List.begin() + aIndex ); m_List.erase( m_List.begin() + aIndex );
} }
/**
* Function Remove
* removes the item aItem (if exists in the collector).
* @param aItem the item to be removed.
*/
void Remove( const EDA_ITEM* aItem )
{
for( size_t i = 0; i < m_List.size(); i++ )
{
if( m_List[i] == aItem )
{
m_List.erase( m_List.begin() + i);
return;
}
}
}
/** /**
* Function operator[int] * Function operator[int]
* is used for read only access and returns the object at \a aIndex. * is used for read only access and returns the object at \a aIndex.
@ -223,6 +240,22 @@ public:
else else
return false; return false;
} }
/**
* Function CountType
* counts the number of items matching aType
* @param aType type we are interested in
* @return number of occurences
*/
int CountType( KICAD_T aType )
{
int cnt = 0;
for( size_t i = 0; i < m_List.size(); i++ )
{
if( m_List[i]->Type() == aType )
cnt++;
}
return cnt;
}
/** /**
* Function Collect * Function Collect

View File

@ -198,13 +198,13 @@ public:
class HOTKEYS_EDITOR_DIALOG : public HOTKEYS_EDITOR_DIALOG_BASE class HOTKEYS_EDITOR_DIALOG : public HOTKEYS_EDITOR_DIALOG_BASE
{ {
protected: protected:
EDA_DRAW_FRAME* m_parent; EDA_BASE_FRAME* m_parent;
struct EDA_HOTKEY_CONFIG* m_hotkeys; struct EDA_HOTKEY_CONFIG* m_hotkeys;
std::vector<HOTKEY_SECTION_PAGE*> m_hotkeySectionPages; std::vector<HOTKEY_SECTION_PAGE*> m_hotkeySectionPages;
public: public:
HOTKEYS_EDITOR_DIALOG( EDA_DRAW_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys ); HOTKEYS_EDITOR_DIALOG( EDA_BASE_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys );
~HOTKEYS_EDITOR_DIALOG() {}; ~HOTKEYS_EDITOR_DIALOG() {};
@ -259,6 +259,6 @@ private:
* @param aParent is the parent window * @param aParent is the parent window
* @param aHotkeys is the hotkey configuration array * @param aHotkeys is the hotkey configuration array
*/ */
void InstallHotkeyFrame( EDA_DRAW_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys ); void InstallHotkeyFrame( EDA_BASE_FRAME* aParent, EDA_HOTKEY_CONFIG* aHotkeys );
#endif #endif

View File

@ -69,7 +69,7 @@ public:
/** /**
* Function GetVertices() * Function GetVertices()
* areturn a pointer to the data used by the VERTEX_ITEM. * Returns pointer to the data used by the VERTEX_ITEM.
*/ */
VERTEX* GetVertices() const; VERTEX* GetVertices() const;

View File

@ -206,6 +206,13 @@ public:
return sqrt( SquaredDistance( aP ) ); return sqrt( SquaredDistance( aP ) );
} }
void CanonicalCoefs( ecoord& qA, ecoord& qB, ecoord& qC ) const
{
qA = A.y - B.y;
qB = B.x - A.x;
qC = -qA * A.x - qB * A.y;
}
/** /**
* Function Collinear() * Function Collinear()
* *
@ -215,9 +222,8 @@ public:
*/ */
bool Collinear( const SEG& aSeg ) const bool Collinear( const SEG& aSeg ) const
{ {
ecoord qa = A.y - B.y; ecoord qa, qb, qc;
ecoord qb = B.x - A.x; CanonicalCoefs( qa, qb, qc );
ecoord qc = -qa * A.x - qb * A.y;
ecoord d1 = std::abs( aSeg.A.x * qa + aSeg.A.y * qb + qc ); ecoord d1 = std::abs( aSeg.A.x * qa + aSeg.A.y * qb + qc );
ecoord d2 = std::abs( aSeg.B.x * qa + aSeg.B.y * qb + qc ); ecoord d2 = std::abs( aSeg.B.x * qa + aSeg.B.y * qb + qc );
@ -225,6 +231,29 @@ public:
return ( d1 <= 1 && d2 <= 1 ); return ( d1 <= 1 && d2 <= 1 );
} }
bool ApproxCollinear( const SEG& aSeg ) const
{
ecoord p, q, r;
CanonicalCoefs( p, q, r );
ecoord dist1 = ( p * aSeg.A.x + q * aSeg.A.y + r ) / sqrt( p * p + q * q );
ecoord dist2 = ( p * aSeg.B.x + q * aSeg.B.y + r ) / sqrt( p * p + q * q );
return std::abs( dist1 ) <= 1 && std::abs( dist2 ) <= 1;
}
bool ApproxParallel ( const SEG& aSeg ) const
{
ecoord p, q, r;
CanonicalCoefs( p, q, r );
ecoord dist1 = ( p * aSeg.A.x + q * aSeg.A.y + r ) / sqrt( p * p + q * q );
ecoord dist2 = ( p * aSeg.B.x + q * aSeg.B.y + r ) / sqrt( p * p + q * q );
return std::abs( dist1 - dist2 ) <= 1;
}
bool Overlaps( const SEG& aSeg ) const bool Overlaps( const SEG& aSeg ) const
{ {
if( aSeg.A == aSeg.B ) // single point corner case if( aSeg.A == aSeg.B ) // single point corner case
@ -262,6 +291,8 @@ public:
return ( A - B ).SquaredEuclideanNorm(); return ( A - B ).SquaredEuclideanNorm();
} }
ecoord TCoef( const VECTOR2I& aP ) const;
/** /**
* Function Index() * Function Index()
* *
@ -277,7 +308,11 @@ public:
bool PointCloserThan( const VECTOR2I& aP, int aDist ) const; bool PointCloserThan( const VECTOR2I& aP, int aDist ) const;
// friend std::ostream& operator<<( std::ostream& stream, const SEG& aSeg ); void Reverse()
{
std::swap( A, B );
}
private: private:
bool ccw( const VECTOR2I& aA, const VECTOR2I& aB, const VECTOR2I &aC ) const; bool ccw( const VECTOR2I& aA, const VECTOR2I& aB, const VECTOR2I &aC ) const;
@ -285,14 +320,21 @@ private:
int m_index; int m_index;
}; };
inline VECTOR2I SEG::LineProject( const VECTOR2I& aP ) const inline VECTOR2I SEG::LineProject( const VECTOR2I& aP ) const
{ {
// fixme: numerical errors for large integers VECTOR2I d = B - A;
assert( false ); ecoord l_squared = d.Dot( d );
return VECTOR2I( 0, 0 );
}
if( l_squared == 0 )
return A;
ecoord t = d.Dot( aP - A );
int xp = rescale( t, (ecoord)d.x, l_squared );
int yp = rescale( t, (ecoord)d.y, l_squared );
return A + VECTOR2I( xp, yp );
}
inline int SEG::LineDistance( const VECTOR2I& aP, bool aDetermineSide ) const inline int SEG::LineDistance( const VECTOR2I& aP, bool aDetermineSide ) const
{ {
@ -305,6 +347,11 @@ inline int SEG::LineDistance( const VECTOR2I& aP, bool aDetermineSide ) const
return aDetermineSide ? dist : abs( dist ); return aDetermineSide ? dist : abs( dist );
} }
inline SEG::ecoord SEG::TCoef( const VECTOR2I& aP ) const
{
VECTOR2I d = B - A;
return d.Dot( aP - A);
}
inline const VECTOR2I SEG::NearestPoint( const VECTOR2I& aP ) const inline const VECTOR2I SEG::NearestPoint( const VECTOR2I& aP ) const
{ {
@ -327,7 +374,6 @@ inline const VECTOR2I SEG::NearestPoint( const VECTOR2I& aP ) const
return A + VECTOR2I( xp, yp ); return A + VECTOR2I( xp, yp );
} }
inline std::ostream& operator<<( std::ostream& aStream, const SEG& aSeg ) inline std::ostream& operator<<( std::ostream& aStream, const SEG& aSeg )
{ {
aStream << "[ " << aSeg.A << " - " << aSeg.B << " ]"; aStream << "[ " << aSeg.A << " - " << aSeg.B << " ]";

View File

@ -29,10 +29,10 @@
#ifndef HOTKEYS_BASIC_H #ifndef HOTKEYS_BASIC_H
#define HOTKEYS_BASIC_H #define HOTKEYS_BASIC_H
#define DEFAULT_HOTKEY_FILENAME_EXT wxT( "key" ) #define DEFAULT_HOTKEY_FILENAME_EXT wxT( "hotkeys" )
class EDA_DRAW_FRAME; class EDA_BASE_FRAME;
/* Identifiers (tags) in key code configuration file (or section names) /* Identifiers (tags) in key code configuration file (or section names)
@ -116,7 +116,7 @@ public:
/* Functions: /* Functions:
*/ */
void AddHotkeyConfigMenu( wxMenu* menu ); void AddHotkeyConfigMenu( wxMenu* menu );
void HandleHotkeyConfigMenuSelection( EDA_DRAW_FRAME* frame, int id ); void HandleHotkeyConfigMenuSelection( EDA_BASE_FRAME* frame, int id );
/** /**
* Function KeyNameFromKeyCode * Function KeyNameFromKeyCode
@ -196,7 +196,7 @@ wxString AddHotkeyName( const wxString& aText,
* @param aFrame = current active frame * @param aFrame = current active frame
* @param aList = pointer to a EDA_HOTKEY_CONFIG list (Null terminated) * @param aList = pointer to a EDA_HOTKEY_CONFIG list (Null terminated)
*/ */
void DisplayHotkeyList( EDA_DRAW_FRAME* aFrame, struct EDA_HOTKEY_CONFIG* aList ); void DisplayHotkeyList( EDA_BASE_FRAME* aFrame, struct EDA_HOTKEY_CONFIG* aList );
/** /**
* Function GetDescriptorFromHotkey * Function GetDescriptorFromHotkey

View File

@ -30,6 +30,7 @@
#include <math/vector2d.h> #include <math/vector2d.h>
#include <limits> #include <limits>
#include <boost/optional.hpp>
/** /**
* Class BOX2 * Class BOX2
@ -467,6 +468,8 @@ public:
typedef BOX2<VECTOR2I> BOX2I; typedef BOX2<VECTOR2I> BOX2I;
typedef BOX2<VECTOR2D> BOX2D; typedef BOX2<VECTOR2D> BOX2D;
typedef boost::optional<BOX2I> OPT_BOX2I;
// FIXME should be removed to avoid multiple typedefs for the same type // FIXME should be removed to avoid multiple typedefs for the same type
typedef BOX2D DBOX; typedef BOX2D DBOX;

View File

@ -76,7 +76,16 @@ public:
ALL = 0xff ALL = 0xff
}; };
VIEW_ITEM() : m_view( NULL ), m_visible( true ), m_requiredUpdate( ALL ), /**
* Enum VIEW_VISIBILITY_FLAGS.
* Defines the visibility of the item (temporarily hidden, invisible, etc).
*/
enum VIEW_VISIBILITY_FLAGS {
VISIBLE = 0x01, /// Item is visible (in general)
HIDDEN = 0x02 /// Item is temporarily hidden (e.g. being used by a tool). Overrides VISIBLE flag.
};
VIEW_ITEM() : m_view( NULL ), m_flags( VISIBLE ), m_requiredUpdate( ALL ),
m_groups( NULL ), m_groupsSize( 0 ) {} m_groups( NULL ), m_groupsSize( 0 ) {}
/** /**
@ -128,7 +137,39 @@ public:
* *
* @param aIsVisible: whether the item is visible (on all layers), or not. * @param aIsVisible: whether the item is visible (on all layers), or not.
*/ */
void ViewSetVisible( bool aIsVisible = true ); void ViewSetVisible( bool aIsVisible = true )
{
bool cur_visible = m_flags & VISIBLE;
if( cur_visible != aIsVisible )
{
if( aIsVisible )
m_flags |= VISIBLE;
else
m_flags &= ~VISIBLE;
ViewUpdate( APPEARANCE | COLOR );
}
}
/**
* Function ViewHide()
* Temporarily hides the item in the view (e.g. for overlaying)
*
* @param aHide: whether the item is hidden (on all layers), or not.
*/
void ViewHide( bool aHide = true )
{
if( !( m_flags & VISIBLE ) )
return;
if( aHide )
m_flags |= HIDDEN;
else
m_flags &= ~HIDDEN;
ViewUpdate( APPEARANCE );
}
/** /**
* Function ViewIsVisible() * Function ViewIsVisible()
@ -139,7 +180,7 @@ public:
*/ */
bool ViewIsVisible() const bool ViewIsVisible() const
{ {
return m_visible; return m_flags & VISIBLE;
} }
/** /**
@ -201,7 +242,7 @@ protected:
} }
VIEW* m_view; ///< Current dynamic view the item is assigned to. VIEW* m_view; ///< Current dynamic view the item is assigned to.
bool m_visible; ///< Are we visible in the current dynamic VIEW. int m_flags; ///< Visibility flags
int m_requiredUpdate; ///< Flag required for updating int m_requiredUpdate; ///< Flag required for updating
///* Helper for storing cached items group ids ///* Helper for storing cached items group ids
@ -295,6 +336,15 @@ protected:
{ {
m_requiredUpdate = NONE; m_requiredUpdate = NONE;
} }
/**
* Function isRenderable()
* Returns if the item should be drawn or not.
*/
bool isRenderable() const
{
return m_flags == VISIBLE;
}
}; };
} // namespace KIGFX } // namespace KIGFX

View File

@ -658,6 +658,8 @@ public:
*/ */
void SetFastGrid2(); void SetFastGrid2();
void ClearSelection();
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };

View File

@ -73,6 +73,8 @@ namespace PCB { struct IFACE; } // KIFACE_I is in pcbnew.cpp
* *
* See also class PCB_BASE_FRAME(): Basic class for Pcbnew and GerbView. * See also class PCB_BASE_FRAME(): Basic class for Pcbnew and GerbView.
*/ */
#define PCB_EDIT_FRAME_NAME wxT( "PcbFrame" )
class PCB_EDIT_FRAME : public PCB_BASE_EDIT_FRAME class PCB_EDIT_FRAME : public PCB_BASE_EDIT_FRAME
{ {
friend struct PCB::IFACE; friend struct PCB::IFACE;

58
include/wx_status_popup.h Normal file
View File

@ -0,0 +1,58 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014-2015 CERN
* Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WX_STATUS_POPUP_H_
#define __WX_STATUS_POPUP_H_
#include <common.h>
#include <wx/popupwin.h>
class PCB_EDIT_FRAME;
/**
* Class WX_STATUS_POPUP
*
* A tiny, headerless popup window used to display useful status (e.g. line length
* tuning info) next to the mouse cursor.
*/
class WX_STATUS_POPUP: public wxPopupWindow
{
public:
WX_STATUS_POPUP( PCB_EDIT_FRAME* aParent );
virtual ~WX_STATUS_POPUP();
virtual void Popup(wxWindow* aFocus = NULL);
virtual void Move( const wxPoint &aWhere );
protected:
void updateSize();
wxPanel* m_panel;
wxBoxSizer* m_topSizer;
};
#endif /* __WX_STATUS_POPUP_H_*/

91
include/wx_unit_binder.h Normal file
View File

@ -0,0 +1,91 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014-2015 CERN
* Author: Maciej Suminski <maciej.suminski@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WX_UNIT_BINDER_H_
#define __WX_UNIT_BINDER_H_
#include <common.h>
#include <wx/spinbutt.h>
class wxTextCtrl;
class wxSpinButton;
class wxStaticText;
class WX_UNIT_BINDER
{
public:
/**
* Constructor.
* @param aParent is the parent window.
* @param aTextInput is the text input widget used to edit the given value.
* @param aUnitLabel is the units label displayed next to the text field.
* @param aSpinButton is an optional spin button (for adjusting the input value)
*/
WX_UNIT_BINDER( wxWindow* aParent, wxTextCtrl* aTextInput, wxStaticText* aUnitLabel, wxSpinButton* aSpinButton = NULL );
virtual ~WX_UNIT_BINDER();
/**
* Function SetValue
* Sets new value (in Internal Units) for the text field, taking care of units conversion.
* @param aValue is the new value.
*/
virtual void SetValue( int aValue );
/**
* Function GetValue
* Returns the current value in Internal Units.
*/
virtual int GetValue() const;
/**
* Function Enable
* Enables/diasables the binded widgets
*/
void Enable( bool aEnable );
protected:
void onTextChanged( wxEvent& aEvent );
///> Text input control.
wxTextCtrl* m_textCtrl;
///> Label showing currently used units.
wxStaticText* m_unitLabel;
///> Currently used units.
EDA_UNITS_T m_units;
///> Step size (added/subtracted difference if spin buttons are used).
int m_step;
int m_min;
int m_max;
///> Default value (or non-specified)
static const wxString DEFAULT_VALUE;
};
#endif /* __WX_UNIT_BINDER_H_ */

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2009-2015 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com * Copyright (C) 2009-2015 Jean-Pierre Charras, jp.charras wanadoo.fr
* Copyright (C) 2011-2015 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2011-2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* *
@ -118,8 +118,7 @@ protected:
wxSize m_FrameSize; wxSize m_FrameSize;
wxAuiToolBar* m_mainToolBar; ///< Standard horizontal Toolbar wxAuiToolBar* m_mainToolBar; ///< Standard horizontal Toolbar
wxString m_FrameName; ///< name used for writing and reading setup
///< It is "SchematicFrame", "PcbFrame" ....
wxString m_AboutTitle; ///< Name of program displayed in About. wxString m_AboutTitle; ///< Name of program displayed in About.
wxAuiManager m_auimgr; wxAuiManager m_auimgr;
@ -197,8 +196,6 @@ public:
int GetAutoSaveInterval() const { return m_autoSaveInterval; } int GetAutoSaveInterval() const { return m_autoSaveInterval; }
wxString GetName() const { return m_FrameName; }
bool IsType( FRAME_T aType ) const { return m_Ident == aType; } bool IsType( FRAME_T aType ) const { return m_Ident == aType; }
void GetKicadHelp( wxCommandEvent& event ); void GetKicadHelp( wxCommandEvent& event );
@ -291,15 +288,21 @@ public:
* Function ImportHotkeyConfigFromFile * Function ImportHotkeyConfigFromFile
* Prompt the user for an old hotkey file to read, and read it. * Prompt the user for an old hotkey file to read, and read it.
* @param aDescList = current hotkey list descr. to initialize. * @param aDescList = current hotkey list descr. to initialize.
* @param aDefaultShortname = a default short name (extention not needed)
* like eechema, kicad...
*/ */
void ImportHotkeyConfigFromFile( EDA_HOTKEY_CONFIG* aDescList ); void ImportHotkeyConfigFromFile( EDA_HOTKEY_CONFIG* aDescList,
const wxString& aDefaultShortname );
/** /**
* Function ExportHotkeyConfigToFile * Function ExportHotkeyConfigToFile
* Prompt the user for an old hotkey file to read, and read it. * Prompt the user for an old hotkey file to read, and read it.
* @param aDescList = current hotkey list descr. to initialize. * @param aDescList = current hotkey list descr. to initialize.
* @param aDefaultShortname = a default short name (extention not needed)
* like eechema, kicad...
*/ */
void ExportHotkeyConfigToFile( EDA_HOTKEY_CONFIG* aDescList ); void ExportHotkeyConfigToFile( EDA_HOTKEY_CONFIG* aDescList,
const wxString& aDefaultShortname );
/** /**
* Function GetFileFromHistory * Function GetFileFromHistory

View File

@ -38,6 +38,7 @@
#include <online_help.h> #include <online_help.h>
#include <wildcards_and_files_ext.h> #include <wildcards_and_files_ext.h>
#include <boost/ptr_container/ptr_vector.hpp> #include <boost/ptr_container/ptr_vector.hpp>
#include <hotkeys_basic.h>
#include <build_version.h> #include <build_version.h>
@ -137,6 +138,11 @@ bool PGM_KICAD::OnPgmInit( wxApp* aWxApp )
//DBG( m_bm.m_search.Show( (std::string( __func__ ) + " SysSearch()").c_str() );) //DBG( m_bm.m_search.Show( (std::string( __func__ ) + " SysSearch()").c_str() );)
} }
// Must be called before creating the main frame in order to
// display the real hotkeys in menus or tool tips
extern struct EDA_HOTKEY_CONFIG kicad_Manager_Hokeys_Descr[];
ReadHotkeyConfig( KICAD_MANAGER_FRAME_NAME, kicad_Manager_Hokeys_Descr );
KICAD_MANAGER_FRAME* frame = new KICAD_MANAGER_FRAME( NULL, wxT( "KiCad" ), KICAD_MANAGER_FRAME* frame = new KICAD_MANAGER_FRAME( NULL, wxT( "KiCad" ),
wxDefaultPosition, wxDefaultSize ); wxDefaultPosition, wxDefaultSize );
App().SetTopWindow( frame ); App().SetTopWindow( frame );

View File

@ -46,6 +46,8 @@
#define KICAD_USE_FILES_WATCHER #define KICAD_USE_FILES_WATCHER
#endif #endif
#define KICAD_MANAGER_FRAME_NAME wxT( "KicadFrame" )
class LAUNCHER_PANEL; class LAUNCHER_PANEL;
class TREEPROJECTFILES; class TREEPROJECTFILES;
class TREE_PROJECT_FRAME; class TREE_PROJECT_FRAME;
@ -190,6 +192,9 @@ public:
void OnFileHistory( wxCommandEvent& event ); void OnFileHistory( wxCommandEvent& event );
void OnExit( wxCommandEvent& event ); void OnExit( wxCommandEvent& event );
void Process_Preferences( wxCommandEvent& event ); void Process_Preferences( wxCommandEvent& event );
void Process_Config( wxCommandEvent& event );
void ReCreateMenuBar(); void ReCreateMenuBar();
void RecreateBaseHToolbar(); void RecreateBaseHToolbar();
@ -292,6 +297,7 @@ private:
wxAuiToolBar* m_VToolBar; // Vertical toolbar (not used) wxAuiToolBar* m_VToolBar; // Vertical toolbar (not used)
int m_leftWinWidth; int m_leftWinWidth;
EDA_HOTKEY_CONFIG* m_manager_Hokeys_Descr;
void language_change( wxCommandEvent& event ); void language_change( wxCommandEvent& event );
}; };

View File

@ -40,17 +40,18 @@
#include <tree_project_frame.h> #include <tree_project_frame.h>
#include <wildcards_and_files_ext.h> #include <wildcards_and_files_ext.h>
#include <menus_helpers.h> #include <menus_helpers.h>
#include <dialog_hotkeys_editor.h>
#define TREE_FRAME_WIDTH_ENTRY wxT( "LeftWinWidth" ) #define TREE_FRAME_WIDTH_ENTRY wxT( "LeftWinWidth" )
KICAD_MANAGER_FRAME::KICAD_MANAGER_FRAME( wxWindow* parent, KICAD_MANAGER_FRAME::KICAD_MANAGER_FRAME( wxWindow* parent,
const wxString& title, const wxPoint& pos, const wxSize& size ) : const wxString& title, const wxPoint& pos, const wxSize& size ) :
EDA_BASE_FRAME( parent, KICAD_MAIN_FRAME_T, title, pos, size, EDA_BASE_FRAME( parent, KICAD_MAIN_FRAME_T, title, pos, size,
KICAD_DEFAULT_DRAWFRAME_STYLE, wxT( "KicadFrame" ) ) KICAD_DEFAULT_DRAWFRAME_STYLE, KICAD_MANAGER_FRAME_NAME )
{ {
m_leftWinWidth = 60; m_leftWinWidth = 60;
m_manager_Hokeys_Descr = NULL;
// Create the status line (bottom of the frame // Create the status line (bottom of the frame
static const int dims[3] = { -1, -1, 100 }; static const int dims[3] = { -1, -1, 100 };
@ -529,3 +530,33 @@ void KICAD_MANAGER_FRAME::PrintPrjInfo()
PrintMsg( msg ); PrintMsg( msg );
} }
void KICAD_MANAGER_FRAME::Process_Config( wxCommandEvent& event )
{
int id = event.GetId();
wxFileName fn;
switch( id )
{
// Hotkey IDs
case ID_PREFERENCES_HOTKEY_SHOW_EDITOR:
InstallHotkeyFrame( this, m_manager_Hokeys_Descr );
break;
case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG:
ExportHotkeyConfigToFile( m_manager_Hokeys_Descr, wxT( "kicad" ) );
break;
case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG:
ImportHotkeyConfigFromFile( m_manager_Hokeys_Descr, wxT( "kicad" ) );
break;
case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST:
// Display current hotkey list for LibEdit.
DisplayHotkeyList( this, m_manager_Hokeys_Descr );
break;
default:
wxFAIL_MSG( wxT( "KICAD_MANAGER_FRAME::Process_Config error" ) );
break;
}
}

View File

@ -1,9 +1,9 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2009-2012 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2009-2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -32,6 +32,7 @@
#include <kicad.h> #include <kicad.h>
#include <menus_helpers.h> #include <menus_helpers.h>
#include <tree_project_frame.h> #include <tree_project_frame.h>
#include <hotkeys_basic.h>
// Menubar and toolbar event table // Menubar and toolbar event table
BEGIN_EVENT_TABLE( KICAD_MANAGER_FRAME, EDA_BASE_FRAME ) BEGIN_EVENT_TABLE( KICAD_MANAGER_FRAME, EDA_BASE_FRAME )
@ -68,24 +69,42 @@ BEGIN_EVENT_TABLE( KICAD_MANAGER_FRAME, EDA_BASE_FRAME )
EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, KICAD_MANAGER_FRAME::OnFileHistory ) EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, KICAD_MANAGER_FRAME::OnFileHistory )
// Hotkey management (show list, edit ...) events
EVT_MENU_RANGE( ID_PREFERENCES_HOTKEY_START, ID_PREFERENCES_HOTKEY_END,
KICAD_MANAGER_FRAME::Process_Config )
// Special functions // Special functions
#ifdef KICAD_USE_FILES_WATCHER #ifdef KICAD_USE_FILES_WATCHER
EVT_MENU( ID_INIT_WATCHED_PATHS, KICAD_MANAGER_FRAME::OnChangeWatchedPaths ) EVT_MENU( ID_INIT_WATCHED_PATHS, KICAD_MANAGER_FRAME::OnChangeWatchedPaths )
#endif #endif
// Button events // Button events (in command frame), and menu events equivalent to buttons
EVT_BUTTON( ID_TO_SCH, KICAD_MANAGER_FRAME::OnRunEeschema ) EVT_BUTTON( ID_TO_SCH, KICAD_MANAGER_FRAME::OnRunEeschema )
EVT_MENU( ID_TO_SCH, KICAD_MANAGER_FRAME::OnRunEeschema )
EVT_BUTTON( ID_TO_SCH_LIB_EDITOR, KICAD_MANAGER_FRAME::OnRunSchLibEditor ) EVT_BUTTON( ID_TO_SCH_LIB_EDITOR, KICAD_MANAGER_FRAME::OnRunSchLibEditor )
EVT_MENU( ID_TO_SCH_LIB_EDITOR, KICAD_MANAGER_FRAME::OnRunSchLibEditor )
EVT_BUTTON( ID_TO_CVPCB, KICAD_MANAGER_FRAME::OnRunCvpcb ) EVT_BUTTON( ID_TO_CVPCB, KICAD_MANAGER_FRAME::OnRunCvpcb )
EVT_BUTTON( ID_TO_PCB, KICAD_MANAGER_FRAME::OnRunPcbNew ) EVT_BUTTON( ID_TO_PCB, KICAD_MANAGER_FRAME::OnRunPcbNew )
EVT_MENU( ID_TO_PCB, KICAD_MANAGER_FRAME::OnRunPcbNew )
EVT_BUTTON( ID_TO_PCB_FP_EDITOR, KICAD_MANAGER_FRAME::OnRunPcbFpEditor ) EVT_BUTTON( ID_TO_PCB_FP_EDITOR, KICAD_MANAGER_FRAME::OnRunPcbFpEditor )
EVT_MENU( ID_TO_PCB_FP_EDITOR, KICAD_MANAGER_FRAME::OnRunPcbFpEditor )
EVT_BUTTON( ID_TO_GERBVIEW, KICAD_MANAGER_FRAME::OnRunGerbview ) EVT_BUTTON( ID_TO_GERBVIEW, KICAD_MANAGER_FRAME::OnRunGerbview )
EVT_MENU( ID_TO_GERBVIEW, KICAD_MANAGER_FRAME::OnRunGerbview )
EVT_BUTTON( ID_TO_BITMAP_CONVERTER, KICAD_MANAGER_FRAME::OnRunBitmapConverter ) EVT_BUTTON( ID_TO_BITMAP_CONVERTER, KICAD_MANAGER_FRAME::OnRunBitmapConverter )
EVT_MENU( ID_TO_BITMAP_CONVERTER, KICAD_MANAGER_FRAME::OnRunBitmapConverter )
EVT_BUTTON( ID_TO_PCB_CALCULATOR, KICAD_MANAGER_FRAME::OnRunPcbCalculator ) EVT_BUTTON( ID_TO_PCB_CALCULATOR, KICAD_MANAGER_FRAME::OnRunPcbCalculator )
EVT_MENU( ID_TO_PCB_CALCULATOR, KICAD_MANAGER_FRAME::OnRunPcbCalculator )
EVT_BUTTON( ID_TO_PL_EDITOR, KICAD_MANAGER_FRAME::OnRunPageLayoutEditor ) EVT_BUTTON( ID_TO_PL_EDITOR, KICAD_MANAGER_FRAME::OnRunPageLayoutEditor )
EVT_MENU( ID_TO_PL_EDITOR, KICAD_MANAGER_FRAME::OnRunPageLayoutEditor )
EVT_UPDATE_UI( ID_SELECT_DEFAULT_PDF_BROWSER, KICAD_MANAGER_FRAME::OnUpdateDefaultPdfBrowser ) EVT_UPDATE_UI( ID_SELECT_DEFAULT_PDF_BROWSER, KICAD_MANAGER_FRAME::OnUpdateDefaultPdfBrowser )
EVT_UPDATE_UI( ID_SELECT_PREFERED_PDF_BROWSER, EVT_UPDATE_UI( ID_SELECT_PREFERED_PDF_BROWSER,
@ -93,15 +112,72 @@ BEGIN_EVENT_TABLE( KICAD_MANAGER_FRAME, EDA_BASE_FRAME )
END_EVENT_TABLE() END_EVENT_TABLE()
enum hotkey_id_commnand
{
HK_RUN_EESCHEMA = HK_COMMON_END,
HK_LOAD_PROJECT,
HK_SAVE_PROJECT,
HK_NEW_PRJ,
HK_NEW_PRJ_TEMPLATE,
HK_RUN_LIBEDIT,
HK_RUN_PCBNEW,
HK_RUN_FPEDITOR,
HK_RUN_GERBVIEW,
HK_RUN_BM2COMPONENT,
HK_RUN_PCBCALCULATOR,
HK_RUN_PLEDITOR
};
///////////// Hotkeys management ///////////////////////////////////////
// hotkeys command:
static EDA_HOTKEY HkHelp( wxT( "Help (this window)" ), HK_HELP, '?' );
static EDA_HOTKEY HkLoadPrj( wxT( "Load project" ), HK_LOAD_PROJECT, 'O' + GR_KB_CTRL );
static EDA_HOTKEY HkSavePrj( wxT( "Save project" ), HK_SAVE_PROJECT, 'S' + GR_KB_CTRL );
static EDA_HOTKEY HkNewProject( wxT( "New Project" ), HK_NEW_PRJ, 'N' + GR_KB_CTRL );
static EDA_HOTKEY HkNewPrjFromTemplate( wxT( "New Prj From Template" ),
HK_NEW_PRJ_TEMPLATE, 'T' + GR_KB_CTRL );
static EDA_HOTKEY HkRunEeschema( wxT( "Run Eeschema" ), HK_RUN_EESCHEMA, 'E', 0 );
static EDA_HOTKEY HkRunLibedit( wxT( "Run LibEdit" ), HK_RUN_LIBEDIT, 'L', 0 );
static EDA_HOTKEY HkRunPcbnew( wxT( "Run Pcbnew" ), HK_RUN_PCBNEW, 'P', 0 );
static EDA_HOTKEY HkRunModedit( wxT( "Run FpEditor" ), HK_RUN_FPEDITOR, 'F', 0 );
static EDA_HOTKEY HkRunGerbview( wxT( "Run Gerbview" ), HK_RUN_GERBVIEW, 'G', 0 );
static EDA_HOTKEY HkRunBm2Cmp( wxT( "Run Bitmap2Component" ), HK_RUN_BM2COMPONENT, 'B', 0 );
static EDA_HOTKEY HkRunPcbCalc( wxT( "Run PcbCalculator" ), HK_RUN_PCBCALCULATOR, 'C', 0 );
static EDA_HOTKEY HkRunPleditor( wxT( "Run PlEditor" ), HK_RUN_PLEDITOR, 'Y', 0 );
// List of hotkey descriptors
EDA_HOTKEY* common_Hotkey_List[] =
{
&HkHelp,
&HkLoadPrj, &HkSavePrj, &HkNewProject, &HkNewPrjFromTemplate,
&HkRunEeschema, &HkRunLibedit,
&HkRunPcbnew, &HkRunModedit, &HkRunGerbview,
&HkRunBm2Cmp, &HkRunPcbCalc, &HkRunPleditor,
NULL
};
// list of sections and corresponding hotkey list for Kicad
// (used to create an hotkey config file, and edit hotkeys )
// here we have only one section.
struct EDA_HOTKEY_CONFIG kicad_Manager_Hokeys_Descr[] = {
{ &g_CommonSectionTag, common_Hotkey_List, &g_CommonSectionTitle },
{ NULL, NULL, NULL }
};
///////////// End hotkeys management ///////////////////////////////////////
/** /**
* @brief (Re)Create the menubar * @brief (Re)Create the menubar
*/ */
void KICAD_MANAGER_FRAME::ReCreateMenuBar() void KICAD_MANAGER_FRAME::ReCreateMenuBar()
{ {
wxString msg;
static wxMenu* openRecentMenu; // Open Recent submenu, static wxMenu* openRecentMenu; // Open Recent submenu,
// static to remember this menu // static to remember this menu
m_manager_Hokeys_Descr = kicad_Manager_Hokeys_Descr;
// Create and try to get the current menubar // Create and try to get the current menubar
wxMenuBar* menuBar = GetMenuBar(); wxMenuBar* menuBar = GetMenuBar();
@ -127,9 +203,8 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar()
wxMenu* fileMenu = new wxMenu; wxMenu* fileMenu = new wxMenu;
// Open // Open
AddMenuItem( fileMenu, msg = AddHotkeyName( _( "&Open Project" ), kicad_Manager_Hokeys_Descr, HK_LOAD_PROJECT );
ID_LOAD_PROJECT, AddMenuItem( fileMenu, ID_LOAD_PROJECT, msg,
_( "&Open Project\tCtrl+O" ),
_( "Open existing project" ), _( "Open existing project" ),
KiBitmap( open_project_xpm ) ); KiBitmap( open_project_xpm ) );
@ -143,30 +218,35 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar()
_( "Open recent schematic project" ), _( "Open recent schematic project" ),
KiBitmap( open_project_xpm ) ); KiBitmap( open_project_xpm ) );
// New // New project creation
wxMenu* newMenu = new wxMenu(); wxMenu* newprjSubMenu = new wxMenu();
AddMenuItem( newMenu, ID_NEW_PROJECT,
_( "&Blank Project\tCtrl+N" ), msg = AddHotkeyName( _( "&New Project" ), kicad_Manager_Hokeys_Descr, HK_NEW_PRJ );
_( "Create blank project" ), AddMenuItem( newprjSubMenu, ID_NEW_PROJECT, msg,
_( "Create new blank project" ),
KiBitmap( new_project_xpm ) ); KiBitmap( new_project_xpm ) );
AddMenuItem( newMenu, ID_NEW_PROJECT_FROM_TEMPLATE, msg = AddHotkeyName( _( "New Project from &Template" ),
_( "Project from &Template\tCtrl+T" ), kicad_Manager_Hokeys_Descr, HK_NEW_PRJ_TEMPLATE );
_( "Create new project from template" ), AddMenuItem( newprjSubMenu, ID_NEW_PROJECT_FROM_TEMPLATE, msg,
_( "Create a new project from a template" ),
KiBitmap( new_project_with_template_xpm ) ); KiBitmap( new_project_with_template_xpm ) );
AddMenuItem( fileMenu, newMenu, AddMenuItem( fileMenu, newprjSubMenu,
wxID_ANY, wxID_ANY,
_( "New" ), _( "New Project" ),
_( "Create new project" ), _( "Create new project" ),
KiBitmap( new_project_xpm ) ); KiBitmap( new_project_xpm ) );
// Currently there is nothing to save
// (Kicad manager does not save any info in .pro file)
#if 0
// Save // Save
AddMenuItem( fileMenu, msg = AddHotkeyName( _( "&Save" ), kicad_Manager_Hokeys_Descr, HK_SAVE_PROJECT );
ID_SAVE_PROJECT, AddMenuItem( fileMenu, ID_SAVE_PROJECT, msg,
_( "&Save\tCtrl+S" ),
_( "Save current project" ), _( "Save current project" ),
KiBitmap( save_project_xpm ) ); KiBitmap( save_project_xpm ) );
#endif
// Archive // Archive
fileMenu->AppendSeparator(); fileMenu->AppendSeparator();
@ -255,10 +335,61 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar()
_( "PDF viewer preferences" ), _( "PDF viewer preferences" ),
KiBitmap( datasheet_xpm ) ); KiBitmap( datasheet_xpm ) );
// Hotkey submenu
preferencesMenu->AppendSeparator();
AddHotkeyConfigMenu( preferencesMenu );
// Language submenu // Language submenu
preferencesMenu->AppendSeparator(); preferencesMenu->AppendSeparator();
Pgm().AddMenuLanguageList( preferencesMenu ); Pgm().AddMenuLanguageList( preferencesMenu );
// Hotkey submenu
AddHotkeyConfigMenu( preferencesMenu );
// Menu Tools:
wxMenu* toolsMenu = new wxMenu;
msg = AddHotkeyName( _( "Run Eeschema" ), kicad_Manager_Hokeys_Descr, HK_RUN_EESCHEMA );
AddMenuItem( toolsMenu, ID_TO_SCH, msg,
KiBitmap( eeschema_xpm ) );
msg = AddHotkeyName( _( "Run Library Editor" ),
kicad_Manager_Hokeys_Descr, HK_RUN_LIBEDIT );
AddMenuItem( toolsMenu, ID_TO_SCH_LIB_EDITOR, msg,
KiBitmap( libedit_xpm ) );
msg = AddHotkeyName( _( "Run Pcbnew" ),
kicad_Manager_Hokeys_Descr, HK_RUN_PCBNEW );
AddMenuItem( toolsMenu, ID_TO_PCB, msg,
KiBitmap( pcbnew_xpm ) );
msg = AddHotkeyName( _( "Run Footprint Editor" ),
kicad_Manager_Hokeys_Descr, HK_RUN_FPEDITOR );
AddMenuItem( toolsMenu, ID_TO_PCB_FP_EDITOR, msg,
KiBitmap( module_editor_xpm ) );
msg = AddHotkeyName( _( "Run Gerbview" ),
kicad_Manager_Hokeys_Descr, HK_RUN_GERBVIEW );
AddMenuItem( toolsMenu, ID_TO_GERBVIEW, msg,
KiBitmap( icon_gerbview_small_xpm ) );
msg = AddHotkeyName( _( "Run Bitmap2Component" ),
kicad_Manager_Hokeys_Descr, HK_RUN_BM2COMPONENT );
AddMenuItem( toolsMenu, ID_TO_BITMAP_CONVERTER, msg,
_( "Bitmap2Component - Convert bitmap images to Eeschema\n"
"or Pcbnew elements" ),
KiBitmap( image_xpm ) );
msg = AddHotkeyName( _( "Run Pcb Calculator" ), kicad_Manager_Hokeys_Descr, HK_RUN_PCBCALCULATOR );
AddMenuItem( toolsMenu, ID_TO_PCB_CALCULATOR, msg,
_( "Pcb calculator - Calculator for components, track width, etc." ),
KiBitmap( options_module_xpm ) );
msg = AddHotkeyName( _( "Run Page Layout Editor" ), kicad_Manager_Hokeys_Descr, HK_RUN_PLEDITOR );
AddMenuItem( toolsMenu, ID_TO_PL_EDITOR, msg,
_( "Pl editor - Worksheet layout editor" ),
KiBitmap( pagelayout_load_xpm ) );
// Menu Help: // Menu Help:
wxMenu* helpMenu = new wxMenu; wxMenu* helpMenu = new wxMenu;
@ -289,6 +420,7 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar()
menuBar->Append( fileMenu, _( "&File" ) ); menuBar->Append( fileMenu, _( "&File" ) );
menuBar->Append( browseMenu, _( "&Browse" ) ); menuBar->Append( browseMenu, _( "&Browse" ) );
menuBar->Append( preferencesMenu, _( "&Preferences" ) ); menuBar->Append( preferencesMenu, _( "&Preferences" ) );
menuBar->Append( toolsMenu, _( "&Tools" ) );
menuBar->Append( helpMenu, _( "&Help" ) ); menuBar->Append( helpMenu, _( "&Help" ) );
menuBar->Thaw(); menuBar->Thaw();
@ -298,6 +430,15 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar()
SetMenuBar( menuBar ); SetMenuBar( menuBar );
else else
menuBar->Refresh(); menuBar->Refresh();
// Add the hotkey to the "show hotkey list" menu, because we do not have
// a management of the keyboard keys in Kicad.
// So all hotheys should be added to the menubar
// Note Use wxMenuBar::SetLabel only after the menubar
// has been associated with a frame. (see wxWidgets doc)
msg = AddHotkeyName( menuBar->GetLabel( ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST ),
kicad_Manager_Hokeys_Descr, HK_HELP );
menuBar->SetLabel( ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST, msg );
} }

View File

@ -122,7 +122,7 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
// Must be called before creating the main frame in order to // Must be called before creating the main frame in order to
// display the real hotkeys in menus or tool tips // display the real hotkeys in menus or tool tips
ReadHotkeyConfig( wxT("PlEditorFrame"), s_PlEditor_Hokeys_Descr ); ReadHotkeyConfig( PL_EDITOR_FRAME_NAME, s_PlEditor_Hokeys_Descr );
g_UserUnit = MILLIMETRES; g_UserUnit = MILLIMETRES;
@ -159,7 +159,7 @@ bool MYFACE::OnKifaceStart( PGM_BASE* aProgram )
// Must be called before creating the main frame in order to // Must be called before creating the main frame in order to
// display the real hotkeys in menus or tool tips // display the real hotkeys in menus or tool tips
ReadHotkeyConfig( wxT("PlEditorFrame"), s_PlEditor_Hokeys_Descr ); ReadHotkeyConfig( PL_EDITOR_FRAME_NAME, s_PlEditor_Hokeys_Descr );
PL_EDITOR_FRAME * frame = new PL_EDITOR_FRAME( NULL, wxT( "PlEditorFrame" ), wxPoint( 0, 0 ), wxSize( 600, 400 ) ); PL_EDITOR_FRAME * frame = new PL_EDITOR_FRAME( NULL, wxT( "PlEditorFrame" ), wxPoint( 0, 0 ), wxSize( 600, 400 ) );

View File

@ -74,11 +74,11 @@ void PL_EDITOR_FRAME::Process_Config( wxCommandEvent& event )
break; break;
case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG: case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG:
ExportHotkeyConfigToFile( s_PlEditor_Hokeys_Descr ); ExportHotkeyConfigToFile( s_PlEditor_Hokeys_Descr, wxT( "pl_editor" ) );
break; break;
case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG: case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG:
ImportHotkeyConfigFromFile( s_PlEditor_Hokeys_Descr ); ImportHotkeyConfigFromFile( s_PlEditor_Hokeys_Descr, wxT( "pl_editor" ) );
break; break;
case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST: case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST:

View File

@ -50,13 +50,10 @@
/* class PL_EDITOR_FRAME */ /* class PL_EDITOR_FRAME */
/*************************/ /*************************/
#define PL_EDITOR_FRAME_NAME wxT( "PlEditorFrame" )
PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) : PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
EDA_DRAW_FRAME( aKiway, aParent, FRAME_PL_EDITOR, wxT( "PlEditorFrame" ), EDA_DRAW_FRAME( aKiway, aParent, FRAME_PL_EDITOR, wxT( "PlEditorFrame" ),
wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, PL_EDITOR_FRAME_NAME ) wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, PL_EDITOR_FRAME_NAME )
{ {
m_FrameName = PL_EDITOR_FRAME_NAME;
m_zoomLevelCoeff = 290.0; // Adjusted to roughly displays zoom level = 1 m_zoomLevelCoeff = 290.0; // Adjusted to roughly displays zoom level = 1
// when the screen shows a 1:1 image // when the screen shows a 1:1 image
// obviously depends on the monitor, // obviously depends on the monitor,

View File

@ -45,6 +45,8 @@ class WORKSHEET_DATAITEM;
* Class PL_EDITOR_FRAME * Class PL_EDITOR_FRAME
* is the main window used in the page layout editor. * is the main window used in the page layout editor.
*/ */
#define PL_EDITOR_FRAME_NAME wxT( "PlEditorFrame" )
class PL_EDITOR_FRAME : public EDA_DRAW_FRAME class PL_EDITOR_FRAME : public EDA_DRAW_FRAME
{ {
PL_EDITOR_LAYOUT m_pageLayout; PL_EDITOR_LAYOUT m_pageLayout;

View File

@ -108,6 +108,10 @@ set( PCBNEW_DIALOGS
dialogs/dialog_pns_settings_base.cpp dialogs/dialog_pns_settings_base.cpp
dialogs/dialog_move_exact.cpp dialogs/dialog_move_exact.cpp
dialogs/dialog_move_exact_base.cpp dialogs/dialog_move_exact_base.cpp
dialogs/dialog_pns_diff_pair_dimensions.cpp
dialogs/dialog_pns_diff_pair_dimensions_base.cpp
dialogs/dialog_pns_length_tuning_settings.cpp
dialogs/dialog_pns_length_tuning_settings_base.cpp
dialogs/dialog_non_copper_zones_properties.cpp dialogs/dialog_non_copper_zones_properties.cpp
dialogs/dialog_non_copper_zones_properties_base.cpp dialogs/dialog_non_copper_zones_properties_base.cpp
dialogs/dialog_pad_properties.cpp dialogs/dialog_pad_properties.cpp
@ -279,6 +283,8 @@ set( PCBNEW_CLASS_SRCS
tools/module_tools.cpp tools/module_tools.cpp
tools/placement_tool.cpp tools/placement_tool.cpp
tools/common_actions.cpp tools/common_actions.cpp
tools/grid_helper.cpp
tools/tools_common.cpp
) )
set( PCBNEW_SRCS ${PCBNEW_AUTOROUTER_SRCS} ${PCBNEW_CLASS_SRCS} ${PCBNEW_DIALOGS} ) set( PCBNEW_SRCS ${PCBNEW_AUTOROUTER_SRCS} ${PCBNEW_CLASS_SRCS} ${PCBNEW_DIALOGS} )

View File

@ -752,23 +752,25 @@ void PCB_BASE_FRAME::LoadSettings( wxConfigBase* aCfg )
(m_LastGridSizeId > (ID_POPUP_GRID_USER - ID_POPUP_GRID_LEVEL_1000)) ) (m_LastGridSizeId > (ID_POPUP_GRID_USER - ID_POPUP_GRID_LEVEL_1000)) )
m_LastGridSizeId = ID_POPUP_GRID_LEVEL_500 - ID_POPUP_GRID_LEVEL_1000; m_LastGridSizeId = ID_POPUP_GRID_LEVEL_500 - ID_POPUP_GRID_LEVEL_1000;
aCfg->Read( m_FrameName + UserGridSizeXEntry, &m_UserGridSize.x, 0.01 ); wxString baseCfgName = GetName();
aCfg->Read( m_FrameName + UserGridSizeYEntry, &m_UserGridSize.y, 0.01 );
aCfg->Read( baseCfgName + UserGridSizeXEntry, &m_UserGridSize.x, 0.01 );
aCfg->Read( baseCfgName + UserGridSizeYEntry, &m_UserGridSize.y, 0.01 );
long itmp; long itmp;
aCfg->Read( m_FrameName + UserGridUnitsEntry, &itmp, ( long )INCHES ); aCfg->Read( baseCfgName + UserGridUnitsEntry, &itmp, ( long )INCHES );
m_UserGridUnit = (EDA_UNITS_T) itmp; m_UserGridUnit = (EDA_UNITS_T) itmp;
aCfg->Read( m_FrameName + DisplayPadFillEntry, &m_DisplayOptions.m_DisplayPadFill, true ); aCfg->Read( baseCfgName + DisplayPadFillEntry, &m_DisplayOptions.m_DisplayPadFill, true );
aCfg->Read( m_FrameName + DisplayViaFillEntry, &m_DisplayOptions.m_DisplayViaFill, true ); aCfg->Read( baseCfgName + DisplayViaFillEntry, &m_DisplayOptions.m_DisplayViaFill, true );
aCfg->Read( m_FrameName + DisplayPadNumberEntry, &m_DisplayOptions.m_DisplayPadNum, true ); aCfg->Read( baseCfgName + DisplayPadNumberEntry, &m_DisplayOptions.m_DisplayPadNum, true );
aCfg->Read( m_FrameName + DisplayModuleEdgeEntry, &m_DisplayOptions.m_DisplayModEdgeFill, true ); aCfg->Read( baseCfgName + DisplayModuleEdgeEntry, &m_DisplayOptions.m_DisplayModEdgeFill, true );
aCfg->Read( m_FrameName + FastGrid1Entry, &itmp, ( long )0); aCfg->Read( baseCfgName + FastGrid1Entry, &itmp, ( long )0);
m_FastGrid1 = itmp; m_FastGrid1 = itmp;
aCfg->Read( m_FrameName + FastGrid2Entry, &itmp, ( long )0); aCfg->Read( baseCfgName + FastGrid2Entry, &itmp, ( long )0);
m_FastGrid2 = itmp; m_FastGrid2 = itmp;
aCfg->Read( m_FrameName + DisplayModuleTextEntry, &m_DisplayOptions.m_DisplayModTextFill, true ); aCfg->Read( baseCfgName + DisplayModuleTextEntry, &m_DisplayOptions.m_DisplayModTextFill, true );
} }
@ -776,16 +778,18 @@ void PCB_BASE_FRAME::SaveSettings( wxConfigBase* aCfg )
{ {
EDA_DRAW_FRAME::SaveSettings( aCfg ); EDA_DRAW_FRAME::SaveSettings( aCfg );
aCfg->Write( m_FrameName + UserGridSizeXEntry, m_UserGridSize.x ); wxString baseCfgName = GetName();
aCfg->Write( m_FrameName + UserGridSizeYEntry, m_UserGridSize.y );
aCfg->Write( m_FrameName + UserGridUnitsEntry, ( long )m_UserGridUnit ); aCfg->Write( baseCfgName + UserGridSizeXEntry, m_UserGridSize.x );
aCfg->Write( m_FrameName + DisplayPadFillEntry, m_DisplayOptions.m_DisplayPadFill ); aCfg->Write( baseCfgName + UserGridSizeYEntry, m_UserGridSize.y );
aCfg->Write( m_FrameName + DisplayViaFillEntry, m_DisplayOptions.m_DisplayViaFill ); aCfg->Write( baseCfgName + UserGridUnitsEntry, ( long )m_UserGridUnit );
aCfg->Write( m_FrameName + DisplayPadNumberEntry, m_DisplayOptions.m_DisplayPadNum ); aCfg->Write( baseCfgName + DisplayPadFillEntry, m_DisplayOptions.m_DisplayPadFill );
aCfg->Write( m_FrameName + DisplayModuleEdgeEntry, m_DisplayOptions.m_DisplayModEdgeFill ); aCfg->Write( baseCfgName + DisplayViaFillEntry, m_DisplayOptions.m_DisplayViaFill );
aCfg->Write( m_FrameName + DisplayModuleTextEntry, m_DisplayOptions.m_DisplayModTextFill ); aCfg->Write( baseCfgName + DisplayPadNumberEntry, m_DisplayOptions.m_DisplayPadNum );
aCfg->Write( m_FrameName + FastGrid1Entry, ( long )m_FastGrid1 ); aCfg->Write( baseCfgName + DisplayModuleEdgeEntry, m_DisplayOptions.m_DisplayModEdgeFill );
aCfg->Write( m_FrameName + FastGrid2Entry, ( long )m_FastGrid2 ); aCfg->Write( baseCfgName + DisplayModuleTextEntry, m_DisplayOptions.m_DisplayModTextFill );
aCfg->Write( baseCfgName + FastGrid1Entry, ( long )m_FastGrid1 );
aCfg->Write( baseCfgName + FastGrid2Entry, ( long )m_FastGrid2 );
} }

View File

@ -387,7 +387,7 @@ void PCB_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
BOARD_ITEM* item = (BOARD_ITEM*) commandToUndo->GetPickedItem( ii ); BOARD_ITEM* item = (BOARD_ITEM*) commandToUndo->GetPickedItem( ii );
// For texts belonging to modules, we need to save state of the parent module // For texts belonging to modules, we need to save state of the parent module
if( item->Type() == PCB_MODULE_TEXT_T ) if( item->Type() == PCB_MODULE_TEXT_T || item->Type() == PCB_PAD_T )
{ {
item = item->GetParent(); item = item->GetParent();
wxASSERT( item->Type() == PCB_MODULE_T ); wxASSERT( item->Type() == PCB_MODULE_T );

View File

@ -36,20 +36,6 @@
#include <class_track.h> #include <class_track.h>
#include <convert_from_iu.h> #include <convert_from_iu.h>
// Board thickness, mainly for 3D view:
#define DEFAULT_BOARD_THICKNESS_MM 1.6
// Default values for some board items
#define DEFAULT_TEXT_PCB_SIZE Millimeter2iu( 1.5 )
#define DEFAULT_TEXT_PCB_THICKNESS Millimeter2iu( 0.3 )
#define DEFAULT_PCB_EDGE_THICKNESS Millimeter2iu( 0.15 )
#define DEFAULT_GRAPHIC_THICKNESS Millimeter2iu( 0.2 )
#define DEFAULT_TEXT_MODULE_SIZE Millimeter2iu( 1.5 )
#define DEFAULT_GR_MODULE_THICKNESS Millimeter2iu( 0.15 )
#define DEFAULT_SOLDERMASK_CLEARANCE Millimeter2iu( 0.2 )
#define DEFAULT_SOLDERMASK_MIN_WIDTH Millimeter2iu( 0.0 )
BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS() : BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS() :
m_Pad_Master( NULL ) m_Pad_Master( NULL )
@ -74,13 +60,13 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS() :
m_BlindBuriedViaAllowed = false; // true to allow blind/buried vias m_BlindBuriedViaAllowed = false; // true to allow blind/buried vias
m_MicroViasAllowed = false; // true to allow micro vias m_MicroViasAllowed = false; // true to allow micro vias
m_DrawSegmentWidth = DEFAULT_GRAPHIC_THICKNESS; // current graphic line width (not EDGE layer) m_DrawSegmentWidth = Millimeter2iu( DEFAULT_GRAPHIC_THICKNESS ); // current graphic line width (not EDGE layer)
m_EdgeSegmentWidth = DEFAULT_PCB_EDGE_THICKNESS; // current graphic line width (EDGE layer only) m_EdgeSegmentWidth = Millimeter2iu( DEFAULT_PCB_EDGE_THICKNESS ); // current graphic line width (EDGE layer only)
m_PcbTextWidth = DEFAULT_TEXT_PCB_THICKNESS; // current Pcb (not module) Text width m_PcbTextWidth = Millimeter2iu(DEFAULT_TEXT_PCB_THICKNESS ); // current Pcb (not module) Text width
m_PcbTextSize = wxSize( DEFAULT_TEXT_PCB_SIZE, m_PcbTextSize = wxSize( Millimeter2iu( DEFAULT_TEXT_PCB_SIZE ),
DEFAULT_TEXT_PCB_SIZE ); // current Pcb (not module) Text size Millimeter2iu( DEFAULT_TEXT_PCB_SIZE ) ); // current Pcb (not module) Text size
m_useCustomTrackVia = false; m_useCustomTrackVia = false;
m_customTrackWidth = DMils2iu( 100 ); m_customTrackWidth = DMils2iu( 100 );
@ -91,8 +77,8 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS() :
m_MicroViasMinDrill = DMils2iu( 50 ); // micro vias (not vias) min drill diameter m_MicroViasMinDrill = DMils2iu( 50 ); // micro vias (not vias) min drill diameter
// Global mask margins: // Global mask margins:
m_SolderMaskMargin = DEFAULT_SOLDERMASK_CLEARANCE; // Solder mask margin m_SolderMaskMargin = Millimeter2iu( DEFAULT_SOLDERMASK_CLEARANCE ); // Solder mask margin
m_SolderMaskMinWidth = DEFAULT_SOLDERMASK_MIN_WIDTH; // Solder mask min width m_SolderMaskMinWidth = Millimeter2iu( DEFAULT_SOLDERMASK_MIN_WIDTH ); // Solder mask min width
m_SolderPasteMargin = 0; // Solder paste margin absolute value m_SolderPasteMargin = 0; // Solder paste margin absolute value
m_SolderPasteMarginRatio = 0.0; // Solder pask margin ratio value of pad size m_SolderPasteMarginRatio = 0.0; // Solder pask margin ratio value of pad size
// The final margin is the sum of these 2 values // The final margin is the sum of these 2 values
@ -106,10 +92,10 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS() :
// Default values for the footprint editor and fp creation // Default values for the footprint editor and fp creation
// (also covers footprints created on the fly by micor-waves tools) // (also covers footprints created on the fly by micor-waves tools)
m_ModuleTextSize = wxSize( DEFAULT_TEXT_MODULE_SIZE, m_ModuleTextSize = wxSize( Millimeter2iu( DEFAULT_TEXT_MODULE_SIZE ),
DEFAULT_TEXT_MODULE_SIZE ); Millimeter2iu( DEFAULT_TEXT_MODULE_SIZE ) );
m_ModuleTextWidth = DEFAULT_GR_MODULE_THICKNESS; m_ModuleTextWidth = Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS );
m_ModuleSegmentWidth = DEFAULT_GR_MODULE_THICKNESS; m_ModuleSegmentWidth = Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS );
// These values will be overriden by config values after reading the config // These values will be overriden by config values after reading the config
// Default ref text on fp creation. if empty, use footprint name as default // Default ref text on fp creation. if empty, use footprint name as default
@ -130,17 +116,17 @@ void BOARD_DESIGN_SETTINGS::AppendConfigs( PARAM_CFG_ARRAY* aResult )
aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeV" ), aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeV" ),
&m_PcbTextSize.y, &m_PcbTextSize.y,
DEFAULT_TEXT_PCB_SIZE, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, Millimeter2iu( DEFAULT_TEXT_PCB_SIZE ), TEXTS_MIN_SIZE, TEXTS_MAX_SIZE,
NULL, MM_PER_IU ) ); NULL, MM_PER_IU ) );
aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeH" ), aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeH" ),
&m_PcbTextSize.x, &m_PcbTextSize.x,
DEFAULT_TEXT_PCB_SIZE, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, Millimeter2iu( DEFAULT_TEXT_PCB_SIZE ), TEXTS_MIN_SIZE, TEXTS_MAX_SIZE,
NULL, MM_PER_IU ) ); NULL, MM_PER_IU ) );
aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextThickness" ), aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextThickness" ),
&m_PcbTextWidth, &m_PcbTextWidth,
DEFAULT_TEXT_PCB_THICKNESS, Millimeter2iu(DEFAULT_TEXT_PCB_THICKNESS ),
Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ),
NULL, MM_PER_IU ) ); NULL, MM_PER_IU ) );
@ -156,34 +142,34 @@ void BOARD_DESIGN_SETTINGS::AppendConfigs( PARAM_CFG_ARRAY* aResult )
aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeThickness" ), aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeThickness" ),
&m_ModuleTextWidth, &m_ModuleTextWidth,
DEFAULT_GR_MODULE_THICKNESS, 1, TEXTS_MAX_WIDTH, Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS ), 1, TEXTS_MAX_WIDTH,
NULL, MM_PER_IU ) ); NULL, MM_PER_IU ) );
aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "SolderMaskClearance" ), aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "SolderMaskClearance" ),
&m_SolderMaskMargin, &m_SolderMaskMargin,
DEFAULT_SOLDERMASK_CLEARANCE, 0, Millimeter2iu( 1.0 ), Millimeter2iu( DEFAULT_SOLDERMASK_CLEARANCE ), 0, Millimeter2iu( 1.0 ),
NULL, MM_PER_IU ) ); NULL, MM_PER_IU ) );
aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "SolderMaskMinWidth" ), aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "SolderMaskMinWidth" ),
&m_SolderMaskMinWidth, &m_SolderMaskMinWidth,
DEFAULT_SOLDERMASK_MIN_WIDTH, 0, Millimeter2iu( 0.5 ), Millimeter2iu( DEFAULT_SOLDERMASK_MIN_WIDTH ), 0, Millimeter2iu( 0.5 ),
NULL, MM_PER_IU ) ); NULL, MM_PER_IU ) );
aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "DrawSegmentWidth" ), aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "DrawSegmentWidth" ),
&m_DrawSegmentWidth, &m_DrawSegmentWidth,
DEFAULT_GRAPHIC_THICKNESS, Millimeter2iu( DEFAULT_GRAPHIC_THICKNESS ),
Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ),
NULL, MM_PER_IU ) ); NULL, MM_PER_IU ) );
aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "BoardOutlineThickness" ), aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "BoardOutlineThickness" ),
&m_EdgeSegmentWidth, &m_EdgeSegmentWidth,
DEFAULT_PCB_EDGE_THICKNESS, Millimeter2iu( DEFAULT_PCB_EDGE_THICKNESS ),
Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ),
NULL, MM_PER_IU ) ); NULL, MM_PER_IU ) );
aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleOutlineThickness" ), aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleOutlineThickness" ),
&m_ModuleSegmentWidth, &m_ModuleSegmentWidth,
DEFAULT_GR_MODULE_THICKNESS, Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS ),
Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ),
NULL, MM_PER_IU ) ); NULL, MM_PER_IU ) );
} }

View File

@ -69,6 +69,11 @@ public:
/// skip the linked list stuff, and parent /// skip the linked list stuff, and parent
const DRAWSEGMENT& operator = ( const DRAWSEGMENT& rhs ); const DRAWSEGMENT& operator = ( const DRAWSEGMENT& rhs );
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && PCB_LINE_T == aItem->Type();
}
void SetWidth( int aWidth ) { m_Width = aWidth; } void SetWidth( int aWidth ) { m_Width = aWidth; }
int GetWidth() const { return m_Width; } int GetWidth() const { return m_Width; }

View File

@ -57,7 +57,7 @@ MODULE::MODULE( BOARD* parent ) :
m_Attributs = MOD_DEFAULT; m_Attributs = MOD_DEFAULT;
m_Layer = F_Cu; m_Layer = F_Cu;
m_Orient = 0; m_Orient = 0;
m_ModuleStatus = 0; m_ModuleStatus = MODULE_PADS_LOCKED;
flag = 0; flag = 0;
m_CntRot90 = m_CntRot180 = 0; m_CntRot90 = m_CntRot180 = 0;
m_Surface = 0.0; m_Surface = 0.0;
@ -1035,13 +1035,11 @@ void MODULE::MoveAnchorPosition( const wxPoint& aMoveVector )
* but: * but:
* - the footprint position is not modified. * - the footprint position is not modified.
* - the relative (local) coordinates of these items are modified * - the relative (local) coordinates of these items are modified
* - Draw coordinates are updated
*/ */
wxPoint footprintPos = GetPosition();
/* Update the relative coordinates: // Update (move) the relative coordinates relative to the new anchor point.
* The coordinates are relative to the anchor point.
* Calculate deltaX and deltaY from the anchor. */
wxPoint moveVector = aMoveVector; wxPoint moveVector = aMoveVector;
RotatePoint( &moveVector, -GetOrientation() ); RotatePoint( &moveVector, -GetOrientation() );
@ -1243,3 +1241,20 @@ bool MODULE::IncrementReference( bool aFillSequenceGaps )
return success; return success;
} }
double MODULE::PadCoverageRatio() const
{
double padArea = 0.0;
double moduleArea = GetFootprintRect().GetArea();
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
padArea += pad->GetBoundingBox().GetArea();
if( moduleArea == 0.0 )
return 1.0;
double ratio = padArea / moduleArea;
return std::min( ratio, 1.0 );
}

View File

@ -232,6 +232,7 @@ public:
#define MODULE_is_LOCKED 0x01 ///< module LOCKED: no autoplace allowed #define MODULE_is_LOCKED 0x01 ///< module LOCKED: no autoplace allowed
#define MODULE_is_PLACED 0x02 ///< In autoplace: module automatically placed #define MODULE_is_PLACED 0x02 ///< In autoplace: module automatically placed
#define MODULE_to_PLACE 0x04 ///< In autoplace: module waiting for autoplace #define MODULE_to_PLACE 0x04 ///< In autoplace: module waiting for autoplace
#define MODULE_PADS_LOCKED 0x08 ///< In autoplace: module waiting for autoplace
bool IsLocked() const bool IsLocked() const
@ -270,6 +271,16 @@ public:
m_ModuleStatus &= ~MODULE_to_PLACE; m_ModuleStatus &= ~MODULE_to_PLACE;
} }
bool PadsLocked() const { return ( m_ModuleStatus & MODULE_PADS_LOCKED ); }
void SetPadsLocked( bool aPadsLocked )
{
if( aPadsLocked )
m_ModuleStatus |= MODULE_PADS_LOCKED;
else
m_ModuleStatus &= ~MODULE_PADS_LOCKED;
}
void SetLastEditTime( time_t aTime ) { m_LastEditTime = aTime; } void SetLastEditTime( time_t aTime ) { m_LastEditTime = aTime; }
void SetLastEditTime( ) { m_LastEditTime = time( NULL ); } void SetLastEditTime( ) { m_LastEditTime = time( NULL ); }
time_t GetLastEditTime() const { return m_LastEditTime; } time_t GetLastEditTime() const { return m_LastEditTime; }
@ -606,6 +617,14 @@ public:
m_initial_comments = aInitialComments; m_initial_comments = aInitialComments;
} }
/**
* Function PadCoverageRatio
* Calculates the ratio of total area of the footprint pads to the area of the
* footprint. Used by selection tool heuristics.
* @return the ratio
*/
double PadCoverageRatio() const;
/// Return the initial comments block or NULL if none, without transfer of ownership. /// Return the initial comments block or NULL if none, without transfer of ownership.
const wxArrayString* GetInitialComments() const { return m_initial_comments; } const wxArrayString* GetInitialComments() const { return m_initial_comments; }

View File

@ -177,7 +177,6 @@ const EDA_RECT D_PAD::GetBoundingBox() const
area.SetOrigin( m_Pos.x-dx, m_Pos.y-dy ); area.SetOrigin( m_Pos.x-dx, m_Pos.y-dy );
area.SetSize( 2*dx, 2*dy ); area.SetSize( 2*dx, 2*dy );
break; break;
break;
case PAD_RECT: case PAD_RECT:
//Use two corners and track their rotation //Use two corners and track their rotation

View File

@ -94,6 +94,11 @@ public:
///< used for edge board connectors ///< used for edge board connectors
static LSET UnplatedHoleMask(); ///< layer set for a mechanical unplated through hole pad static LSET UnplatedHoleMask(); ///< layer set for a mechanical unplated through hole pad
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && PCB_PAD_T == aItem->Type();
}
void Copy( D_PAD* source ); void Copy( D_PAD* source );
D_PAD* Next() const { return static_cast<D_PAD*>( Pnext ); } D_PAD* Next() const { return static_cast<D_PAD*>( Pnext ); }

View File

@ -49,6 +49,11 @@ public:
~TEXTE_PCB(); ~TEXTE_PCB();
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && PCB_TEXT_T == aItem->Type();
}
virtual const wxPoint& GetPosition() const virtual const wxPoint& GetPosition() const
{ {
return m_Pos; return m_Pos;

View File

@ -313,12 +313,19 @@ void DIALOG_MODULE_BOARD_EDITOR::InitModeditProperties()
break; break;
} }
m_AutoPlaceCtrl->SetSelection( (m_CurrentModule->IsLocked()) ? 1 : 0 ); if( m_CurrentModule->IsLocked() )
m_AutoPlaceCtrl->SetSelection( 2 );
else if( m_CurrentModule->PadsLocked() )
m_AutoPlaceCtrl->SetSelection( 1 );
else
m_AutoPlaceCtrl->SetSelection( 0 );
m_AutoPlaceCtrl->SetItemToolTip( 0, m_AutoPlaceCtrl->SetItemToolTip( 0,
_( "Enable hotkey move commands and Auto Placement" ) ); _( "Component can be freely moved and auto placed. User can arbitrarily select and edit component's pads." ) );
m_AutoPlaceCtrl->SetItemToolTip( 1, m_AutoPlaceCtrl->SetItemToolTip( 1,
_( "Disable hotkey move commands and Auto Placement" ) ); _( "Component can be freely moved and auto placed, but its pads cannot be selected or edited." ) );
m_AutoPlaceCtrl->SetItemToolTip( 2,
_( "Component is locked: it cannot be freely moved or auto placed." ) );
m_CostRot90Ctrl->SetValue( m_CurrentModule->GetPlacementCost90() ); m_CostRot90Ctrl->SetValue( m_CurrentModule->GetPlacementCost90() );
@ -583,7 +590,8 @@ void DIALOG_MODULE_BOARD_EDITOR::OnOkClick( wxCommandEvent& event )
modpos.x = ValueFromTextCtrl( *m_ModPositionX ); modpos.x = ValueFromTextCtrl( *m_ModPositionX );
modpos.y = ValueFromTextCtrl( *m_ModPositionY ); modpos.y = ValueFromTextCtrl( *m_ModPositionY );
m_CurrentModule->SetPosition( modpos ); m_CurrentModule->SetPosition( modpos );
m_CurrentModule->SetLocked( m_AutoPlaceCtrl->GetSelection() == 1 ); m_CurrentModule->SetLocked( m_AutoPlaceCtrl->GetSelection() == 2 );
m_CurrentModule->SetPadsLocked( m_AutoPlaceCtrl->GetSelection() == 1 );
switch( m_AttributsCtrl->GetSelection() ) switch( m_AttributsCtrl->GetSelection() )
{ {

View File

@ -143,10 +143,10 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
m_AttributsCtrl->SetSelection( 0 ); m_AttributsCtrl->SetSelection( 0 );
bSizerAttrib->Add( m_AttributsCtrl, 1, wxALL|wxEXPAND, 5 ); bSizerAttrib->Add( m_AttributsCtrl, 1, wxALL|wxEXPAND, 5 );
wxString m_AutoPlaceCtrlChoices[] = { _("Free"), _("Locked") }; wxString m_AutoPlaceCtrlChoices[] = { _("Free"), _("Lock pads"), _("Lock module") };
int m_AutoPlaceCtrlNChoices = sizeof( m_AutoPlaceCtrlChoices ) / sizeof( wxString ); int m_AutoPlaceCtrlNChoices = sizeof( m_AutoPlaceCtrlChoices ) / sizeof( wxString );
m_AutoPlaceCtrl = new wxRadioBox( m_PanelProperties, wxID_ANY, _("Move and Place"), wxDefaultPosition, wxDefaultSize, m_AutoPlaceCtrlNChoices, m_AutoPlaceCtrlChoices, 1, wxRA_SPECIFY_COLS ); m_AutoPlaceCtrl = new wxRadioBox( m_PanelProperties, wxID_ANY, _("Move and Place"), wxDefaultPosition, wxDefaultSize, m_AutoPlaceCtrlNChoices, m_AutoPlaceCtrlChoices, 1, wxRA_SPECIFY_COLS );
m_AutoPlaceCtrl->SetSelection( 0 ); m_AutoPlaceCtrl->SetSelection( 1 );
bSizerAttrib->Add( m_AutoPlaceCtrl, 1, wxALL|wxEXPAND, 5 ); bSizerAttrib->Add( m_AutoPlaceCtrl, 1, wxALL|wxEXPAND, 5 );

View File

@ -2260,7 +2260,7 @@
<property name="caption"></property> <property name="caption"></property>
<property name="caption_visible">1</property> <property name="caption_visible">1</property>
<property name="center_pane">0</property> <property name="center_pane">0</property>
<property name="choices">&quot;Free&quot; &quot;Locked&quot;</property> <property name="choices">&quot;Free&quot; &quot;Lock pads&quot; &quot;Lock module&quot;</property>
<property name="close_button">1</property> <property name="close_button">1</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property> <property name="context_menu">1</property>
@ -2292,7 +2292,7 @@
<property name="pin_button">1</property> <property name="pin_button">1</property>
<property name="pos"></property> <property name="pos"></property>
<property name="resize">Resizable</property> <property name="resize">Resizable</property>
<property name="selection">0</property> <property name="selection">1</property>
<property name="show">1</property> <property name="show">1</property>
<property name="size"></property> <property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property> <property name="style">wxRA_SPECIFY_COLS</property>

View File

@ -0,0 +1,92 @@
/*
* KiRouter - a push-and-(sometimes-)shove PCB router
*
* Copyright (C) 2014-2015 CERN
* Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Push and Shove diff pair dimensions (gap) settings dialog.
*/
#include "dialog_pns_diff_pair_dimensions.h"
#include <router/pns_sizes_settings.h>
DIALOG_PNS_DIFF_PAIR_DIMENSIONS::DIALOG_PNS_DIFF_PAIR_DIMENSIONS( wxWindow* aParent, PNS_SIZES_SETTINGS& aSizes ) :
DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE( aParent ),
m_traceWidth( this, m_traceWidthText, m_traceWidthUnit ),
m_traceGap( this, m_traceGapText, m_traceGapUnit ),
m_viaGap( this, m_viaGapText, m_viaGapUnit ),
m_sizes( aSizes )
{
m_traceWidth.SetValue( aSizes.DiffPairWidth() );
m_traceGap.SetValue( aSizes.DiffPairGap() );
m_viaGap.SetValue( aSizes.DiffPairViaGap() );
m_viaTraceGapEqual->SetValue( m_sizes.DiffPairViaGapSameAsTraceGap() );
updateCheckbox();
}
void DIALOG_PNS_DIFF_PAIR_DIMENSIONS::updateCheckbox()
{
if( m_viaTraceGapEqual->GetValue() )
{
m_sizes.SetDiffPairViaGapSameAsTraceGap( true );
m_viaGapText->Disable();
m_viaGapLabel->Disable();
m_viaGapUnit->Disable();
} else {
m_sizes.SetDiffPairViaGapSameAsTraceGap( false );
m_viaGapText->Enable();
m_viaGapLabel->Enable();
m_viaGapUnit->Enable();
}
}
void DIALOG_PNS_DIFF_PAIR_DIMENSIONS::OnClose( wxCloseEvent& aEvent )
{
// Do nothing, it is result of ESC pressing
EndModal( 0 );
}
void DIALOG_PNS_DIFF_PAIR_DIMENSIONS::OnOkClick( wxCommandEvent& aEvent )
{
// Save widgets' values to settings
m_sizes.SetDiffPairGap ( m_traceGap.GetValue() );
m_sizes.SetDiffPairViaGap ( m_viaGap.GetValue() );
m_sizes.SetDiffPairWidth ( m_traceWidth.GetValue() );
// todo: verify against design rules
EndModal( 1 );
}
void DIALOG_PNS_DIFF_PAIR_DIMENSIONS::OnCancelClick( wxCommandEvent& aEvent )
{
// Do nothing
EndModal( 0 );
}
void DIALOG_PNS_DIFF_PAIR_DIMENSIONS::OnViaTraceGapEqualCheck( wxCommandEvent& event )
{
event.Skip();
updateCheckbox();
}

View File

@ -0,0 +1,54 @@
/*
* KiRouter - a push-and-(sometimes-)shove PCB router
*
* Copyright (C) 2014-2015 CERN
* Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.or/licenses/>.
*/
/**
* Push and Shove diff pair dimensions (gap) settings dialog.
*/
#ifndef __dialog_diff_pair_dimensions_settings__
#define __dialog_diff_pair_dimensions_settings__
#include <wx_unit_binder.h>
#include "dialog_pns_diff_pair_dimensions_base.h"
class PNS_SIZES_SETTINGS;
class DIALOG_PNS_DIFF_PAIR_DIMENSIONS : public DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE
{
public:
DIALOG_PNS_DIFF_PAIR_DIMENSIONS( wxWindow* aParent, PNS_SIZES_SETTINGS& aSizes );
virtual void OnClose( wxCloseEvent& aEvent );
virtual void OnOkClick( wxCommandEvent& aEvent );
virtual void OnCancelClick( wxCommandEvent& aEvent );
virtual void OnViaTraceGapEqualCheck( wxCommandEvent& event );
private:
void updateCheckbox();
WX_UNIT_BINDER m_traceWidth;
WX_UNIT_BINDER m_traceGap;
WX_UNIT_BINDER m_viaGap;
PNS_SIZES_SETTINGS& m_sizes;
};
#endif // __dialog_pns_settings__

View File

@ -0,0 +1,102 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 6 2014)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dialog_pns_diff_pair_dimensions_base.h"
///////////////////////////////////////////////////////////////////////////
DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxSize( 400,-1 ), wxDefaultSize );
wxBoxSizer* bSizer7;
bSizer7 = new wxBoxSizer( wxVERTICAL );
wxFlexGridSizer* fgSizer1;
fgSizer1 = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizer1->AddGrowableCol( 1 );
fgSizer1->SetFlexibleDirection( wxBOTH );
fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_traceWidthLabel = new wxStaticText( this, wxID_ANY, _("Width:"), wxDefaultPosition, wxDefaultSize, 0 );
m_traceWidthLabel->Wrap( -1 );
fgSizer1->Add( m_traceWidthLabel, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
m_traceWidthText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer1->Add( m_traceWidthText, 0, wxALL|wxEXPAND, 5 );
m_traceWidthUnit = new wxStaticText( this, wxID_ANY, _("u"), wxDefaultPosition, wxDefaultSize, 0 );
m_traceWidthUnit->Wrap( -1 );
fgSizer1->Add( m_traceWidthUnit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_traceGapLabel = new wxStaticText( this, wxID_ANY, _("Trace gap:"), wxDefaultPosition, wxDefaultSize, 0 );
m_traceGapLabel->Wrap( -1 );
fgSizer1->Add( m_traceGapLabel, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
m_traceGapText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer1->Add( m_traceGapText, 0, wxALL|wxEXPAND, 5 );
m_traceGapUnit = new wxStaticText( this, wxID_ANY, _("u"), wxDefaultPosition, wxDefaultSize, 0 );
m_traceGapUnit->Wrap( -1 );
m_traceGapUnit->SetMaxSize( wxSize( 40,-1 ) );
fgSizer1->Add( m_traceGapUnit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_viaGapLabel = new wxStaticText( this, wxID_ANY, _("Via gap:"), wxDefaultPosition, wxDefaultSize, 0 );
m_viaGapLabel->Wrap( -1 );
m_viaGapLabel->Enable( false );
fgSizer1->Add( m_viaGapLabel, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 );
m_viaGapText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_viaGapText->Enable( false );
fgSizer1->Add( m_viaGapText, 0, wxALL|wxEXPAND, 5 );
m_viaGapUnit = new wxStaticText( this, wxID_ANY, _("u"), wxDefaultPosition, wxDefaultSize, 0 );
m_viaGapUnit->Wrap( -1 );
m_viaGapUnit->Enable( false );
m_viaGapUnit->SetMaxSize( wxSize( 40,-1 ) );
fgSizer1->Add( m_viaGapUnit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
bSizer7->Add( fgSizer1, 0, wxEXPAND, 5 );
m_viaTraceGapEqual = new wxCheckBox( this, wxID_ANY, _("Via gap same as trace gap"), wxDefaultPosition, wxDefaultSize, 0 );
m_viaTraceGapEqual->SetValue(true);
bSizer7->Add( m_viaTraceGapEqual, 0, wxALL|wxEXPAND, 5 );
m_stdButtons = new wxStdDialogButtonSizer();
m_stdButtonsOK = new wxButton( this, wxID_OK );
m_stdButtons->AddButton( m_stdButtonsOK );
m_stdButtonsCancel = new wxButton( this, wxID_CANCEL );
m_stdButtons->AddButton( m_stdButtonsCancel );
m_stdButtons->Realize();
bSizer7->Add( m_stdButtons, 0, wxEXPAND, 5 );
this->SetSizer( bSizer7 );
this->Layout();
// Connect Events
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::OnClose ) );
m_viaTraceGapEqual->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::onViaTraceGapEqualCheck ), NULL, this );
m_stdButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::OnCancelClick ), NULL, this );
m_stdButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::OnOkClick ), NULL, this );
}
DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::~DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE()
{
// Disconnect Events
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::OnClose ) );
m_viaTraceGapEqual->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::onViaTraceGapEqualCheck ), NULL, this );
m_stdButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::OnCancelClick ), NULL, this );
m_stdButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE::OnOkClick ), NULL, this );
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,68 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 6 2014)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE_H__
#define __DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
class DIALOG_SHIM;
#include "dialog_shim.h"
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/textctrl.h>
#include <wx/sizer.h>
#include <wx/checkbox.h>
#include <wx/button.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE
///////////////////////////////////////////////////////////////////////////////
class DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE : public DIALOG_SHIM
{
private:
protected:
wxStaticText* m_traceWidthLabel;
wxTextCtrl* m_traceWidthText;
wxStaticText* m_traceWidthUnit;
wxStaticText* m_traceGapLabel;
wxTextCtrl* m_traceGapText;
wxStaticText* m_traceGapUnit;
wxStaticText* m_viaGapLabel;
wxTextCtrl* m_viaGapText;
wxStaticText* m_viaGapUnit;
wxCheckBox* m_viaTraceGapEqual;
wxStdDialogButtonSizer* m_stdButtons;
wxButton* m_stdButtonsOK;
wxButton* m_stdButtonsCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void onViaTraceGapEqualCheck( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Differential Pair Dimensions"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 400,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE();
};
#endif //__DIALOG_PNS_DIFF_PAIR_DIMENSIONS_BASE_H__

View File

@ -0,0 +1,114 @@
/*
* KiRouter - a push-and-(sometimes-)shove PCB router
*
* Copyright (C) 2014-2015 CERN
* Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Length tuner settings dialog.
*/
#include "dialog_pns_length_tuning_settings.h"
#include <router/pns_meander_placer.h>
DIALOG_PNS_LENGTH_TUNING_SETTINGS::DIALOG_PNS_LENGTH_TUNING_SETTINGS( wxWindow* aParent, PNS_MEANDER_SETTINGS& aSettings, PNS_ROUTER_MODE aMode ) :
DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE( aParent ),
m_minAmpl( this, m_minAmplText, m_minAmplUnit ),
m_maxAmpl( this, m_maxAmplText, m_maxAmplUnit ),
m_spacing( this, m_spacingText, m_spacingUnit ),
m_targetLength( this, m_targetLengthText, m_targetLengthUnit ),
m_settings( aSettings ),
m_mode( aMode )
{
m_miterStyle->Enable( false );
m_radiusText->Enable( aMode != PNS_MODE_TUNE_DIFF_PAIR );
//m_minAmpl.Enable ( aMode != PNS_MODE_TUNE_DIFF_PAIR_SKEW );
m_minAmpl.SetValue( m_settings.m_minAmplitude );
m_maxAmpl.SetValue( m_settings.m_maxAmplitude );
m_spacing.SetValue( m_settings.m_spacing );
m_radiusText->SetValue( wxString::Format( wxT( "%i" ), m_settings.m_cornerRadiusPercentage ) );
m_miterStyle->SetSelection( m_settings.m_cornerType == PNS_MEANDER_SETTINGS::ROUND ? 1 : 0 );
switch( aMode )
{
case PNS_MODE_TUNE_SINGLE:
SetTitle( _( "Single track length tuning" ) );
m_legend->SetBitmap( KiBitmap( tune_single_track_length_legend_xpm ) );
m_targetLength.SetValue( m_settings.m_targetLength );
break;
case PNS_MODE_TUNE_DIFF_PAIR:
SetTitle( _( "Differential pair length tuning" ) );
m_legend->SetBitmap( KiBitmap( tune_diff_pair_length_legend_xpm ) );
m_targetLength.SetValue( m_settings.m_targetLength );
break;
case PNS_MODE_TUNE_DIFF_PAIR_SKEW:
SetTitle( _( "Differential pair skew tuning" ) );
m_legend->SetBitmap( KiBitmap( tune_diff_pair_skew_legend_xpm ) );
m_targetLengthLabel->SetLabel( _( "Target skew: " ) );
m_targetLength.SetValue ( m_settings.m_targetSkew );
break;
default:
break;
}
m_stdButtonsOK->SetDefault();
m_targetLengthText->SetSelection( -1, -1 );
m_targetLengthText->SetFocus();
}
void DIALOG_PNS_LENGTH_TUNING_SETTINGS::OnClose( wxCloseEvent& aEvent )
{
// Do nothing, it is result of ESC pressing
EndModal( 0 );
}
void DIALOG_PNS_LENGTH_TUNING_SETTINGS::OnOkClick( wxCommandEvent& aEvent )
{
// fixme: use validators and TransferDataFromWindow
m_settings.m_minAmplitude = m_minAmpl.GetValue();
m_settings.m_maxAmplitude = m_maxAmpl.GetValue();
m_settings.m_spacing = m_spacing.GetValue();
m_settings.m_cornerRadiusPercentage = wxAtoi( m_radiusText->GetValue() );
if( m_mode == PNS_MODE_TUNE_DIFF_PAIR_SKEW )
m_settings.m_targetSkew = m_targetLength.GetValue();
else
m_settings.m_targetLength = m_targetLength.GetValue();
if( m_settings.m_maxAmplitude < m_settings.m_minAmplitude )
m_settings.m_maxAmplitude = m_settings.m_maxAmplitude;
m_settings.m_cornerType = m_miterStyle->GetSelection() ? PNS_MEANDER_SETTINGS::CHAMFER : PNS_MEANDER_SETTINGS::ROUND;
EndModal( 1 );
}
void DIALOG_PNS_LENGTH_TUNING_SETTINGS::OnCancelClick( wxCommandEvent& aEvent )
{
// Do nothing
EndModal( 0 );
}

View File

@ -0,0 +1,55 @@
/*
* KiRouter - a push-and-(sometimes-)shove PCB router
*
* Copyright (C) 2014 CERN
* Author: Maciej Suminski <maciej.suminski@cern.ch>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.or/licenses/>.
*/
/**
* Push and Shove router settings dialog.
*/
#ifndef __dialog_pns_length_tuning_settings__
#define __dialog_pns_length_tuning_settings__
#include "dialog_pns_length_tuning_settings_base.h"
#include <wx_unit_binder.h>
#include <router/pns_router.h>
class PNS_MEANDER_SETTINGS;
class DIALOG_PNS_LENGTH_TUNING_SETTINGS : public DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE
{
public:
DIALOG_PNS_LENGTH_TUNING_SETTINGS( wxWindow* aParent, PNS_MEANDER_SETTINGS& aSettings, PNS_ROUTER_MODE aMode );
virtual void OnClose( wxCloseEvent& aEvent );
virtual void OnOkClick( wxCommandEvent& aEvent );
virtual void OnCancelClick( wxCommandEvent& aEvent );
private:
WX_UNIT_BINDER m_minAmpl;
WX_UNIT_BINDER m_maxAmpl;
WX_UNIT_BINDER m_spacing;
WX_UNIT_BINDER m_targetLength;
PNS_MEANDER_SETTINGS& m_settings;
PNS_ROUTER_MODE m_mode;
};
#endif // __dialog_pns_settings__

View File

@ -0,0 +1,183 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 6 2014)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dialog_pns_length_tuning_settings_base.h"
///////////////////////////////////////////////////////////////////////////
DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE::DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxSize( 345,668 ), wxDefaultSize );
wxBoxSizer* bMainSizer;
bMainSizer = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizer1;
sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Length/skew") ), wxVERTICAL );
wxFlexGridSizer* fgSizer4;
fgSizer4 = new wxFlexGridSizer( 0, 2, 0, 0 );
fgSizer4->AddGrowableCol( 1 );
fgSizer4->SetFlexibleDirection( wxBOTH );
fgSizer4->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText4 = new wxStaticText( this, wxID_ANY, _("Tune from:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText4->Wrap( -1 );
fgSizer4->Add( m_staticText4, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
wxArrayString m_choicePathFromChoices;
m_choicePathFrom = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePathFromChoices, 0 );
m_choicePathFrom->SetSelection( 0 );
fgSizer4->Add( m_choicePathFrom, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_staticText15 = new wxStaticText( this, wxID_ANY, _("Tune to:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText15->Wrap( -1 );
fgSizer4->Add( m_staticText15, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
wxArrayString m_choice4Choices;
m_choice4 = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choice4Choices, 0 );
m_choice4->SetSelection( 0 );
fgSizer4->Add( m_choice4, 0, wxALL, 5 );
m_staticText3 = new wxStaticText( this, wxID_ANY, _("Constraint:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText3->Wrap( -1 );
fgSizer4->Add( m_staticText3, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
wxString m_constraintSourceChoices[] = { _("from Design Rules"), _("manual") };
int m_constraintSourceNChoices = sizeof( m_constraintSourceChoices ) / sizeof( wxString );
m_constraintSource = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_constraintSourceNChoices, m_constraintSourceChoices, 0 );
m_constraintSource->SetSelection( 1 );
m_constraintSource->Enable( false );
fgSizer4->Add( m_constraintSource, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_targetLengthLabel = new wxStaticText( this, wxID_ANY, _("Target length:"), wxDefaultPosition, wxDefaultSize, 0 );
m_targetLengthLabel->Wrap( -1 );
fgSizer4->Add( m_targetLengthLabel, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
wxGridSizer* gSizer2;
gSizer2 = new wxGridSizer( 0, 2, 0, 0 );
m_targetLengthText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gSizer2->Add( m_targetLengthText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_targetLengthUnit = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
m_targetLengthUnit->Wrap( -1 );
gSizer2->Add( m_targetLengthUnit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
fgSizer4->Add( gSizer2, 1, wxEXPAND, 5 );
sbSizer1->Add( fgSizer4, 1, wxEXPAND, 5 );
bMainSizer->Add( sbSizer1, 0, wxEXPAND|wxALL, 5 );
wxStaticBoxSizer* sbSizer2;
sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Meandering") ), wxVERTICAL );
m_legend = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
sbSizer2->Add( m_legend, 1, wxALL|wxEXPAND, 5 );
wxFlexGridSizer* fgSizer3;
fgSizer3 = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizer3->AddGrowableCol( 2 );
fgSizer3->SetFlexibleDirection( wxBOTH );
fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText9 = new wxStaticText( this, wxID_ANY, _("Min amplitude (Amin):"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText9->Wrap( -1 );
fgSizer3->Add( m_staticText9, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_minAmplText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3->Add( m_minAmplText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_minAmplUnit = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
m_minAmplUnit->Wrap( -1 );
fgSizer3->Add( m_minAmplUnit, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
m_staticText91 = new wxStaticText( this, wxID_ANY, _("Max amplitude (Amax):"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText91->Wrap( -1 );
fgSizer3->Add( m_staticText91, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_maxAmplText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3->Add( m_maxAmplText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_maxAmplUnit = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
m_maxAmplUnit->Wrap( -1 );
fgSizer3->Add( m_maxAmplUnit, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
m_staticText11 = new wxStaticText( this, wxID_ANY, _("Spacing (s):"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText11->Wrap( -1 );
fgSizer3->Add( m_staticText11, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_spacingText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3->Add( m_spacingText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_spacingUnit = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
m_spacingUnit->Wrap( -1 );
fgSizer3->Add( m_spacingUnit, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
m_staticText13 = new wxStaticText( this, wxID_ANY, _("Miter radius (r):"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText13->Wrap( -1 );
fgSizer3->Add( m_staticText13, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_radiusText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3->Add( m_radiusText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_radiusUnit = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
m_radiusUnit->Wrap( -1 );
fgSizer3->Add( m_radiusUnit, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
m_staticText14 = new wxStaticText( this, wxID_ANY, _("Miter style:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText14->Wrap( -1 );
m_staticText14->Enable( false );
fgSizer3->Add( m_staticText14, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
wxString m_miterStyleChoices[] = { _("45 degree"), _("arc") };
int m_miterStyleNChoices = sizeof( m_miterStyleChoices ) / sizeof( wxString );
m_miterStyle = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_miterStyleNChoices, m_miterStyleChoices, 0 );
m_miterStyle->SetSelection( 0 );
m_miterStyle->Enable( false );
fgSizer3->Add( m_miterStyle, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
sbSizer2->Add( fgSizer3, 1, wxEXPAND, 5 );
bMainSizer->Add( sbSizer2, 1, wxALL|wxEXPAND, 5 );
m_stdButtons = new wxStdDialogButtonSizer();
m_stdButtonsOK = new wxButton( this, wxID_OK );
m_stdButtons->AddButton( m_stdButtonsOK );
m_stdButtonsCancel = new wxButton( this, wxID_CANCEL );
m_stdButtons->AddButton( m_stdButtonsCancel );
m_stdButtons->Realize();
bMainSizer->Add( m_stdButtons, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
this->SetSizer( bMainSizer );
this->Layout();
// Connect Events
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE::OnClose ) );
m_stdButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE::OnCancelClick ), NULL, this );
m_stdButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE::OnOkClick ), NULL, this );
}
DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE::~DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE()
{
// Disconnect Events
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE::OnClose ) );
m_stdButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE::OnCancelClick ), NULL, this );
m_stdButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE::OnOkClick ), NULL, this );
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,86 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 6 2014)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE_H__
#define __DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
class DIALOG_SHIM;
#include "dialog_shim.h"
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/choice.h>
#include <wx/textctrl.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/statbmp.h>
#include <wx/button.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE
///////////////////////////////////////////////////////////////////////////////
class DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE : public DIALOG_SHIM
{
private:
protected:
wxStaticText* m_staticText4;
wxChoice* m_choicePathFrom;
wxStaticText* m_staticText15;
wxChoice* m_choice4;
wxStaticText* m_staticText3;
wxChoice* m_constraintSource;
wxStaticText* m_targetLengthLabel;
wxTextCtrl* m_targetLengthText;
wxStaticText* m_targetLengthUnit;
wxStaticBitmap* m_legend;
wxStaticText* m_staticText9;
wxTextCtrl* m_minAmplText;
wxStaticText* m_minAmplUnit;
wxStaticText* m_staticText91;
wxTextCtrl* m_maxAmplText;
wxStaticText* m_maxAmplUnit;
wxStaticText* m_staticText11;
wxTextCtrl* m_spacingText;
wxStaticText* m_spacingUnit;
wxStaticText* m_staticText13;
wxTextCtrl* m_radiusText;
wxStaticText* m_radiusUnit;
wxStaticText* m_staticText14;
wxChoice* m_miterStyle;
wxStdDialogButtonSizer* m_stdButtons;
wxButton* m_stdButtonsOK;
wxButton* m_stdButtonsCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Trace length tuning"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 345,668 ), long style = wxDEFAULT_DIALOG_STYLE );
~DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE();
};
#endif //__DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE_H__

View File

@ -31,14 +31,19 @@
DIALOG_TRACK_VIA_SIZE::DIALOG_TRACK_VIA_SIZE( wxWindow* aParent, BOARD_DESIGN_SETTINGS& aSettings ) : DIALOG_TRACK_VIA_SIZE::DIALOG_TRACK_VIA_SIZE( wxWindow* aParent, BOARD_DESIGN_SETTINGS& aSettings ) :
DIALOG_TRACK_VIA_SIZE_BASE( aParent ), DIALOG_TRACK_VIA_SIZE_BASE( aParent ),
m_trackWidth( aParent, m_trackWidthText, m_trackWidthLabel ),
m_viaDiameter( aParent, m_viaDiameterText, m_viaDiameterLabel ),
m_viaDrill( aParent, m_viaDrillText, m_viaDrillLabel ),
m_settings( aSettings ) m_settings( aSettings )
{ {
// Load router settings to dialog fields // Load router settings to dialog fields
m_trackWidth->SetValue( To_User_Unit( m_trackWidth->GetUnits(), m_settings.GetCustomTrackWidth() ) ); m_trackWidth.SetValue( m_settings.GetCustomTrackWidth() );
m_viaDiameter->SetValue( To_User_Unit( m_viaDiameter->GetUnits(), m_settings.GetCustomViaSize() ) ); m_viaDiameter.SetValue( m_settings.GetCustomViaSize() );
m_viaDrill->SetValue( To_User_Unit( m_viaDrill->GetUnits(), m_settings.GetCustomViaDrill() ) ); m_viaDrill.SetValue( m_settings.GetCustomViaDrill() );
m_trackWidth->SetFocus(); m_trackWidthText->SetFocus();
m_trackWidthText->SetSelection( -1, -1 );
m_stdButtonsOK->SetDefault();
// Pressing ENTER when any of the text input fields is active applies changes // Pressing ENTER when any of the text input fields is active applies changes
#if wxCHECK_VERSION( 3, 0, 0 ) #if wxCHECK_VERSION( 3, 0, 0 )
@ -46,7 +51,7 @@ DIALOG_TRACK_VIA_SIZE::DIALOG_TRACK_VIA_SIZE( wxWindow* aParent, BOARD_DESIGN_SE
#else #else
Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_TRACK_VIA_SIZE::onOkClick ), NULL, this ); Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_TRACK_VIA_SIZE::onOkClick ), NULL, this );
#endif #endif
Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_TRACK_VIA_SIZE::onClose ) ); Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_TRACK_VIA_SIZE::onClose ) );
} }
@ -54,11 +59,11 @@ DIALOG_TRACK_VIA_SIZE::DIALOG_TRACK_VIA_SIZE( wxWindow* aParent, BOARD_DESIGN_SE
bool DIALOG_TRACK_VIA_SIZE::check() bool DIALOG_TRACK_VIA_SIZE::check()
{ {
// Wrong input // Wrong input
if( !m_trackWidth->GetValue() || !m_viaDiameter->GetValue() || !m_viaDrill->GetValue() ) if( m_trackWidth.GetValue() < 0 || m_viaDiameter.GetValue() < 0 || m_viaDrill.GetValue() < 0 )
return false; return false;
// Via drill should be smaller than via diameter // Via drill should be smaller than via diameter
if( m_viaDrill->GetValue() >= m_viaDiameter->GetValue() ) if( m_viaDrill.GetValue() >= m_viaDiameter.GetValue() )
return false; return false;
return true; return true;
@ -76,15 +81,15 @@ void DIALOG_TRACK_VIA_SIZE::onOkClick( wxCommandEvent& aEvent )
if( check() ) if( check() )
{ {
// Store dialog values to the router settings // Store dialog values to the router settings
m_settings.SetCustomTrackWidth( From_User_Unit( m_trackWidth->GetUnits(), *m_trackWidth->GetValue() ) ); m_settings.SetCustomTrackWidth( m_trackWidth.GetValue() );
m_settings.SetCustomViaSize( From_User_Unit( m_viaDiameter->GetUnits(), *m_viaDiameter->GetValue() ) ); m_settings.SetCustomViaSize( m_viaDiameter.GetValue() );
m_settings.SetCustomViaDrill( From_User_Unit( m_viaDrill->GetUnits(), *m_viaDrill->GetValue() ) ); m_settings.SetCustomViaDrill( m_viaDrill.GetValue() );
EndModal( 1 ); EndModal( 1 );
} }
else else
{ {
DisplayError( GetParent(), _( "Settings are incorrect" ) ); DisplayError( GetParent(), _( "Settings are incorrect" ) );
m_trackWidth->SetFocus(); m_trackWidthText->SetFocus();
} }
} }

View File

@ -25,6 +25,8 @@
#ifndef __dialog_track_via_size__ #ifndef __dialog_track_via_size__
#define __dialog_track_via_size__ #define __dialog_track_via_size__
#include <wx_unit_binder.h>
#include "dialog_track_via_size_base.h" #include "dialog_track_via_size_base.h"
class BOARD_DESIGN_SETTINGS; class BOARD_DESIGN_SETTINGS;
@ -32,21 +34,25 @@ class BOARD_DESIGN_SETTINGS;
/** Implementing DIALOG_TRACK_VIA_SIZE_BASE */ /** Implementing DIALOG_TRACK_VIA_SIZE_BASE */
class DIALOG_TRACK_VIA_SIZE : public DIALOG_TRACK_VIA_SIZE_BASE class DIALOG_TRACK_VIA_SIZE : public DIALOG_TRACK_VIA_SIZE_BASE
{ {
public: public:
/** Constructor */ /** Constructor */
DIALOG_TRACK_VIA_SIZE( wxWindow* aParent, BOARD_DESIGN_SETTINGS& aSettings ); DIALOG_TRACK_VIA_SIZE( wxWindow* aParent, BOARD_DESIGN_SETTINGS& aSettings );
protected: protected:
// Routings settings that are modified by the dialog. WX_UNIT_BINDER m_trackWidth;
BOARD_DESIGN_SETTINGS& m_settings; WX_UNIT_BINDER m_viaDiameter;
WX_UNIT_BINDER m_viaDrill;
///> Checks if values given in the dialog are sensible. // Routings settings that are modified by the dialog.
bool check(); BOARD_DESIGN_SETTINGS& m_settings;
// Handlers for DIALOG_TRACK_VIA_SIZE_BASE events. ///> Checks if values given in the dialog are sensible.
void onClose( wxCloseEvent& aEvent ); bool check();
void onOkClick( wxCommandEvent& aEvent );
void onCancelClick( wxCommandEvent& aEvent ); // Handlers for DIALOG_TRACK_VIA_SIZE_BASE events.
void onClose( wxCloseEvent& aEvent );
void onOkClick( wxCommandEvent& aEvent );
void onCancelClick( wxCommandEvent& aEvent );
}; };
#endif // __dialog_track_via_size__ #endif // __dialog_track_via_size__

View File

@ -16,14 +16,46 @@ DIALOG_TRACK_VIA_SIZE_BASE::DIALOG_TRACK_VIA_SIZE_BASE( wxWindow* parent, wxWind
wxBoxSizer* bSizes; wxBoxSizer* bSizes;
bSizes = new wxBoxSizer( wxVERTICAL ); bSizes = new wxBoxSizer( wxVERTICAL );
m_trackWidth = new WX_UNIT_TEXT( this, _("Track width:") ); wxFlexGridSizer* fgSizer1;
bSizes->Add( m_trackWidth, 0, wxALL|wxEXPAND, 5 ); fgSizer1 = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizer1->SetFlexibleDirection( wxBOTH );
fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_viaDiameter = new WX_UNIT_TEXT( this, _("Via diameter:") ); m_staticText3 = new wxStaticText( this, wxID_ANY, _("Track width:"), wxDefaultPosition, wxDefaultSize, 0 );
bSizes->Add( m_viaDiameter, 0, wxALL|wxEXPAND, 5 ); m_staticText3->Wrap( -1 );
fgSizer1->Add( m_staticText3, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_viaDrill = new WX_UNIT_TEXT( this, _("Via drill:") ); m_trackWidthText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
bSizes->Add( m_viaDrill, 0, wxALL|wxEXPAND, 5 ); fgSizer1->Add( m_trackWidthText, 1, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
m_trackWidthLabel = new wxStaticText( this, wxID_ANY, _("inch"), wxDefaultPosition, wxDefaultSize, 0 );
m_trackWidthLabel->Wrap( -1 );
fgSizer1->Add( m_trackWidthLabel, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_staticText5 = new wxStaticText( this, wxID_ANY, _("Via diameter:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText5->Wrap( -1 );
fgSizer1->Add( m_staticText5, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_viaDiameterText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer1->Add( m_viaDiameterText, 1, wxALL|wxEXPAND, 5 );
m_viaDiameterLabel = new wxStaticText( this, wxID_ANY, _("u"), wxDefaultPosition, wxDefaultSize, 0 );
m_viaDiameterLabel->Wrap( -1 );
fgSizer1->Add( m_viaDiameterLabel, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_staticText7 = new wxStaticText( this, wxID_ANY, _("Via drill:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText7->Wrap( -1 );
fgSizer1->Add( m_staticText7, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_viaDrillText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer1->Add( m_viaDrillText, 1, wxALL|wxEXPAND, 5 );
m_viaDrillLabel = new wxStaticText( this, wxID_ANY, _("u"), wxDefaultPosition, wxDefaultSize, 0 );
m_viaDrillLabel->Wrap( -1 );
fgSizer1->Add( m_viaDrillLabel, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizes->Add( fgSizer1, 1, wxEXPAND|wxALL, 5 );
m_stdButtons = new wxStdDialogButtonSizer(); m_stdButtons = new wxStdDialogButtonSizer();
m_stdButtonsOK = new wxButton( this, wxID_OK ); m_stdButtonsOK = new wxButton( this, wxID_OK );

File diff suppressed because it is too large Load Diff

View File

@ -11,12 +11,13 @@
#include <wx/artprov.h> #include <wx/artprov.h>
#include <wx/xrc/xmlres.h> #include <wx/xrc/xmlres.h>
#include <wx/intl.h> #include <wx/intl.h>
#include <wxunittext.h> #include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h> #include <wx/gdicmn.h>
#include <wx/font.h> #include <wx/font.h>
#include <wx/colour.h> #include <wx/colour.h>
#include <wx/settings.h> #include <wx/settings.h>
#include <wx/string.h> #include <wx/textctrl.h>
#include <wx/sizer.h> #include <wx/sizer.h>
#include <wx/button.h> #include <wx/button.h>
#include <wx/dialog.h> #include <wx/dialog.h>
@ -32,9 +33,15 @@ class DIALOG_TRACK_VIA_SIZE_BASE : public wxDialog
private: private:
protected: protected:
WX_UNIT_TEXT* m_trackWidth; wxStaticText* m_staticText3;
WX_UNIT_TEXT* m_viaDiameter; wxTextCtrl* m_trackWidthText;
WX_UNIT_TEXT* m_viaDrill; wxStaticText* m_trackWidthLabel;
wxStaticText* m_staticText5;
wxTextCtrl* m_viaDiameterText;
wxStaticText* m_viaDiameterLabel;
wxStaticText* m_staticText7;
wxTextCtrl* m_viaDrillText;
wxStaticText* m_viaDrillLabel;
wxStdDialogButtonSizer* m_stdButtons; wxStdDialogButtonSizer* m_stdButtons;
wxButton* m_stdButtonsOK; wxButton* m_stdButtonsOK;
wxButton* m_stdButtonsCancel; wxButton* m_stdButtonsCancel;

View File

@ -129,7 +129,6 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway,
wxAcceleratorTable table( ACCEL_TABLE_CNT, accels ); wxAcceleratorTable table( ACCEL_TABLE_CNT, accels );
m_FrameName = FOOTPRINT_WIZARD_FRAME_NAME;
m_configPath = wxT( "FootprintWizard" ); m_configPath = wxT( "FootprintWizard" );
m_showAxis = true; // true to draw axis. m_showAxis = true; // true to draw axis.

View File

@ -1549,7 +1549,7 @@ void LEGACY_PLUGIN::loadPAD( MODULE* aModule )
else else
attribute = PAD_STANDARD; attribute = PAD_STANDARD;
data = strtok_r( NULL, delims, &saveptr ); // skip BufCar strtok_r( NULL, delims, &saveptr ); // skip BufCar
data = strtok_r( NULL, delims, &saveptr ); data = strtok_r( NULL, delims, &saveptr );
LEG_MASK layer_mask = hexParse( data ); LEG_MASK layer_mask = hexParse( data );

View File

@ -28,6 +28,8 @@
* @brief Footprints selection and loading functions. * @brief Footprints selection and loading functions.
*/ */
#include <boost/bind.hpp>
#include <fctsys.h> #include <fctsys.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <pcb_draw_panel_gal.h> #include <pcb_draw_panel_gal.h>
@ -61,6 +63,10 @@ static void DisplayCmpDoc( wxString& aName, void* aData );
static FOOTPRINT_LIST MList; static FOOTPRINT_LIST MList;
static void clearModuleItemFlags( BOARD_ITEM* aItem )
{
aItem->ClearFlags();
}
bool FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD( MODULE* aModule ) bool FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD( MODULE* aModule )
{ {
@ -92,9 +98,10 @@ bool FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD( MODULE* aModule )
aModule = newModule; aModule = newModule;
GetBoard()->Add( newModule );
newModule->ClearFlags(); newModule->ClearFlags();
newModule->RunOnChildren( boost::bind( &clearModuleItemFlags, _1 ) );
GetBoard()->Add( newModule );
// Clear references to any net info, because the footprint editor // Clear references to any net info, because the footprint editor
// does know any thing about nets handled by the current edited board. // does know any thing about nets handled by the current edited board.

View File

@ -433,6 +433,49 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
_( "Set the origin point for the grid" ), _( "Set the origin point for the grid" ),
KiBitmap( grid_select_axis_xpm ) ); KiBitmap( grid_select_axis_xpm ) );
wxMenu* routeMenu = new wxMenu;
AddMenuItem( routeMenu, ID_TRACK_BUTT,
_( "Single Track" ),
_( "Interactively route a single track" ),
KiBitmap( add_tracks_xpm ) );
AddMenuItem( routeMenu, ID_DIFF_PAIR_BUTT,
_( "Differential Pair" ),
_( "Interactively route a differential pair" ),
KiBitmap( add_tracks_xpm ) );
routeMenu->AppendSeparator();
AddMenuItem( routeMenu, ID_TUNE_SINGLE_TRACK_LEN_BUTT,
_( "Tune Track Length" ),
_( "Tune length of a single track" ),
KiBitmap( add_tracks_xpm ) );
AddMenuItem( routeMenu, ID_TUNE_DIFF_PAIR_LEN_BUTT,
_( "Tune Differential Pair Length" ),
_( "Tune length of a differential pair" ),
KiBitmap( add_tracks_xpm ) );
AddMenuItem( routeMenu, ID_TUNE_DIFF_PAIR_SKEW_BUTT,
_( "Tune Differential Pair Skew/Phase" ),
_( "Tune skew/phase of a differential pair" ),
KiBitmap( add_tracks_xpm ) );
/* Fixme: add icons & missing menu entries!
routeMenu->AppendSeparator();
AddMenuItem( routeMenu, ID_MENU_MITER_TRACES,
_( "Miter traces..." ),
_( "Miter trace corners with arcs" ),
KiBitmap( grid_select_axis_xpm ) );
AddMenuItem( routeMenu, ID_MENU_ADD_TEARDROPS,
_( "Teardrops..." ),
_( "Add teardrops to pads/vias" ),
KiBitmap( grid_select_axis_xpm ) );
*/
//----- Preferences and configuration menu------------------------------------ //----- Preferences and configuration menu------------------------------------
wxMenu* configmenu = new wxMenu; wxMenu* configmenu = new wxMenu;
@ -467,6 +510,11 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
_( "Select how items (pads, tracks texts ... ) are displayed" ), _( "Select how items (pads, tracks texts ... ) are displayed" ),
KiBitmap( display_options_xpm ) ); KiBitmap( display_options_xpm ) );
AddMenuItem( configmenu, ID_MENU_INTERACTIVE_ROUTER_SETTINGS,
_( "Interactive Routing" ),
_( "Configure Interactive Routing." ),
KiBitmap( add_tracks_xpm ) ); // fixme: icon
//--- dimensions submenu ------------------------------------------------------ //--- dimensions submenu ------------------------------------------------------
wxMenu* dimensionsMenu = new wxMenu; wxMenu* dimensionsMenu = new wxMenu;
@ -488,6 +536,11 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
_( "Adjust the global clearance between pads and the solder resist mask" ), _( "Adjust the global clearance between pads and the solder resist mask" ),
KiBitmap( pads_mask_layers_xpm ) ); KiBitmap( pads_mask_layers_xpm ) );
AddMenuItem( dimensionsMenu, ID_MENU_DIFF_PAIR_DIMENSIONS,
_( "Differential Pairs" ),
_( "Define the global gap/width for differential pairs." ),
KiBitmap( add_tracks_xpm ) ); // fixme: icon
dimensionsMenu->AppendSeparator(); dimensionsMenu->AppendSeparator();
AddMenuItem( dimensionsMenu, ID_CONFIG_SAVE, AddMenuItem( dimensionsMenu, ID_CONFIG_SAVE,
_( "&Save" ), _( "Save dimension preferences" ), _( "&Save" ), _( "Save dimension preferences" ),
@ -592,6 +645,7 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
menuBar->Append( editMenu, _( "&Edit" ) ); menuBar->Append( editMenu, _( "&Edit" ) );
menuBar->Append( viewMenu, _( "&View" ) ); menuBar->Append( viewMenu, _( "&View" ) );
menuBar->Append( placeMenu, _( "&Place" ) ); menuBar->Append( placeMenu, _( "&Place" ) );
menuBar->Append( routeMenu, _( "&Route" ) );
menuBar->Append( configmenu, _( "P&references" ) ); menuBar->Append( configmenu, _( "P&references" ) );
menuBar->Append( dimensionsMenu, _( "D&imensions" ) ); menuBar->Append( dimensionsMenu, _( "D&imensions" ) );
menuBar->Append( toolsMenu, _( "&Tools" ) ); menuBar->Append( toolsMenu, _( "&Tools" ) );

View File

@ -53,6 +53,7 @@
#include <modview_frame.h> #include <modview_frame.h>
#include <collectors.h> #include <collectors.h>
#include <tool/tool_manager.h> #include <tool/tool_manager.h>
#include <tools/common_actions.h>
#include <dialog_edit_module_for_Modedit.h> #include <dialog_edit_module_for_Modedit.h>
#include <dialog_move_exact.h> #include <dialog_move_exact.h>
@ -433,6 +434,8 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
break; break;
} }
m_toolManager->RunAction( COMMON_ACTIONS::selectionClear, true );
// Create the "new" module // Create the "new" module
MODULE* newmodule = new MODULE( *module_in_edit ); MODULE* newmodule = new MODULE( *module_in_edit );
newmodule->SetParent( mainpcb ); newmodule->SetParent( mainpcb );
@ -485,6 +488,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
RN_DATA* ratsnest = pcbframe->GetBoard()->GetRatsnest(); RN_DATA* ratsnest = pcbframe->GetBoard()->GetRatsnest();
ratsnest->Update( newmodule ); ratsnest->Update( newmodule );
ratsnest->Recalculate(); ratsnest->Recalculate();
GetGalCanvas()->ForceRefresh();
} }
} }
break; break;

View File

@ -107,22 +107,22 @@ PARAM_CFG_ARRAY& FOOTPRINT_EDIT_FRAME::GetConfigurationSettings()
// design settings // design settings
m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorGrlineWidth" ), m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorGrlineWidth" ),
&settings.m_ModuleSegmentWidth, &settings.m_ModuleSegmentWidth,
Millimeter2iu( 0.15 ), Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS ),
Millimeter2iu( 0.01 ), Millimeter2iu( 100.0 ), Millimeter2iu( 0.01 ), Millimeter2iu( 100.0 ),
NULL, 1/IU_PER_MM ) ); NULL, 1/IU_PER_MM ) );
m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultSizeH" ), m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultSizeH" ),
&settings.m_ModuleTextSize.x, &settings.m_ModuleTextSize.x,
Millimeter2iu( 1.5 ), Millimeter2iu( DEFAULT_TEXT_MODULE_SIZE ),
Millimeter2iu( 0.01 ), Millimeter2iu( 100.0 ), Millimeter2iu( 0.01 ), Millimeter2iu( 100.0 ),
NULL, 1/IU_PER_MM ) ); NULL, 1/IU_PER_MM ) );
m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultSizeV" ), m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultSizeV" ),
&settings.m_ModuleTextSize.y, &settings.m_ModuleTextSize.y,
Millimeter2iu( 1.5 ), Millimeter2iu( DEFAULT_TEXT_MODULE_SIZE ),
Millimeter2iu(0.01), Millimeter2iu( 100.0 ), Millimeter2iu(0.01), Millimeter2iu( 100.0 ),
NULL, 1/IU_PER_MM ) ); NULL, 1/IU_PER_MM ) );
m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultThickness" ), m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultThickness" ),
&settings.m_ModuleTextWidth, &settings.m_ModuleTextWidth,
Millimeter2iu( 0.15 ), Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS ),
Millimeter2iu( 0.01 ), Millimeter2iu( 20.0 ), Millimeter2iu( 0.01 ), Millimeter2iu( 20.0 ),
NULL, 1/IU_PER_MM ) ); NULL, 1/IU_PER_MM ) );

View File

@ -199,7 +199,6 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
wxDefaultPosition, wxDefaultSize, wxDefaultPosition, wxDefaultSize,
KICAD_DEFAULT_DRAWFRAME_STYLE, GetFootprintEditorFrameName() ) KICAD_DEFAULT_DRAWFRAME_STYLE, GetFootprintEditorFrameName() )
{ {
m_FrameName = GetFootprintEditorFrameName();
m_showBorderAndTitleBlock = false; // true to show the frame references m_showBorderAndTitleBlock = false; // true to show the frame references
m_showAxis = true; // true to show X and Y axis on screen m_showAxis = true; // true to show X and Y axis on screen
m_showGridAxis = true; // show the grid origin axis m_showGridAxis = true; // show the grid origin axis
@ -835,11 +834,11 @@ void FOOTPRINT_EDIT_FRAME::ProcessPreferences( wxCommandEvent& event )
{ {
// Hotkey IDs // Hotkey IDs
case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG: case ID_PREFERENCES_HOTKEY_EXPORT_CONFIG:
ExportHotkeyConfigToFile( g_Module_Editor_Hokeys_Descr ); ExportHotkeyConfigToFile( g_Module_Editor_Hokeys_Descr, wxT( "pcbnew" ) );
break; break;
case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG: case ID_PREFERENCES_HOTKEY_IMPORT_CONFIG:
ImportHotkeyConfigFromFile( g_Module_Editor_Hokeys_Descr ); ImportHotkeyConfigFromFile( g_Module_Editor_Hokeys_Descr, wxT( "pcbnew" ) );
break; break;
case ID_PREFERENCES_HOTKEY_SHOW_EDITOR: case ID_PREFERENCES_HOTKEY_SHOW_EDITOR:

View File

@ -113,7 +113,6 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
if( aFrameType == FRAME_PCB_MODULE_VIEWER_MODAL ) if( aFrameType == FRAME_PCB_MODULE_VIEWER_MODAL )
SetModal( true ); SetModal( true );
m_FrameName = GetFootprintViewerFrameName();
m_configPath = wxT( "FootprintViewer" ); m_configPath = wxT( "FootprintViewer" );
m_showAxis = true; // true to draw axis. m_showAxis = true; // true to draw axis.

View File

@ -207,7 +207,7 @@ void PCB_PAD::AddToModule( MODULE* aModule, int aRotation, bool aEncapsulatedPad
pad->SetDrillSize( wxSize( m_hole, m_hole ) ); pad->SetDrillSize( wxSize( m_hole, m_hole ) );
pad->SetSize( wxSize( m_hole, m_hole ) ); pad->SetSize( wxSize( m_hole, m_hole ) );
pad->SetLayerSet( LSET::AllCuMask() | LSET( 3, B_Mask, F_Mask ) ); pad->SetLayerSet( LSET::AllCuMask() | LSET( 2, B_Mask, F_Mask ) );
} }
else else
{ {

View File

@ -894,7 +894,7 @@ void PCB_PAINTER::draw( const ZONE_CONTAINER* aZone )
} }
std::vector<CPolyPt>::const_iterator polyIterator; std::vector<CPolyPt>::const_iterator polyIterator;
for( polyIterator = polyPoints.begin(); polyIterator != polyPoints.end(); polyIterator++ ) for( polyIterator = polyPoints.begin(); polyIterator != polyPoints.end(); ++polyIterator )
{ {
// Find out all of polygons and then draw them // Find out all of polygons and then draw them
corners.push_back( VECTOR2D( *polyIterator ) ); corners.push_back( VECTOR2D( *polyIterator ) );

View File

@ -68,15 +68,6 @@
#include <tool/tool_manager.h> #include <tool/tool_manager.h>
#include <tool/tool_dispatcher.h> #include <tool/tool_dispatcher.h>
#include <tools/selection_tool.h>
#include <router/router_tool.h>
#include <tools/edit_tool.h>
#include <tools/drawing_tool.h>
#include <tools/point_editor.h>
#include <tools/pcbnew_control.h>
#include <tools/pcb_editor_control.h>
#include <tools/placement_tool.h>
#include <tools/common_actions.h> #include <tools/common_actions.h>
#include <scripting/python_console_frame.h> #include <scripting/python_console_frame.h>
@ -310,13 +301,10 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME )
END_EVENT_TABLE() END_EVENT_TABLE()
#define PCB_EDIT_FRAME_NAME wxT( "PcbFrame" )
PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) : PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
PCB_BASE_EDIT_FRAME( aKiway, aParent, FRAME_PCB, wxT( "Pcbnew" ), wxDefaultPosition, PCB_BASE_EDIT_FRAME( aKiway, aParent, FRAME_PCB, wxT( "Pcbnew" ), wxDefaultPosition,
wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, PCB_EDIT_FRAME_NAME ) wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, PCB_EDIT_FRAME_NAME )
{ {
m_FrameName = PCB_EDIT_FRAME_NAME;
m_showBorderAndTitleBlock = true; // true to display sheet references m_showBorderAndTitleBlock = true; // true to display sheet references
m_showAxis = false; // true to display X and Y axis m_showAxis = false; // true to display X and Y axis
m_showOriginAxis = true; m_showOriginAxis = true;
@ -545,14 +533,8 @@ void PCB_EDIT_FRAME::setupTools()
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager ); m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager );
// Register tools // Register tools
m_toolManager->RegisterTool( new SELECTION_TOOL ); registerAllTools( m_toolManager );
m_toolManager->RegisterTool( new ROUTER_TOOL );
m_toolManager->RegisterTool( new EDIT_TOOL );
m_toolManager->RegisterTool( new DRAWING_TOOL );
m_toolManager->RegisterTool( new POINT_EDITOR );
m_toolManager->RegisterTool( new PCBNEW_CONTROL );
m_toolManager->RegisterTool( new PCB_EDITOR_CONTROL );
m_toolManager->RegisterTool( new PLACEMENT_TOOL );
m_toolManager->ResetTools( TOOL_BASE::RUN ); m_toolManager->ResetTools( TOOL_BASE::RUN );
// Run the selection tool, it is supposed to be always active // Run the selection tool, it is supposed to be always active

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com> * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* *
@ -307,7 +307,7 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
// Must be called before creating the main frame in order to // Must be called before creating the main frame in order to
// display the real hotkeys in menus or tool tips // display the real hotkeys in menus or tool tips
ReadHotkeyConfig( wxT( "PcbFrame" ), g_Board_Editor_Hokeys_Descr ); ReadHotkeyConfig( PCB_EDIT_FRAME_NAME, g_Board_Editor_Hokeys_Descr );
try try
{ {

Some files were not shown because too many files have changed in this diff Show More