////////////////////////////////////////////////////////////////////////////// // / // IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 26/May/2009 12:58:52 / // Copyright 1999-2005 IAR Systems. All rights reserved. / // / // Cpu mode = interwork / // Endian = little / // Stack alignment = 4 / // Source file = D:\pasha\elf\evil_src\miosdel\miosd elka\main.c / // Command line = "D:\pasha\elf\evil_src\miosdel\miosd elka\main.c" / // -D NEWSGOLD -D ELKA -lC "D:\pasha\elf\evil_src\mios / // del\miosd elka\Release_ELKA\List\" -lA / // "D:\pasha\elf\evil_src\miosdel\miosd / // elka\Release_ELKA\List\" -o / // "D:\pasha\elf\evil_src\miosdel\miosd / // elka\Release_ELKA\Obj\" -s9 --no_unroll --cpu_mode / // arm --endian little --cpu ARM926EJ-S --stack_align / // 4 --interwork -e --fpu None --dlib_config / // "D:\pasha\Embedded Workbench 4.0 / // Evaluation2\ARM\LIB\dl5tpainl8n.h" -I / // "D:\pasha\Embedded Workbench 4.0 / // Evaluation2\ARM\INC\" --inline_threshold=2 / // List file = D:\pasha\elf\evil_src\miosdel\miosd / // elka\Release_ELKA\List\main.s79 / // / // / ////////////////////////////////////////////////////////////////////////////// NAME main RTMODEL "StackAlign4", "USED" RTMODEL "__cpu_mode", "__pcs__interwork" RTMODEL "__data_model", "absolute" RTMODEL "__endian", "little" RTMODEL "__rt_version", "6" RSEG CSTACK:DATA:NOROOT(2) PUBWEAK `?*?DATA_ID` MULTWEAK ??Count_GPRS??rT ??DataTable1 EQU 0 ??DataTable10 EQU 0 ??DataTable11 EQU 0 ??DataTable13 EQU 0 ??DataTable14 EQU 0 ??DataTable15 EQU 0 ??DataTable16 EQU 0 ??DataTable17 EQU 0 ??DataTable18 EQU 0 ??DataTable19 EQU 0 ??DataTable2 EQU 0 ??DataTable20 EQU 0 ??DataTable21 EQU 0 ??DataTable22 EQU 0 ??DataTable23 EQU 0 ??DataTable25 EQU 0 ??DataTable26 EQU 0 ??DataTable27 EQU 0 ??DataTable28 EQU 0 ??DataTable29 EQU 0 ??DataTable3 EQU 0 ??DataTable31 EQU 0 ??DataTable32 EQU 0 ??DataTable33 EQU 0 ??DataTable38 EQU 0 ??DataTable39 EQU 0 ??DataTable4 EQU 0 ??DataTable5 EQU 0 ??DataTable6 EQU 0 ??DataTable7 EQU 0 MULTWEAK ??DoScreen??rT MULTWEAK ??DoShowIt??rT MULTWEAK ??DrawBatteryLog??rT MULTWEAK ??DrawGPRSLog??rT MULTWEAK ??DrawSystemLog??rT MULTWEAK ??DrawWeatherLog??rT MULTWEAK ??DrwImg2??rT MULTWEAK ??ElfKiller??rT MULTWEAK ??Execute??rT MULTWEAK ??InitConfig??rA MULTWEAK ??OnKey??rT MULTWEAK ??OnRedraw??rT MULTWEAK ??Parsing??rT MULTWEAK ??UpdateCSMname??rT MULTWEAK ??ascii2ws??rA MULTWEAK ??charger_c??rT MULTWEAK ??check_battery??rT MULTWEAK ??check_gprs??rT MULTWEAK ??create_connect??rT MULTWEAK ??end_socket??rT MULTWEAK ??get_answer??rT MULTWEAK ??get_month??rT MULTWEAK ??kill_data??rA MULTWEAK ??log??rT MULTWEAK ??main??rT MULTWEAK ??maincsm_onclose??rT MULTWEAK ??maincsm_oncreate??rT MULTWEAK ??maincsm_onmessage2??rT MULTWEAK ??maincsm_onmessage??rT MULTWEAK ??method8??rT MULTWEAK ??method9??rT MULTWEAK ??my_keyhook??rT MULTWEAK ??onClose??rT MULTWEAK ??onCreate??rT MULTWEAK ??onFocus??rT MULTWEAK ??onUnfocus??rT MULTWEAK ??reboot_ref??rT MULTWEAK ??runtime_count??rT MULTWEAK ??send_req??rT MULTWEAK ??start_again??rT MULTWEAK ??utf82win??rA MULTWEAK ??write_log??rT MULTWEAK ??write_total??rA PUBWEAK ?init?tab?DATA_I PUBWEAK ?init?tab?DATA_Z PUBLIC Canvas PUBLIC Count_GPRS FUNCTION Count_GPRS,0601H LOCFRAME CSTACK, 12, STACK PUBLIC DoScreen FUNCTION DoScreen,0201H LOCFRAME CSTACK, 20, STACK PUBLIC DoShowIt FUNCTION DoShowIt,0601H LOCFRAME CSTACK, 36, STACK PUBLIC DrawBatteryLog FUNCTION DrawBatteryLog,0201H LOCFRAME CSTACK, 68, STACK PUBLIC DrawGPRSLog FUNCTION DrawGPRSLog,0201H LOCFRAME CSTACK, 76, STACK PUBLIC DrawSystemLog FUNCTION DrawSystemLog,0201H LOCFRAME CSTACK, 104, STACK PUBLIC DrawWeatherLog FUNCTION DrawWeatherLog,0201H LOCFRAME CSTACK, 68, STACK PUBLIC DrwImg2 FUNCTION DrwImg2,0203H LOCFRAME CSTACK, 64, STACK PUBLIC ElfKiller FUNCTION ElfKiller,0203H LOCFRAME CSTACK, 4, STACK PUBLIC Execute FUNCTION Execute,0201H LOCFRAME CSTACK, 52, STACK FUNCTION Killer2,0603H LOCFRAME CSTACK, 4, STACK PUBLIC MAINCSM PUBLIC MAINCSM_ID PUBLIC OnKey FUNCTION OnKey,0603H LOCFRAME CSTACK, 24, STACK PUBLIC OnRedraw FUNCTION OnRedraw,0603H LOCFRAME CSTACK, 20, STACK PUBLIC Parsing FUNCTION Parsing,0201H LOCFRAME CSTACK, 56, STACK PUBLIC UpdateCSMname FUNCTION UpdateCSMname,0203H LOCFRAME CSTACK, 4, STACK PUBLIC app_pos PUBLIC battery PUBLIC buf PUBLIC charge_m PUBLIC charge_s PUBLIC charger PUBLIC charger_c FUNCTION charger_c,0601H LOCFRAME CSTACK, 4, STACK PUBLIC check_battery FUNCTION check_battery,0201H LOCFRAME CSTACK, 72, STACK PUBLIC check_gprs FUNCTION check_gprs,0201H LOCFRAME CSTACK, 76, STACK PUBLIC chinfo PUBLIC con PUBLIC connect_state PUBLIC create_connect FUNCTION create_connect,0603H LOCFRAME CSTACK, 40, STACK PUBLIC do_st PUBLIC end_socket FUNCTION end_socket,0603H LOCFRAME CSTACK, 8, STACK PUBLIC engade_weather PUBLIC ffq PUBLIC first_con PUBLIC g_hour PUBLIC g_min PUBLIC g_sec PUBLIC get_answer FUNCTION get_answer,0603H LOCFRAME CSTACK, 8, STACK PUBLIC get_month FUNCTION get_month,0201H LOCFRAME CSTACK, 24, STACK PUBLIC ggg PUBLIC gipi PUBLIC gpinfo PUBLIC gui_methods PUBLIC hmm PUBLIC icsmd PUBLIC isfile PUBLIC ker_state PUBLIC key_mode PUBLIC lock_keys PUBLIC log FUNCTION log,0203H LOCFRAME CSTACK, 64, STACK PUBLIC main FUNCTION main,0a03H LOCFRAME CSTACK, 56, STACK PUBLIC maincsm_name_body PUBLIC maincsm_onclose FUNCTION maincsm_onclose,0603H FUNCTION maincsm_onclose2,0603H LOCFRAME CSTACK, 8, STACK PUBLIC maincsm_oncreate FUNCTION maincsm_oncreate,0603H LOCFRAME CSTACK, 20, STACK FUNCTION maincsm_oncreate2,0603H PUBLIC maincsm_onmessage FUNCTION maincsm_onmessage,0603H PUBLIC maincsm_onmessage2 FUNCTION maincsm_onmessage2,0603H LOCFRAME CSTACK, 108, STACK PUBLIC method8 FUNCTION method8,0603H PUBLIC method9 FUNCTION method9,0603H PUBLIC minus11 PUBLIC mode PUBLIC mode_enter PUBLIC month PUBLIC monthc PUBLIC my_keyhook FUNCTION my_keyhook,0603H LOCFRAME CSTACK, 12, STACK PUBLIC mytmr PUBLIC mytmr2 PUBLIC mytmr3 PUBLIC old_icsm_onClose PUBLIC old_icsm_onMessage PUBLIC onClose FUNCTION onClose,0603H LOCFRAME CSTACK, 16, STACK PUBLIC onCreate FUNCTION onCreate,0603H LOCFRAME CSTACK, 8, STACK PUBLIC onFocus FUNCTION onFocus,0603H PUBLIC onUnfocus FUNCTION onUnfocus,0603H LOCFRAME CSTACK, 8, STACK PUBLIC pbuf PUBLIC phase PUBLIC pos PUBLIC pos_link2_x PUBLIC pos_link2_y PUBLIC pos_link_x PUBLIC pos_link_y PUBLIC pos_main_x PUBLIC pos_main_y PUBLIC pos_msg_x PUBLIC pos_msg_y PUBLIC pressure PUBLIC pressure2 PUBLIC r_h PUBLIC r_m PUBLIC r_s PUBLIC reboot_ref FUNCTION reboot_ref,0601H LOCFRAME CSTACK, 4, STACK PUBLIC rem_mis PUBLIC req_buf PUBLIC rewriter PUBLIC rs_tmr PUBLIC runtime_count FUNCTION runtime_count,0601H LOCFRAME CSTACK, 4, STACK PUBLIC screen PUBLIC send_req FUNCTION send_req,0603H LOCFRAME CSTACK, 12, STACK PUBLIC sock PUBLIC start_again FUNCTION start_again,0603H LOCFRAME CSTACK, 4, STACK PUBLIC start_g PUBLIC start_g2 PUBLIC start_traffic PUBLIC switch_gprs_info PUBLIC temp PUBLIC temp2 PUBLIC tempz PUBLIC traf PUBLIC trafiks PUBLIC vejsh2 PUBLIC weather_time PUBLIC wind PUBLIC write_log FUNCTION write_log,0603H LOCFRAME CSTACK, 64, STACK CFI Names cfiNames0 CFI StackFrame CFA R13 HUGEDATA CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32 CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, CPSR:32, R13:32 CFI Resource R14:32, SPSR:32 CFI VirtualResource ?RET:32 CFI EndNames cfiNames0 CFI Common cfiCommon0 Using cfiNames0 CFI CodeAlign 2 CFI DataAlign 4 CFI ReturnAddress ?RET CODE CFI CFA R13+0 CFI R0 Undefined CFI R1 Undefined CFI R2 Undefined CFI R3 Undefined CFI R4 SameValue CFI R5 SameValue CFI R6 SameValue CFI R7 SameValue CFI R8 SameValue CFI R9 SameValue CFI R10 SameValue CFI R11 SameValue CFI R12 Undefined CFI CPSR SameValue CFI R14 Undefined CFI SPSR SameValue CFI ?RET R14 CFI EndCommon cfiCommon0 CFI Common cfiCommon1 Using cfiNames0 CFI CodeAlign 4 CFI DataAlign 4 CFI ReturnAddress ?RET CODE CFI CFA R13+0 CFI R0 Undefined CFI R1 Undefined CFI R2 Undefined CFI R3 Undefined CFI R4 SameValue CFI R5 SameValue CFI R6 SameValue CFI R7 SameValue CFI R8 SameValue CFI R9 SameValue CFI R10 SameValue CFI R11 SameValue CFI R12 Undefined CFI CPSR SameValue CFI R14 Undefined CFI SPSR SameValue CFI ?RET R14 CFI EndCommon cfiCommon1 InitConfig SYMBOL "InitConfig" ascii2ws SYMBOL "ascii2ws" kill_data SYMBOL "kill_data" utf82win SYMBOL "utf82win" write_total SYMBOL "write_total" Count_GPRS SYMBOL "Count_GPRS" ??Count_GPRS??rT SYMBOL "??rT", Count_GPRS DoScreen SYMBOL "DoScreen" ??DoScreen??rT SYMBOL "??rT", DoScreen DoShowIt SYMBOL "DoShowIt" ??DoShowIt??rT SYMBOL "??rT", DoShowIt DrawBatteryLog SYMBOL "DrawBatteryLog" ??DrawBatteryLog??rT SYMBOL "??rT", DrawBatteryLog DrawGPRSLog SYMBOL "DrawGPRSLog" ??DrawGPRSLog??rT SYMBOL "??rT", DrawGPRSLog DrawSystemLog SYMBOL "DrawSystemLog" ??DrawSystemLog??rT SYMBOL "??rT", DrawSystemLog DrawWeatherLog SYMBOL "DrawWeatherLog" ??DrawWeatherLog??rT SYMBOL "??rT", DrawWeatherLog DrwImg2 SYMBOL "DrwImg2" ??DrwImg2??rT SYMBOL "??rT", DrwImg2 ElfKiller SYMBOL "ElfKiller" ??ElfKiller??rT SYMBOL "??rT", ElfKiller Execute SYMBOL "Execute" ??Execute??rT SYMBOL "??rT", Execute ??InitConfig??rA SYMBOL "??rA", InitConfig OnKey SYMBOL "OnKey" ??OnKey??rT SYMBOL "??rT", OnKey OnRedraw SYMBOL "OnRedraw" ??OnRedraw??rT SYMBOL "??rT", OnRedraw Parsing SYMBOL "Parsing" ??Parsing??rT SYMBOL "??rT", Parsing UpdateCSMname SYMBOL "UpdateCSMname" ??UpdateCSMname??rT SYMBOL "??rT", UpdateCSMname ??ascii2ws??rA SYMBOL "??rA", ascii2ws charger_c SYMBOL "charger_c" ??charger_c??rT SYMBOL "??rT", charger_c check_battery SYMBOL "check_battery" ??check_battery??rT SYMBOL "??rT", check_battery check_gprs SYMBOL "check_gprs" ??check_gprs??rT SYMBOL "??rT", check_gprs create_connect SYMBOL "create_connect" ??create_connect??rT SYMBOL "??rT", create_connect end_socket SYMBOL "end_socket" ??end_socket??rT SYMBOL "??rT", end_socket get_answer SYMBOL "get_answer" ??get_answer??rT SYMBOL "??rT", get_answer get_month SYMBOL "get_month" ??get_month??rT SYMBOL "??rT", get_month ??kill_data??rA SYMBOL "??rA", kill_data log SYMBOL "log" ??log??rT SYMBOL "??rT", log main SYMBOL "main" ??main??rT SYMBOL "??rT", main maincsm_onclose SYMBOL "maincsm_onclose" ??maincsm_onclose??rT SYMBOL "??rT", maincsm_onclose maincsm_oncreate SYMBOL "maincsm_oncreate" ??maincsm_oncreate??rT SYMBOL "??rT", maincsm_oncreate maincsm_onmessage2 SYMBOL "maincsm_onmessage2" ??maincsm_onmessage2??rT SYMBOL "??rT", maincsm_onmessage2 maincsm_onmessage SYMBOL "maincsm_onmessage" ??maincsm_onmessage??rT SYMBOL "??rT", maincsm_onmessage method8 SYMBOL "method8" ??method8??rT SYMBOL "??rT", method8 method9 SYMBOL "method9" ??method9??rT SYMBOL "??rT", method9 my_keyhook SYMBOL "my_keyhook" ??my_keyhook??rT SYMBOL "??rT", my_keyhook onClose SYMBOL "onClose" ??onClose??rT SYMBOL "??rT", onClose onCreate SYMBOL "onCreate" ??onCreate??rT SYMBOL "??rT", onCreate onFocus SYMBOL "onFocus" ??onFocus??rT SYMBOL "??rT", onFocus onUnfocus SYMBOL "onUnfocus" ??onUnfocus??rT SYMBOL "??rT", onUnfocus reboot_ref SYMBOL "reboot_ref" ??reboot_ref??rT SYMBOL "??rT", reboot_ref runtime_count SYMBOL "runtime_count" ??runtime_count??rT SYMBOL "??rT", runtime_count send_req SYMBOL "send_req" ??send_req??rT SYMBOL "??rT", send_req start_again SYMBOL "start_again" ??start_again??rT SYMBOL "??rT", start_again ??utf82win??rA SYMBOL "??rA", utf82win write_log SYMBOL "write_log" ??write_log??rT SYMBOL "??rT", write_log ??write_total??rA SYMBOL "??rA", write_total EXTERN CALL_BUTTON EXTERN ELF_BEGIN EXTERN InitConfig FUNCTION InitConfig,0200H EXTERN TID EXTERN ascii2ws FUNCTION ascii2ws,0202H EXTERN city_name EXTERN kill_data FUNCTION kill_data,0602H EXTERN result3 EXTERN successed_config_filename EXTERN utf82win FUNCTION utf82win,0202H EXTERN write_total FUNCTION write_total,0200H // D:\pasha\elf\evil_src\miosdel\miosd elka\main.c // 1 #include "..\inc\swilib.h" // 2 #include "conf_loader.h" // 3 #include "gprs_write.h" // 4 #include "string_works.h" // 5 #include "language.h" // 6 // 7 #define BUFSIZE 10000 // 8 // 9 extern unsigned long strtoul (const char *nptr,char **endptr,int base); // 10 RSEG DATA_Z:DATA:SORT:NOROOT(2) // 11 CSM_DESC icsmd; icsmd: DS8 40 // 12 int ker_state; // 13 // 14 int r_s=20; // 15 int r_m; // 16 int r_h; // 17 //int r_d; // 18 // 19 RSEG DATA_Z:DATA:SORT:NOROOT(2) // 20 int (*old_icsm_onMessage)(CSM_RAM*,GBS_MSG*); old_icsm_onMessage: DS8 4 RSEG DATA_Z:DATA:SORT:NOROOT(2) // 21 void (*old_icsm_onClose)(CSM_RAM*); old_icsm_onClose: DS8 4 // 22 RSEG DATA_Z:DATA:SORT:NOROOT(2) // 23 unsigned short maincsm_name_body[140]; maincsm_name_body: DS8 280 // 24 const int minus11=-11; // 25 int MAINCSM_ID; // 26 int first_con; // 27 int key_mode; // 28 // 29 typedef struct // 30 { // 31 CSM_RAM csm; // 32 int gui_id; // 33 }MAIN_CSM; // 34 // 35 typedef struct // 36 { // 37 GUI gui; // 38 WSHDR *ws1; // 39 WSHDR *ws2; // 40 int i1; // 41 }MAIN_GUI; // 42 // 43 int pos; // 44 int phase; // 45 int pos_main_x; // 46 int pos_main_y; // 47 int lock_keys; // 48 GBSTMR mytmr; // 49 int pos_link_x; // 50 int pos_link_y; // 51 int pos_msg_x; // 52 int pos_msg_y; // 53 char chinfo[32]; RSEG DATA_Z:DATA:SORT:NOROOT(2) // 54 char start_g[32]; start_g: DS8 32 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock0 Using cfiCommon0 CFI NoFunction THUMB ??DrwImg2??rT: BX PC Nop CFI EndBlock cfiBlock0 REQUIRE DrwImg2 // 55 char start_g2[32]; // 56 // 57 //=================weather // 58 char temp[32]; // 59 char temp2[32]; // 60 char vejsh2[32]; // 61 char weather_time[32]; // 62 extern const char city_name[64]; // 63 extern const unsigned int TID; // 64 char pressure[64]; // 65 char pressure2[64]; // 66 char wind[64]; // 67 int engade_weather; // 68 //================weather // 69 // 70 IMGHDR screen={0,0,8,""}; // 71 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock1 Using cfiCommon1 CFI Function DrwImg2 ARM // 72 void DrwImg2(IMGHDR *img, int x, int y, char *pen, char *brush) // 73 { DrwImg2: PUSH {R4-R6,LR} CFI ?RET Frame(CFA, -4) CFI R6 Frame(CFA, -8) CFI R5 Frame(CFA, -12) CFI R4 Frame(CFA, -16) CFI CFA R13+16 SUB SP,SP,#+44 CFI CFA R13+60 LDR R6,[SP, #+60] MOV R4,R0 // 74 RECT rc; // 75 DRWOBJ drwobj; // 76 StoreXYWHtoRECT(&rc,x,y,img->w,img->h); LDRH R0,[R4, #+2] MOV R5,R3 PUSH {R0} CFI CFA R13+64 LDRH R3,[R4, #+0] ADD R0,SP,#+4 SWI +307 // 77 SetPropTo_Obj5(&drwobj,&rc,0,img); MOV R3,R4 MOV R2,#+0 ADD R1,SP,#+4 ADD R0,SP,#+12 SWI +337 // 78 SetColor(&drwobj,pen,brush); MOV R2,R6 MOV R1,R5 ADD R0,SP,#+12 SWI +331 // 79 DrawObject(&drwobj); ADD R0,SP,#+12 SWI +298 // 80 } ADD SP,SP,#+48 CFI CFA R13+16 POP {R4-R6,PC} ;; return CFI EndBlock cfiBlock1 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock2 Using cfiCommon0 CFI NoFunction THUMB ??DoScreen??rT: BX PC Nop CFI EndBlock cfiBlock2 REQUIRE DoScreen // 81 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock3 Using cfiCommon1 CFI Function DoScreen ARM // 82 void DoScreen() // 83 { DoScreen: PUSH {R4-R7,LR} CFI ?RET Frame(CFA, -4) CFI R7 Frame(CFA, -8) CFI R6 Frame(CFA, -12) CFI R5 Frame(CFA, -16) CFI R4 Frame(CFA, -20) CFI CFA R13+20 // 84 int ScrH=ScreenH(); // 85 int ScrW=ScreenW(); // 86 char *ms=RamScreenBuffer(); // 87 screen.w=ScrW; LDR R7,??DataTable0 ;; screen SWI +33161 MOV R4,R0 SWI +33160 MOV R5,R0 SWI +32992 MOV R6,R0 // 88 screen.h=ScrH; // 89 screen.bitmap=malloc(ScrW*ScrH*2); MUL R0,R4,R5 STRH R5,[R7, #+0] STRH R4,[R7, #+2] LSL R4,R0,#+1 MOV R0,R4 SWI +20 STR R0,[R7, #+8] // 90 memcpy(screen.bitmap, ms, ScrW*ScrH*2); MOV R2,R4 MOV R1,R6 SWI +286 // 91 } POP {R4-R7,PC} ;; return CFI EndBlock cfiBlock3 RSEG CODE:CODE:NOROOT(2) DATA ??DataTable0: DC32 screen RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock4 Using cfiCommon0 CFI NoFunction THUMB ??DoShowIt??rT: BX PC Nop CFI EndBlock cfiBlock4 REQUIRE DoShowIt // 92 // 93 int app_pos=1; // 94 int pos_link2_x; // 95 int pos_link2_y; // 96 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock5 Using cfiCommon1 CFI Function DoShowIt ARM // 97 void DoShowIt() // 98 { DoShowIt: PUSH {R4-R11,LR} CFI ?RET Frame(CFA, -4) CFI R11 Frame(CFA, -8) CFI R10 Frame(CFA, -12) CFI R9 Frame(CFA, -16) CFI R8 Frame(CFA, -20) CFI R7 Frame(CFA, -24) CFI R6 Frame(CFA, -28) CFI R5 Frame(CFA, -32) CFI R4 Frame(CFA, -36) CFI CFA R13+36 // 99 switch(phase) LDR R4,??DataTable8 ;; screen LDR R0,[R4, #+60] LDR R10,[R4, #+44] LDR R2,[R4, #+40] LDR LR,[R4, #+48] LDR R3,[R4, #+36] LDR R9,[R4, #+72] LDR R12,[R4, #+88] LDR R7,??DoShowIt_1 ;; DoShowIt SUB R1,R0,#+1 MOV R5,#+2 MOV R6,#+408 MOV R8,#+7 SUB R10,R10,#+1 CMP R10,#+7 POPHI {R4-R11,PC} ADR R11,??DoShowIt_0 LDRB R11,[R11, R10] ADD PC,PC,R11, LSL #+2 DATA ??DoShowIt_0: DC8 +1,+27,+87,+96 DC8 +128,+146,+177,+191 ARM // 100 { // 101 case 1: // 102 { // 103 if(key_mode==1) ??DoShowIt_2: CMP R3,#+1 BNE ??DoShowIt_3 // 104 { // 105 if(pos_main_x<0) CMP LR,#+0 // 106 { // 107 pos_main_x++; ADDMI R0,LR,#+1 STRMI R0,[R4, #+48] // 108 } // 109 else // 110 phase=2; STRPL R5,[R4, #+44] // 111 DirectRedrawGUI(); SWI +319 // 112 GBS_StartTimerProc(&mytmr, 5, DoShowIt); MOV R2,R7 MOV R1,#+5 ADD R0,R6,R4 SWI +77 // 113 } // 114 if(key_mode==2) ??DoShowIt_3: LDR R0,[R4, #+36] CMP R0,#+2 POPNE {R4-R11,PC} // 115 { // 116 if(pos_main_x>112) LDR R0,[R4, #+48] CMP R0,#+113 // 117 { // 118 pos_main_x--; SUBGE R0,R0,#+1 STRGE R0,[R4, #+48] BGE ??DoShowIt_4 // 119 } // 120 else // 121 phase=2; ??DoShowIt_5: STR R5,[R4, #+44] // 122 DirectRedrawGUI(); ??DoShowIt_4: SWI +319 // 123 GBS_StartTimerProc(&mytmr, 5, DoShowIt); MOV R2,R7 MOV R1,#+5 ADD R0,R6,R4 SWI +77 // 124 } // 125 } // 126 break; // 127 case 2: // 128 { // 129 if(key_mode==1) // 130 { // 131 if(pos_link_x<20) // 132 { // 133 pos_link_x++; // 134 DirectRedrawGUI(); // 135 } // 136 else // 137 { // 138 DirectRedrawGUI(); // 139 if(pos==5) // 140 { // 141 pos_msg_y=pos_link_y-34; //elka // 142 pos_link2_y=pos_msg_y+24; // 143 pos_link2_x=pos_msg_x-12+(app_pos*20); // 144 phase=7; // 145 } // 146 else // 147 phase=3; // 148 } // 149 GBS_StartTimerProc(&mytmr, 5, DoShowIt); // 150 } // 151 if(key_mode==2) // 152 { // 153 if(pos_link_x>102) // 154 { // 155 pos_link_x--; // 156 DirectRedrawGUI(); // 157 } // 158 else // 159 { // 160 DirectRedrawGUI(); // 161 if(pos==5) // 162 { // 163 pos_msg_y=pos_link_y-34; //elka // 164 pos_link2_y=pos_msg_y+24; // 165 pos_link2_x=pos_msg_x-12+(app_pos*20); // 166 phase=7; // 167 } // 168 else // 169 phase=3; // 170 } // 171 GBS_StartTimerProc(&mytmr, 5, DoShowIt); // 172 } // 173 } // 174 break; // 175 case 3: // 176 { // 177 if(pos==5) // 178 { // 179 pos_msg_y=pos_link_y-34; //elak // 180 } // 181 else // 182 pos_msg_y=pos_link_y-56; //elak // 183 lock_keys=1; // 184 DirectRedrawGUI(); // 185 } // 186 break; // 187 case 4: // 188 { // 189 if(key_mode==1) // 190 { // 191 if(pos_link_x>10) // 192 { // 193 pos_link_x--; // 194 } // 195 else // 196 { // 197 pos_link_y=pos_main_y-12+(pos*20); // 198 phase=2; // 199 } // 200 DirectRedrawGUI(); // 201 GBS_StartTimerProc(&mytmr, 5, DoShowIt); // 202 } // 203 if(key_mode==2) // 204 { // 205 if(pos_link_x<112) // 206 { // 207 pos_link_x++; // 208 } // 209 else // 210 { // 211 pos_link_y=pos_main_y-12+(pos*20); // 212 phase=2; // 213 } // 214 DirectRedrawGUI(); // 215 GBS_StartTimerProc(&mytmr, 5, DoShowIt); // 216 } // 217 } // 218 break; // 219 case 5: // 220 { // 221 if(key_mode==1) // 222 { // 223 if(pos_link_x>10) // 224 pos_link_x--; // 225 else // 226 phase=6; // 227 DirectRedrawGUI(); // 228 GBS_StartTimerProc(&mytmr, 5, DoShowIt); // 229 } // 230 if(key_mode==2) // 231 { // 232 if(pos_link_x<112) // 233 pos_link_x++; // 234 else // 235 phase=6; // 236 DirectRedrawGUI(); // 237 GBS_StartTimerProc(&mytmr, 5, DoShowIt); // 238 } // 239 } // 240 break; // 241 case 6: // 242 { // 243 if(key_mode==1) // 244 { // 245 if(pos_main_x>-20) // 246 { // 247 pos_main_x--; // 248 DirectRedrawGUI(); // 249 GBS_StartTimerProc(&mytmr, 5, DoShowIt); // 250 } // 251 else // 252 CloseCSM(MAINCSM_ID); // 253 } // 254 if(key_mode==2) // 255 { // 256 if(pos_main_x<132) // 257 { // 258 pos_main_x++; // 259 DirectRedrawGUI(); // 260 GBS_StartTimerProc(&mytmr, 5, DoShowIt); // 261 } // 262 else // 263 CloseCSM(MAINCSM_ID); // 264 } // 265 } // 266 break; // 267 case 7: // 268 { // 269 if(pos_link2_y>(pos_msg_y+14)) // 270 { // 271 pos_link2_y--; // 272 } // 273 else // 274 phase=3; // 275 DirectRedrawGUI(); // 276 GBS_StartTimerProc(&mytmr, 3, DoShowIt); // 277 } // 278 break; // 279 case 8: // 280 { // 281 { // 282 if(pos_link2_y` MOV R0,SP SWI +180 LDRB R0,[SP, #+4] MOV R4,#+616 CMP R0,#+1 BNE ??get_month_1 ADD R1,R6,#+84 ADD R0,R4,R5 SWI +26 // 354 if(date.month==2) strcpy(month, "Февраль"); ??get_month_1: LDRB R0,[SP, #+4] CMP R0,#+2 BNE ??get_month_2 ADD R1,R6,#+76 ADD R0,R4,R5 SWI +26 // 355 if(date.month==3) strcpy(month, "Март"); ??get_month_2: LDRB R0,[SP, #+4] CMP R0,#+3 BNE ??get_month_3 ADD R1,R6,#+68 ADD R0,R4,R5 SWI +26 // 356 if(date.month==4) strcpy(month, "Апрель"); ??get_month_3: LDRB R0,[SP, #+4] CMP R0,#+4 BNE ??get_month_4 ADD R1,R6,#+60 ADD R0,R4,R5 SWI +26 // 357 if(date.month==5) strcpy(month, "Май"); ??get_month_4: LDRB R0,[SP, #+4] CMP R0,#+5 BNE ??get_month_5 ADR R1,??get_month_0 ;; "Май" ADD R0,R4,R5 SWI +26 // 358 if(date.month==6) strcpy(month, "Июнь"); ??get_month_5: LDRB R0,[SP, #+4] CMP R0,#+6 BNE ??get_month_6 ADD R1,R6,#+52 ADD R0,R4,R5 SWI +26 // 359 if(date.month==7) strcpy(month, "Июль"); ??get_month_6: LDRB R0,[SP, #+4] CMP R0,#+7 BNE ??get_month_7 ADD R1,R6,#+44 ADD R0,R4,R5 SWI +26 // 360 if(date.month==8) strcpy(month, "Август"); ??get_month_7: LDRB R0,[SP, #+4] CMP R0,#+8 BNE ??get_month_8 ADD R1,R6,#+36 ADD R0,R4,R5 SWI +26 // 361 if(date.month==9) strcpy(month, "Сентябрь"); ??get_month_8: LDRB R0,[SP, #+4] CMP R0,#+9 BNE ??get_month_9 ADD R1,R6,#+24 ADD R0,R4,R5 SWI +26 // 362 if(date.month==10) strcpy(month, "Октябрь"); ??get_month_9: LDRB R0,[SP, #+4] CMP R0,#+10 BNE ??get_month_10 ADD R1,R6,#+16 ADD R0,R4,R5 SWI +26 // 363 if(date.month==11) strcpy(month, "Ноябрь"); ??get_month_10: LDRB R0,[SP, #+4] CMP R0,#+11 BNE ??get_month_11 ADD R1,R6,#+8 ADD R0,R4,R5 SWI +26 // 364 if(date.month==12) strcpy(month, "Декабрь"); ??get_month_11: LDRB R0,[SP, #+4] CMP R0,#+12 BNE ??get_month_12 MOV R1,R6 ADD R0,R4,R5 SWI +26 // 365 monthc=date.month; ??get_month_12: LDRB R0,[SP, #+4] STR R0,[R5, #+96] // 366 } POP {R0,R1,R4-R6,PC} ;; return DATA ??get_month_0: DC8 "Май" DC32 `?` CFI EndBlock cfiBlock11 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock12 Using cfiCommon0 CFI NoFunction THUMB ??DrawSystemLog??rT: BX PC Nop CFI EndBlock cfiBlock12 REQUIRE DrawSystemLog // 367 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock13 Using cfiCommon1 CFI Function DrawSystemLog ARM // 368 void DrawSystemLog() // 369 { DrawSystemLog: PUSH {R4-R11,LR} CFI ?RET Frame(CFA, -4) CFI R11 Frame(CFA, -8) CFI R10 Frame(CFA, -12) CFI R9 Frame(CFA, -16) CFI R8 Frame(CFA, -20) CFI R7 Frame(CFA, -24) CFI R6 Frame(CFA, -28) CFI R5 Frame(CFA, -32) CFI R4 Frame(CFA, -36) CFI CFA R13+36 // 370 //ttttttt // 371 int ram = GetFreeRamAvail(); // 372 ram=ram/1024; // 373 WSHDR *ws=AllocWS(64); // 374 wsprintf(ws, "[%t]", LG_SYSI); LDR R6,??DataTable9 ;; `?` MOV R0,#+1 SWI +571 MOV R0,#+0 PUSH {R0} CFI CFA R13+20 MOV R3,#+0 MOV R2,R0 MOV R1,R0 MOV R0,R4 BL DrwImg2 SWI +33009 LDR R0,[R4, #+44] ADD R6,R5,#+120 ADD R2,R5,#+96 ADD SP,SP,#+4 CFI CFA R13+16 SUB R0,R0,#+1 CMP R0,#+5 POPHI {R4-R6,PC} ADR R1,??OnRedraw_0 LDRB R1,[R1, R0] ADD PC,PC,R1, LSL #+2 DATA ??OnRedraw_0: DC8 +4,+1,+9,+1 DC8 +1,+4,+0,+0 ARM // 509 { // 510 case 1: // 511 DrawImg(pos_main_x, pos_main_y, (int)"4:\\zbin\\miosd\\img1.png"); // 512 break; // 513 case 2: // 514 DrawImg(pos_link_x, pos_link_y, (int)"4:\\zbin\\miosd\\img2.png"); ??OnRedraw_2: LDR R1,[R4, #+64] LDR R0,[R4, #+60] SWI +35 // 515 DrawImg(pos_main_x, pos_main_y, (int)"4:\\zbin\\miosd\\img1.png"); ??OnRedraw_3: LDR R1,[R4, #+52] LDR R0,[R4, #+48] MOV R2,R6 SWI +35 POP {R4-R6,PC} // 516 break; // 517 case 3: // 518 if(pos==5) ??OnRedraw_4: LDR R3,[R4, #+40] LDR R0,[R4, #+60] LDR R1,[R4, #+64] CMP R3,#+5 BNE ??OnRedraw_5 // 519 { // 520 DrawImg(pos_link_x, pos_link_y, (int)"4:\\zbin\\miosd\\img2.png"); SWI +35 // 521 DrawImg(pos_main_x, pos_main_y, (int)"4:\\zbin\\miosd\\img1.png"); LDR R1,[R4, #+52] LDR R0,[R4, #+48] MOV R2,R6 SWI +35 // 522 DrawImg(pos_link2_x, pos_link2_y, (int)"4:\\zbin\\miosd\\img6.png"); LDR R1,[R4, #+88] LDR R0,[R4, #+84] ADD R2,R5,#+72 SWI +35 // 523 if(app_pos==1) LDR R0,[R4, #+80] ADD R2,R5,#+48 CMP R0,#+1 LDR R0,[R4, #+88] SUB R1,R0,#+24 LDR R0,[R4, #+84] // 524 DrawImg(pos_link2_x-10, pos_link2_y-24, (int)"4:\\zbin\\miosd\\img7.png"); SUBEQ R0,R0,#+10 // 525 else // 526 DrawImg(pos_link2_x-20, pos_link2_y-24, (int)"4:\\zbin\\miosd\\img7.png"); SUBNE R0,R0,#+20 SWI +35 // 527 // DrawAppLog(); // 528 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\img4.png"); LDR R0,[R4, #+72] ADD R2,R5,#+24 ADD R1,R0,#+24 B ??OnRedraw_6 // 529 } // 530 else // 531 { // 532 DrawImg(pos_link_x, pos_link_y, (int)"4:\\zbin\\miosd\\img2.png"); ??OnRedraw_5: SWI +35 // 533 DrawImg(pos_main_x, pos_main_y, (int)"4:\\zbin\\miosd\\img1.png"); LDR R1,[R4, #+52] LDR R0,[R4, #+48] MOV R2,R6 SWI +35 // 534 DrawImg(pos_msg_x, pos_msg_y, (int)"4:\\zbin\\miosd\\img3.png"); LDR R1,[R4, #+72] MOV R2,R5 ??OnRedraw_6: LDR R0,[R4, #+68] // 535 } // 536 // 537 switch(pos) LDR R6,??OnRedraw_1+0x4 ;; reboot_ref SWI +35 LDR R0,[R4, #+40] MOV R5,#+624 SUBS R0,R0,#+1 BEQ ??OnRedraw_7 SUBS R0,R0,#+1 BEQ ??OnRedraw_8 SUBS R0,R0,#+1 BEQ ??OnRedraw_9 SUBS R0,R0,#+1 BEQ ??OnRedraw_10 POP {R4-R6,PC} // 538 { // 539 case 1: // 540 DrawWeatherLog(); ??OnRedraw_7: BL DrawWeatherLog // 541 GBS_StartTimerProc(&mytmr2, 216, reboot_ref); B ??OnRedraw_11 // 542 break; // 543 case 2: // 544 DrawBatteryLog(); ??OnRedraw_8: BL DrawBatteryLog // 545 GBS_StartTimerProc(&mytmr2, 216, reboot_ref); ??OnRedraw_11: MOV R2,R6 MOV R1,#+216 ADD R0,R5,R4 SWI +77 POP {R4-R6,PC} // 546 break; // 547 case 3: // 548 DrawGPRSLog(); ??OnRedraw_9: BL DrawGPRSLog // 549 GBS_StartTimerProc(&mytmr2, 216, reboot_ref); B ??OnRedraw_11 // 550 break; // 551 case 4: // 552 DrawSystemLog(); ??OnRedraw_10: BL DrawSystemLog // 553 GBS_StartTimerProc(&mytmr2, 216, reboot_ref); MOV R2,R6 MOV R1,#+216 ADD R0,R5,R4 SWI +77 // 554 break; // 555 /* case 5: // 556 switch(app_pos) // 557 { // 558 case 1: // 559 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\img5.png"); // 560 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app1.png"); // 561 DrawImg(pos_msg_x+20, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app2.png"); // 562 DrawImg(pos_msg_x+40, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app3.png"); // 563 GBS_StartTimerProc(&mytmr2, 216, reboot_ref); // 564 break; // 565 case 2: // 566 DrawImg(pos_msg_x+20, pos_msg_y+24, (int)"4:\\zbin\\miosd\\img5.png"); // 567 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app1.png"); // 568 DrawImg(pos_msg_x+20, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app2.png"); // 569 DrawImg(pos_msg_x+40, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app3.png"); // 570 GBS_StartTimerProc(&mytmr2, 216, reboot_ref); // 571 break; // 572 case 3: // 573 DrawImg(pos_msg_x+40, pos_msg_y+24, (int)"4:\\zbin\\miosd\\img5.png"); // 574 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app1.png"); // 575 DrawImg(pos_msg_x+20, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app2.png"); // 576 DrawImg(pos_msg_x+40, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app3.png"); // 577 GBS_StartTimerProc(&mytmr2, 216, reboot_ref); // 578 break; // 579 } // 580 break;*/ // 581 } // 582 break; // 583 case 4: // 584 DrawImg(pos_link_x, pos_link_y, (int)"4:\\zbin\\miosd\\img2.png"); // 585 DrawImg(pos_main_x, pos_main_y, (int)"4:\\zbin\\miosd\\img1.png"); // 586 break; // 587 case 5: // 588 DrawImg(pos_link_x, pos_link_y, (int)"4:\\zbin\\miosd\\img2.png"); // 589 DrawImg(pos_main_x, pos_main_y, (int)"4:\\zbin\\miosd\\img1.png"); // 590 break; // 591 case 6: // 592 DrawImg(pos_main_x, pos_main_y, (int)"4:\\zbin\\miosd\\img1.png"); // 593 break; // 594 /* case 7: // 595 case 8: // 596 DrawImg(pos_link_x, pos_link_y, (int)"4:\\zbin\\miosd\\img2.png"); // 597 DrawImg(pos_main_x, pos_main_y, (int)"4:\\zbin\\miosd\\img1.png"); // 598 DrawImg(pos_link2_x, pos_link2_y, (int)"4:\\zbin\\miosd\\img6.png"); // 599 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\img4.png"); // 600 switch(app_pos) // 601 { // 602 case 1: // 603 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\img5.png"); // 604 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app1.png"); // 605 DrawImg(pos_msg_x+20, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app2.png"); // 606 DrawImg(pos_msg_x+40, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app3.png"); // 607 break; // 608 case 2: // 609 DrawImg(pos_msg_x+20, pos_msg_y+24, (int)"4:\\zbin\\miosd\\img5.png"); // 610 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app1.png"); // 611 DrawImg(pos_msg_x+20, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app2.png"); // 612 DrawImg(pos_msg_x+40, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app3.png"); // 613 break; // 614 case 3: // 615 DrawImg(pos_msg_x+40, pos_msg_y+24, (int)"4:\\zbin\\miosd\\img5.png"); // 616 DrawImg(pos_msg_x, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app1.png"); // 617 DrawImg(pos_msg_x+20, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app2.png"); // 618 DrawImg(pos_msg_x+40, pos_msg_y+24, (int)"4:\\zbin\\miosd\\app3.png"); // 619 break; // 620 } // 621 break;*/ // 622 } // 623 } ??OnRedraw_12: POP {R4-R6,PC} ;; return DATA ??OnRedraw_1: DC32 `?` DC32 reboot_ref CFI EndBlock cfiBlock19 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock20 Using cfiCommon0 CFI NoFunction THUMB ??onCreate??rT: BX PC Nop CFI EndBlock cfiBlock20 REQUIRE onCreate // 624 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock21 Using cfiCommon1 CFI Function onCreate ARM // 625 void onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) //Create // 626 { onCreate: PUSH {R4,LR} CFI ?RET Frame(CFA, -4) CFI R4 Frame(CFA, -8) CFI CFA R13+8 MOV R4,R0 // 627 DisableIconBar(1); MOV R0,#+1 SWI +571 // 628 // Тут можно создать переменные // 629 data->gui.state=1; MOV R0,#+1 STRB R0,[R4, #+12] // 630 // pos=1; // 631 } POP {R4,PC} ;; return CFI EndBlock cfiBlock21 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock22 Using cfiCommon0 CFI NoFunction THUMB ??onClose??rT: BX PC Nop CFI EndBlock cfiBlock22 REQUIRE onClose // 632 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock23 Using cfiCommon1 CFI Function onClose ARM // 633 void onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) //Close // 634 { onClose: PUSH {R4-R6,LR} CFI ?RET Frame(CFA, -4) CFI R6 Frame(CFA, -8) CFI R5 Frame(CFA, -12) CFI R4 Frame(CFA, -16) CFI CFA R13+16 // 635 ker_state=0; LDR R5,??DataTable12 ;; screen MOV R4,R0 MOV R6,#+0 STR R6,[R5, #+12] // 636 DisableIconBar(0); MOV R0,#+0 SWI +571 // 637 mfree(screen.bitmap); LDR R0,[R5, #+8] SWI +21 // 638 // Тут можно освободить выделяемую память // 639 data->gui.state=0; STRB R6,[R4, #+12] // 640 } POP {R4-R6,PC} ;; return CFI EndBlock cfiBlock23 RSEG CODE:CODE:NOROOT(2) DATA ??DataTable12: DC32 screen RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock24 Using cfiCommon0 CFI NoFunction THUMB ??onFocus??rT: BX PC Nop CFI EndBlock cfiBlock24 REQUIRE onFocus // 641 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock25 Using cfiCommon1 CFI Function onFocus ARM // 642 void onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *))//Focus // 643 { // 644 data->gui.state=2; onFocus: MOV R1,#+2 STRB R1,[R0, #+12] // 645 } BX LR ;; return CFI EndBlock cfiBlock25 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock26 Using cfiCommon0 CFI NoFunction THUMB ??onUnfocus??rT: BX PC Nop CFI EndBlock cfiBlock26 REQUIRE onUnfocus // 646 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock27 Using cfiCommon1 CFI Function onUnfocus ARM // 647 void onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) //Unfocus // 648 { onUnfocus: PUSH {R4,LR} CFI ?RET Frame(CFA, -4) CFI R4 Frame(CFA, -8) CFI CFA R13+8 MOV R4,R0 // 649 CloseCSM(MAINCSM_ID); LDR R0,??onUnfocus_0 ;; screen + 28 LDR R0,[R0, #+0] SWI +508 // 650 if (data->gui.state!=2) return; LDRB R0,[R4, #+12] CMP R0,#+2 // 651 data->gui.state=1; MOVEQ R0,#+1 STRBEQ R0,[R4, #+12] // 652 } POP {R4,PC} ;; return DATA ??onUnfocus_0: DC32 screen + 28 CFI EndBlock cfiBlock27 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock28 Using cfiCommon0 CFI NoFunction THUMB ??OnKey??rT: BX PC Nop CFI EndBlock cfiBlock28 REQUIRE OnKey // 653 // 654 void create_connect(void); // 655 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock29 Using cfiCommon1 CFI Function OnKey ARM // 656 int OnKey(MAIN_GUI *data, GUI_MSG *msg) //OnKey // 657 { OnKey: PUSH {R4-R8,LR} CFI ?RET Frame(CFA, -4) CFI R8 Frame(CFA, -8) CFI R7 Frame(CFA, -12) CFI R6 Frame(CFA, -16) CFI R5 Frame(CFA, -20) CFI R4 Frame(CFA, -24) CFI CFA R13+24 // 658 if(lock_keys) LDR R4,??DataTable24 ;; screen MOV R5,R1 LDR R0,[R4, #+56] CMP R0,#+0 POPEQ {R4-R8,PC} // 659 { // 660 DirectRedrawGUI(); SWI +319 // 661 if (msg->gbsmsg->msg==KEY_DOWN) LDR R0,[R5, #+4] MOV R2,#+147 LDR R1,[R0, #+4] ORR R2,R2,#0x100 CMP R1,R2 BNE ??OnKey_1 // 662 { // 663 switch(msg->gbsmsg->submess) LDR R0,[R0, #+8] LDR R1,[R4, #+80] LDR R2,[R4, #+40] MOV R3,#+3 MOV R12,#+624 MOV R5,#+1 MOV LR,#+8 MOV R6,#+4 MOV R7,#+0 SUB R0,R0,#+4 CMP R0,#+58 BHI ??OnKey_1 ADR R8,??OnKey_0 LDRB R8,[R8, R0] ADD PC,PC,R8, LSL #+2 DATA ??OnKey_0: DC8 +41,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+21,+21,+21 DC8 +21,+14,+23,+26 DC8 +28,+30,+21,+21 DC8 +21,+21,+21,+87 DC8 +78,+54,+63,+0 ARM // 664 { // 665 case '1' : // 666 pos = 1; ??OnKey_2: STR R5,[R4, #+40] // 667 ffq=1; ??OnKey_3: STR R5,[R4, #+116] // 668 GBS_DelTimer(&mytmr2); ADD R0,R12,R4 SWI +396 // 669 lock_keys=0; ??OnKey_4: STR R7,[R4, #+56] // 670 phase=4; STR R6,[R4, #+44] // 671 DoShowIt(); ??OnKey_5: BL DoShowIt // 672 break; // 673 case '2' : // 674 pos = 2; // 675 ffq=1; // 676 GBS_DelTimer(&mytmr2); // 677 lock_keys=0; // 678 phase=4; // 679 DoShowIt(); // 680 break; // 681 case '3' : // 682 pos = 3; // 683 ffq=1; // 684 GBS_DelTimer(&mytmr2); // 685 lock_keys=0; // 686 phase=4; // 687 DoShowIt(); // 688 break; // 689 case '4' : // 690 pos = 4; // 691 ffq=1; // 692 GBS_DelTimer(&mytmr2); // 693 lock_keys=0; // 694 phase=4; // 695 DoShowIt(); // 696 break; // 697 case 0x35: // 698 if(pos==1) // 699 { // 700 ffq=1; // 701 GBS_DelTimer(&mytmr2); // 702 engade_weather=0; // 703 SUBPROC((void *)create_connect); // 704 DirectRedrawGUI(); // 705 } // 706 break; // 707 case RIGHT_SOFT: // 708 if(key_mode==1) goto set1; // 709 else goto set2; // 710 case LEFT_BUTTON: // 711 if((pos==5)&&(app_pos>1)) // 712 { // 713 app_pos--; // 714 lock_keys=0; // 715 phase=8; // 716 DoShowIt(); // 717 // DirectRedrawGUI(); // 718 } // 719 else // 720 { // 721 set1: // 722 ffq=1; // 723 GBS_DelTimer(&mytmr2); // 724 if(key_mode==1) // 725 { // 726 lock_keys=0; // 727 phase=5; // 728 DoShowIt(); // 729 } // 730 } // 731 break; // 732 case RIGHT_BUTTON: // 733 if(pos==5) // 734 { // 735 app_pos++; // 736 if(app_pos==4) app_pos--; // 737 else // 738 { // 739 lock_keys=0; // 740 phase=8; // 741 DoShowIt(); // 742 // DirectRedrawGUI(); // 743 } // 744 } // 745 else // 746 { // 747 set2: // 748 ffq=1; // 749 GBS_DelTimer(&mytmr2); // 750 if(key_mode==2) // 751 { // 752 lock_keys=0; // 753 phase=5; // 754 DoShowIt(); // 755 } // 756 } // 757 break; // 758 case DOWN_BUTTON: // 759 { // 760 ffq=1; // 761 GBS_DelTimer(&mytmr2); // 762 pos++; // 763 if (pos==5) pos=1; // 764 lock_keys=0; // 765 phase=4; // 766 DoShowIt(); // 767 } // 768 break; // 769 case UP_BUTTON: // 770 { // 771 ffq=1; // 772 GBS_DelTimer(&mytmr2); // 773 pos--; // 774 if (pos==0) pos=4; // 775 lock_keys=0; // 776 phase=4; // 777 DoShowIt(); // 778 } // 779 break; // 780 } // 781 } // 782 } // 783 return(0); ??OnKey_1: MOV R0,#+0 POP {R4-R8,PC} ;; return ??OnKey_6: MOV R0,#+2 STR R0,[R4, #+40] B ??OnKey_3 ??OnKey_7: STR R3,[R4, #+40] B ??OnKey_3 ??OnKey_8: STR R6,[R4, #+40] B ??OnKey_3 ??OnKey_9: CMP R2,#+1 BNE ??OnKey_1 STR R5,[R4, #+116] ADD R0,R12,R4 SWI +396 LDR R0,??DataTable35 ;; create_connect STR R7,[R4, #+76] SWI +369 SWI +319 MOV R0,#+0 POP {R4-R8,PC} ??OnKey_10: LDR R0,[R4, #+36] CMP R0,#+1 BNE ??OnKey_11 ??OnKey_12: STR R5,[R4, #+116] ADD R0,R12,R4 SWI +396 LDR R0,[R4, #+36] CMP R0,#+1 BNE ??OnKey_1 ??OnKey_13: STR R7,[R4, #+56] MOV R0,#+5 STR R0,[R4, #+44] B ??OnKey_5 ??OnKey_14: CMP R2,#+5 BNE ??OnKey_12 CMP R1,#+2 BLT ??OnKey_12 SUB R0,R1,#+1 STR R0,[R4, #+80] ??OnKey_15: STR R7,[R4, #+56] STR LR,[R4, #+44] B ??OnKey_5 ??OnKey_16: CMP R2,#+5 BNE ??OnKey_11 ADD R0,R1,#+1 STR R0,[R4, #+80] CMP R0,#+4 STREQ R3,[R4, #+80] BEQ ??OnKey_1 B ??OnKey_15 ??OnKey_11: STR R5,[R4, #+116] ADD R0,R12,R4 SWI +396 LDR R0,[R4, #+36] CMP R0,#+2 BNE ??OnKey_1 B ??OnKey_13 ??OnKey_17: STR R5,[R4, #+116] ADD R0,R12,R4 SWI +396 LDR R0,[R4, #+40] ADD R0,R0,#+1 STR R0,[R4, #+40] CMP R0,#+5 STREQ R5,[R4, #+40] ??OnKey_18: B ??OnKey_4 ??OnKey_19: STR R5,[R4, #+116] ADD R0,R12,R4 SWI +396 LDR R0,[R4, #+40] SUBS R0,R0,#+1 STR R0,[R4, #+40] BNE ??OnKey_4 STR R6,[R4, #+40] B ??OnKey_4 CFI EndBlock cfiBlock29 // 784 } RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock30 Using cfiCommon0 CFI NoFunction THUMB ??method8??rT: BX PC Nop CFI EndBlock cfiBlock30 REQUIRE method8 // 785 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock31 Using cfiCommon1 CFI Function method8 ARM // 786 int method8(void){return(0);} method8: MOV R0,#+0 BX LR ;; return CFI EndBlock cfiBlock31 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock32 Using cfiCommon0 CFI NoFunction THUMB ??method9??rT: BX PC Nop CFI EndBlock cfiBlock32 REQUIRE method9 // 787 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock33 Using cfiCommon1 CFI Function method9 ARM // 788 int method9(void){return(0);} method9: MOV R0,#+0 BX LR ;; return CFI EndBlock cfiBlock33 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock34 Using cfiCommon0 CFI NoFunction THUMB ??ElfKiller??rT: BX PC Nop CFI EndBlock cfiBlock34 REQUIRE ElfKiller // 789 // 790 extern void kill_data(void *p,void (*func_p)(void *)); RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock35 Using cfiCommon1 CFI Function ElfKiller ARM // 791 void ElfKiller(void) // 792 { ElfKiller: PUSH {LR} CFI ?RET Frame(CFA, -4) CFI CFA R13+4 // 793 extern void *ELF_BEGIN; // 794 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); SWI +32789 MOV R1,R0 LDR R0,??DataTable37 ;; ELF_BEGIN POP {LR} ;; Pop CFI ?RET R14 CFI CFA R13+0 _BF kill_data,??kill_data??rA ;; tailcall CFI EndBlock cfiBlock35 // 795 } RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock36 Using cfiCommon0 CFI NoFunction THUMB ??maincsm_oncreate??rT: BX PC Nop CFI EndBlock cfiBlock36 REQUIRE maincsm_oncreate // 796 // 797 // Массив с методами, чтобы дать ОС информацию, какие когда вызывать // 798 const void * const gui_methods[11]={ // 799 (void *)OnRedraw, //Redraw // 800 (void *)onCreate, //Create // 801 (void *)onClose, //Close // 802 (void *)onFocus, //Focus // 803 (void *)onUnfocus, //Unfocus // 804 (void *)OnKey, //OnKey // 805 0, // 806 (void *)kill_data, //Destroy // 807 (void *)method8, // 808 (void *)method9, // 809 0 // 810 }; // 811 // 812 // Канвас для основного GUI // 813 const RECT Canvas={0,0,0,0}; // 814 // 815 // Вызывается при создании главного CSM. В данном примере // 816 // создаётся GUI, его ID записывается в MAINGUI_ID // 817 // на всякий случай - вдруг понадобится ;) // 818 // 819 #pragma inline // 820 void patch_rect(const RECT*rcc,int x,int y, int x2, int y2) // 821 { // 822 RECT *rc=(RECT *)rcc; // 823 rc->x=x; // 824 rc->y=y; // 825 rc->x2=x2; // 826 rc->y2=y2; // 827 } // 828 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock37 Using cfiCommon1 CFI Function maincsm_oncreate ARM // 829 void maincsm_oncreate(CSM_RAM *data) // 830 { maincsm_oncreate: PUSH {R4-R7,LR} CFI ?RET Frame(CFA, -4) CFI R7 Frame(CFA, -8) CFI R6 Frame(CFA, -12) CFI R5 Frame(CFA, -16) CFI R4 Frame(CFA, -20) CFI CFA R13+20 // 831 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); // 832 MAIN_CSM*csm=(MAIN_CSM*)data; // 833 zeromem(main_gui,sizeof(MAIN_GUI)); // 834 main_gui->gui.canvas=(void *)(&Canvas); LDR R6,??maincsm_oncreate_0 ;; Canvas MOV R4,R0 MOV R0,#+64 SWI +20 MOV R5,R0 MOV R1,#+64 SWI +285 STR R6,[R5, #+0] // 835 //main_gui->gui.flag30=2; // 836 main_gui->gui.methods=(void *)gui_methods; ADD R0,R6,#+8 STR R0,[R5, #+4] // 837 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); SWI +32789 STR R0,[R5, #+32] // 838 patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); SWI +33161 MOV R7,R0 SWI +33160 SUB R1,R7,#+1 SUB R0,R0,#+1 MOV R2,#+0 STRH R2,[R6, #+0] MOV R3,#+24 STRH R3,[R6, #+2] STRH R0,[R6, #+4] STRH R1,[R6, #+6] // 839 csm->csm.state=0; STR R2,[R4, #+16] // 840 csm->csm.unk1=0; STR R2,[R4, #+20] // 841 csm->gui_id=CreateGUI(main_gui); MOV R0,R5 SWI +311 STR R0,[R4, #+40] // 842 } POP {R4-R7,PC} ;; return DATA ??maincsm_oncreate_0: DC32 Canvas CFI EndBlock cfiBlock37 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock38 Using cfiCommon0 CFI NoFunction THUMB ??maincsm_onclose??rT: BX PC Nop CFI EndBlock cfiBlock38 REQUIRE maincsm_onclose // 843 // 844 // Вызывается при закрытии главного CSM. Тут и вызывается киллер RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock39 Using cfiCommon1 CFI Function maincsm_onclose ARM // 845 void maincsm_onclose(CSM_RAM *csm) // 846 { // 847 //SUBPROC((void *)ElfKiller); // 848 } maincsm_onclose: BX LR ;; return CFI EndBlock cfiBlock39 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock40 Using cfiCommon0 CFI NoFunction THUMB ??maincsm_onmessage??rT: BX PC Nop CFI EndBlock cfiBlock40 REQUIRE maincsm_onmessage // 849 // 850 // Обработчик событий главного CSM RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock41 Using cfiCommon1 CFI Function maincsm_onmessage ARM // 851 int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg) // 852 { // 853 MAIN_CSM *csm=(MAIN_CSM*)data; // 854 if ((msg->msg==MSG_GUI_DESTROYED)&&((int)msg->data0==csm->gui_id)) maincsm_onmessage: LDR R2,[R1, #+4] MOV R3,#+14 ORR R3,R3,#0x6400 CMP R2,R3 BNE ??maincsm_onmessage_0 LDR R1,[R1, #+12] LDR R2,[R0, #+40] CMP R1,R2 // 855 { // 856 csm->csm.state=-3; MVNEQ R1,#+2 STREQ R1,[R0, #+16] // 857 } // 858 return(1); ??maincsm_onmessage_0: MOV R0,#+1 BX LR ;; return CFI EndBlock cfiBlock41 // 859 } RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock42 Using cfiCommon0 CFI NoFunction THUMB ??UpdateCSMname??rT: BX PC Nop CFI EndBlock cfiBlock42 REQUIRE UpdateCSMname // 860 // 861 // Инициализация структуры MAINCSM // 862 const struct // 863 { // 864 CSM_DESC maincsm; // 865 WSHDR maincsm_name; // 866 }MAINCSM = // 867 { // 868 { // 869 maincsm_onmessage, // 870 maincsm_oncreate, // 871 #ifdef NEWSGOLD // 872 0, // 873 0, // 874 0, // 875 0, // 876 #endif // 877 maincsm_onclose, // 878 sizeof(MAIN_CSM), // 879 1, // 880 &minus11 // 881 }, // 882 { // 883 maincsm_name_body, // 884 NAMECSM_MAGIC1, // 885 NAMECSM_MAGIC2, // 886 0x0, // 887 139 // 888 } // 889 }; // 890 // 891 // Функция, которая устанавливает название этого CSM для X-Task. RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock43 Using cfiCommon1 CFI Function UpdateCSMname ARM // 892 void UpdateCSMname(void) // 893 { // 894 wsprintf((WSHDR *)(&MAINCSM.maincsm_name),"MIOSD"); UpdateCSMname: LDR R0,??UpdateCSMname_0 ;; `?` PUSH {LR} CFI ?RET Frame(CFA, -4) CFI CFA R13+4 MOV R1,R0 ADD R0,R0,#+48 SWI +292 // 895 } POP {PC} ;; return DATA ??UpdateCSMname_0: DC32 `?` CFI EndBlock cfiBlock43 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock44 Using cfiCommon0 CFI NoFunction THUMB ??create_connect??rT: BX PC Nop CFI EndBlock cfiBlock44 REQUIRE create_connect // 896 // 897 /* // 898 void MyIDLECSM_onClose(CSM_RAM *data) // 899 { // 900 extern void seqkill(void *data, void(*next_in_seq)(CSM_RAM *), void *data_to_kill, void *seqkiller); // 901 extern void *ELF_BEGIN; // 902 seqkill(data,old_icsm_onClose,&ELF_BEGIN,SEQKILLER_ADR()); // 903 }*/ // 904 // 905 #pragma inline=forced // 906 int toupper(int c) // 907 { // 908 if ((c>='a')&&(c<='z')) c+='A'-'a'; // 909 return(c); // 910 } // 911 #pragma inline // 912 int strcmp_nocase(const char *s1,const char *s2) // 913 { // 914 int i; // 915 int c; // 916 while(!(i=(c=toupper(*s1++))-toupper(*s2++))) if (!c) break; // 917 return(i); // 918 } // 919 // 920 int con; // 921 // 922 int sock; // 923 int connect_state; // 924 char buf[BUFSIZE+1]; // 925 int pbuf; RSEG DATA_Z:DATA:SORT:NOROOT(2) // 926 int traf; traf: DS8 4 // 927 GBSTMR mytmr3; // 928 // 929 void start_again(void); // 930 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock45 Using cfiCommon1 CFI Function create_connect ARM // 931 void create_connect(void) // 932 { create_connect: PUSH {R4-R8,LR} CFI ?RET Frame(CFA, -4) CFI R8 Frame(CFA, -8) CFI R7 Frame(CFA, -12) CFI R6 Frame(CFA, -16) CFI R5 Frame(CFA, -20) CFI R4 Frame(CFA, -24) CFI CFA R13+24 // 933 SOCK_ADDR sa; // 934 connect_state=0; LDR R4,??DataTable24 ;; screen SUB SP,SP,#+16 CFI CFA R13+40 MOV R0,#+0 STR R0,[R4, #+140] // 935 pbuf=0; STR R0,[R4, #+144] // 936 sock=socket(1,1,0); MOV R2,#+0 // 937 if (sock!=-1) LDR R6,??DataTable36 ;; start_again MOV R1,#+1 MOV R0,R1 SWI +371 STR R0,[R4, #+136] MOV R0,#+148 ORR R0,R0,#0x2900 ADD R5,R0,R4 LDR R0,[R4, #+136] MVN R7,#+0 CMP R0,R7 BEQ ??create_connect_0 // 938 { // 939 sa.family=1; MOV R8,#+1 STRH R8,[SP, #+0] // 940 sa.port=htons(80); MOV R0,#+80 SWI +378 STRH R0,[SP, #+2] // 941 // sa.ip=htonl(IP_ADDR(212,48,138,20)); // 942 sa.ip=htonl(IP_ADDR(212,48,141,129)); LDR R0,??create_connect_1 ;; 0xffffffffd4308d81 SWI +379 STR R0,[SP, #+4] // 943 if (connect(sock,&sa,sizeof(sa))!=-1) LDR R0,[R4, #+136] MOV R2,#+16 MOV R1,SP SWI +372 CMP R0,R7 // 944 { // 945 connect_state=1; STRNE R8,[R4, #+140] POPNE {R0-R8,PC} // 946 } // 947 else // 948 { // 949 closesocket(sock); LDR R0,[R4, #+136] SWI +374 // 950 GBS_StartTimerProc(&mytmr3, 2160, start_again); // 951 } // 952 } // 953 else // 954 GBS_StartTimerProc(&mytmr3, 2160, start_again); ??create_connect_0: MOV R2,R6 MOV R1,#+2160 MOV R0,R5 SWI +77 // 955 } POP {R0-R8,PC} ;; return DATA ??create_connect_1: DC32 0xffffffffd4308d81 CFI EndBlock cfiBlock45 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock46 Using cfiCommon0 CFI NoFunction THUMB ??start_again??rT: BX PC Nop CFI EndBlock cfiBlock46 REQUIRE start_again // 956 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock47 Using cfiCommon1 CFI Function start_again ARM // 957 void start_again() // 958 { start_again: PUSH {LR} CFI ?RET Frame(CFA, -4) CFI CFA R13+4 // 959 if(IsGPRSConnected()) SWI +168 CMP R0,#+0 BEQ ??start_again_0 // 960 { // 961 SUBPROC((void *)create_connect); LDR R0,??DataTable35 ;; create_connect SWI +369 POP {PC} // 962 } // 963 else // 964 GBS_StartTimerProc(&mytmr3, 2160, start_again); ??start_again_0: LDR R2,??DataTable36 ;; start_again LDR R0,??start_again_1 ;; screen + 10644 MOV R1,#+2160 SWI +77 // 965 } POP {PC} ;; return DATA ??start_again_1: DC32 screen + 10644 CFI EndBlock cfiBlock47 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock48 Using cfiCommon0 CFI NoFunction THUMB ??send_req??rT: BX PC Nop CFI EndBlock cfiBlock48 REQUIRE send_req // 966 // 967 char req_buf[256]; // 968 // 969 //http://wap.gismeteo.ru/wap2/towns/99944.wap2 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock49 Using cfiCommon1 CFI Function send_req ARM // 970 void send_req(void) // 971 { // 972 sprintf(req_buf,"GET /wap2/towns/99944.wap2" // 973 " HTTP/1.0\r\nHost: wap.gismeteo.ru\r\n\r\n",TID); send_req: LDR R1,??send_req_0 ;; `?` PUSH {R4,R5,LR} CFI ?RET Frame(CFA, -4) CFI R5 Frame(CFA, -8) CFI R4 Frame(CFA, -12) CFI CFA R13+12 LDR R4,??DataTable24 ;; screen MOV R0,#+164 ORR R0,R0,#0x2900 ADD R5,R0,R4 LDR R0,??send_req_0+0x4 ;; TID LDR R2,[R0, #+0] MOV R0,R5 SWI +22 // 974 // 975 send(sock,req_buf,strlen(req_buf),0); MOV R0,R5 SWI +27 MOV R2,R0 LDR R0,[R4, #+136] MOV R3,#+0 MOV R1,R5 SWI +377 // 976 connect_state=2; MOV R0,#+2 STR R0,[R4, #+140] // 977 } POP {R4,R5,PC} ;; return DATA ??send_req_0: DC32 `?` DC32 TID CFI EndBlock cfiBlock49 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock50 Using cfiCommon0 CFI NoFunction THUMB ??end_socket??rT: BX PC Nop CFI EndBlock cfiBlock50 REQUIRE end_socket // 978 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock51 Using cfiCommon1 CFI Function end_socket ARM // 979 void end_socket(void) // 980 { end_socket: PUSH {R4,LR} CFI ?RET Frame(CFA, -4) CFI R4 Frame(CFA, -8) CFI CFA R13+8 // 981 if (sock>=0) LDR R4,??DataTable24 ;; screen LDR R0,[R4, #+136] CMP R0,#+0 POPMI {R4,PC} // 982 { // 983 shutdown(sock,2); MOV R1,#+2 SWI +375 // 984 closesocket(sock); LDR R0,[R4, #+136] SWI +374 // 985 } // 986 } POP {R4,PC} ;; return CFI EndBlock cfiBlock51 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock52 Using cfiCommon0 CFI NoFunction THUMB ??get_answer??rT: BX PC Nop CFI EndBlock cfiBlock52 REQUIRE get_answer // 987 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock53 Using cfiCommon1 CFI Function get_answer ARM // 988 void get_answer(void) // 989 { get_answer: PUSH {R4,LR} CFI ?RET Frame(CFA, -4) CFI R4 Frame(CFA, -8) CFI CFA R13+8 // 990 int i=pbuf; LDR R4,??DataTable24 ;; screen // 991 if (i==65535) MOV R1,#+255 LDR R0,[R4, #+144] ORR R1,R1,#0xFF00 CMP R0,R1 BEQ ??get_answer_0 // 992 end_socket(); // 993 else // 994 { // 995 i=recv(sock,buf+i,65535-i,0); SUB R2,R1,R0 ADD R0,R0,R4 ADD R1,R0,#+640 LDR R0,[R4, #+136] MOV R3,#+0 SWI +376 // 996 if (i>=0) CMP R0,#+0 BMI ??get_answer_0 // 997 { // 998 pbuf+=i; LDR R1,[R4, #+144] ADD R0,R0,R1 STR R0,[R4, #+144] POP {R4,PC} // 999 } // 1000 else // 1001 { // 1002 end_socket(); ??get_answer_0: POP {R4,LR} ;; Pop CFI R4 SameValue CFI ?RET R14 CFI CFA R13+0 B end_socket ;; tailcall CFI EndBlock cfiBlock53 // 1003 } // 1004 } // 1005 } RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock54 Using cfiCommon0 CFI NoFunction THUMB ??log??rT: BX PC Nop CFI EndBlock cfiBlock54 REQUIRE log // 1006 // 1007 char tempz[10]; // 1008 // 1009 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock55 Using cfiCommon1 CFI Function log ARM // 1010 void log(const char *s) // 1011 { log: PUSH {R4,R5,LR} CFI ?RET Frame(CFA, -4) CFI R5 Frame(CFA, -8) CFI R4 Frame(CFA, -12) CFI CFA R13+12 // 1012 volatile int hFile; // 1013 unsigned int io_error = 0; // 1014 unsigned int ul; // 1015 FSTATS stat; // 1016 GetFileStats("4:\\weather.txt",&stat,&ul); LDR R5,??log_0+0x4 ;; `?` SUB SP,SP,#+52 CFI CFA R13+64 MOV R4,R0 MOV R1,#+0 STR R1,[SP, #+0] ADD R2,SP,#+8 ADD R1,SP,#+12 MOV R0,R5 SWI +132 // 1017 hFile = fopen("4:\\weather.txt",A_ReadWrite+A_Create+A_Append,P_READ+P_WRITE, &io_error); MOV R3,SP MOV R2,#+384 SUB R1,R2,#+118 MOV R0,R5 SWI +10 STR R0,[SP, #+4] // 1018 if(hFile!=-1) LDR R0,[SP, #+4] CMN R0,#+1 BEQ ??log_1 // 1019 { // 1020 fwrite(hFile, s, strlen(s), &io_error); MOV R0,R4 SWI +27 MOV R3,SP MOV R2,R0 LDR R0,[SP, #+4] MOV R1,R4 SWI +12 // 1021 fwrite(hFile, "\n", 1, &io_error); LDR R0,[SP, #+4] MOV R3,SP MOV R2,#+1 ADR R1,??log_0 ;; "\n" SWI +12 // 1022 fclose(hFile, &io_error); LDR R0,[SP, #+4] MOV R1,SP SWI +13 // 1023 } // 1024 } ??log_1: ADD SP,SP,#+52 ;; stack cleaning CFI CFA R13+12 POP {R4,R5,PC} ;; return DATA ??log_0: DC8 "\n",+0,+0 DC32 `?` CFI EndBlock cfiBlock55 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock56 Using cfiCommon0 CFI NoFunction THUMB ??Parsing??rT: BX PC Nop CFI EndBlock cfiBlock56 REQUIRE Parsing // 1025 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock57 Using cfiCommon1 CFI Function Parsing ARM // 1026 void Parsing() // 1027 { Parsing: PUSH {R4-R10,LR} CFI ?RET Frame(CFA, -4) CFI R10 Frame(CFA, -8) CFI R9 Frame(CFA, -12) CFI R8 Frame(CFA, -16) CFI R7 Frame(CFA, -20) CFI R6 Frame(CFA, -24) CFI R5 Frame(CFA, -28) CFI R4 Frame(CFA, -32) CFI CFA R13+32 // 1028 char *fcstr; // 1029 int i; // 1030 // 1031 // 1032 // log(buf); // 1033 fcstr=strstr(buf,""); LDR R4,??DataTable24 ;; screen LDR R5,??Parsing_0+0x8 ;; `?` SUB SP,SP,#+16 CFI CFA R13+48 ADD R1,R5,#+76 ADD R0,R4,#+640 SWI +280 // 1034 // 1035 //????????kartinka // 1036 fcstr=strstr(fcstr,"/images/")+strlen ("/images/"); ADD R1,R5,#+64 SWI +280 MOV R6,R0 ADD R0,R5,#+64 SWI +27 ADD R0,R0,R6 // 1037 /* for (i=0;fcstr[i]!='.'&&(i")+strlen (""); ADR R6,??Parsing_0 ;; "" MOV R1,R6 SWI +280 MOV R7,R0 MOV R0,R6 SWI +27 ADD R7,R0,R7 // 1044 for (i=0;fcstr[i]!='<'&&(i")+18; ADR R7,??Parsing_0+0x4 ;; ">" MOV R1,R7 SWI +280 ADD R8,R0,#+18 // 1059 for (i=0;fcstr[i]!='<'&&(i")+12; MOV R1,R7 SWI +280 ADD R7,R0,#+12 // 1068 for (i=0;fcstr[i]!='<'&&(i")+20; // 1084 for (i=0;fcstr[i]!='<'&&(i" DC8 ">",+0,+0 DC32 `?` CFI EndBlock cfiBlock57 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock58 Using cfiCommon0 CFI NoFunction THUMB ??charger_c??rT: BX PC Nop CFI EndBlock cfiBlock58 REQUIRE charger_c // 1090 //=================================================================weather // 1091 // 1092 int charge_m; // 1093 int charge_s; // 1094 GBSTMR charger; // 1095 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock59 Using cfiCommon1 CFI Function charger_c ARM // 1096 void charger_c() // 1097 { // 1098 charge_s++; charger_c: LDR R0,??DataTable24 ;; screen PUSH {LR} CFI ?RET Frame(CFA, -4) CFI CFA R13+4 LDR R1,[R0, #+152] ADD R1,R1,#+1 // 1099 if (charge_s==60) CMP R1,#+60 BNE ??charger_c_0 // 1100 { // 1101 charge_s=0; // 1102 charge_m++; LDR R2,[R0, #+148] MOV R1,#+0 ADD R2,R2,#+1 STR R2,[R0, #+148] // 1103 } // 1104 GBS_StartTimerProc(&charger, 216, charger_c); ??charger_c_0: LDR R2,??charger_c_1 ;; charger_c STR R1,[R0, #+152] MOV R1,#+216 MOV R3,#+164 ORR R3,R3,#0x2A00 ADD R0,R3,R0 SWI +77 // 1105 } POP {PC} ;; return DATA ??charger_c_1: DC32 charger_c CFI EndBlock cfiBlock59 RSEG CODE:CODE:NOROOT(2) DATA ??DataTable24: DC32 screen RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock60 Using cfiCommon0 CFI NoFunction THUMB ??write_log??rT: BX PC Nop CFI EndBlock cfiBlock60 REQUIRE write_log // 1106 // 1107 int g_min; // 1108 int g_sec; // 1109 int g_hour; // 1110 GBSTMR gipi; // 1111 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock61 Using cfiCommon1 CFI Function write_log ARM // 1112 void write_log(int zzz) // 1113 { write_log: PUSH {R4,R5,LR} CFI ?RET Frame(CFA, -4) CFI R5 Frame(CFA, -8) CFI R4 Frame(CFA, -12) CFI CFA R13+12 // 1114 volatile int hFile; // 1115 unsigned int io_error = 0; // 1116 unsigned int ul; // 1117 FSTATS stat; // 1118 GetFileStats("4:\\zbin\\miosd\\miosd2.file",&stat,&ul); LDR R5,??DataTable30 ;; `?` SUB SP,SP,#+52 CFI CFA R13+64 MOV R4,R0 MOV R1,#+0 STR R1,[SP, #+0] ADD R2,SP,#+8 ADD R1,SP,#+12 MOV R0,R5 SWI +132 // 1119 hFile = fopen("4:\\zbin\\miosd\\miosd2.file",A_ReadWrite+A_Create+A_Truncate+ A_BIN,P_READ+P_WRITE, &io_error); MOV R3,SP MOV R2,#+384 MOV R1,#+2 ORR R1,R1,#0x8300 MOV R0,R5 SWI +10 STR R0,[SP, #+4] // 1120 if(hFile!=-1) LDR R0,[SP, #+4] CMN R0,#+1 BEQ ??write_log_0 // 1121 { // 1122 char *writer=malloc(32); MOV R0,#+32 SWI +20 MOV R5,R0 // 1123 sprintf(writer, "%d", zzz); MOV R2,R4 ADR R1,??write_log_1 ;; "%d" SWI +22 // 1124 fwrite(hFile, writer, strlen(writer), &io_error); MOV R0,R5 SWI +27 MOV R3,SP MOV R2,R0 LDR R0,[SP, #+4] MOV R1,R5 SWI +12 // 1125 fclose(hFile, &io_error); LDR R0,[SP, #+4] MOV R1,SP SWI +13 // 1126 } // 1127 } ??write_log_0: ADD SP,SP,#+52 ;; stack cleaning CFI CFA R13+12 POP {R4,R5,PC} ;; return DATA ??write_log_1: DC8 "%d",+0 CFI EndBlock cfiBlock61 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock62 Using cfiCommon0 CFI NoFunction THUMB ??Count_GPRS??rT: BX PC Nop CFI EndBlock cfiBlock62 REQUIRE Count_GPRS // 1128 // 1129 int rewriter; // 1130 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock63 Using cfiCommon1 CFI Function Count_GPRS ARM // 1131 void Count_GPRS() // 1132 { Count_GPRS: PUSH {R4,LR} CFI ?RET Frame(CFA, -4) CFI R4 Frame(CFA, -8) CFI CFA R13+8 // 1133 g_sec++; LDR R4,??DataTable41 ;; screen LDR R0,[R4, #+160] // 1134 if (g_sec==60) LDR R1,[R4, #+156] ADD R0,R0,#+1 CMP R0,#+60 // 1135 { // 1136 g_sec=0; MOVEQ R0,#+0 // 1137 g_min++; ADDEQ R1,R1,#+1 STR R0,[R4, #+160] // 1138 } // 1139 if(g_min==60) CMP R1,#+60 BNE ??Count_GPRS_0 // 1140 { // 1141 g_min=0; // 1142 g_hour++; LDR R0,[R4, #+164] MOV R1,#+0 ADD R0,R0,#+1 STR R0,[R4, #+164] ??Count_GPRS_0: STR R1,[R4, #+156] // 1143 } // 1144 int r=g_min; CMP R1,#+1 BLT ??Count_GPRS_1 // 1145 while(r>0) // 1146 r=r-2; ??Count_GPRS_2: SUB R1,R1,#+2 CMP R1,#+1 BGE ??Count_GPRS_2 // 1147 if((r==0)&&(g_min!=0)&&(rewriter!=g_min)) ??Count_GPRS_1: CMP R1,#+0 BNE ??Count_GPRS_3 LDR R0,[R4, #+156] CMP R0,#+0 LDRNE R1,[R4, #+168] CMPNE R1,R0 BEQ ??Count_GPRS_3 // 1148 { // 1149 int *trafik2 = GetGPRSTrafficPointer(); SWI +112 // 1150 int trafiks2=(*trafik2-start_traffic)/1024; // 1151 SUBPROC((void *)write_log,trafiks2); //latest fix LDR R0,[R0, #+0] LDR R1,[R4, #+112] SUB R0,R0,R1 ASR R1,R0,#+9 ADD R0,R0,R1, LSR #+22 ASR R1,R0,#+10 LDR R0,??Count_GPRS_4 ;; write_log SWI +369 // 1152 // write_log(trafiks2); // 1153 rewriter=g_min; LDR R0,[R4, #+156] STR R0,[R4, #+168] // 1154 } // 1155 // sprintf(start_g2, "%s(%dm)", start_g, g_min); // 1156 sprintf(start_g2, "Активен: %02d:%02d:%02d", g_hour, g_min, g_sec); ??Count_GPRS_3: LDR R0,[R4, #+160] LDR R1,??Count_GPRS_4+0x4 ;; `?msg == MSG_RECONFIGURE_REQ) // Перечитывание конфига по сообщению // 1174 { // 1175 extern const char *successed_config_filename; // 1176 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) // 1177 { // 1178 InitConfig(); // 1179 ShowMSG(1,(int)"MIOSD 1.5 config updated!"); // 1180 } // 1181 } // 1182 //=========================================weather // 1183 if (msg->msg==MSG_HELPER_TRANSLATOR) // 1184 { // 1185 if ((int)msg->data1==sock) // 1186 { // 1187 switch((int)msg->data0) // 1188 { // 1189 case ENIP_SOCK_CONNECTED: // 1190 if (connect_state==1) // 1191 { // 1192 SUBPROC((void *)send_req); // 1193 } // 1194 else // 1195 { // 1196 SUBPROC((void *)create_connect); // 1197 } // 1198 break; // 1199 case ENIP_SOCK_DATA_READ: // 1200 if (connect_state==2) // 1201 { // 1202 SUBPROC((void *)get_answer); // 1203 } // 1204 else // 1205 { // 1206 SUBPROC((void *)create_connect); // 1207 } // 1208 break; // 1209 case ENIP_SOCK_REMOTE_CLOSED: // 1210 if (connect_state) SUBPROC((void *)end_socket); // 1211 break; // 1212 case ENIP_SOCK_CLOSED: // 1213 if (connect_state) SUBPROC((void *)end_socket); // 1214 connect_state=3; // 1215 Parsing(); // 1216 sock=-1; // 1217 GBS_StartTimerProc(&mytmr3, 12960*60, start_again); // 1218 break; // 1219 } // 1220 } // 1221 } // 1222 // 1223 // 1224 if((IsGPRSConnected())&&(first_con)) // 1225 { // 1226 int *trafik = GetGPRSTrafficPointer(); // 1227 start_traffic=*trafik; // 1228 g_min=0; // 1229 g_sec=0; // 1230 g_hour=0; // 1231 GBS_DelTimer(&gipi); // 1232 Count_GPRS(); // 1233 first_con=0; // 1234 } // 1235 if(!IsGPRSConnected()) first_con=1; // 1236 if(GetAccessoryType()==13) // 1237 { // 1238 if(!con) // 1239 { // 1240 charge_s=0; // 1241 charge_m=0; // 1242 charger_c(); // 1243 con=1; // 1244 } // 1245 sprintf(chinfo, "Charging(%dmin)", charge_m); // 1246 } // 1247 else // 1248 { // 1249 if(con) // 1250 { // 1251 GBS_DelTimer(&charger); // 1252 TTime time; // 1253 TDate date; // 1254 GetDateTime(&date, &time); // 1255 sprintf(chinfo, "%02d:%02d, %02d-%02d", time.hour, time.min, date.month, date.day); // 1256 volatile int hFile; // 1257 unsigned int io_error = 0; // 1258 unsigned int ul; // 1259 FSTATS stat; // 1260 GetFileStats("4:\\zbin\\miosd\\miosd.file",&stat,&ul); // 1261 hFile = fopen("4:\\zbin\\miosd\\miosd.file",A_ReadWrite+A_Create+A_Truncate+ A_BIN,P_READ+P_WRITE, &io_error); // 1262 if(hFile!=-1) // 1263 { // 1264 fwrite(hFile, chinfo, strlen(chinfo), &io_error); // 1265 fclose(hFile, &io_error); // 1266 } // 1267 con=0; // 1268 } // 1269 } // 1270 return(csm_result); // 1271 } // 1272 */ // 1273 RSEG DATA_Z:DATA:SORT:NOROOT(2) // 1274 int mode_enter; mode_enter: DS8 4 // 1275 int mode; mode: DS8 4 // 1276 extern const unsigned int CALL_BUTTON; // 1277 extern const unsigned int CALL_BUTTON2; // 1278 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock65 Using cfiCommon1 CFI Function Execute ARM // 1279 void Execute() // 1280 { Execute: PUSH {R4,LR} CFI ?RET Frame(CFA, -4) CFI R4 Frame(CFA, -8) CFI CFA R13+8 // 1281 LockSched(); // 1282 char dummy[sizeof(MAIN_CSM)]; // 1283 UpdateCSMname(); // 1284 MAINCSM_ID=CreateCSM(&MAINCSM.maincsm,dummy,2); LDR R4,??DataTable41 ;; screen SUB SP,SP,#+44 CFI CFA R13+52 SWI +326 BL UpdateCSMname LDR R0,??Execute_0 ;; `?` + 8 MOV R2,#+2 MOV R1,SP SWI +263 STR R0,[R4, #+28] // 1285 UnlockSched(); SWI +327 // 1286 lock_keys=0; MOV R0,#+0 STR R0,[R4, #+56] // 1287 phase=1; // 1288 ker_state=1; // 1289 pos_main_x=-20; // 1290 pos_main_y=50; // 1291 pos_link_x=0; STR R0,[R4, #+60] // 1292 pos_link_y=pos_main_y-12+(pos*20); LDR R0,[R4, #+40] MVN R2,#+19 STR R2,[R4, #+48] MOV R2,#+50 STR R2,[R4, #+52] MOV R2,#+20 MUL R0,R2,R0 MOV R1,#+1 STR R1,[R4, #+44] STR R1,[R4, #+12] ADD R0,R0,#+38 STR R0,[R4, #+64] // 1293 pos_msg_x=29; MOV R0,#+29 STR R0,[R4, #+68] // 1294 key_mode=1; STR R1,[R4, #+36] // 1295 DoScreen(); BL DoScreen // 1296 DoShowIt(); BL DoShowIt // 1297 } ADD SP,SP,#+44 CFI CFA R13+8 POP {R4,PC} ;; return DATA ??Execute_0: DC32 `?` + 8 CFI EndBlock cfiBlock65 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock66 Using cfiCommon0 CFI NoFunction THUMB ??my_keyhook??rT: BX PC Nop CFI EndBlock cfiBlock66 REQUIRE my_keyhook // 1298 // 1299 //extern int alt_state; // 1300 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock67 Using cfiCommon1 CFI Function my_keyhook ARM // 1301 int my_keyhook(int submsg, int msg) // 1302 { // 1303 // if((submsg==62)&&(IsIdleUiOnTop())&&(IsUnlocked())) Execute(); // 1304 #ifdef EVILFOX // 1305 #else // 1306 /*if(submsg==CALL_BUTTON2) { // 1307 // DoScreen2(); // 1308 alt_state=1; // 1309 // process_missed(); // 1310 }*/ // 1311 #endif // 1312 if (submsg!=CALL_BUTTON) return(0); my_keyhook: LDR R2,??my_keyhook_0 ;; CALL_BUTTON PUSH {R4,R5,LR} CFI ?RET Frame(CFA, -4) CFI R5 Frame(CFA, -8) CFI R4 Frame(CFA, -12) CFI CFA R13+12 LDR R2,[R2, #+0] CMP R0,R2 BNE ??my_keyhook_1 // 1313 switch(msg) LDR R4,??my_keyhook_0+0x4 ;; mode_enter MOV R0,#+9 LDR R3,[R4, #+4] LDR R12,[R4, #+0] ORR R0,R0,#0x4200 MOV LR,#+0 MOV R5,#+147 ORR R5,R5,#0x100 CMP R1,R5 BEQ ??my_keyhook_2 CMP R1,#+404 BEQ ??my_keyhook_3 ADD R5,R5,#+2 CMP R1,R5 BEQ ??my_keyhook_4 B ??my_keyhook_5 // 1314 { // 1315 case KEY_DOWN: // 1316 if (mode_enter==2) ??my_keyhook_2: CMP R12,#+2 BNE ??my_keyhook_6 // 1317 { // 1318 GBS_SendMessage(MMI_CEPID,KEY_UP,CALL_BUTTON); MOV R1,#+404 SWI +256 // 1319 return (0); ??my_keyhook_7: B ??my_keyhook_1 // 1320 } // 1321 mode_enter=0; ??my_keyhook_6: STR LR,[R4, #+0] // 1322 return (2); ??my_keyhook_5: MOV R0,#+2 POP {R4,R5,PC} // 1323 case KEY_UP: // 1324 if (mode==1)mode=0; ??my_keyhook_3: CMP R3,#+1 STREQ LR,[R4, #+4] // 1325 if (mode_enter==0) CMP R12,#+0 BNE ??my_keyhook_8 // 1326 { // 1327 mode_enter=2; MOV R1,#+2 STR R1,[R4, #+0] // 1328 GBS_SendMessage(MMI_CEPID,KEY_DOWN,CALL_BUTTON); MOV R1,R5 SWI +256 // 1329 return (2); MOV R0,#+2 POP {R4,R5,PC} // 1330 } // 1331 if (mode_enter==2) ??my_keyhook_8: CMP R12,#+2 BNE ??my_keyhook_6 // 1332 { // 1333 mode_enter=0; STR LR,[R4, #+0] // 1334 return (0); ??my_keyhook_1: MOV R0,#+0 POP {R4,R5,PC} // 1335 } // 1336 mode_enter=0; // 1337 return (2); // 1338 case LONG_PRESS: // 1339 mode_enter=1; ??my_keyhook_4: MOV R5,#+1 STR R5,[R4, #+0] // 1340 if(mode==0) CMP R3,#+0 BNE ??my_keyhook_9 // 1341 { // 1342 if (IsUnlocked()) Execute(); SWI +67 CMP R0,#+0 BEQ ??my_keyhook_9 BL Execute // 1343 } // 1344 mode=1; ??my_keyhook_9: STR R5,[R4, #+4] // 1345 break; // 1346 } // 1347 return(2); B ??my_keyhook_5 DATA ??my_keyhook_0: DC32 CALL_BUTTON DC32 mode_enter CFI EndBlock cfiBlock67 // 1348 } RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock68 Using cfiCommon0 CFI NoFunction THUMB ??check_battery??rT: BX PC Nop CFI EndBlock cfiBlock68 REQUIRE check_battery // 1349 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock69 Using cfiCommon1 CFI Function check_battery ARM // 1350 void check_battery() // 1351 { check_battery: PUSH {R4-R7,LR} CFI ?RET Frame(CFA, -4) CFI R7 Frame(CFA, -8) CFI R6 Frame(CFA, -12) CFI R5 Frame(CFA, -16) CFI R4 Frame(CFA, -20) CFI CFA R13+20 // 1352 volatile int hFile_ex; // 1353 unsigned int io_error_ex = 0; // 1354 hFile_ex = fopen("4:\\zbin\\miosd\\miosd.file",A_ReadOnly + A_BIN,P_READ, &io_error_ex); LDR R5,??DataTable34 ;; `?` SUB SP,SP,#+52 CFI CFA R13+72 MOV R1,#+0 STR R1,[SP, #+8] ADD R3,SP,#+8 MOV R2,#+128 MOV R1,#+32768 // 1355 if(hFile_ex!=-1) LDR R4,??DataTable41 ;; screen MOV R0,R5 SWI +10 STR R0,[SP, #+4] LDR R0,[SP, #+4] CMN R0,#+1 BEQ ??check_battery_0 // 1356 { // 1357 fclose(hFile_ex, &io_error_ex); LDR R0,[SP, #+4] ADD R1,SP,#+8 SWI +13 // 1358 int f; // 1359 int fsize; // 1360 FSTATS stat; // 1361 unsigned int ul; // 1362 GetFileStats("4:\\zbin\\miosd\\miosd.file",&stat,&ul); MOV R2,SP ADD R1,SP,#+12 MOV R0,R5 SWI +132 // 1363 if(stat.size>0) LDR R0,[SP, #+16] CMP R0,#+0 BEQ ??check_battery_1 // 1364 { // 1365 f=fopen("4:\\zbin\\miosd\\miosd.file",A_ReadOnly+A_BIN,P_READ,&ul); MOV R3,SP MOV R2,#+128 MOV R1,#+32768 MOV R0,R5 SWI +10 // 1366 fsize=stat.size; LDR R6,[SP, #+16] MOV R5,R0 // 1367 char *p=malloc(fsize); MOV R0,R6 SWI +20 MOV R7,R0 // 1368 p[fread(f,p,fsize,&ul)]; MOV R3,SP MOV R2,R6 MOV R1,R7 MOV R0,R5 SWI +11 // 1369 fclose(f,&ul); MOV R1,SP MOV R0,R5 SWI +13 // 1370 strcpy(chinfo, p); MOV R1,R7 ADD R0,R4,#+172 SWI +26 // 1371 chinfo[fsize]='\0'; ADD R0,R6,R4 MOV R1,#+0 STRB R1,[R0, #+172] // 1372 mfree(p); MOV R0,R7 SWI +21 ADD SP,SP,#+52 CFI CFA R13+20 POP {R4-R7,PC} CFI CFA R13+72 // 1373 } // 1374 } // 1375 else // 1376 sprintf(chinfo, "Еще не заряжали"); ??check_battery_0: ADD R1,R5,#+28 ADD R0,R4,#+172 SWI +22 // 1377 } ??check_battery_1: ADD SP,SP,#+52 ;; stack cleaning CFI CFA R13+20 POP {R4-R7,PC} ;; return CFI EndBlock cfiBlock69 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock70 Using cfiCommon0 CFI NoFunction THUMB ??check_gprs??rT: BX PC Nop CFI EndBlock cfiBlock70 REQUIRE check_gprs // 1378 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock71 Using cfiCommon1 CFI Function check_gprs ARM // 1379 void check_gprs() // 1380 { check_gprs: PUSH {R4-R8,LR} CFI ?RET Frame(CFA, -4) CFI R8 Frame(CFA, -8) CFI R7 Frame(CFA, -12) CFI R6 Frame(CFA, -16) CFI R5 Frame(CFA, -20) CFI R4 Frame(CFA, -24) CFI CFA R13+24 // 1381 volatile int hFile_ex; // 1382 unsigned int io_error_ex = 0; // 1383 hFile_ex = fopen("4:\\zbin\\miosd\\miosd2.file",A_ReadOnly + A_BIN,P_READ, &io_error_ex); LDR R6,??DataTable30 ;; `?` SUB SP,SP,#+52 CFI CFA R13+76 MOV R1,#+0 STR R1,[SP, #+8] ADD R3,SP,#+8 MOV R2,#+128 MOV R1,#+32768 // 1384 if(hFile_ex!=-1) LDR R5,??DataTable41 ;; screen MOV R0,R6 SWI +10 STR R0,[SP, #+4] LDR R0,[SP, #+4] MOV R4,#+364 CMN R0,#+1 BEQ ??check_gprs_0 // 1385 { // 1386 fclose(hFile_ex, &io_error_ex); LDR R0,[SP, #+4] ADD R1,SP,#+8 SWI +13 // 1387 int f; // 1388 int fsize; // 1389 FSTATS stat; // 1390 unsigned int ul; // 1391 GetFileStats("4:\\zbin\\miosd\\miosd2.file",&stat,&ul); MOV R2,SP ADD R1,SP,#+12 MOV R0,R6 SWI +132 // 1392 if(stat.size>0) LDR R0,[SP, #+16] CMP R0,#+0 BEQ ??check_gprs_1 // 1393 { // 1394 f=fopen("4:\\zbin\\miosd\\miosd2.file",A_ReadOnly+A_BIN,P_READ,&ul); MOV R3,SP MOV R2,#+128 MOV R1,#+32768 MOV R0,R6 SWI +10 // 1395 fsize=stat.size; LDR R7,[SP, #+16] MOV R6,R0 // 1396 char *p=malloc(fsize); MOV R0,R7 SWI +20 MOV R8,R0 // 1397 p[fread(f,p,fsize,&ul)]; MOV R3,SP MOV R2,R7 MOV R1,R8 MOV R0,R6 SWI +11 // 1398 fclose(f,&ul); MOV R1,SP MOV R0,R6 SWI +13 // 1399 strcpy(gpinfo, p); MOV R1,R8 ADD R0,R4,R5 SWI +26 // 1400 gpinfo[fsize]='\0'; ADD R0,R7,R5 MOV R1,#+0 STRB R1,[R0, #+364] // 1401 mfree(p); MOV R0,R8 SWI +21 // 1402 isfile=1; MOV R0,#+1 STR R0,[R5, #+120] // 1403 write_total(); _BLF write_total,??write_total??rA ADD SP,SP,#+52 CFI CFA R13+24 POP {R4-R8,PC} CFI CFA R13+76 // 1404 } // 1405 } // 1406 else // 1407 sprintf(gpinfo, "Unknown"); ??check_gprs_0: ADD R1,R6,#+28 ADD R0,R4,R5 SWI +22 // 1408 } ??check_gprs_1: ADD SP,SP,#+52 ;; stack cleaning CFI CFA R13+24 POP {R4-R8,PC} ;; return CFI EndBlock cfiBlock71 RSEG CODE:CODE:NOROOT(2) DATA ??DataTable30: DC32 `?` RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock72 Using cfiCommon0 CFI NoFunction THUMB ??runtime_count??rT: BX PC Nop CFI EndBlock cfiBlock72 REQUIRE runtime_count RSEG DATA_I:DATA:SORT:NOROOT(2) screen: DS8 12 REQUIRE `?` ker_state: DS8 4 REQUIRE `?` r_s: DS8 4 REQUIRE `?` r_m: DS8 4 REQUIRE `?` r_h: DS8 4 REQUIRE `?` MAINCSM_ID: DS8 4 REQUIRE `?` first_con: DS8 4 REQUIRE `?` key_mode: DS8 4 REQUIRE `?` pos: DS8 4 REQUIRE `?` phase: DS8 4 REQUIRE `?` pos_main_x: DS8 4 REQUIRE `?` pos_main_y: DS8 4 REQUIRE `?` lock_keys: DS8 4 REQUIRE `?` pos_link_x: DS8 4 REQUIRE `?` pos_link_y: DS8 4 REQUIRE `?` pos_msg_x: DS8 4 REQUIRE `?` pos_msg_y: DS8 4 REQUIRE `?` engade_weather: DS8 4 REQUIRE `?` app_pos: DS8 4 REQUIRE `?` pos_link2_x: DS8 4 REQUIRE `?` pos_link2_y: DS8 4 REQUIRE `?` battery: DS8 4 REQUIRE `?` monthc: DS8 4 REQUIRE `?` hmm: DS8 4 REQUIRE `?` ggg: DS8 4 REQUIRE `?` trafiks: DS8 4 REQUIRE `?` start_traffic: DS8 4 REQUIRE `?` ffq: DS8 4 REQUIRE `?` isfile: DS8 4 REQUIRE `?` switch_gprs_info: DS8 4 REQUIRE `?` do_st: DS8 4 REQUIRE `?` con: DS8 4 REQUIRE `?` sock: DS8 4 REQUIRE `?` connect_state: DS8 4 REQUIRE `?` pbuf: DS8 4 REQUIRE `?` charge_m: DS8 4 REQUIRE `?` charge_s: DS8 4 REQUIRE `?` g_min: DS8 4 REQUIRE `?` g_sec: DS8 4 REQUIRE `?` g_hour: DS8 4 REQUIRE `?` rewriter: DS8 4 REQUIRE `?` chinfo: DS8 32 REQUIRE `?` temp: DS8 32 REQUIRE `?` pressure: DS8 64 REQUIRE `?` wind: DS8 64 REQUIRE `?` gpinfo: DS8 32 REQUIRE `?` tempz: DS8 12 REQUIRE `?` mytmr: DS8 16 REQUIRE `?` start_g2: DS8 32 REQUIRE `?` temp2: DS8 32 REQUIRE `?` vejsh2: DS8 32 REQUIRE `?` weather_time: DS8 32 REQUIRE `?` pressure2: DS8 64 REQUIRE `?` month: DS8 8 REQUIRE `?` mytmr2: DS8 16 REQUIRE `?` buf: DS8 10004 REQUIRE `?` mytmr3: DS8 16 REQUIRE `?` req_buf: DS8 256 REQUIRE `?` charger: DS8 16 REQUIRE `?` gipi: DS8 16 REQUIRE `?` // 1409 // 1410 GBSTMR rs_tmr; rs_tmr: DS8 16 REQUIRE `?` // 1411 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock73 Using cfiCommon1 CFI Function runtime_count ARM // 1412 void runtime_count() // 1413 { // 1414 r_s++; runtime_count: LDR R0,??DataTable41 ;; screen PUSH {LR} CFI ?RET Frame(CFA, -4) CFI CFA R13+4 LDR R1,[R0, #+16] // 1415 if(r_s==60) LDR R2,[R0, #+20] ADD R1,R1,#+1 CMP R1,#+60 // 1416 { // 1417 r_s=0; MOVEQ R1,#+0 // 1418 r_m++; ADDEQ R2,R2,#+1 STR R1,[R0, #+16] // 1419 } // 1420 if(r_m==60) CMP R2,#+60 BNE ??runtime_count_0 // 1421 { // 1422 r_m=0; // 1423 r_h++; LDR R1,[R0, #+24] MOV R2,#+0 ADD R1,R1,#+1 STR R1,[R0, #+24] ??runtime_count_0: STR R2,[R0, #+20] // 1424 } // 1425 /* if(r_h==24) // 1426 { // 1427 r_h=0; // 1428 r_d++; // 1429 }*/ // 1430 GBS_StartTimerProc(&rs_tmr, 216, runtime_count); LDR R2,??runtime_count_1 ;; runtime_count MOV R1,#+216 MOV R3,#+196 ORR R3,R3,#0x2A00 ADD R0,R3,R0 SWI +77 // 1431 } POP {PC} ;; return DATA ??runtime_count_1: DC32 runtime_count CFI EndBlock cfiBlock73 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock74 Using cfiCommon0 CFI NoFunction THUMB ??maincsm_onmessage2??rT: BX PC Nop CFI EndBlock cfiBlock74 REQUIRE maincsm_onmessage2 // 1432 // 1433 // 1434 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock75 Using cfiCommon1 CFI Function maincsm_onmessage2 ARM // 1435 int maincsm_onmessage2(CSM_RAM* data,GBS_MSG* msg) // 1436 { maincsm_onmessage2: PUSH {R4-R8,LR} CFI ?RET Frame(CFA, -4) CFI R8 Frame(CFA, -8) CFI R7 Frame(CFA, -12) CFI R6 Frame(CFA, -16) CFI R5 Frame(CFA, -20) CFI R4 Frame(CFA, -24) CFI CFA R13+24 // 1437 if(msg->msg == MSG_RECONFIGURE_REQ) LDR R5,??DataTable41 ;; screen SUB SP,SP,#+76 CFI CFA R13+100 LDR R6,??DataTable34 ;; `?` MOV R7,R1 LDR R0,[R7, #+4] MVN R4,#+0 MOV R1,#+175 ORR R1,R1,#0xDE00 CMP R0,R1 BNE ??maincsm_onmessage2_0 // 1438 { // 1439 extern const char *successed_config_filename; // 1440 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) LDR R1,??maincsm_onmessage2_1 ;; successed_config_filename LDR R0,[R7, #+12] LDR R1,[R1, #+0] ??maincsm_onmessage2_2: LDRB R2,[R1, #+0] CMP R2,#+97 BLT ??maincsm_onmessage2_3 CMP R2,#+123 SUBLT R2,R2,#+32 ??maincsm_onmessage2_3: LDRB R3,[R0, #+0] ADD R1,R1,#+1 CMP R3,#+97 BLT ??maincsm_onmessage2_4 CMP R3,#+123 SUBLT R3,R3,#+32 ??maincsm_onmessage2_4: ADD R0,R0,#+1 SUBS R3,R2,R3 BNE ??maincsm_onmessage2_5 CMP R2,#+0 BNE ??maincsm_onmessage2_2 // 1441 { // 1442 ShowMSG(1,(int)"NSD config updated!"); ADD R1,R6,#+44 MOV R0,#+1 SWI +328 // 1443 InitConfig(); _BLF InitConfig,??InitConfig??rA // 1444 } // 1445 } // 1446 if (msg->msg==MSG_HELPER_TRANSLATOR) ??maincsm_onmessage2_0: LDR R0,[R7, #+4] MOV R1,#+174 ORR R1,R1,#0xDE00 CMP R0,R1 BNE ??maincsm_onmessage2_5 // 1447 { // 1448 if ((int)msg->data1==sock) LDR R0,[R7, #+16] LDR R1,[R5, #+136] CMP R0,R1 BNE ??maincsm_onmessage2_5 // 1449 { // 1450 switch((int)msg->data0) LDR R3,[R7, #+12] LDR R2,[R5, #+140] LDR R0,??DataTable35 ;; create_connect LDR R1,??maincsm_onmessage2_1+0x4 ;; end_socket SUBS R3,R3,#+140 BEQ ??maincsm_onmessage2_6 SUBS R3,R3,#+1 BEQ ??maincsm_onmessage2_7 SUBS R3,R3,#+1 BEQ ??maincsm_onmessage2_8 SUBS R3,R3,#+1 BEQ ??maincsm_onmessage2_9 B ??maincsm_onmessage2_5 // 1451 { // 1452 case ENIP_SOCK_CONNECTED: // 1453 if (connect_state==1) ??maincsm_onmessage2_7: CMP R2,#+1 // 1454 { // 1455 SUBPROC((void *)send_req); LDREQ R0,??maincsm_onmessage2_1+0x8 ;; send_req ??maincsm_onmessage2_10: SWI +369 B ??maincsm_onmessage2_5 // 1456 } // 1457 else // 1458 { // 1459 SUBPROC((void *)create_connect); // 1460 } // 1461 break; // 1462 case ENIP_SOCK_DATA_READ: // 1463 if (connect_state==2) ??maincsm_onmessage2_6: CMP R2,#+2 BNE ??maincsm_onmessage2_10 // 1464 { // 1465 SUBPROC((void *)get_answer); LDR R0,??maincsm_onmessage2_1+0xC ;; get_answer B ??maincsm_onmessage2_10 // 1466 } // 1467 else // 1468 { // 1469 SUBPROC((void *)create_connect); // 1470 } // 1471 break; // 1472 case ENIP_SOCK_REMOTE_CLOSED: // 1473 if (connect_state) SUBPROC((void *)end_socket); ??maincsm_onmessage2_9: CMP R2,#+0 BEQ ??maincsm_onmessage2_5 MOV R0,R1 B ??maincsm_onmessage2_10 // 1474 break; // 1475 case ENIP_SOCK_CLOSED: // 1476 if (connect_state) SUBPROC((void *)end_socket); ??maincsm_onmessage2_8: CMP R2,#+0 BEQ ??maincsm_onmessage2_11 MOV R0,R1 SWI +369 // 1477 connect_state=3; ??maincsm_onmessage2_11: MOV R0,#+3 STR R0,[R5, #+140] // 1478 Parsing(); BL Parsing // 1479 sock=-1; // 1480 GBS_StartTimerProc(&mytmr3, (60*216)*(60*5), start_again); LDR R2,??DataTable36 ;; start_again STR R4,[R5, #+136] MOV R1,#+3883008 ORR R1,R1,#0x1380 MOV R0,#+148 ORR R0,R0,#0x2900 ADD R0,R0,R5 SWI +77 // 1481 break; // 1482 } // 1483 } // 1484 } // 1485 // 1486 // 1487 if((IsGPRSConnected())&&(first_con)) ??maincsm_onmessage2_5: SWI +168 CMP R0,#+0 LDRNE R0,[R5, #+32] MOV R7,#+0 CMPNE R0,#+0 BEQ ??maincsm_onmessage2_12 // 1488 { // 1489 int *trafik = GetGPRSTrafficPointer(); // 1490 start_traffic=*trafik; SWI +112 LDR R0,[R0, #+0] // 1491 /* TTime time; // 1492 TDate date; // 1493 GetDateTime(&date, &time); // 1494 sprintf(start_g, "%02d:%02d %02d-%02d", time.hour, time.min, date.month, date.day);*/ // 1495 g_min=0; STR R7,[R5, #+156] STR R0,[R5, #+112] // 1496 g_sec=0; STR R7,[R5, #+160] // 1497 g_hour=0; STR R7,[R5, #+164] // 1498 GBS_DelTimer(&gipi); MOV R0,#+180 ORR R0,R0,#0x2A00 ADD R0,R0,R5 SWI +396 // 1499 Count_GPRS(); BL Count_GPRS // 1500 first_con=0; STR R7,[R5, #+32] // 1501 } // 1502 if(!IsGPRSConnected()) first_con=1; ??maincsm_onmessage2_12: MOV R8,#+1 SWI +168 CMP R0,#+0 STREQ R8,[R5, #+32] // 1503 if(GetAccessoryType()==13) SWI +136 CMP R0,#+13 LDR R0,[R5, #+132] BNE ??maincsm_onmessage2_13 // 1504 { // 1505 if(!con) CMP R0,#+0 BNE ??maincsm_onmessage2_14 // 1506 { // 1507 charge_s=0; STR R7,[R5, #+152] // 1508 charge_m=0; STR R7,[R5, #+148] // 1509 charger_c(); BL charger_c // 1510 con=1; STR R8,[R5, #+132] // 1511 } // 1512 sprintf(chinfo, "Charging(%d min)", charge_m); ??maincsm_onmessage2_14: LDR R2,[R5, #+148] ADD R1,R6,#+64 ADD R0,R5,#+172 SWI +22 MOV R0,#+1 ADD SP,SP,#+76 CFI CFA R13+24 POP {R4-R8,PC} CFI CFA R13+100 // 1513 } // 1514 else // 1515 { // 1516 if(con) ??maincsm_onmessage2_13: CMP R0,#+0 BEQ ??maincsm_onmessage2_15 // 1517 { // 1518 GBS_DelTimer(&charger); MOV R0,#+164 ORR R0,R0,#0x2A00 ADD R0,R0,R5 SWI +396 // 1519 TTime time; // 1520 TDate date; // 1521 GetDateTime(&date, &time); ADD R1,SP,#+8 ADD R0,SP,#+16 SWI +180 // 1522 sprintf(chinfo, "%02d:%02d, %02d-%02d", time.hour, time.min, date.month, date.day); LDRB R0,[SP, #+21] ADD R1,R6,#+84 PUSH {R0} CFI CFA R13+104 LDRB R0,[SP, #+24] PUSH {R0} CFI CFA R13+108 LDRB R3,[SP, #+17] LDRB R2,[SP, #+16] ADD R0,R5,#+172 SWI +22 // 1523 volatile int hFile; // 1524 unsigned int io_error = 0; STR R7,[SP, #+8] // 1525 unsigned int ul; // 1526 FSTATS stat; // 1527 GetFileStats("4:\\zbin\\miosd\\miosd.file",&stat,&ul); ADD R2,SP,#+40 ADD R1,SP,#+44 MOV R0,R6 SWI +132 // 1528 hFile = fopen("4:\\zbin\\miosd\\miosd.file",A_ReadWrite+A_Create+A_Truncate+ A_BIN,P_READ+P_WRITE, &io_error); ADD R3,SP,#+8 MOV R2,#+384 MOV R1,#+2 ORR R1,R1,#0x8300 MOV R0,R6 SWI +10 STR R0,[SP, #+12] // 1529 if(hFile!=-1) LDR R0,[SP, #+12] ADD SP,SP,#+8 CFI CFA R13+100 CMP R0,R4 BEQ ??maincsm_onmessage2_16 // 1530 { // 1531 fwrite(hFile, chinfo, strlen(chinfo), &io_error); ADD R0,R5,#+172 SWI +27 MOV R2,R0 LDR R0,[SP, #+4] MOV R3,SP ADD R1,R5,#+172 SWI +12 // 1532 fclose(hFile, &io_error); LDR R0,[SP, #+4] MOV R1,SP SWI +13 // 1533 } // 1534 con=0; ??maincsm_onmessage2_16: STR R7,[R5, #+132] // 1535 } // 1536 } // 1537 // 1538 return (1); ??maincsm_onmessage2_15: MOV R0,#+1 ADD SP,SP,#+76 CFI CFA R13+24 POP {R4-R8,PC} ;; return DATA ??maincsm_onmessage2_1: DC32 successed_config_filename DC32 end_socket DC32 send_req DC32 get_answer CFI EndBlock cfiBlock75 // 1539 } RSEG CODE:CODE:NOROOT(2) DATA ??DataTable34: DC32 `?` RSEG CODE:CODE:NOROOT(2) DATA ??DataTable35: DC32 create_connect RSEG CODE:CODE:NOROOT(2) DATA ??DataTable36: DC32 start_again RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock76 Using cfiCommon0 CFI NoFunction THUMB ??maincsm_oncreate2??rT: BX PC Nop CFI EndBlock cfiBlock76 REQUIRE maincsm_oncreate2 // 1540 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock77 Using cfiCommon1 CFI Function maincsm_oncreate2 ARM // 1541 static void maincsm_oncreate2(CSM_RAM *data) // 1542 { // 1543 // 1544 } maincsm_oncreate2: BX LR ;; return CFI EndBlock cfiBlock77 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock78 Using cfiCommon0 CFI NoFunction THUMB ??Killer2??rT: BX PC Nop CFI EndBlock cfiBlock78 REQUIRE Killer2 // 1545 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock79 Using cfiCommon1 CFI Function Killer2 ARM // 1546 static void Killer2(void) // 1547 { Killer2: PUSH {LR} CFI ?RET Frame(CFA, -4) CFI CFA R13+4 // 1548 extern void *ELF_BEGIN; // 1549 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); SWI +32789 MOV R1,R0 LDR R0,??DataTable37 ;; ELF_BEGIN POP {LR} ;; Pop CFI ?RET R14 CFI CFA R13+0 _BF kill_data,??kill_data??rA ;; tailcall CFI EndBlock cfiBlock79 // 1550 } RSEG CODE:CODE:NOROOT(2) DATA ??DataTable37: DC32 ELF_BEGIN RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock80 Using cfiCommon0 CFI NoFunction THUMB ??maincsm_onclose2??rT: BX PC Nop CFI EndBlock cfiBlock80 REQUIRE maincsm_onclose2 // 1551 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock81 Using cfiCommon1 CFI Function maincsm_onclose2 ARM // 1552 static void maincsm_onclose2(CSM_RAM *csm) // 1553 { // 1554 RemoveKeybMsgHook((void *)my_keyhook); maincsm_onclose2: LDR R0,??DataTable40 ;; my_keyhook PUSH {R4,LR} CFI ?RET Frame(CFA, -4) CFI R4 Frame(CFA, -8) CFI CFA R13+8 // 1555 GBS_DelTimer(&mytmr); LDR R4,??DataTable41 ;; screen SWI +301 ADD R0,R4,#+408 SWI +396 // 1556 GBS_DelTimer(&mytmr2); ADD R0,R4,#+624 SWI +396 // 1557 GBS_DelTimer(&mytmr3); MOV R0,#+148 ORR R0,R0,#0x2900 ADD R0,R0,R4 SWI +396 // 1558 GBS_DelTimer(&charger); MOV R0,#+164 ORR R0,R0,#0x2A00 ADD R0,R0,R4 SWI +396 // 1559 GBS_DelTimer(&rs_tmr); MOV R0,#+196 ORR R0,R0,#0x2A00 ADD R0,R0,R4 SWI +396 // 1560 SUBPROC((void *)Killer2); LDR R0,??maincsm_onclose2_0 ;; Killer2 SWI +369 // 1561 } POP {R4,PC} ;; return DATA ??maincsm_onclose2_0: DC32 Killer2 CFI EndBlock cfiBlock81 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock82 Using cfiCommon0 CFI NoFunction THUMB ??main??rT: BX PC Nop CFI EndBlock cfiBlock82 REQUIRE main // 1562 RSEG DATA_Z:DATA:SORT:NOROOT(2) // 1563 static unsigned short maincsm_name_body2[140]; maincsm_name_body2: DS8 280 RSEG DATA_C:CONST:SORT:NOROOT(2) `?`: DATA DC8 47H, 45H, 54H, 20H, 2FH, 77H, 61H, 70H DC8 32H, 2FH, 74H, 6FH, 77H, 6EH, 73H, 2FH DC8 39H, 39H, 39H, 34H, 34H, 2EH, 77H, 61H DC8 70H, 32H, 20H, 48H, 54H, 54H, 50H, 2FH DC8 31H, 2EH, 30H, 0DH, 0AH, 48H, 6FH, 73H DC8 74H, 3AH, 20H, 77H, 61H, 70H, 2EH, 67H DC8 69H, 73H, 6DH, 65H, 74H, 65H, 6FH, 2EH DC8 72H, 75H, 0DH, 0AH, 0DH, 0AH, 0 DC8 0 RSEG DATA_C:CONST:SORT:NOROOT(2) DATA DC8 "" RSEG DATA_C:CONST:SORT:NOROOT(2) `?`: DATA DC8 "%s: %s" DC8 0 DC8 "\322\345\354\357\345\360\340\362\363\360\340" DC8 "" DC8 0, 0, 0 DC8 "\302\345\362\345\360" DC8 0, 0 RSEG DATA_C:CONST:SORT:NOROOT(0) DATA DC8 ">" RSEG DATA_C:CONST:SORT:NOROOT(2) `?`: DATA DC8 "4:\\zbin\\miosd\\miosd2.file" DC8 0, 0 DC8 "Unknown" RSEG DATA_C:CONST:SORT:NOROOT(0) DATA DC8 "%d" RSEG DATA_C:CONST:SORT:NOROOT(2) `?`: DATA DC8 "4:\\zbin\\miosd\\miosd.file" DC8 0, 0, 0 DC8 "\305\371\345 \355\345 \347\340\360\377\346\340\353\350" DC8 "NSD config updated!" DC8 "Charging(%d min)" DC8 0, 0, 0 DC8 "%02d:%02d, %02d-%02d" DC8 0, 0, 0 RSEG DATA_C:CONST:SORT:NOROOT(0) DATA DC8 "\012" RSEG DATA_C:CONST:SORT:NOROOT(2) `?`: DATA DC8 "4:\\weather.txt" DC8 0 // 1564 // 1565 static const struct // 1566 { // 1567 CSM_DESC maincsm; // 1568 WSHDR maincsm_name; RSEG DATA_C:CONST:SORT:NOROOT(2) `?`: DATA DC8 "MIOSD Demon" DC32 maincsm_onmessage2, maincsm_oncreate2, 0, 0, 0, 0 DC32 maincsm_onclose2, 44, 1, minus11, maincsm_name_body2, 55AACCCCH DC32 3333AA55H, 0 DC16 139 DC8 0, 0 RSEG DATA_C:CONST:SORT:NOROOT(2) `?`: DATA DC8 "MIOSD" DC8 0, 0 MAINCSM: DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 DC16 139 DC8 0, 0 RSEG DATA_C:CONST:SORT:NOROOT(2) `?`: DATA DC8 "4:\\zbin\\miosd\\img3.png" DC8 0 DC8 "4:\\zbin\\miosd\\img4.png" DC8 0 DC8 "4:\\zbin\\miosd\\img7.png" DC8 0 DC8 "4:\\zbin\\miosd\\img6.png" DC8 0 DC8 "4:\\zbin\\miosd\\img2.png" DC8 0 DC8 "4:\\zbin\\miosd\\img1.png" DC8 0 RSEG DATA_C:CONST:SORT:NOROOT(2) DATA DC8 "%t " RSEG DATA_C:CONST:SORT:NOROOT(0) DATA DC8 "%t" RSEG DATA_C:CONST:SORT:NOROOT(2) `?`: DATA DC8 "\304\345\352\340\341\360\374" DC8 "\315\356\377\341\360\374" DC8 0 DC8 "\316\352\362\377\341\360\374" DC8 "\321\345\355\362\377\341\360\374" DC8 0, 0, 0 DC8 "\300\342\343\363\361\362" DC8 0 DC8 "\310\376\353\374" DC8 0, 0, 0 DC8 "\310\376\355\374" DC8 0, 0, 0 DC8 "\300\357\360\345\353\374" DC8 0 DC8 "\314\340\360\362" DC8 0, 0, 0 DC8 "\324\345\342\360\340\353\374" DC8 "\337\355\342\340\360\374" DC8 0 RSEG DATA_C:CONST:SORT:NOROOT(2) DATA DC8 "\314\340\351" RSEG DATA_C:CONST:SORT:NOROOT(2) DATA DC8 "%t:" RSEG DATA_C:CONST:SORT:NOROOT(0) `?`: DATA DC8 "" RSEG DATA_C:CONST:SORT:NOROOT(2) minus11: DATA DC32 -11 RSEG DATA_C:CONST:SORT:NOROOT(2) Canvas: DATA DC16 0, 0, 0, 0 gui_methods: DC32 OnRedraw, onCreate, onClose, onFocus, onUnfocus, OnKey, 0H DC32 kill_data, method8, method9, 0H // 1569 }MAINCSM2 = // 1570 { // 1571 { // 1572 maincsm_onmessage2, // 1573 maincsm_oncreate2, // 1574 #ifdef NEWSGOLD // 1575 0, // 1576 0, // 1577 0, // 1578 0, // 1579 #endif // 1580 maincsm_onclose2, // 1581 sizeof(MAIN_CSM), // 1582 1, // 1583 &minus11 // 1584 }, // 1585 { // 1586 maincsm_name_body2, // 1587 NAMECSM_MAGIC1, // 1588 NAMECSM_MAGIC2, // 1589 0x0, // 1590 139 // 1591 } // 1592 }; // 1593 // 1594 // Основная процедура. Она первой получает управление при старте эльфа. RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock83 Using cfiCommon1 CFI Function main ARM // 1595 int main(void) // 1596 { main: PUSH {R4,R5,LR} CFI ?RET Frame(CFA, -4) CFI R5 Frame(CFA, -8) CFI R4 Frame(CFA, -12) CFI CFA R13+12 SUB SP,SP,#+44 CFI CFA R13+56 // 1597 LockSched(); SWI +326 // 1598 InitConfig(); _BLF InitConfig,??InitConfig??rA // 1599 /* CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); // 1600 memcpy(&icsmd,icsm->constr,sizeof(icsmd)); // 1601 old_icsm_onMessage=icsmd.onMessage; // 1602 icsmd.onMessage=MyIDLECSM_onMessage; // 1603 old_icsm_onClose=icsmd.onClose; // 1604 icsmd.onClose=MyIDLECSM_onClose; // 1605 icsm->constr=&icsmd; */ // 1606 // 1607 CSM_RAM *save_cmpc; // 1608 char dummy[sizeof(MAIN_CSM)]; // 1609 UpdateCSMname(); BL UpdateCSMname // 1610 // 1611 save_cmpc=CSM_root()->csm_q->current_msg_processing_csm; SWI +33030 LDR R0,[R0, #+8] LDR R4,[R0, #+4] // 1612 CSM_root()->csm_q->current_msg_processing_csm=CSM_root()->csm_q->csm.first; SWI +33030 MOV R5,R0 SWI +33030 LDR R0,[R0, #+8] LDR R1,[R5, #+8] LDR R0,[R0, #+8] // 1613 CreateCSM(&MAINCSM2.maincsm,dummy,0); LDR R5,??main_0 ;; `?` STR R0,[R1, #+4] MOV R2,#+0 MOV R1,SP ADD R0,R5,#+12 SWI +263 // 1614 CSM_root()->csm_q->current_msg_processing_csm=save_cmpc; SWI +33030 LDR R0,[R0, #+8] STR R4,[R0, #+4] // 1615 // 1616 AddKeybMsgHook((void *)my_keyhook); LDR R0,??DataTable40 ;; my_keyhook SWI +299 // 1617 wsprintf((WSHDR *)(&MAINCSM2.maincsm_name),"MIOSD Demon"); MOV R1,R5 ADD R0,R5,#+52 SWI +292 // 1618 // 1619 UnlockSched(); SWI +327 // 1620 check_battery(); BL check_battery // 1621 check_gprs(); BL check_gprs // 1622 start_again(); BL start_again // 1623 runtime_count(); BL runtime_count // 1624 first_con=1; LDR R0,??DataTable41 ;; screen MOV R1,#+1 STR R1,[R0, #+32] // 1625 pos=1; STR R1,[R0, #+40] // 1626 // 1627 return 0; MOV R0,#+0 ADD SP,SP,#+44 CFI CFA R13+12 POP {R4,R5,PC} ;; return DATA ??main_0: DC32 `?` CFI EndBlock cfiBlock83 // 1628 } RSEG CODE:CODE:NOROOT(2) DATA ??DataTable40: DC32 my_keyhook RSEG CODE:CODE:NOROOT(2) DATA ??DataTable41: DC32 screen RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock84 Using cfiCommon1 CFI NoFunction ARM ??ascii2ws??rA: LDR R12,??Subroutine42_0 ;; ascii2ws BX R12 DATA ??Subroutine42_0: DC32 ascii2ws CFI EndBlock cfiBlock84 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock85 Using cfiCommon1 CFI NoFunction ARM ??kill_data??rA: LDR R12,??Subroutine43_0 ;; kill_data BX R12 DATA ??Subroutine43_0: DC32 kill_data CFI EndBlock cfiBlock85 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock86 Using cfiCommon1 CFI NoFunction ARM ??utf82win??rA: LDR R12,??Subroutine44_0 ;; utf82win BX R12 DATA ??Subroutine44_0: DC32 utf82win CFI EndBlock cfiBlock86 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock87 Using cfiCommon1 CFI NoFunction ARM ??write_total??rA: LDR R12,??Subroutine45_0 ;; write_total BX R12 DATA ??Subroutine45_0: DC32 write_total CFI EndBlock cfiBlock87 RSEG CODE:CODE:NOROOT(2) CFI Block cfiBlock88 Using cfiCommon1 CFI NoFunction ARM ??InitConfig??rA: LDR R12,??Subroutine46_0 ;; InitConfig BX R12 DATA ??Subroutine46_0: DC32 InitConfig CFI EndBlock cfiBlock88 RSEG DATA_ID:CONST:SORT:NOROOT(2) `?`: DATA DC16 0, 0 DC32 8, `?` `?`: DC8 0, 0, 0, 0 `?`: DC32 20 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC32 1 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC32 3 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 `?`: DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 RSEG DATA_ID:CONST:SORT:NOROOT(2) `?*?DATA_ID`: RSEG INITTAB:CODE:ROOT(2) DATA ?init?tab?DATA_I: DCD sfe(DATA_I) - sfb(DATA_I), sfb(DATA_I), sfb(DATA_ID) RSEG INITTAB:CODE:ROOT(2) DATA ?init?tab?DATA_Z: DCD sfe(DATA_Z) - sfb(DATA_Z), sfb(DATA_Z), sfb(DATA_Z) END // // 10 008 bytes in segment CODE // 1 171 bytes in segment DATA_C // 10 964 bytes in segment DATA_I // 10 964 bytes in segment DATA_ID // 656 bytes in segment DATA_Z // 24 bytes in segment INITTAB // // 9 780 bytes of CODE memory (+ 252 bytes shared) // 12 135 bytes of CONST memory // 11 620 bytes of DATA memory // //Errors: none //Warnings: none