diff --git a/0000Boot/0000Kernel.BIN.C b/0000Boot/0000Kernel.BIN.C index 5c3cd29..d9563ce 100644 Binary files a/0000Boot/0000Kernel.BIN.C and b/0000Boot/0000Kernel.BIN.C differ diff --git a/Accts/Adam3.CPP b/Accts/Adam3.CPP deleted file mode 100644 index 88ec8bc..0000000 --- a/Accts/Adam3.CPP +++ /dev/null @@ -1,10 +0,0 @@ -//Change anything you want in this -//acct file or others. - -#include "HOME/Adam3aLocalize" -#include "HOME/Adam3bPkgs" -#include "HOME/Adam3cKeyPlugIns" -#include "HOME/Adam3dWrappers" -#include "HOME/Adam3eSys" - -#help_index "" diff --git a/Accts/Adam3dWrappers.CPP b/Accts/Adam3dWrappers.CPP deleted file mode 100644 index 7d20c27..0000000 --- a/Accts/Adam3dWrappers.CPP +++ /dev/null @@ -1,26 +0,0 @@ -//Change anything you want in this -//acct file or others. - -#help_index "Cmd Line (Typically)" - -//These are customized quick commands. -//Feel free to add more or change. -public I64 F(U8 *needle_str,U8 *fu_flags=NULL) -{//Find (Grep) all text files. - return Grep(needle_str,"/*",fu_flags); -} - -public I64 R(U8 *needle_str,U8 *replace_text=NULL,U8 *fu_flags="+l-i") -{//Find (Grep) and replace string with string in all files. - return Grep(needle_str,"/*",fu_flags,replace_text); -} - -public I64 FD(U8 *needle_str,U8 *fu_flags=NULL) -{//Find (Grep) text files in cur dir. - return Grep(needle_str,"*",fu_flags); -} - -public I64 RD(U8 *needle_str,U8 *replace_text=NULL,U8 *fu_flags="+l-i") -{//Find (Grep) and replace string with string in cur dir. - return Grep(needle_str,"*",fu_flags,replace_text); -} diff --git a/Accts/Adam3eSys.CPP b/Accts/Adam3eSys.CPP deleted file mode 100644 index 1f25841..0000000 --- a/Accts/Adam3eSys.CPP +++ /dev/null @@ -1,41 +0,0 @@ -//Change anything you want in this -//acct file or others. - -U0 UserStartUp() -{//Run each time a user a spawned - DocTermNew; - Type("::/Doc/Start.TXT"); - LBts(&Fs->display_flags,DISPLAYf_SHOW); - WinToTop; - WinZBufUpdate; - Preempt(ON); - Dir; -} - -U0 SrvStartUp() -{//Run each time a srv task is spawned. - DocTermNew; - LBts(&Fs->display_flags,DISPLAYf_SHOW); - WinToTop; - WinZBufUpdate; - Preempt(ON); -} - -U0 StartUpTasks() -{ - CTask *user1,*user2; - user1=SpawnUser; - user2=SpawnUser; - WinToTop(user1); - WinTileVert; - PopUp("#include \"::/Adam/Start\";"); - "Boot Time:%7.3fs\n",tS; - XTalk(user1,"Cd(\"HOME\");#include \"DoOnce\";\n"); - Silent(ON); //no output to screen - WSInit("/*;~*Bible.TXT*"); - Silent(OFF); //no output to screen -} - -StartUpTasks; - -"\nOS Compile Time:%D %T\n",sys_compile_time,sys_compile_time; diff --git a/Accts/DoOnce.CPP b/Accts/DoOnce.CPP deleted file mode 100644 index c8d3db4..0000000 --- a/Accts/DoOnce.CPP +++ /dev/null @@ -1,16 +0,0 @@ -//This file is executed by the -//first terminal window upon start-up. -//See $LK,"DoOnce",A="FF:HOME/Adam3eSys.CPP,DoOnce"$ and $LK,"Acct Files",A="FF:::/Doc/GuideLines.TXT,ACCT FILES"$. - -//It goes in your HOME directory and -//you can customize it. - -//Delete this to get rid of -//default start-up msg. -Type("::/Doc/Customize.TXT"); - -"\nTake Tour"; -if (YorN) { - Cd("::/Misc/Tour"); - AutoFile("Tour"); -} diff --git a/Accts/PersonalMenu.TXT b/Accts/PersonalMenu.TXT deleted file mode 100644 index 97398cd..0000000 Binary files a/Accts/PersonalMenu.TXT and /dev/null differ diff --git a/Adam.CPP b/Adam.CPP new file mode 100644 index 0000000..6ce9ca2 --- /dev/null +++ b/Adam.CPP @@ -0,0 +1,105 @@ +//This is executed by the Adam task at boot. +//See $LK,"Adam Start-up",A="FF:::/Kernel/KEnd.CPP,\"Adam:2"$. + +//You do not place this file in /Home. (It would be ignored.) +//but look at the bottom of this file to see +//files you do customize. + +extern I8i OptEqu(I64i num,I8i val); +OptEqu(0,0); //(0,0)=EchoOff (0,1)=EchoOn +#include "/Kernel/KernelA.HPP" +#include "/Compiler/CompilerA.HPP" +#include "/Kernel/KernelB.HPP" +#include "/Kernel/KernelC.HPP" +#include "/Compiler/CompilerB.HPP" + +Cd("/Adam");; +#exe {OptOn(OPTf_WARN_PAREN);}; +#exe {OptOn(OPTf_WARN_DUP_TYPES);}; + +HashTablePurge(adam_task->hash_table); + +#help_index "Misc" + +//Use Dbg("Type 'G;'"); to debug before window mgr is running. + +public F64 os_version=3.03;//Operating system version. + +#include "AExts.HPP" +#include "AMath" +#include "Training" +#include "AUtils" +#include "AMathODE" +Cd("::/Adam/Gr");; +#include "Gr" + +Cd("::/Adam/Snd");; +#include "Snd" + +Cd("::/Adam/Dsk");; +#include "ADsk" + +Cd("::/Adam");; +#include "Menu" +#include "WinA" +#include "WinB" +#include "ADbg" + +#include "::/Adam/God/GodExt" + +Cd("::/Adam/DolDoc");; +#include "Doc" +LBts(&sys_run_level,RLf_DOC); + +Cd("::/Adam/Ctrls");; +#include "Ctrls" + +Cd("::/Adam");; +#include "AutoFile" +#include "Acct" + +Cd("::/Adam/AutoComplete");; +#include "AutoComplete" + +Cd("::/Adam/God");; +#include "God" + +Cd("::/Adam");; +#include "AHash" +#include "TaskSettings" +#include "DevInfo" +#include "ADefine" + +//Dbg("Type 'G;'"); +DocTermNew; +WinVert(2,10); + +sys_winmgr_task=Spawn(&WinMgrTask,NULL,"Window Mgr"); +Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL-WIF_SELF_CTRLS; +LBts(&Fs->display_flags,DISPLAYf_CHILDREN_NOT_ON_TOP); +LBts(&Fs->display_flags,DISPLAYf_SHOW); +RegistryInit; +LBts(&sys_run_level,RLf_REGISTRY); + +Cd("::/Adam");; +#include "WallPaper" + +if (IsDrvWritable) + MkDir("/Temp"); //Good to have a Temp + +#exe {OptOff(OPTf_WARN_PAREN);}; +#exe {OptOff(OPTf_WARN_DUP_TYPES);}; +LBts(&sys_run_level,RLf_HOME); + +#help_index "" +Cd("::/Home");; + +//If these are not present in /Home, it uses the version in the root dir. +//You should make your own version of these files in you /Home directory. +#include "::/Home/AdamLocalize" +#include "::/Home/AdamPkgs" +#include "::/Home/AdamKeyPlugIns" +#include "::/Home/AdamWrappers" +#include "::/Home/AdamSys" + +//After this file, the Adam task enters $LK,"server mode",A="HI:Task/Srv"$. diff --git a/Adam/Dbg2a.CPP b/Adam/ADbg.CPP similarity index 96% rename from Adam/Dbg2a.CPP rename to Adam/ADbg.CPP index b1aff6d..3d0b633 100644 --- a/Adam/Dbg2a.CPP +++ b/Adam/ADbg.CPP @@ -1,7 +1,7 @@ #help_index "Debugging/Dump" Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,I64 depth,I64 max_depth,Bool dynamic,I64 types=HTT_CLASS,I64 offset=0) {//See $LK,"::/Demo/LastClass.CPP"$. - I64 i,j,*ptr; + I64 i,j,stars,*ptr; CMemberLst *ml; CDocEntry *doc_e; Bool unlock; @@ -24,12 +24,12 @@ Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,I64 depth,I64 max_depth tempc2=ml->member_class; ptr=_d(U8 *)+ml->offset; DocPrint(doc,"%08X ",ptr(U8 *)+offset); - j=tempc2->ptr_cnt; + stars=tempc2->ptr_stars_cnt; tempc2=OptClassFwd(tempc2); - tempc2-=tempc2->ptr_cnt; + tempc2-=tempc2->ptr_stars_cnt; if (tempc2->type & HTT_INTERNAL_TYPE) { DocPrint(doc,"$$GREEN$$%-20ts:$$FG$$",ml->str); - if (j==1 && (tempc2->raw_type==RT_I8 || tempc2->raw_type==RT_U8)) { + if (stars==1 && (tempc2->raw_type==RT_I8 || tempc2->raw_type==RT_U8)) { ptr=*ptr; if (ChkPtr(ptr)) { if (dynamic) { @@ -39,7 +39,7 @@ Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,I64 depth,I64 max_depth } else DocPrint(doc,"%40ts\n",ptr); } - } else if (!j) { + } else if (!stars) { j=MinI64(ml->dim.total_cnt,32); if (tempc2->raw_type==RT_I8 || tempc2->raw_type==RT_U8) { if (j==1) { @@ -128,14 +128,14 @@ Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,I64 depth,I64 max_depth DocPrint(doc,"\n"); } else { if (depth<2) { - if (j==1 && !ChkPtr(*ptr)) + if (stars==1 && !ChkPtr(*ptr)) DocPrint(doc,"%-20ts:%016X\n",ml->str,*ptr); else { DocPrint(doc,"$$TR,\"%s\"$$\n",ml->str); DocPrint(doc,"$$ID,2$$"); - if (!j) + if (!stars) ClassRep2(doc,ptr,tempc2->str,depth+1,max_depth,dynamic); - else if (j==1) + else if (stars==1) ClassRep2(doc,*ptr,tempc2->str,depth+1,max_depth,dynamic); DocPrint(doc,"$$ID,-2$$"); } diff --git a/Adam/ADefine.CPP b/Adam/ADefine.CPP new file mode 100644 index 0000000..f034821 --- /dev/null +++ b/Adam/ADefine.CPP @@ -0,0 +1,51 @@ +#help_index "Define;Char/Define" + +U0 LoadDocDefines() +{ + CBinFile *bfh=sys_boot_base-sizeof(CBinFile); + + DefinePrint( + "DD_OS_NAME_VERSION","TempleOS V%0.2f",os_version); + DefinePrint( + "DD_TEMPLEOS_AGE","%0.1f",(Now-Str2Date("8/1/2003"))/ToF64(1<<32)/CDATE_YEAR_DAYS); + + //This is cut and replaced when I generate a distro. + //See $LK,"DD_TEMPLEOS_LOC",A="FF:::/Demo/AcctExample/TOSDistro.CPP,DD_TEMPLEOS_LOC"$. + $TR-C,"LineRep"$ +$ID,4$DefinePrint("DD_TEMPLEOS_LOC","120,789"); +DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","79,959"); +$ID,-4$ + DefinePrint( + "DD_KERNEL","%08X",bfh); + bfh(I64)+=bfh->file_size-1; + DefinePrint( + "DD_KERNEL_END","%08X",bfh); + DefinePrint( + "DD_PROTECTED_LOW","%08X",MEM_PROTECTED_LOW_LIMIT); + + //$LK,"DD_BOOT_HIGH_LOC_CD",A="FF:::/Adam/Boot/BootCD.CPP,DD_BOOT_HIGH_LOC_CD"$ + + DefinePrint( + "DD_MP_VECT","%08X",MP_VECT_ADDR); + DefinePrint( + "DD_MP_VECT_END","%08X",MP_VECT_ADDR+AP_16BIT_INIT_END-AP_16BIT_INIT-1); + + DefinePrint( + "DD_SYS_FIXED_AREA_BASE","%08X",SYS_FIXED_AREA); + DefinePrint( + "DD_SYS_FIXED_AREA_END","%08X",SYS_FIXED_AREA+sizeof(CSysFixedArea)-1); + DefinePrint( + "DD_SYS_HEAP_BASE","%08X",sys_heap_base); + DefinePrint( + "DD_SYS_HEAP_LIMIT","%08X",sys_heap_limit); + DefinePrint( + "DD_MEM_MIN_MEG","%d Meg",MEM_MIN_MEG); + DefinePrint( + "DD_MEM_MAPPED_SPACE_GIG","%d Gig",MEM_MAPPED_SPACE/0x40000000); + DefinePrint( + "DD_MEM_MAPPED_SPACE_END","%010X",MEM_MAPPED_SPACE-1); + DefinePrint( + "DD_JIFFY_HZ","%d Hz",JIFFY_FREQ); +} + +LoadDocDefines; diff --git a/Adam/AdamExts.HPP b/Adam/AExts.HPP similarity index 83% rename from Adam/AdamExts.HPP rename to Adam/AExts.HPP index 301322e..5740479 100644 --- a/Adam/AdamExts.HPP +++ b/Adam/AExts.HPP @@ -1,13 +1,20 @@ +extern U0 ACDDef(I64 n,CTask *parent=NULL); +extern U0 ACDDefsPut(CDoc *doc,U8 *st,I64 num=-1); +extern U0 ACDFillin(I64 n); +extern U0 ACFillIn(I64 n); +extern U0 ACFindMisspelled(CDoc *doc); +extern U0 ACMan(I64 n,CTask *parent=NULL); extern U0 AcctOneTimePopUp(I64 flag_num,U8 *msg); extern I64 AdamFile(U8 *filename,Bool warn_ext=TRUE); -extern I64 BMPFileWrite(U8 *filename,CDC *dc,I64 bits=4); +extern Bool AutoComplete(Bool val=OFF); +extern I64 BMPWrite(U8 *filename,CDC *dc,I64 bits=4); extern I64 CDFileCreate(U8 *_filename=NULL,U8 *src_files_find_mask,U8 *fu_flags=NULL, U8 *_stage2_filename=NULL); extern U0 ClipboardDel(); extern CCtrl *CtrlFindUnique(CTask *haystack_task,I64 needle_type); extern Bool CtrlInside(CCtrl *c,I64 x,I64 y); extern U8 *DC2Sprite(CDC *tempb); -extern U0 DocBMPFile(CDoc *doc=NULL,U8 *filename,Bool use_ms_paint_palette=FALSE); +extern U0 DocBMP(CDoc *doc=NULL,U8 *filename,Bool dither_probability=FALSE,Bool use_ms_paint_palette=FALSE); extern U0 DocBinDel(CDoc *doc,CDocBin *b); extern U0 DocBinsValidate(CDoc *doc); extern U0 DocBottom(CDoc *doc=NULL); @@ -52,8 +59,7 @@ extern CMenu *MenuFilePush(U8 *filename); extern U0 MenuPop(); extern CMenu *MenuPush(U8 *st); extern CTask *Noise(I64 mS,I64 min_freq,I64 max_freq); -extern Bool Plain(U8 *filename); -extern I64 PopUp(U8 *msg,CTask *parent=NULL,CTask **_pu_task=NULL); +extern Bool Plain(U8 *filename,I64 edf_dof_flags=0); extern Bool PopUpCancelOk(U8 *header=NULL,U8 *footer=NULL); extern I64 PopUpColor(U8 *header=NULL,Bool allow_transpant=TRUE,Bool allow_dft=TRUE); extern I64 PopUpColorDither(U8 *header=NULL); @@ -67,27 +73,20 @@ extern Bool PopUpNoYes(U8 *header=NULL,U8 *footer=NULL); extern Bool PopUpOk(U8 *header=NULL,U8 *footer=NULL); extern I64 PopUpRangeI64(I64 lo,I64 hi,I64 step=1,U8 *header=NULL,U8 *footer=NULL); extern Bool PopUpTransform(I64 *r); -extern CDoc *SetCursorPos(CTask *task,I64 ip_text_x,I64 ip_text_y,Bool set_cursor=TRUE); -extern Bool SetWinHorz(I64 left,I64 right,CTask *task=NULL); -extern Bool SetWinVert(I64 top,I64 bottom,CTask *task=NULL); extern U0 SettingsPop(CTask *task=NULL,I64 flags=0); extern CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0); -extern U0 TemplateSliderCtrl(CDoc *doc); +extern U0 TemplateCtrlSlider(CDoc *doc); extern Bool View(); extern U0 ViewAnglesDel(CTask *task=NULL); extern CCtrl *ViewAnglesNew(CTask *task=NULL); -extern U0 WSDDef(I64 n,CTask *parent=NULL); -extern U0 WSDDefsPut(CDoc *doc,U8 *st,I64 num=-1); -extern U0 WSDFillin(I64 n); -extern U0 WSFillIn(I64 n); -extern U0 WSFindMisspelled(CDoc *doc); -extern U0 WSMan(I64 n,CTask *parent=NULL); extern Bool WinBorder(Bool val,CTask *task=NULL); +extern CDoc *WinCursorPosSet(CTask *task,I64 ip_text_x,I64 ip_text_y,Bool set_cursor=TRUE); +extern Bool WinHorz(I64 left,I64 right,CTask *task=NULL); extern U0 WinMax(CTask *task=NULL); extern U0 WinMgrSync(I64 cnt=1,Bool force=FALSE); extern U0 WinScrollNull(CTask *task,CD3I64 *s); extern U0 WinScrollRestore(CTask *task,CD3I64 *s); extern U0 WinScrollsInit(CTask *task); extern Bool WinToTop(CTask *task=NULL,Bool update_z_buf=TRUE); -extern Bool WordStat(Bool val=OFF); +extern Bool WinVert(I64 top,I64 bottom,CTask *task=NULL); extern CWinMgrGlbls winmgr; diff --git a/Adam/Hash2a.CPP b/Adam/AHash.CPP similarity index 91% rename from Adam/Hash2a.CPP rename to Adam/AHash.CPP index 1196e35..9cca377 100644 --- a/Adam/Hash2a.CPP +++ b/Adam/AHash.CPP @@ -144,8 +144,8 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, U8 *outname=NULL,U8 mapfile_drv=0,U8 *index=NULL,CDoc *_doc=NULL) {//Dump hash symbol table. // "+p" for only public symbols -// "+m" to order by number (normally alphabetical) -// "-r" just local hash table + // "+m" to order by number (normally alphabetical) + // "-r" just local hash table CHashTable *table; CHashSrcSym *temph; CHashGeneric *ptr; @@ -177,7 +177,7 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, doc=NULL; if (index) { - task=SpawnUser; + task=User; TaskWait(task); LBtr(&task->display_flags,DISPLAYf_SHOW); } else @@ -186,16 +186,18 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, cnt=0; table=h; while (table) { - temph=table->next_added; - while (temph!=table) { - if (!(temph->type & (HTF_IMPORT | HTF_PRIVATE)) && - (temph->type & HTF_PUBLIC || !publics)) { - if (!index) - cnt++; - else if (temph->type&HTG_SRC_SYM && (cur_index=temph->index)) - cnt+=HelpIndexCnt(cur_index,index); + for (i=0;i<=table->mask;i++) { + temph=table->body[i]; + while (temph) { + if (!(temph->type & (HTF_IMPORT | HTF_PRIVATE)) && + (temph->type & HTF_PUBLIC || !publics)) { + if (!index) + cnt++; + else if (temph->type&HTG_SRC_SYM && (cur_index=temph->index)) + cnt+=HelpIndexCnt(cur_index,index); + } + temph=temph->next; } - temph=temph->next_added; } if (recurse) table=table->next; @@ -208,19 +210,21 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, j=0; table=h; while (table) { - temph=table->next_added; - while (temph!=table) { - if (!(temph->type & (HTF_IMPORT | HTF_PRIVATE)) && - (temph->type & HTF_PUBLIC || !publics)) - if (!index) - lst[j++].h=temph; - else if (temph->type&HTG_SRC_SYM && (cur_index=temph->index) && - (k=HelpIndexCnt(cur_index,index))) - while (k--) { - lst[j].index=HelpIndexStr(&cur_index,index); + for (i=0;i<=table->mask;i++) { + temph=table->body[i]; + while (temph) { + if (!(temph->type & (HTF_IMPORT | HTF_PRIVATE)) && + (temph->type & HTF_PUBLIC || !publics)) + if (!index) lst[j++].h=temph; - } - temph=temph->next_added; + else if (temph->type&HTG_SRC_SYM && (cur_index=temph->index) && + (k=HelpIndexCnt(cur_index,index))) + while (k--) { + lst[j].index=HelpIndexStr(&cur_index,index); + lst[j++].h=temph; + } + temph=temph->next; + } } if (recurse) table=table->next; @@ -347,7 +351,7 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, if (index) progress1=progress1_max=0; -wh_done: + wh_done: Preempt(old_preempt); if (doc) { DocBinsValidate(doc); @@ -376,11 +380,7 @@ public I64 HashDepthRep(CHashTable *table=NULL) for (i=0;i<=table->mask;i++) { temph=table->body[i]; if (temph) { - j=1; - while (temph->next) { - temph=temph->next; - j++; - } + j=LinkedLstCnt(temph); if (jsrc_link; if (ptr[0] && ptr[1] && ptr[2]==':' && ptr[3]==':') - ptr[3]=*sys_acct; + ptr[3]=dsk.boot_drv_let; doc_e->aux_str=NULL; } diff --git a/Adam/Math2a.CPP b/Adam/AMath.CPP similarity index 100% rename from Adam/Math2a.CPP rename to Adam/AMath.CPP diff --git a/Adam/MathODE.CPP b/Adam/AMathODE.CPP similarity index 78% rename from Adam/MathODE.CPP rename to Adam/AMathODE.CPP index 5a73b6d..49c2311 100644 --- a/Adam/MathODE.CPP +++ b/Adam/AMathODE.CPP @@ -1,7 +1,7 @@ #help_index "Math/ODE" #help_file "::/Doc/ODE" -//See $LK,"::/Doc/Acknowledgements.TXT"$. +//See $LK,"::/Doc/Credits.TXT"$. F64 LowPass1(F64 a,F64 y0,F64 y,F64 dt=1.0) {//First order low pass filter @@ -56,14 +56,12 @@ public CMathODE *ODENew(I64 n,F64 max_tolerance=1e-6,I64 flags=0) ode->state=CAlloc(s); ode->array_base=MAlloc(12*s); ODERstPtrs(ode); - ode->ode_signature=ODE_SIGNATURE_VAL; return ode; } public U0 ODEDel(CMathODE *ode) {//Free ODE node, but not masses or springs. if (!ode) return; - ode->ode_signature=0; Free(ode->state); Free(ode->array_base); Free(ode); @@ -158,13 +156,13 @@ public U0 ODERenum(CMathODE *ode) public CMass *MassFind(CMathODE *ode,F64 x,F64 y,F64 z=0) {//Search for mass nearest to x,y,z. CMass *tempm,*best_mass=NULL; - F64 d,best_d=MAX_F64; + F64 dd,best_dd=MAX_F64; tempm=ode->next_mass; while (tempm!=&ode->next_mass) { - d=Sqr(tempm->x-x)+Sqr(tempm->y-y)+Sqr(tempm->z-z); - if (dx-x)+Sqr(tempm->y-y)+Sqr(tempm->z-z); + if (ddnext; @@ -175,15 +173,15 @@ public CMass *MassFind(CMathODE *ode,F64 x,F64 y,F64 z=0) public CSpring *SpringFind(CMathODE *ode,F64 x,F64 y,F64 z=0) {//Find spring midpoint nearest x,y,z. CSpring *temps,*best_spring=NULL; - F64 d,best_d=MAX_F64; + F64 dd,best_dd=MAX_F64; temps=ode->next_spring; while (temps!=&ode->next_spring) { - d=Sqr((temps->end1->x+temps->end2->x)/2-x)+ + dd=Sqr((temps->end1->x+temps->end2->x)/2-x)+ Sqr((temps->end1->y+temps->end2->y)/2-y)+ Sqr((temps->end1->z+temps->end2->z)/2-z); - if (dnext; @@ -196,13 +194,13 @@ public U0 MassOrSpringFind(CMathODE *ode,CMass **result_mass,CSpring **result_sp {//Find spring or mass nearest x,y,z. CMass *tempm,*best_mass=NULL; CSpring *temps,*best_spring=NULL; - F64 d,best_d=MAX_F64; + F64 dd,best_dd=MAX_F64; tempm=ode->next_mass; while (tempm!=&ode->next_mass) { - d=Sqr(tempm->x-x)+Sqr(tempm->y-y)+Sqr(tempm->z-z); - if (dx-x)+Sqr(tempm->y-y)+Sqr(tempm->z-z); + if (ddnext; @@ -210,11 +208,11 @@ public U0 MassOrSpringFind(CMathODE *ode,CMass **result_mass,CSpring **result_sp temps=ode->next_spring; while (temps!=&ode->next_spring) { - d=Sqr((temps->end1->x+temps->end2->x)/2-x)+ + dd=Sqr((temps->end1->x+temps->end2->x)/2-x)+ Sqr((temps->end1->y+temps->end2->y)/2-y)+ Sqr((temps->end1->z+temps->end2->z)/2-z); - if (dstate_internal,tempstate,sizeof(F64)*ode->n_internal); } -F64 ode_allocated_factor=0.75; +F64 ode_alloced_factor=0.75; U0 ODEsUpdate(CTask *task) {/* This routine is called by the $LK,"window mgr",A="FF:::/Adam/Gr/GrScreen.CPP,ODEsUpdate"$ on a continuous @@ -510,105 +508,100 @@ it has a timeout. if (task->next_ode==&task->next_ode) task->last_ode_time=0; - else { + else if (!Bt(&task->win_inhibit,WIf_SELF_ODE)) { //See $LK,"GrUpdateWins",A="MN:GrUpdateWins"$() - if (!Bt(&task->win_inhibit,WIf_SELF_ODE)) { - //TODO: Being preempted here woulds be bad - if (task!=Fs) - old_suspend=Suspend(task); - //We will not pick a time limit based on - //how busy the CPU is, what percent of the - //last refresh cycle was spent on ODE's - //and what the refresh cycle rate was. - start_time=tS; - d=1.0/winmgr.fps; - timeout_time=start_time+ - (task->last_ode_time/d+0.1)/(winmgr.last_ode_time/d+0.1)* - ode_allocated_factor*d; - ode=task->next_ode; - while (ode!=&task->next_ode) { - if (ode->ode_signature==ODE_SIGNATURE_VAL) { - t_initial=ode->t; - d=tS; - if (!(ode->flags&ODEF_STARTED)) { - ode->base_t=d; - ode->flags|=ODEF_STARTED; - } - d-=ode->base_t+t_initial; - t_desired=ode->t_scale*d+t_initial; - if (ode->flags&ODEF_PAUSED) + //TODO: Being preempted here woulds be bad + if (task!=Fs) + old_suspend=Suspend(task); + //We will not pick a time limit based on + //how busy the CPU is, what percent of the + //last refresh cycle was spent on ODE's + //and what the refresh cycle rate was. + start_time=tS; + d=1.0/winmgr.fps; + timeout_time=start_time+ + (task->last_ode_time/d+0.1)/(winmgr.last_ode_time/d+0.1)* + ode_alloced_factor*d; + ode=task->next_ode; + while (ode!=&task->next_ode) { + t_initial=ode->t; + d=tS; + if (!(ode->flags&ODEF_STARTED)) { + ode->base_t=d; + ode->flags|=ODEF_STARTED; + } + d-=ode->base_t+t_initial; + t_desired=ode->t_scale*d+t_initial; + if (ode->flags&ODEF_PAUSED) + ode->base_t+=t_desired-ode->t; //Slip + else if (ode->derivative) { + ODEState2Internal(ode); + MemCpy(ode->initial_state,ode->state_internal,ode->n_internal*sizeof(F64)); + while (ode->th_max=t_desired-ode->t; + ODECallDerivative(ode,ode->t,ode->state_internal,ode->DstateDt); + for (i=0;in_internal;i++) + ode->state_scale[i]=Abs(ode->state_internal[i])+ + Abs(ode->DstateDt[i]*ode->h)+ode->tolerance_internal; + ODERK5OneStep(ode); + if (tS>timeout_time) { ode->base_t+=t_desired-ode->t; //Slip - else if (ode->derivative) { - ODEState2Internal(ode); - MemCpy(ode->initial_state,ode->state_internal,ode->n_internal*sizeof(F64)); - while (ode->th_max=t_desired-ode->t; - ODECallDerivative(ode,ode->t,ode->state_internal,ode->DstateDt); + goto ode_done; + + } + } + + //Interpolate if end time was not exact. + if (ode->t!=t_desired) { + if (interpolation=ode->t-t_initial) { + interpolation=(t_desired-t_initial)/interpolation; + if (interpolation!=1.0) for (i=0;in_internal;i++) - ode->state_scale[i]=Abs(ode->state_internal[i])+ - Abs(ode->DstateDt[i]*ode->h)+ode->tolerance_internal; - ODERK5OneStep(ode); - if (tS>timeout_time) { - ode->base_t+=t_desired-ode->t; //Slip - goto ode_done; - - } - } - - //Interpolate if end time was not exact. - if (ode->t!=t_desired) { - if (interpolation=ode->t-t_initial) { - interpolation=(t_desired-t_initial)/interpolation; - if (interpolation!=1.0) - for (i=0;in_internal;i++) - ode->state_internal[i]=(ode->state_internal[i]- - ode->initial_state[i])*interpolation+ - ode->initial_state[i]; - } - ode->t=t_desired; - } + ode->state_internal[i]=(ode->state_internal[i]- + ode->initial_state[i])*interpolation+ + ode->initial_state[i]; + } + ode->t=t_desired; + } ode_done: - ODEInternal2State(ode); + ODEInternal2State(ode); - //Convenience call to set vals - ODECallDerivative(ode,ode->t,ode->state_internal,ode->DstateDt); - } - ode->base_t+=(1.0-ode->t_scale)*d; - } - ode=ode->next; + //Convenience call to set vals + ODECallDerivative(ode,ode->t,ode->state_internal,ode->DstateDt); } - - //Now, we will dynamically adjust tolerances. - - //We will regulate the tolerances - //to fill the time we decided was - //okay to devote to ODE's. - //Since we might have multiple ODE's - //active we scale them by the same factor. - - //This algorithm is probably not stable or very good, but it's something. - - //Target is 75% of allocated time. - d=(tS-start_time)/(timeout_time-start_time)-0.75; - - ode=task->next_ode; - while (ode!=&task->next_ode) { - if (ode->ode_signature==ODE_SIGNATURE_VAL && - !(ode->flags&ODEF_PAUSED) && ode->derivative) { - if (ode->min_tolerance!=ode->max_tolerance) { - if (d>0) - ode->tolerance_internal*=10.0`d; - else - ode->tolerance_internal*=2.0`d; - } - ode->tolerance_internal=Clamp(ode->tolerance_internal,ode->min_tolerance,ode->max_tolerance); - } - ode=ode->next; - } - winmgr.ode_time+=task->last_ode_time=tS-start_time; - //See $LK,"GrUpdateWins",A="MN:GrUpdateWins"$() - if (task!=Fs) - Suspend(task,old_suspend); + ode->base_t+=(1.0-ode->t_scale)*d; + ode=ode->next; } + + //Now, we will dynamically adjust tolerances. + + //We will regulate the tolerances + //to fill the time we decided was + //okay to devote to ODE's. + //Since we might have multiple ODE's + //active we scale them by the same factor. + + //This algorithm is probably not stable or very good, but it's something. + + //Target is 75% of alloced time. + d=(tS-start_time)/(timeout_time-start_time)-0.75; + + ode=task->next_ode; + while (ode!=&task->next_ode) { + if (!(ode->flags&ODEF_PAUSED) && ode->derivative) { + if (ode->min_tolerance!=ode->max_tolerance) { + if (d>0) + ode->tolerance_internal*=10.0`d; + else + ode->tolerance_internal*=2.0`d; + } + ode->tolerance_internal=Clamp(ode->tolerance_internal,ode->min_tolerance,ode->max_tolerance); + } + ode=ode->next; + } + winmgr.ode_time+=task->last_ode_time=tS-start_time; + //See $LK,"GrUpdateWins",A="MN:GrUpdateWins"$() + if (task!=Fs) + Suspend(task,old_suspend); } } diff --git a/Adam/AUtils.CPP b/Adam/AUtils.CPP new file mode 100644 index 0000000..fbb75d5 --- /dev/null +++ b/Adam/AUtils.CPP @@ -0,0 +1,211 @@ +#help_index "Memory/Task" +public I64 TaskMemAlloced(CTask *task=NULL,Bool override_validate=FALSE) +{//Count of bytes alloced to a task, used+unused. + I64 result; + if (!task) task=Fs; + if (override_validate || TaskValidate(task)) { + result=task->code_heap->alloced_u8s; + if (task->code_heap!=task->data_heap) + result+=task->data_heap->alloced_u8s; + return result; + } else + return 0; +} + +public I64 TaskMemUsed(CTask *task=NULL,Bool override_validate=FALSE) +{//Count of bytes alloced to a task and in use. + I64 result; + if (!task) task=Fs; + if (override_validate || TaskValidate(task)) { + result=task->code_heap->used_u8s; + if (task->data_heap!=task->code_heap) + result+=task->data_heap->used_u8s; + return result; + } else + return 0; +} + +public Bool HeapRep(CTask *task) +{//Report status of task's heap. + I64 i,cnt; + CMemUnused *uum; + + if (!task || task==Fs) { + "Task can't HeapRep on self.\n"; + return FALSE; + } + if (!TaskValidate(task)) return FALSE; + + PUSHFD + CLI + while (LBts(&task->code_heap->locked_flags,HClf_LOCKED)) + PAUSE + if (task->data_heap!=task->code_heap) + while (LBts(&task->data_heap->locked_flags,HClf_LOCKED)) + PAUSE + + for (i=0;i>3;i++) { + cnt=0; + uum=task->code_heap->heap_hash[i]; + while (uum) { + cnt+=uum->size; + uum=uum->next; + } + if (task->data_heap!=task->code_heap) { + uum=task->data_heap->heap_hash[i]; + while (uum) { + cnt+=uum->size; + uum=uum->next; + } + } + if (cnt) + "%03X:%08X\n",i<<3,cnt; + } + '\n'; + + uum=task->code_heap->malloc_free_lst; + while (uum) { + "%X, ",uum->size; + uum=uum->next; + } + if (task->data_heap!=task->code_heap) { + uum=task->data_heap->malloc_free_lst; + while (uum) { + "%X, ",uum->size; + uum=uum->next; + } + } + + if (task->data_heap!=task->code_heap) + LBtr(&task->data_heap->locked_flags,HClf_LOCKED); + LBtr(&task->code_heap->locked_flags,HClf_LOCKED); + POPFD + + '\n'; +} + +#help_index "Memory/HeapCtrl;Debugging/Heap" +public Bool IsInHeapCtrl(U8 *a,CHeapCtrl *hc,Bool lock=TRUE) +{//Check addr if on heap. + CMemBlk *m; + PUSHFD + CLI + if (lock) + while (LBts(&hc->locked_flags,HClf_LOCKED)) + PAUSE + m=hc->next_mem_blk; + while (m!=&hc->next_mem_blk) { + if (a>=m && apages*PAGE_SIZE) { + if (lock) + LBtr(&hc->locked_flags,HClf_LOCKED); + POPFD + return TRUE; + } + m=m->next; + } + if (lock) + LBtr(&hc->locked_flags,HClf_LOCKED); + POPFD + return FALSE; +} + +public Bool HeapCtrlWalk(CHeapCtrl *hc) +{//Check integrity of HeapCtrl. + I64 i; + CMemUnused *uum; + + PUSHFD + CLI + while (LBts(&hc->locked_flags,HClf_LOCKED)) + PAUSE + + for (i=0;i>3;i++) { + uum=hc->heap_hash[i]; + while (uum) { + if (!IsInHeapCtrl(uum,hc,FALSE)) + goto hc_false; + uum=uum->next; + } + } + uum=hc->malloc_free_lst; + while (uum) { + if (!IsInHeapCtrl(uum,hc,FALSE)) + goto hc_false; + uum=uum->next; + } + +#if _CFG_HEAP_DBG + CMemUsed *um,*um1; + um1=(&hc->next_um)(U8 *)-offset(CMemUsed.next); + um=um1->next; + while (um!=um1) { + if (!IsInHeapCtrl(um,hc,FALSE)) + goto hc_false; + um=um->next; + } +#endif + + LBtr(&hc->locked_flags,HClf_LOCKED); + POPFD + return TRUE; + +hc_false: + LBtr(&hc->locked_flags,HClf_LOCKED); + POPFD + return FALSE; +} + +#help_index "Memory/Task;Debugging/Heap" +public Bool IsInHeap(U8 *a,CTask *task=NULL,Bool lock=TRUE) +{//Check addr if on heap. + if (!task) task=Fs; + if (TaskValidate(task) && (IsInHeapCtrl(a,task->code_heap,lock)|| + task->data_heap!=task->code_heap && IsInHeapCtrl(a,task->data_heap,lock))) + return TRUE; + else + return FALSE; +} + +public Bool HeapWalk(CTask *task=NULL) +{//Check integrity of task's heaps. + if (!task) task=Fs; + if (!TaskValidate(task) || !HeapCtrlWalk(task->code_heap) || + task->data_heap!=task->code_heap && !HeapCtrlWalk(task->data_heap)) + return FALSE; + else + return TRUE; +} + +#help_index "Info;Task" +U0 TaskRepTask(CTask *task,I64 indent) +{ + CTask *task1; + U8 *st,*desc=MStrUtil(task->task_title,SUF_SAFE_DOLLAR); + st=MStrPrint("$$MA,T=\"%08X\",LM=\"Kill(0x%X);\n\",$$",task,task,task); + "%h*c%s $$TX,\"%Q...\",SCX=16$$ Mem:%08X\n",indent,CH_SPACE, + st,desc,TaskMemAlloced(task); + "%h*cFlags:%04X:%04X Time:%0.2fm\n",indent+2,CH_SPACE, + task->task_flags,task->display_flags, + task->total_time/60.0/cnts.time_stamp_freq_initial; + Free(st); + Free(desc); + task1=task->next_child_task; + while (task1!=(&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task)) { + TaskRepTask(task1,indent+2); + task1=task1->next_sibling_task; + } +} + +public U0 TaskRep() +{//Report current tasks on all cores. + I64 i; + CCPU *c; + PUSHFD + CLI + for (i=0;iseth_task,2); + } + POPFD +} diff --git a/Adam/LogIn.CPP b/Adam/Acct.CPP similarity index 61% rename from Adam/LogIn.CPP rename to Adam/Acct.CPP index 3640113..854ecb3 100644 --- a/Adam/LogIn.CPP +++ b/Adam/Acct.CPP @@ -1,66 +1,5 @@ #help_index "Misc/Accts" - -U0 UserStartUp() -{//Temporary until defined in $LK,"HOME/Adam3eSys.CPP"$. -//Run each time a user a spawned - DocTermNew; - Type("::/Doc/Start.TXT"); - LBts(&Fs->display_flags,DISPLAYf_SHOW); - WinToTop; - WinZBufUpdate; - Preempt(ON); -} - -U0 SrvStartUp() -{//Temporary until defined in $LK,"HOME/Adam3eSys.CPP"$. -//Run each time a srv task is spawned. - DocTermNew; - LBts(&Fs->display_flags,DISPLAYf_SHOW); - WinToTop; - WinZBufUpdate; - Preempt(ON); -} - -U8 *PopUpSysAcct() -{ - U8 *result,*st; - CDoc *doc=DocNew; - CDirEntry *tempde=FilesFind("/Accts/*",FUF_RECURSE|FUF_JUST_DIRS|FUF_FLATTEN_TREE), - *tempde1=tempde; - DocPrint(doc,"$$CM+CX-LE,10$$"); - DocSprite(doc,$IB,"<1>",BI=1,BP="::/Misc/StockSprites.TXT,TempleOSLogo"$,"$$SP+SIF,\"\",BI=%d$$"); - DocPrint(doc,"$$CM+LX,0,12$$Select Account.\nCursor down and press .\n"); - while (tempde) { - if (*tempde->name!='.') { - st=tempde->full_name; - if (!StrNCmp(st+2,"/Accts/",7)) - st+=9; - DocPrint(doc,"$$CM+LX,2,3$$$$BT,\"%s\",LE=%d$$",st,tempde); - } - tempde=tempde->next; - } - DocPrint(doc,"\n\n\n\nLog-in as USER if you are new and get familiar\n" - "before you try to install.\n"); - do tempde=PopUpMenu(doc,DOF_WIN_MAX); - while (tempde<=0); - - DocDel(doc); - result=AStrNew(tempde->full_name); - DirTreeDel(tempde1); - return result; -} - -U0 SysLogin() -{ - U8 *st; - if (!FileFind(sys_acct)||!StrCmp(sys_acct+2,"/Accts")) { - st=sys_acct; - sys_acct=PopUpSysAcct; - Free(st); - } -} - -#define ACCT_REGISTRY_FILENAME "HOME/Registry.CPP.Z" +#define ACCT_REGISTRY_FILENAME "::/Home/Registry.CPP.Z" CDoc *sys_registry_doc=NULL; I64 sys_msg_flags[1]={0}; F64 registry_version; @@ -69,7 +8,7 @@ Bool AcctCacheRegistry() { Bool old_silent; if (!sys_registry_doc) { - old_silent=Silent(ON); + old_silent=Silent; sys_registry_doc=DocRead(ACCT_REGISTRY_FILENAME); Silent(old_silent); return FALSE; @@ -91,7 +30,7 @@ public Bool AcctRegSetDftEntry(U8 *path,U8 *val,Bool is_adam_entry=FALSE) else Adam("%s",val); } - if (IsDrvWritable(*sys_acct)) + if (IsDrvWritable(':')) DocWrite(sys_registry_doc); result=FALSE; } else @@ -118,7 +57,7 @@ public Bool AcctRegWriteBranch(U8 *path,U8 *fmt,...) DocCut(sys_registry_doc,tree_branch,end_indent); DocTreeMake(sys_registry_doc,path); DocPrint(sys_registry_doc,"%s",buf); - if (IsDrvWritable(*sys_acct)) + if (IsDrvWritable(':')) DocWrite(sys_registry_doc); if (unlock_doc) DocUnlock(sys_registry_doc); @@ -147,8 +86,7 @@ public Bool OneTimePopUp(U8 *_flags,I64 flag_num,U8 *msg) U0 AcctOneTimePopUp(I64 flag_num,U8 *msg) {//You're not supposed to make system pop-up flags, only me. if (OneTimePopUp(sys_msg_flags,flag_num,msg)) - AcctRegWriteBranch("Adam/SysMsgFlags", - "sys_msg_flags[0]=0x%X;\n", + AcctRegWriteBranch("Adam/SysMsgFlags","sys_msg_flags[0]=0x%X;\n", sys_msg_flags[0]); } diff --git a/Adam/Adam2.CPP b/Adam/Adam2.CPP deleted file mode 100644 index 1124682..0000000 --- a/Adam/Adam2.CPP +++ /dev/null @@ -1,80 +0,0 @@ -#exe {OptOn(OPTf_WARN_PAREN);}; -#exe {OptOn(OPTf_WARN_DUP_TYPES);}; - -HashTablePurge(adam_task->hash_table); - -#help_index "Misc" - -//Use Dbg("Type 'G;'"); to debug before window mgr is running. - -public F64 os_version=2.11;//Operating system version. -//Fix here, too: $LK,"::/Demo/AcctExample/DbgAdam2.CPP"$ - -#include "AdamExts.HPP" -#include "Math2a" -#include "Training" -#include "Utils2a" -#include "MathODE" -Cd("::/Adam/Gr");; -#include "Gr" - -Cd("::/Adam/Snd");; -#include "Snd" - -Cd("::/Adam/Dsk");; -#include "Dsk2" - -Cd("::/Adam");; -#include "Menu" -#include "Win2a" -#include "Win2b" -#include "Dbg2a" - -#include "::/Adam/God/GodExt" - -Cd("::/Adam/DolDoc");; -#include "Doc" -LBts(&sys_run_level,RLf_DOC); - -Cd("::/Adam/Ctrls");; -#include "Ctrls" - -Cd("::/Adam");; -#include "AutoFile2a" -#include "LogIn" - -Cd("::/Adam/WordStat");; -#include "WordStat" - -Cd("::/Adam/God");; -#include "God" - -Cd("::/Adam");; -#include "Hash2a" -#include "TaskSettings" -#include "DevInfo" -#include "DocDefines" - -//Dbg("Type 'G;'"); - -DocTermNew; -SetWinVert(2,10); - -sys_winmgr_task=Spawn(&WinMgrTask,NULL,"Window Mgr"); -Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL-WIF_SELF_CTRLS; -LBts(&Fs->display_flags,DISPLAYf_CHILDREN_NOT_ON_TOP); -LBts(&Fs->display_flags,DISPLAYf_SHOW); -SysLogin; -LBts(&sys_run_level,RLf_LOGIN); -RegistryInit; -LBts(&sys_run_level,RLf_REGISTRY); - -Cd("::/Adam");; -#include "WallPaper" -#exe {OptOff(OPTf_WARN_PAREN);}; -#exe {OptOff(OPTf_WARN_DUP_TYPES);}; -LBts(&sys_run_level,RLf_ADAM2); - -#help_index "" -Cd("HOME");; -#include "Adam3" diff --git a/Adam/WordStat/WSDefs.DAT b/Adam/AutoComplete/ACDefs.DAT similarity index 100% rename from Adam/WordStat/WSDefs.DAT rename to Adam/AutoComplete/ACDefs.DAT diff --git a/Adam/WordStat/WSDict.CPP b/Adam/AutoComplete/ACDict.CPP similarity index 55% rename from Adam/WordStat/WSDict.CPP rename to Adam/AutoComplete/ACDict.CPP index 5fa791b..be34187 100644 --- a/Adam/WordStat/WSDict.CPP +++ b/Adam/AutoComplete/ACDict.CPP @@ -1,21 +1,21 @@ -#help_index "WordStat/Dictionary" +#help_index "AutoComplete/Dictionary" -public U0 WSDWordsLoad() +public U0 ACDWordsLoad() {//Put words from word list into hash table. I64 size; CHashGeneric *temph; U8 *in_ptr,*in_start,*st2; U16 *d; - wsd.num_words=0; - if (in_ptr=FileRead(WSD_WORD_FILENAME,&size)) { + acd.num_words=0; + if (in_ptr=FileRead(ACD_WORD_FILENAME,&size)) { in_start=in_ptr; - Free(wsd.word_lst); - wsd.word_lst=AMAlloc(size); - MemCpy(wsd.word_lst,in_start,size); - wsd.word_lst_size=size; + Free(acd.word_lst); + acd.word_lst=AMAlloc(size); + MemCpy(acd.word_lst,in_start,size); + acd.word_lst_size=size; while (in_ptruser_data0=*d; in_ptr+=2; - HashAdd(temph,ws.hash_table); - wsd.num_words++; + HashAdd(temph,ac.hash_table); + acd.num_words++; } else in_ptr+=3; } @@ -38,29 +38,29 @@ public U0 WSDWordsLoad() } } -public U8 *WSDDefGet(U8 *st,I64 def_num=1) +public U8 *ACDDefGet(U8 *st,I64 def_num=1) {//MAlloc str holding single dict definition of word. CFile *f; CHashGeneric *temph; U8 *result=NULL,*buf,*in_ptr, *st2=MStrUtil(st,SUF_TO_UPPER); - temph=HashFind(st2,ws.hash_table,HTT_DICT_WORD); + temph=HashFind(st2,ac.hash_table,HTT_DICT_WORD); Free(st2); if (temph) { - if (f=FOpen(WSD_DEF_FILENAME,"r")) { - buf=MAlloc(WSD_BLK_SIZE*2+1); - buf[WSD_BLK_SIZE*2]=0; //terminate - FRBlks(f,buf,temph->user_data0*WSD_BLK_SIZE/BLK_SIZE,WSD_BLK_SIZE*2/BLK_SIZE); + if (f=FOpen(ACD_DEF_FILENAME,"r")) { + buf=MAlloc(ACD_BLK_SIZE*2+1); + buf[ACD_BLK_SIZE*2]=0; //terminate + FRBlks(f,buf,temph->user_data0*ACD_BLK_SIZE/BLK_SIZE,ACD_BLK_SIZE*2/BLK_SIZE); FClose(f); in_ptr=buf; - while (in_ptruser_data0*WSD_BLK_SIZE/BLK_SIZE,WSD_BLK_SIZE*2/BLK_SIZE); + if (f=FOpen(ACD_DEF_FILENAME,"r")) { + buf=MAlloc(ACD_BLK_SIZE*2+1); + buf[ACD_BLK_SIZE*2]=0; //terminate + FRBlks(f,buf,temph->user_data0*ACD_BLK_SIZE/BLK_SIZE,ACD_BLK_SIZE*2/BLK_SIZE); FClose(f); in_ptr=buf; - while (in_ptr>1; while (TRUE) { - while (*r!=WSD_WORD_CHAR && r>wsd.word_lst) + while (*r!=ACD_WORD_CHAR && r>acd.word_lst) r--; - if ((r[2]==WSD_WORD_CHAR||r[1]==WSD_WORD_CHAR)&&r-3>wsd.word_lst) + if ((r[2]==ACD_WORD_CHAR||r[1]==ACD_WORD_CHAR)&&r-3>acd.word_lst) r--; else break; } - if (*r==WSD_WORD_CHAR) { + if (*r==ACD_WORD_CHAR) { i=StrICmp(st,r+1); if (i<0) end=r-1; @@ -156,80 +156,78 @@ public U8 *WSDWordPtAt(U8 *st) } r=(start+end)>>1; while (TRUE) { - while (*r!=WSD_WORD_CHAR && r>wsd.word_lst) + while (*r!=ACD_WORD_CHAR && r>acd.word_lst) r--; - if ((r[2]==WSD_WORD_CHAR||r[1]==WSD_WORD_CHAR)&&r-3>wsd.word_lst) + if ((r[2]==ACD_WORD_CHAR||r[1]==ACD_WORD_CHAR)&&r-3>acd.word_lst) r--; else break; } - if (*r==WSD_WORD_CHAR && StrICmp(st,r+1)>0) + if (*r==ACD_WORD_CHAR && StrICmp(st,r+1)>0) r+=StrLen(r)+3; } - if (*r==WSD_WORD_CHAR) + if (*r==ACD_WORD_CHAR) return r; else - return wsd.word_lst; + return acd.word_lst; } -U0 WSDDictWordsAdd(CDoc *doc,U8 *st=NULL) +U0 ACDDictWordsAdd(CDoc *doc,U8 *st) { I64 i; U8 *ptr; - if (!st) - st=ws.cur_word; - if (st && (ptr=WSDWordPtAt(st))) { - for (i=0;iws.partial_len) - Auto(s+ws.partial_len); + if (len>ac.partial_len) + Auto(s+ac.partial_len); } } -public U0 WSDDefsPut(CDoc *doc=NULL,U8 *st,I64 num=-1) +public U0 ACDDefsPut(CDoc *doc=NULL,U8 *st,I64 num=-1) {//Put to doc a dictionary definition(s) of a word. U8 *st2,*st3; I64 ch,i=0; if (!st) return; - if (*st==WSD_WORD_CHAR) + if (*st==ACD_WORD_CHAR) st++; DocPrint(doc,"$$WW,1$$$$RED$$%s:$$FG$$\n\n",st); if (num<0) { - if (st3=WSDDefsGet(st)) { + if (st3=ACDDefsGet(st)) { st2=st3; while (ch=*st2++) { switch (ch) { - case WSD_WORD_CHAR: + case ACD_WORD_CHAR: break; - case WSD_DEF_CHAR: + case ACD_DEF_CHAR: DocPrint(doc,"$$GREEN$$(%d)$$FG$$ %s\n", ++i,st2); break; - case WSD_PRONUNCIATION_CHAR: + case ACD_PRONUNCIATION_CHAR: DocPrint(doc,"$$LTGREEN$$%s$$FG$$\n",st2); break; - case WSD_POS_CHAR: + case ACD_POS_CHAR: DocPrint(doc,"$$BLACK$$%s$$FG$$\n",st2); break; - case WSD_EXTRA_CHAR: + case ACD_EXTRA_CHAR: DocPrint(doc,"$$LTBLUE$$%s$$FG$$\n",st2); break; } @@ -238,7 +236,7 @@ public U0 WSDDefsPut(CDoc *doc=NULL,U8 *st,I64 num=-1) Free(st3); } } else { - while (st2=WSDDefGet(st,++i)) { + while (st2=ACDDefGet(st,++i)) { if (i==num) DocPrint(doc,"$$GREEN$$(%d)$$FG$$ %s\n", i,st2); @@ -247,21 +245,21 @@ public U0 WSDDefsPut(CDoc *doc=NULL,U8 *st,I64 num=-1) } } -U0 WSDPopUpDef(U8 *st,I64 num=-1,CTask *parent=NULL) +U0 ACDPopUpDef(U8 *st,I64 num=-1,CTask *parent=NULL) { U8 *buf; - buf=MStrPrint("WSDDefsPut(DocPut,\"%s\",%d);View;",st,num); + buf=MStrPrint("ACDDefsPut(DocPut,\"%s\",%d);View;",st,num); PopUp(buf,parent); Free(buf); } -U0 WSDDef(I64 n,CTask *parent=NULL) +U0 ACDDef(I64 n,CTask *parent=NULL) { - if (0<=ncur_entry; @@ -277,7 +275,7 @@ U0 WSFindMisspelled(CDoc *doc) col2++; ch=doc_e->tag[col2]; doc_e->tag[col2]=0; - if (StrICmp(&doc_e->tag[col],WSDWordPtAt(&doc_e->tag[col])+1)) { + if (StrICmp(&doc_e->tag[col],ACDWordPtAt(&doc_e->tag[col])+1)) { doc_e->tag[col2]=ch; doc->cur_entry=doc_e; doc->cur_data_col=col; diff --git a/Adam/WordStat/WSDictGen.CPP b/Adam/AutoComplete/ACDictGen.CPP similarity index 68% rename from Adam/WordStat/WSDictGen.CPP rename to Adam/AutoComplete/ACDictGen.CPP index 41c7acb..3436594 100644 --- a/Adam/WordStat/WSDictGen.CPP +++ b/Adam/AutoComplete/ACDictGen.CPP @@ -10,10 +10,10 @@ and #include this file. I ran $LK,"::/Misc/ToDolDoc.CPP"$ on it, first. -See $LK,"::/Doc/Acknowledgements.TXT"$. +See $LK,"::/Doc/Credits.TXT"$. */ -I64 WSDNextCmd(U8 **_ptr) +I64 ACDNextCmd(U8 **_ptr) { U8 ch,*ptr=*_ptr,*ptr2; I64 result=-1; @@ -39,9 +39,9 @@ ncmd_done: return result; } -U8 *WSDNextEntry(U8 **_ptr) +U8 *ACDNextEntry(U8 **_ptr) { - U8 *result,*ignore,ch,*ptr=*_ptr,buf[WSD_BLK_SIZE],*out_ptr=buf; + U8 *result,*ignore,ch,*ptr=*_ptr,buf[ACD_BLK_SIZE],*out_ptr=buf; I64 l; while (TRUE) { while (TRUE) { @@ -53,7 +53,7 @@ U8 *WSDNextEntry(U8 **_ptr) } else break; } - ignore="b>\0i>\0p>\0/b>\0/i>\0/p>\0" + ignore="b>\0i>\0ppp>\0/b>\0/i>\0/p>\0" "ets>\0col>\0spn>\0/ets>\0/col>\0/spn>\0er>\0as>\0cs>\0cd>\0ex>\0" "/er>\0/as>\0/cs>\0/cd>\0/ex>\0" "note>\0/note>\0blockquote>\0/blockquote>\0"; @@ -75,12 +75,12 @@ nentry_done: return result; } -I64 WSDCompareWords(U8 *e1,U8 *e2) +I64 ACDCompareWords(U8 *e1,U8 *e2) { return StrICmp(e1,e2); } -U8 *WSDSortWords(U8 *start,I64 size,I64 word_cnt) +U8 *ACDSortWords(U8 *start,I64 size,I64 word_cnt) { U8 **ptr_array=MAlloc(sizeof(U8 *)*word_cnt), *out_start=MAlloc(size), @@ -91,7 +91,7 @@ U8 *WSDSortWords(U8 *start,I64 size,I64 word_cnt) ptr+=StrLen(ptr)+3; } "Sorting...\n"; Sleep(100); - QSortI64(ptr_array,word_cnt,&WSDCompareWords); + QSortI64(ptr_array,word_cnt,&ACDCompareWords); "Done...\n"; Sleep(100); ptr=out_start; @@ -107,7 +107,7 @@ U8 *WSDSortWords(U8 *start,I64 size,I64 word_cnt) return out_start; } -U0 WSDGen(U8 *raw_dict_filename) +U0 ACDGen(U8 *raw_dict_filename) { I64 cmd,size,word_cnt=0,largest_entry=0; U8 *st,*in_ptr=FileRead(raw_dict_filename,&size),*in_start=in_ptr, @@ -118,27 +118,27 @@ U0 WSDGen(U8 *raw_dict_filename) U16 *d; if (!in_ptr) return; do { - cmd=WSDNextCmd(&in_ptr); - if (cmd==WSD_H1) { + cmd=ACDNextCmd(&in_ptr); + if (cmd==ACD_H1) { next_word: if (out_ptr-def_word_start>largest_entry) largest_entry=out_ptr-def_word_start; def_word_start=out_ptr; - if (st=WSDNextEntry(&in_ptr)) { + if (st=ACDNextEntry(&in_ptr)) { if (*st) { if (StrICmp(st,last_word)) { word_cnt++; - *word_ptr++=WSD_WORD_CHAR; + *word_ptr++=ACD_WORD_CHAR; last_word=word_ptr; StrCpy(word_ptr,st); word_ptr+=StrLen(st)+1; d=word_ptr; - *d=(out_ptr-out_start)/WSD_BLK_SIZE; + *d=(out_ptr-out_start)/ACD_BLK_SIZE; word_ptr+=2; - *out_ptr++=WSD_WORD_CHAR; + *out_ptr++=ACD_WORD_CHAR; StrCpy(out_ptr,st); out_ptr+=StrLen(st)+1; } @@ -146,68 +146,68 @@ next_word: do { do { - cmd=WSDNextCmd(&in_ptr); - if (cmd==WSD_H1) + cmd=ACDNextCmd(&in_ptr); + if (cmd==ACD_H1) goto next_word; - } while (cmd>=0 && !(cmd==WSD_DEF||cmd==WSD_PRONUNCIATION||cmd==WSD_POS||cmd==WSD_EXTRA)); - if (cmd==WSD_DEF) { - if(st=WSDNextEntry(&in_ptr)) { + } while (cmd>=0 && !(cmd==ACD_DEF||cmd==ACD_PRONUNCIATION||cmd==ACD_POS||cmd==ACD_EXTRA)); + if (cmd==ACD_DEF) { + if(st=ACDNextEntry(&in_ptr)) { if (*st) { - *out_ptr++=WSD_DEF_CHAR; + *out_ptr++=ACD_DEF_CHAR; StrCpy(out_ptr,st); out_ptr+=StrLen(st)+1; } Free(st); } - } else if (cmd==WSD_PRONUNCIATION) { - if(st=WSDNextEntry(&in_ptr)) { + } else if (cmd==ACD_PRONUNCIATION) { + if(st=ACDNextEntry(&in_ptr)) { if (*st) { - *out_ptr++=WSD_PRONUNCIATION_CHAR; + *out_ptr++=ACD_PRONUNCIATION_CHAR; StrCpy(out_ptr,st); out_ptr+=StrLen(st)+1; } Free(st); } - } else if (cmd==WSD_POS) { - if(st=WSDNextEntry(&in_ptr)) { + } else if (cmd==ACD_POS) { + if(st=ACDNextEntry(&in_ptr)) { if (*st) { - *out_ptr++=WSD_POS_CHAR; + *out_ptr++=ACD_POS_CHAR; StrCpy(out_ptr,st); out_ptr+=StrLen(st)+1; } Free(st); } - } else if (cmd==WSD_EXTRA) { - if(st=WSDNextEntry(&in_ptr)) { + } else if (cmd==ACD_EXTRA) { + if(st=ACDNextEntry(&in_ptr)) { if (*st) { - *out_ptr++=WSD_EXTRA_CHAR; + *out_ptr++=ACD_EXTRA_CHAR; StrCpy(out_ptr,st); out_ptr+=StrLen(st)+1; } Free(st); } } - } while (cmd==WSD_DEF||cmd==WSD_PRONUNCIATION||cmd==WSD_POS||cmd==WSD_EXTRA); + } while (cmd==ACD_DEF||cmd==ACD_PRONUNCIATION||cmd==ACD_POS||cmd==ACD_EXTRA); } else Free(st); } } } while (cmd>=0); - *out_ptr++=WSD_END_CHAR; - *word_ptr++=WSD_END_CHAR; + *out_ptr++=ACD_END_CHAR; + *word_ptr++=ACD_END_CHAR; Free(in_start); - "Blk Size :%d\n",WSD_BLK_SIZE; - "Blk Cnt :%04X\n",(out_ptr-out_start+WSD_BLK_SIZE-1)/WSD_BLK_SIZE; + "Blk Size :%d\n",ACD_BLK_SIZE; + "Blk Cnt :%04X\n",(out_ptr-out_start+ACD_BLK_SIZE-1)/ACD_BLK_SIZE; "Largest Entry :%d\n",largest_entry; "Word Count :%d\n",word_cnt; - FileWrite(WSD_DEF_FILENAME,out_start,out_ptr-out_start); + FileWrite(ACD_DEF_FILENAME,out_start,out_ptr-out_start); "Def File Size :%d\n",out_ptr-out_start; - sorted_word_start=WSDSortWords(word_start,word_ptr-word_start,word_cnt); - FileWrite(WSD_WORD_FILENAME,sorted_word_start,word_ptr-word_start); + sorted_word_start=ACDSortWords(word_start,word_ptr-word_start,word_cnt); + FileWrite(ACD_WORD_FILENAME,sorted_word_start,word_ptr-word_start); "Word File Size:%d\n",word_ptr-word_start; Free(out_start); @@ -215,4 +215,4 @@ next_word: Free(sorted_word_start); } -WSDGen("DICTIONARY.TXT"); +ACDGen("DICTIONARY.TXT"); diff --git a/Adam/AutoComplete/ACMain.CPP b/Adam/AutoComplete/ACMain.CPP new file mode 100644 index 0000000..5533d40 --- /dev/null +++ b/Adam/AutoComplete/ACMain.CPP @@ -0,0 +1,342 @@ +#help_index "AutoComplete" + +CHashAC *ACHashAdd(U8 *w) +{ + CHashAC *tempw=HashFind(w,ac.hash_table,HTT_WORD); + if (tempw) { + tempw->hits++; + return tempw; + } + tempw=ACAlloc(sizeof(CHashAC)); + tempw->str=AStrNew(w); + tempw->type=HTT_WORD; + tempw->use_cnt=1; + tempw->hits=1; + HashAdd(tempw,ac.hash_table); + ac.num_words++; + return tempw; +} + +U0 ACSingleFileAdd(U8 *buf) +{ + I64 ch; + U8 *ptr=buf,*ptr2,*ptr3; + while (TRUE) { + while (TRUE) { + if (ch=*ptr++) { + if (Bt(chars_bitmap_alpha_numeric,ch)) + break; + } else + return; + } + ptr3=ptr; + ptr2=ptr; + ptr--; + while (TRUE) { + if (ch=*ptr2++) { + if (Bt(chars_bitmap_alpha_numeric,ch)) + *ptr3++=ch; + else if (ch!=CH_CURSOR) + break; + } else { + ptr2--; + break; + } + } + *ptr3=0; + ACHashAdd(ptr); + ptr=ptr2; + } +} + +I64 ACSkipCrap(U8 *src,I64 len) +{ + I64 j; + j=len-1; + while (j>=0) { + if (Bt(chars_bitmap_alpha_numeric,src[j])) + break; + else + j--; + } + return j+1; +} + +I64 ACPriorWordInStr(U8 *src,U8 *dst,I64 len,I64 buf_size) +{ + I64 i,j=0,k; + i=len-1; + while (i>=0) + if (!Bt(chars_bitmap_alpha_numeric,src[i])) + break; + else + i--; + if (i>=-1 && len>0) + for (k=i+1;kstr; + if (StrLen(s)>ac.partial_len) + Auto(s+ac.partial_len); + } +} + +U0 ACMan(I64 n,CTask *parent_task=NULL) +{ + CHashAC *tempw; + CHashSrcSym *temph; + Bool old_preempt=Preempt(OFF); + if (0<=--nstr,Fs->hash_table,HTG_SRC_SYM)) && + temph->src_link) { + Preempt(old_preempt); + PopUpEd(temph->src_link,parent_task); + } + Preempt(old_preempt); +} + +U0 ACFillInAdd(CHashAC *tempw) +{ + I64 k; + if (ac.num_fillinshits>ac.fillin_hits[ac.num_fillins-1]) { + for (k=ac.num_fillins-1;k>=0;k--) { + if (tempw->hits<=ac.fillin_hits[k]) + break; + else { + ac.fillin_matches[k+1]=ac.fillin_matches[k]; + ac.fillin_hits[k+1] =ac.fillin_hits[k]; + } + } + ac.fillin_matches[k+1]=tempw; + ac.fillin_hits[k+1] =tempw->hits; + if (ac.num_fillinsmask;i++) { + tempw=ac.hash_table->body[i]; + while (tempw && tSstr,StrLen(ac.cur_word))) + ACFillInAdd(tempw); + tempw=tempw->next; + } + } + Preempt(OFF); + } + DocRst(doc,TRUE); + doc->flags|=DOCF_MIN_SIZE; + DocCursor; + Fs->border_src=BDS_CONST; + Fs->text_attr =Fs->border_attr=LTGRAY<<4+BLUE; + if (ac.cur_word && *ac.cur_word) { + DocPrint(doc,"$$PURPLE$$Word:%s$$FG$$\n",ac.cur_word); + for (i=0;istr; + DocPrint(doc,"$$GREEN$$F%02d$$FG$$ ",i+1); + if (TaskValidate(focus_task) && + (temph=HashFind(st,focus_task->hash_table,HTG_SRC_SYM)) && + temph->src_link) { + if (temph->type&HTF_PUBLIC) + DocPrint(doc,"$$RED$$"); + DocPrint(doc,"$$TX+UL+L+PU,\"%Q\",A=\"%s\"$$$$FG$$\n",st,temph->src_link); + } else + DocPrint(doc,"%s\n",st); + } + if (acd.has_words) + ACDDictWordsAdd(doc,ac.cur_word); + } else if (FileFind("::/Doc/StandBy.TXT.Z")) + DocType(doc,"::/Doc/StandBy.TXT.Z",0); + + DocRecalc(doc); + } + + if (!LBts(&Fs->display_flags,DISPLAYf_SHOW)) + WinZBufUpdate; + + Free(src); + Free(buf); + Free(buf1); +} + +U0 ACTask(I64) +{ + CTask *focus_task,*original_focus_task; + CDoc *doc; + CDocEntry *doc_e; + I64 ch; + DocTermNew; + WinHorz(51,Fs->win_right); + LBts(&Fs->display_flags,DISPLAYf_WIN_ON_TOP); + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; + Free(ac.cur_word); + ac.cur_word=NULL; + while (TRUE) { + original_focus_task=focus_task=sys_focus_task; + while (TaskValidate(focus_task) && Bt(&focus_task->task_flags,TASKf_INPUT_FILTER_TASK)) + focus_task=focus_task->parent_task; + if (TaskValidate(focus_task) && (doc=DocPut(focus_task)) && + focus_task!=Fs && Bt(&focus_task->display_flags,DISPLAYf_SHOW)) { + DocLock(doc); + if (TaskValidate(focus_task) && original_focus_task==sys_focus_task && + doc && doc==DocPut(focus_task) && (doc_e=doc->cur_entry)) { + if (doc_e==doc) doc_e=doc_e->last; + while (doc_e->last!=doc && (doc_e->type_u8==DOCT_NEW_LINE || + doc_e->type_u8==DOCT_SOFT_NEW_LINE)) + doc_e=doc_e->last; + while (doc_e->last->type_u8!=DOCT_NEW_LINE && doc_e->last!=doc) + doc_e=doc_e->last; + ACPutChoices(doc,doc_e,focus_task); + } else + DocUnlock(doc); + } + Sleep(333); + if (ScanMsg(&ch,,1<cur_entry->de_flags & DOCEF_LINK) { + '' CH_SPACE; + doc->cur_entry=doc; + } + DocUnlock(doc); + } + ac.task=NULL; +} + +U0 ACMainFileLstTraverse(U8 *files_find_mask) +{ + U8 *buf; + CDirEntry *tempde,*tempde1; + try { + tempde=tempde1=FilesFind(files_find_mask,FUF_RECURSE|FUF_JUST_TXT|FUF_JUST_FILES|FUF_CLUSTER_ORDER); + while (tempde) { + "%s\n",tempde->full_name; + buf=FileRead(tempde->full_name); + ACSingleFileAdd(buf); + Free(buf); + tempde=tempde->next; + } + } catch + Fs->catch_except=TRUE; + DirTreeDel(tempde1); +} + +public Bool AutoComplete(Bool val=OFF) +{//Turn AutoComplete OFF (or ON). + Bool old_autocomplete=FALSE, + old_preempt=Preempt(OFF); + if (val) { + while (Bt(&ac.flags,ACf_INIT_IN_PROGRESS)) + Sleep(10); + if (TaskValidate(ac.task)) + old_autocomplete=TRUE; + else { + ac.task=Spawn(&ACTask,NULL,"AutoComplete"); + TaskWait(ac.task); + } + WinToTop(ac.task); + } else { + if (TaskValidate(ac.task)) { + old_autocomplete=TRUE; + Kill(ac.task); + while (TaskValidate(ac.task)) + Yield; + ac.task=NULL; + } + } + Preempt(old_preempt); + return old_autocomplete; +} + +U0 ACProgressTask(Bool *_start_flag) +{ + I64 start=dsk.write_cnt; + progress1=0; + progress1_max=(Size(ACD_DEF_FILENAME_Z,"+x+s")+BLK_SIZE-1)>>BLK_SIZE_BITS; + StrCpy(progress1_desc,"Uncompressing Dictionary"); + start=dsk.write_cnt; + *_start_flag=TRUE; + while (progress1type!=BDT_RAM) { + start_flag=FALSE; + Spawn(&ACProgressTask,&start_flag); + while (!start_flag) + Yield; + } + Move(ACD_DEF_FILENAME_Z,ACD_DEF_FILENAME); + } + + HashTableDel(ac.hash_table); + ac.hash_table=HashTableNew(2048,adam_task); + + ac.num_words=0; + Free(ac.cur_word); + ac.cur_word=NULL; + + if (mask) + ACMainFileLstTraverse(mask); + + ACDWordsLoad; + LBtr(&ac.flags,ACf_INIT_IN_PROGRESS); + AutoComplete(ON); +} + +I64 AutoCompleteSize() +{ + if (ac.hash_table) + return HashTableSize2(ac.hash_table)+MSize2(acd.word_lst); + else + return 0; +} diff --git a/Adam/WordStat/WSWords.DAT b/Adam/AutoComplete/ACWords.DAT similarity index 100% rename from Adam/WordStat/WSWords.DAT rename to Adam/AutoComplete/ACWords.DAT diff --git a/Adam/AutoComplete/AutoComplete.CPP b/Adam/AutoComplete/AutoComplete.CPP new file mode 100644 index 0000000..08d53cd --- /dev/null +++ b/Adam/AutoComplete/AutoComplete.CPP @@ -0,0 +1,67 @@ +#help_index "AutoComplete" +#help_file "::/Doc/AutoComplete" + +//See $LK,"::/Doc/AutoComplete.TXT"$ + +#define ACf_INIT_IN_PROGRESS 0 + +#define AC_MAX_FILLINS 10 + +public class CAutoCompleteGlbls +{ + I64 num_words; + CHashTable *hash_table; + U8 *cur_word; + I64 flags; + CTask *task; + I64 partial_len,num_fillins, + fillin_hits [AC_MAX_FILLINS+1]; + CHashAC *fillin_matches[AC_MAX_FILLINS+1]; + +} ac={0,NULL,NULL,0,NULL,0,0, +{0,0,0,0,0,0,0,0,0,0,0}, +{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}}; + +//Dictionary Stuff +#help_index "AutoComplete/Dictionary" + +#define ACD_WORD_FILENAME "/Adam/AutoComplete/ACWords.DAT.Z" +#define ACD_DEF_FILENAME "/Adam/AutoComplete/ACDefs.DAT" +#define ACD_DEF_FILENAME_Z "/Adam/AutoComplete/ACDefs.DAT.Z" + +#define ACD_H1 0 +#define ACD_H1_END 1 +#define ACD_DEF 2 +#define ACD_DEF_END 3 +#define ACD_PRONUNCIATION 4 +#define ACD_PRONUNCIATION_END 5 +#define ACD_POS 6 +#define ACD_POS_END 7 +#define ACD_EXTRA 8 +#define ACD_EXTRA_END 9 +#define ACD_BLK_SIZE 0x4000 + +#define ACD_END_CHAR 0x00 +#define ACD_WORD_CHAR 0x01 +#define ACD_DEF_CHAR 0x02 +#define ACD_PRONUNCIATION_CHAR 0x03 +#define ACD_POS_CHAR 0x04 +#define ACD_EXTRA_CHAR 0x05 + +#define ACD_MAX_FILLINS 10 + +public class CAutoCompleteDictGlbls +{ + U8 *word_lst; + I64 word_lst_size,num_words,num_fillins; + U8 *fillins[ACD_MAX_FILLINS]; + Bool has_words,has_defs; +} acd={NULL,0,0,0,{0,0,0,0,0,0,0,0,0,0},FALSE,FALSE}; +acd.has_words=FileFind(ACD_WORD_FILENAME); +acd.has_defs =FileFind(ACD_DEF_FILENAME)||FileFind(ACD_DEF_FILENAME_Z); + +extern U0 ACDWordsLoad(); +extern U0 ACDDictWordsAdd(CDoc *doc,U8 *st); + +#include "ACMain" +#include "ACDict" diff --git a/Adam/AutoFile2a.CPP b/Adam/AutoFile.CPP similarity index 99% rename from Adam/AutoFile2a.CPP rename to Adam/AutoFile.CPP index d402fde..5036e10 100644 --- a/Adam/AutoFile2a.CPP +++ b/Adam/AutoFile.CPP @@ -108,7 +108,7 @@ I64 af_l,af_r; Bool AFSetIPPlot(I64 mS,I64 x,I64 y,I64 z) { - SetIP(x,y,z,af_l,af_r); + IPSet(x,y,z,af_l,af_r); Sleep(mS); return TRUE; } diff --git a/Adam/Boot/Boot.CPP b/Adam/Boot/Boot.CPP new file mode 100644 index 0000000..28d7b8a --- /dev/null +++ b/Adam/Boot/Boot.CPP @@ -0,0 +1,64 @@ +#include "BootCD" +#include "BootHD" +#include "BootMHD" +#include "BootMHD2" +#include "DskCDDVD" +#include "BootIns" + +#help_index "Call" +asm { +USE64 +_HI_CALL:: + PUSH RBP + MOV RBP,RSP + MOV RAX,U64 16[RBP] + TEST RAX,RAX + JZ @@05 + CALL RAX +@@05: POP RBP + RET1 8 +//************************************ +_HI_MEMCPY:: + PUSH RBP + MOV RBP,RSP + PUSH RSI + PUSH RDI + CLD + MOV RDI,U64 SF_ARG1[RBP] + MOV RSI,U64 SF_ARG2[RBP] + MOV RCX,U64 SF_ARG3[RBP] + REP_MOVSB + MOV RAX,RDI + POP RDI + POP RSI + POP RBP + RET1 24 +} +_extern _HI_CALL I64 HiCall(U8 *s); +_extern _HI_MEMCPY U8 *HiMemCpy(U8 *dst,U8 *src,I64 cnt); + +#help_index "Boot" +public U0 RAMReboot(U8 *filename) +{//Softboot Kernel Bin file. No hardware reset. + I64 size; + CKernel *hi_image,*lo_image=sys_boot_base-sizeof(CBinFile),reg *sys_ram_reboot; + + do if (!(hi_image=FileRead(filename,&size))) return; + while (hi_image<0x100000); + + do sys_ram_reboot=MAlloc(SYS_RAM_REBOOT_END-SYS_RAM_REBOOT,Fs->code_heap); + while (sys_ram_reboot<0x100000); + + hi_image->boot_src=BOOT_SRC_RAM; + hi_image->boot_patch_table_base=lo_image(U8 *)+hi_image->h.patch_table_offset; + hi_image->sys_run_level =lo_image->sys_run_level&(RLF_VGA|RLF_16BIT); + MemCpy(&hi_image->start,&lo_image->start,sizeof(CKernel)-offset(CKernel.start)); + + CLI + if (mp_cnt>1) + MPHalt; + + HiMemCpy(sys_ram_reboot,SYS_RAM_REBOOT,SYS_RAM_REBOOT_END-SYS_RAM_REBOOT); + HiMemCpy(lo_image,hi_image,size); + HiCall(sys_ram_reboot); +} diff --git a/Adam/Boot/BootCD.CPP b/Adam/Boot/BootCD.CPP index c200c94..5408418 100644 --- a/Adam/Boot/BootCD.CPP +++ b/Adam/Boot/BootCD.CPP @@ -1,17 +1,17 @@ #define CD_BOOT_LOADER_SIZE CD_BLK_SIZE*1 //Max CD_BLK_SIZE*4, I think -#define BOOT_HIGH_LOC ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+CD_BOOT_LOADER_SIZE))>>4) +#define BOOT_HIGH_LOC_CD ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+CD_BOOT_LOADER_SIZE))>>4) DefinePrint( - "DD_BOOT_HIGH_LOC","%08X",BOOT_HIGH_LOC<<4); + "DD_BOOT_HIGH_LOC_CD","%08X",BOOT_HIGH_LOC_CD<<4); DefinePrint( - "DD_BOOT_HIGH_LOC_END","%08X",BOOT_RAM_LIMIT-1); + "DD_BOOT_HIGH_LOC_CD_END","%08X",BOOT_RAM_LIMIT-1); asm { USE16 BCD_START:: //DL is supposed to have the BIOS drive number CLD - MOV AX,BOOT_HIGH_LOC + MOV AX,BOOT_HIGH_LOC_CD MOV ES,AX CLI @@ -24,7 +24,7 @@ BCD_GET_IP: POP BX SUB BX,BCD_GET_IP-BCD_START SHR BX,4 -//Copy this bootloader code to just under 0x80000 +//This copies this bootloader's code to 0x$TX,"00096600",D="DD_BOOT_HIGH_LOC_CD"$ MOV AX,CS ADD AX,BX MOV DS,AX @@ -33,12 +33,12 @@ BCD_GET_IP: XOR DI,DI REP_MOVSB - MOV AX,BOOT_HIGH_LOC + MOV AX,BOOT_HIGH_LOC_CD MOV DS,AX //My assembler doesn't support 16-bit very well. - DU8 0xEA; //JMP BOOT_HIGH_LOC:BCD_MAIN - DU16 BCD_MAIN-BCD_START,BOOT_HIGH_LOC; + DU8 0xEA; //JMP BOOT_HIGH_LOC_CD:BCD_MAIN + DU16 BCD_MAIN-BCD_START,BOOT_HIGH_LOC_CD; BCD_BIOS_DRV_NUM: DU8 0; BCD_PAGE: DU8 0; @@ -152,7 +152,7 @@ BCD_MAIN:: //See $LK,"BootCdProbe",A="MN:BootCdProbe"$(). MOV EBX,U32 [BCD_BLK_LO-BCD_START] //TODO: oops overflow? SHL EBX,16 - MOV BX,BOOT_CODE_CDROM //$MA-X+PU,"See sys_boot_code",LM="Grep(\"sys_boot_code\",\"/*\");View;\n"$ + MOV BX,BOOT_SRC_CDROM //$MA-X+PU,"See sys_boot_src",LM="Find(\"sys_boot_src\",\"/*\");View;\n"$ //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP BOOT_RAM_BASE:0000 diff --git a/Adam/Boot/BootHD.CPP b/Adam/Boot/BootHD.CPP index 29ece68..7a1b79f 100644 --- a/Adam/Boot/BootHD.CPP +++ b/Adam/Boot/BootHD.CPP @@ -1,5 +1,8 @@ #define MODULE_SIZE 1*BLK_SIZE -#define BOOT_HIGH_LOC ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+MODULE_SIZE))>>4) +#define BOOT_HIGH_LOC_HD ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+MODULE_SIZE))>>4) + +DefinePrint( + "DD_BOOT_HIGH_LOC_HD","%08X",BOOT_HIGH_LOC_HD<<4); asm { USE16 @@ -9,11 +12,11 @@ BHD_CODE:: CLD - MOV AX,VGA_TEXT_MEM_BASE/16 + MOV AX,VGAM_TEXT/16 MOV FS,AX MOV U32 FS:[0],'B'+GREEN<<12+('2'+GREEN<<12)<<16 - MOV AX,BOOT_HIGH_LOC + MOV AX,BOOT_HIGH_LOC_HD MOV ES,AX CLI @@ -26,7 +29,7 @@ BHD_GET_IP: POP BX SUB BX,BHD_GET_IP-BHD_START SHR BX,4 -//Copy this bootloader code to just under 0x80000 +//This copies this bootloader's code to 0x$TX,"00096C00",D="DD_BOOT_HIGH_LOC_HD"$ MOV AX,CS ADD AX,BX MOV DS,AX @@ -35,21 +38,21 @@ BHD_GET_IP: XOR DI,DI REP_MOVSB - MOV AX,BOOT_HIGH_LOC + MOV AX,BOOT_HIGH_LOC_HD MOV DS,AX //My assembler doesn't support 16-bit very well. - DU8 0xEA; //JMP BOOT_HIGH_LOC:BHD_HISTART - DU16 BHD_HISTART-BHD_START,BOOT_HIGH_LOC; + DU8 0xEA; //JMP BOOT_HIGH_LOC_HD:BHD_HISTART + DU16 BHD_HISTART-BHD_START,BOOT_HIGH_LOC_HD; BHD_BIOS_DRV_NUM: DU8 0; -//Gets patched by $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). +//Gets patched by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). BHD_BLK_CNT:: DU16 0; BHD_DAP: DU8 16,0,1,0; //One blk at a time BHD_DAP_BUF: DU16 0,0; -//Gets patched by $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). +//Gets patched by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). BHD_DAP_BLK:: //64-bit BHD_DAP_BLK_LO: DU32 0; BHD_DAP_BLK_HI: DU32 0; @@ -82,7 +85,7 @@ BHD_HISTART: @@10: POP CX LOOP @@05 - MOV EBX,BOOT_CODE_HARDDRV //$MA-X+PU,"See sys_boot_code",LM="Grep(\"sys_boot_code\",\"/*\");View;\n"$ + MOV EBX,BOOT_SRC_HARDDRV //$MA-X+PU,"See sys_boot_src",LM="Find(\"sys_boot_src\",\"/*\");View;\n"$ //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP BOOT_RAM_BASE:0000 DU16 0,BOOT_RAM_BASE/16; diff --git a/Adam/Boot/BootIns.CPP b/Adam/Boot/BootIns.CPP new file mode 100644 index 0000000..fc1ea83 --- /dev/null +++ b/Adam/Boot/BootIns.CPP @@ -0,0 +1,233 @@ +//See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ or $LK,"Upgrading Documentation",A="FI:::/Doc/Upgrade.TXT"$. + +#help_index "Install" + +#define KERNEL_BIN_C "Kernel.BIN.C" +#define BOOT_DIR "/0000Boot" +#define BOOT_DIR_KERNEL_BIN_C BOOT_DIR "/0000" KERNEL_BIN_C +//Stage 2 of master boot loader +#define BOOT_DIR_BOOTMHD2_BIN_C BOOT_DIR "/BootMHD2.BIN.C" +//Old master boot record +#define BOOT_DIR_OLDMBR_BIN_C BOOT_DIR "/OldMBR.BIN.C" + +public U0 MakeAll() +{//Use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$. Loader must be patched. +//These 2 modules (and bootloaders at top) are the only AOT +//compiled code in TempleOS. Everything else is JIT. +//You are doing it wrong if you make AOT compiled code. + if (Cmp("/Compiler/Compiler","Compiler",,':')) + throw; + if (Cmp("/Kernel/Kernel","Kernel",,':')) + throw; +} + +public Bool MakeOSDrvBootInstall(U8 src_drv=0,U8 dst_drv=0) +{// Does $LK,"MakeAll",A="MN:MakeAll"$ and installs new boot-loader. + +//Normally, you just supply a src_drv. It will compile +//the code on that drive and update the boot sect. + +//If you are making a bootable CD-ROM, you supply a dst_drv. +//See $LK,"::/Misc/MakeDistro.CPP"$ + +//See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ + +//Study my account examples my technique: $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$ + + CBlkDev *bd; + CDrv *dv; + CFAT32Boot br; + CDirEntry de; + Bool result=FALSE; + I64 i; + try { + if (!src_drv) src_drv=Drv2Let(Fs->cur_dv); + if (!dst_drv) dst_drv=src_drv; + if (!Drv(src_drv)) + throw; + MakeAll; + bd=Let2BlkDev(dst_drv); + dv=Let2Drv (dst_drv); + switch (bd->type) { + case BDT_ATAPI: + Move("/Kernel/Kernel.BIN.Z",BOOT_DIR_KERNEL_BIN_C); + result=TRUE; + break; + case BDT_RAM: + case BDT_ATA: + Move("/Kernel/Kernel.BIN.Z","/" KERNEL_BIN_C); + if (!FileFind("/" KERNEL_BIN_C,&de,FUF_JUST_FILES)) + "No Kernel.BIN.C\n"; + else { + Free(de.full_name); + "Modifying partition boot record.\n"; + RBlks(dv,&br,dv->base_offset,1); + br.jump_and_nop[0]=OC_JMP_REL8; + br.jump_and_nop[1]=offset(CFAT32Boot.code)-2; +#assert offset(CFAT32Boot.code)>=offset(CRedSeaBoot.code) + br.jump_and_nop[2]=OC_NOP; + *BHD_BLK_CNT(U16 *)=(de.size+BLK_SIZE-1)>>BLK_SIZE_BITS; + *BHD_DAP_BLK(I64 *)=Cluster2Blk(dv,de.cluster); + for (i=0;i=BHD_END-BHD_CODE + for (;ibase_offset,1); + result=TRUE; + } + break; + } + } catch { + PutExcept; + Beep; + } + return result; +} + +public U0 MasterBootOldRead(U8 src_drv,U8 dst_drv) +{//Reads MBR from disk drive containing src partition. + //Writes a single blk file to dst /0000Boot directory. + CBlkDev *bd=Let2BlkDev(src_drv); + CDrv *dv; + CMasterBoot mbr; + Drv(dst_drv); + dv=Fs->cur_dv; + if (dv->type!=DVT_REDSEA && dv->type!=DVT_FAT32) + PrintErr("Not RedSea Drv\n"); + else { + //Bypass partition bounds-checking + BlkDevLock(bd); + ATAReadBlks(bd,&mbr,0,1); + BlkDevUnlock(bd); + + Drv(dst_drv); + MkDir(BOOT_DIR); + FileWrite(BOOT_DIR_OLDMBR_BIN_C,&mbr,BLK_SIZE); + } +} + +public U0 MasterBootOldWrite(U8 src_drv,U8 dst_drv) +{//Reads OldMBR from src drive /0000Boot directory + //writes it to the MBR of the drive with dst partition. + CBlkDev *bd=Let2BlkDev(dst_drv); + CMasterBoot *mbr; + Drv(src_drv); + if (mbr=FileRead(BOOT_DIR_OLDMBR_BIN_C)) { + //Bypass partition bounds-checking + BlkDevLock(bd); + ATAWriteBlks(bd,mbr,0,1); + BlkDevUnlock(bd); + } + Free(mbr); +} + +public U0 MasterBootZero(U8 dst_drv) +{//Set MBR of disk with dst partition to zero. + +//This is dangerous!! +//The TempleOS partitioner doesn't play well +//with other operating systems at this time and you need +//to do this on a drive partitioned by TempleOS +//if you wish to partition with another operating system. + CBlkDev *bd=Let2BlkDev(dst_drv); + CMasterBoot mbr; + MemSet(&mbr,0,BLK_SIZE); + //Bypass partition bounds-checking + BlkDevLock(bd); + ATAWriteBlks(bd,&mbr,0,1); + BlkDevUnlock(bd); +} + +public Bool MasterBootIntall(U8 drv_let,U8 *drv_lst=NULL) +{//Create new MBR on the disk that has drv_let as a partition. + //Puts stage 2 in /0000Boot dir of drv_let. + CBlkDev *bd,*bd1; + CDrv *dv,*p1; + CMasterBoot mbr; + CDirEntry de; + I64 i,j,size,*_q; + U8 *menu_ptr,*ptr,ch,buf[128]; + Bool result=FALSE; + + try { + if (drv_lst) + StrCpy(buf,drv_lst); + else { + j=0; + for (i='A';i<='Z';i++) + buf[j++]=i; + buf[j++]=0; + } + + Drv(drv_let); + dv=Fs->cur_dv; + if (dv->type!=DVT_REDSEA && dv->type!=DVT_FAT32) + PrintErr("Not RedSea Drv\n"); + else { + bd=Let2BlkDev(drv_let); + if (!FileFind(BOOT_DIR_OLDMBR_BIN_C,,FUF_JUST_FILES)) + MasterBootOldRead(drv_let,drv_let); + + _q=BMHD2_BLK_ARRAY; + MemSet(_q,0,sizeof(I64)*8); + menu_ptr=BMHD2_BOOT_MSG; + StrPrint(menu_ptr,"\n\r\n\rTempleOS Boot Loader\n\r\n\r"); + j=0; + if (FileFind(BOOT_DIR_OLDMBR_BIN_C,&de,FUF_JUST_FILES)) { + Free(de.full_name); + *_q++=Cluster2Blk(dv,de.cluster); + CatPrint(menu_ptr,"0. Old Boot Record\n\r"); + j++; + } + + ptr=buf; + while (ch=*ptr++) { + try { + p1 =Let2Drv(ch); + bd1=Let2BlkDev(ch); + } catch { + Fs->catch_except=TRUE; + p1 =NULL; + bd1=NULL; + } + if (p1 && bd1==bd) { + *_q=p1->base_offset; + "Drive %C:%16X\n",Drv2Let(p1),*_q; + CatPrint(menu_ptr,"%d. Drive %C\n\r",j++,Drv2Let(p1)); + _q++; + } + } + CatPrint(menu_ptr,"\n\rSelection:"); + + size=BMHD2_END-BMHD2_START; + FileWrite(BOOT_DIR_BOOTMHD2_BIN_C,BMHD2_START,size); + + if (!FileFind(BOOT_DIR_BOOTMHD2_BIN_C,&de,FUF_JUST_FILES)) + "No Boot Loader Image\n"; + else { + Free(de.full_name); + *BMHD_BLK_CNT(U16 *)=(size+BLK_SIZE-1)>>BLK_SIZE_BITS; + *BMHD_DAP_BLK(I64 *)=Cluster2Blk(dv,de.cluster); + //Bypass partition bounds-checking + BlkDevLock(bd); + ATAReadBlks(bd,&mbr,0,1); + for (i=0;i=BMHD_END-BMHD_CODE + for (;i>4) +#define BOOT_HIGH_LOC_MHD ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+MODULE_SIZE))>>4) + +DefinePrint( + "DD_BOOT_HIGH_LOC_MHD","%08X",BOOT_HIGH_LOC_MHD<<4); asm { USE16 @@ -7,7 +10,7 @@ BMHD_START:: BMHD_CODE:: CLD - MOV AX,BOOT_HIGH_LOC + MOV AX,BOOT_HIGH_LOC_MHD CLI MOV SS,AX @@ -26,7 +29,7 @@ BMHD_CODE:: MOV ES,AX - MOV AX,VGA_TEXT_MEM_BASE/16 + MOV AX,VGAM_TEXT/16 MOV FS,AX MOV U32 FS:[0],'B'+GREEN<<12+('1'+GREEN<<12)<<16 CALL BMHD_GET_IP @@ -35,7 +38,7 @@ BMHD_GET_IP: SUB BX,BMHD_GET_IP-BMHD_START MOV CX,BX SHR BX,4 -//Copy this bootloader code to just under 0x80000 +//This copies this bootloader's code to 0x$TX,"00096C00",D="DD_BOOT_HIGH_LOC_MHD"$ MOV AX,CS PUSH AX ADD AX,BX @@ -48,21 +51,21 @@ BMHD_GET_IP: XOR DI,DI REP_MOVSB - MOV AX,BOOT_HIGH_LOC + MOV AX,BOOT_HIGH_LOC_MHD MOV DS,AX //My assembler doesn't support 16-bit very well. - DU8 0xEA; //JMP BOOT_HIGH_LOC:BMHD_HISTART - DU16 BMHD_HISTART-BMHD_START,BOOT_HIGH_LOC; + DU8 0xEA; //JMP BOOT_HIGH_LOC_MHD:BMHD_HISTART + DU16 BMHD_HISTART-BMHD_START,BOOT_HIGH_LOC_MHD; BMHD_BIOS_DRV_NUM: DU8 0; BMHD_OLD_CS_IP: DU16 0,0; -//Gets patched by $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). +//Gets patched by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). BMHD_BLK_CNT:: DU16 0; BMHD_DAP: DU8 16,0,1,0; //One blk at a time BMHD_DAP_BUF: DU16 0,0; -//Gets patched by $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). +//Gets patched by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). BMHD_DAP_BLK:: //64-bit BMHD_DAP_BLK_LO: DU32 0; BMHD_DAP_BLK_HI: DU32 0; diff --git a/Adam/Boot/BootMHD2.CPP b/Adam/Boot/BootMHD2.CPP index 4868d5c..5c944f3 100644 --- a/Adam/Boot/BootMHD2.CPP +++ b/Adam/Boot/BootMHD2.CPP @@ -1,14 +1,17 @@ #define MODULE_SIZE 2*BLK_SIZE -#define BOOT_HIGH_LOC ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+MODULE_SIZE))>>4) +#define BOOT_HIGH_LOC_MHD2 ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+MODULE_SIZE))>>4) + +DefinePrint( + "DD_BOOT_HIGH_LOC_MHD2","%08X",BOOT_HIGH_LOC_MHD2<<4); asm { USE16 BMHD2_START:: MOV U32 FS:[0],'B'+0x2000+('2'+0x2000)<<16 - MOV AX,BOOT_HIGH_LOC + MOV AX,BOOT_HIGH_LOC_MHD2 MOV ES,AX -//Copy this bootloader code to just under 0x80000 +//This copies this bootloader's code to 0x$TX,"00096A00",D="DD_BOOT_HIGH_LOC_MHD2"$ MOV AX,CS MOV DS,AX MOV U32 [BMHD2_OLD_CS_IP-BMHD2_START],EBX @@ -19,12 +22,12 @@ BMHD2_START:: XOR DI,DI REP_MOVSB - MOV AX,BOOT_HIGH_LOC + MOV AX,BOOT_HIGH_LOC_MHD2 MOV DS,AX //My assembler doesn't support 16-bit very well. - DU8 0xEA; //JMP BOOT_HIGH_LOC:BMHD2_HISTART - DU16 BMHD2_HISTART-BMHD2_START,BOOT_HIGH_LOC; + DU8 0xEA; //JMP BOOT_HIGH_LOC_MHD2:BMHD2_HISTART + DU16 BMHD2_HISTART-BMHD2_START,BOOT_HIGH_LOC_MHD2; BMHD2_BOOT_MSG:: DU8 256 DUP(0); diff --git a/Adam/Boot/InsBoot.CPP b/Adam/Boot/InsBoot.CPP deleted file mode 100644 index d4381cc..0000000 --- a/Adam/Boot/InsBoot.CPP +++ /dev/null @@ -1,346 +0,0 @@ -#help_index "Install" -//See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ or $LK,"Upgrading Documentation",A="FI:::/Doc/Upgrade.TXT"$. - -//Kernel module: Kernel.BIN.Z -#define KERNEL_BIN_C "Kernel.BIN.C" - -#define BOOT_DIR "/0000Boot" -#define BOOT_DIR_KERNEL_BIN_C BOOT_DIR "/0000" KERNEL_BIN_C - -//Stage 2 of master boot loader -#define BOOTMHD2_BIN_C BOOT_DIR "/BootMHD2.BIN.C" - -//Old master boot record -#define OLDMBR_BIN_C BOOT_DIR "/OldMBR.BIN.C" - -if (IsDrvWritable) - MkDir("/Temp"); //Good to have a Temp - -#include "BootCD" -#include "BootHD" -#include "BootMHD" -#include "BootMHD2" -#include "DskCDDVD" - -#help_index "Call" -asm { -USE64 -_HI_CALL:: - PUSH RBP - MOV RBP,RSP - MOV RAX,U64 16[RBP] - TEST RAX,RAX - JZ @@05 - CALL RAX -@@05: POP RBP - RET1 8 -//************************************ -_HI_MEMCPY:: - PUSH RBP - MOV RBP,RSP - PUSH RSI - PUSH RDI - CLD - MOV RDI,U64 SF_ARG1[RBP] - MOV RSI,U64 SF_ARG2[RBP] - MOV RCX,U64 SF_ARG3[RBP] - REP_MOVSB - MOV RAX,RDI - POP RDI - POP RSI - POP RBP - RET1 24 -} -_extern _HI_CALL I64 HiCall(U8 *s); -_extern _HI_MEMCPY U8 *HiMemCpy(U8 *dst,U8 *src,I64 cnt); - -#help_index "Boot" -public U0 SoftBoot(U8 *filename) -{//Softboot Kernel Bin file. No hardware reset. - I64 size; - CKernel *hi_image,*lo_image=sys_boot_base-sizeof(CBinFile), - reg *shutdown,*hi_image2; - - if (!(hi_image2=FileRead(filename,&size))) return; - shutdown=MAlloc(SYS_RESTART_KERNEL_END-SYS_RESTART_KERNEL,Fs->code_heap); - hi_image=MAlloc(size,Fs->code_heap); - HiMemCpy(hi_image,hi_image2,size); - Free(hi_image2); - - hi_image->boot_base=lo_image(U8 *)+sizeof(CBinFile); - hi_image->boot_patch_table_base=lo_image(U8 *)+hi_image->h.patch_table_offset; - HiMemCpy(&hi_image->sys_mem_E801,&lo_image->sys_mem_E801,2*2); - HiMemCpy(&hi_image->sys_mem_E820,&lo_image->sys_mem_E820,MEM_NUM_E820_ENTRIES*MEM_E820_ENTRY_SIZE); - hi_image->sys_gr_mode=lo_image->sys_gr_mode; - hi_image->sys_pci_busses=lo_image->sys_pci_busses; - hi_image->boot_code=BOOT_CODE_RAM; - - CLI - if (mp_cnt>1) - MPHalt; - - HiMemCpy(shutdown,SYS_RESTART_KERNEL,SYS_RESTART_KERNEL_END-SYS_RESTART_KERNEL); - HiMemCpy(&hi_image->sys_gdt,&lo_image->sys_gdt,sizeof(CGDT)); - HiMemCpy(lo_image,hi_image,size); - HiCall(shutdown); -} - -#help_index "Install" -U8 ChkWritable(U8 drv_let=0) -{ - Bool cont=TRUE; - I64 writable_drv=drv_let; - U8 buf_s[136],buf_d[136]; - CPrt *p; - CBlkDev *bdev; - if (!IsDrvWritable(drv_let)) { - '' drv_let; - ": Drive is read-only.\n"; - do { - "Enter RAM drive (usually 'B') for temporary files:"; - writable_drv=ToUpper(GetChar); - '\n'; - p=Drv2Prt(writable_drv); - bdev=p->bdev; - if (bdev->type!=BDT_RAM || - !IsDrvWritable(writable_drv)) - "Not A RAM Drive\n"; - else - cont=FALSE; - } while (cont); - if (drv_let!=writable_drv) { - Fmt(writable_drv,FALSE,FALSE); - StrPrint(buf_s,"%c:/",drv_let); - StrPrint(buf_d,"%c:/",writable_drv); - CopyTree(buf_s,buf_d); - } - } - return writable_drv; -} - -#help_index "Install" -public U0 MakeAll() -{//Use $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$. Loader must be patched. -//These 2 modules (and bootloaders at top) are the only AOT -//compiled code in TempleOS. Everything else is JIT. -//You are doing it wrong if you make AOT compiled code. - Cd("/Compiler"); - if (Cmp("Compiler","Compiler",,':')) - throw; - Cd("/Kernel"); - if (Cmp("Kernel","Kernel",,':')) - throw; -} - -public Bool MakeOSPrtBootInstall(U8 src_drv=0,U8 dst_drv=0) -{// Does $LK,"MakeAll",A="MN:MakeAll"$ and installs new boot-loader. - -//Normally, you just supply a src_drv. It will compile -//the code on that drive and update the boot sect. - -//If you are making a bootable CD-ROM, you supply a dst_drv. -//See $LK,"::/Misc/MakeDistro.CPP"$ - -//See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ - -//Study my account examples my technique: $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TSAdam.CPP,1"$ $LK,"Update Funs",A="FL:::/Demo/AcctExample/TSDistro.CPP,1"$ - - CBlkDev *bdev; - CPrt *p; - CFAT32Boot br; - CDirEntry de; - Bool result=FALSE; - I64 i; - - try { - if (!src_drv) src_drv=Fs->cur_prt->drv_let; - if (!dst_drv) dst_drv=src_drv; - - src_drv=ChkWritable(src_drv); - if (!Drv(src_drv)) - throw; - MakeAll; - Cd("/"); - - bdev=Drv2BlkDev(dst_drv); - p =Drv2Prt (dst_drv); - switch (bdev->type) { - case BDT_ATAPI: - Move("/Kernel/Kernel.BIN.Z",BOOT_DIR_KERNEL_BIN_C); - result=TRUE; - break; - case BDT_RAM: - case BDT_ATA: - Move("/Kernel/Kernel.BIN.Z",KERNEL_BIN_C); - if (!FileFind(KERNEL_BIN_C,&de,FUF_JUST_FILES)) - "No Kernel.BIN.C\n"; - else { - Free(de.full_name); - "Modifying partition boot record.\n"; - RBlks(p,&br,p->offset,1); - br.jump_and_nop[0]=OC_JMP_REL8; - br.jump_and_nop[1]=offset(CFAT32Boot.code)-2; - br.jump_and_nop[2]=OC_NOP; - *BHD_BLK_CNT(U16 *)=(de.size+BLK_SIZE-1)>>BLK_SIZE_BITS; - *BHD_DAP_BLK(I64 *)=p->data+de.cluster*p->spc; - for (i=0;ioffset,1); - result=TRUE; - } - break; - } - } catch { - PutExcept; - Beep; - } - return result; -} - -public U0 MasterBootOldRead(U8 src_drv,U8 dst_drv) -{//Reads MBR from disk drive containing src partition. - //Writes a single blk file to dst /0000Boot directory. - CBlkDev *bdev=Drv2BlkDev(src_drv); - CPrt *p; - CMasterBoot mbr; - Drv(dst_drv); - p=Fs->cur_prt; - if (p->type!=PT_REDSEA && p->type!=PT_FAT32) - PrintErr("Not RedSea Partition\n"); - else { - //Bypass partition bounds-checking - BlkDevLock(bdev); - ATAReadBlks(bdev,&mbr,0,1); - BlkDevUnlock(bdev); - - Drv(dst_drv); - MkDir(BOOT_DIR); - FileWrite(OLDMBR_BIN_C,&mbr,BLK_SIZE); - } -} - -public U0 MasterBootOldWrite(U8 src_drv,U8 dst_drv) -{//Reads OldMBR from src drive /0000Boot directory - //writes it to the MBR of the drive with dst partition. - CBlkDev *bdev=Drv2BlkDev(dst_drv); - CMasterBoot *mbr; - Drv(src_drv); - if (mbr=FileRead(OLDMBR_BIN_C)) { - //Bypass partition bounds-checking - BlkDevLock(bdev); - ATAWriteBlks(bdev,mbr,0,1); - BlkDevUnlock(bdev); - } - Free(mbr); -} - -public U0 MasterBootZero(U8 dst_drv) -{//Set MBR of disk with dst partition to zero. - -//This is dangerous!! -//The TempleOS partitioner doesn't play well -//with other operating systems at this time and you need -//to do this on a drive partitioned by TempleOS -//if you wish to partition with another operating system. - CBlkDev *bdev=Drv2BlkDev(dst_drv); - CMasterBoot mbr; - MemSet(&mbr,0,BLK_SIZE); - //Bypass partition bounds-checking - BlkDevLock(bdev); - ATAWriteBlks(bdev,&mbr,0,1); - BlkDevUnlock(bdev); -} - -public Bool MasterBootIntall(U8 drv_let,U8 *drv_lst=NULL) -{//Create new MBR on the disk that has drv_let as a partition. - //Puts stage 2 in /0000Boot dir of drv_let. - CBlkDev *bdev,*bdev1; - CPrt *p,*p1; - CMasterBoot mbr; - CDirEntry de; - I64 i,j,size,*_q; - U8 *menu_ptr,*ptr,ch,buf[128]; - Bool result=FALSE; - - try { - if (drv_lst) - StrCpy(buf,drv_lst); - else { - j=0; - for (i='A';i<='Z';i++) - buf[j++]=i; - buf[j++]=0; - } - - Drv(drv_let); - p=Fs->cur_prt; - if (p->type!=PT_REDSEA && p->type!=PT_FAT32) - PrintErr("Not RedSea Partition\n"); - else { - bdev=Drv2BlkDev(drv_let); - if (!FileFind(OLDMBR_BIN_C,,FUF_JUST_FILES)) - MasterBootOldRead(drv_let,drv_let); - - _q=BMHD2_BLK_ARRAY; - MemSet(_q,0,sizeof(I64)*8); - menu_ptr=BMHD2_BOOT_MSG; - StrPrint(menu_ptr,"\n\r\n\rTempleOS Boot Loader\n\r\n\r"); - j=0; - if (FileFind(OLDMBR_BIN_C,&de,FUF_JUST_FILES)) { - Free(de.full_name); - *_q++=p->data+de.cluster*p->spc; - CatPrint(menu_ptr,"0. Old Boot Record\n\r"); - j++; - } - - ptr=buf; - while (ch=*ptr++) { - try { - p1 =Drv2Prt(ch); - bdev1=Drv2BlkDev(ch); - } catch { - Fs->catch_except=TRUE; - p1 =NULL; - bdev1=NULL; - } - if (p1 && bdev1==bdev) { - *_q=p1->offset; - "Drive %C:%16X\n",Prt2Drv(p1),*_q; - CatPrint(menu_ptr,"%d. Drive %C\n\r",j++,Prt2Drv(p1)); - _q++; - } - } - CatPrint(menu_ptr,"\n\rSelection:"); - - size=BMHD2_END-BMHD2_START; - FileWrite(BOOTMHD2_BIN_C,BMHD2_START,size); - - if (!FileFind(BOOTMHD2_BIN_C,&de,FUF_JUST_FILES)) - "No Boot Loader Image\n"; - else { - Free(de.full_name); - *BMHD_BLK_CNT(U16 *)=(size+BLK_SIZE-1)>>BLK_SIZE_BITS; - *BMHD_DAP_BLK(I64 *)=p->data+de.cluster*p->spc; - //Bypass partition bounds-checking - BlkDevLock(bdev); - ATAReadBlks(bdev,&mbr,0,1); - for (i=0;iglbl_name=GetStr("Glbl Struct Name (ENTER for No Glbl):"); result->range=GetI64 ("Range (%4d):",30); @@ -33,7 +33,7 @@ CTemplateSC *GetSliderCtrl() Free(st); break; } - temps=CAlloc(sizeof(CTemplateSCSlider)); + temps=CAlloc(sizeof(CTemplateCSSlider)); temps->name=st; QueIns(temps,result->last_slider); temps->num=result->num_sliders++; @@ -41,25 +41,25 @@ CTemplateSC *GetSliderCtrl() return result; } -U0 TemplateSliderCtrl(CDoc *doc) +U0 TemplateCtrlSlider(CDoc *doc) { CTask *task; - CTemplateSC *m=NULL; - CTemplateSCSlider *temps; + CTemplateCS *m=NULL; + CTemplateCSSlider *temps; I64 i; DocUnlock(doc); DocRecalc(doc); DocCaptureUndo(doc,TRUE); - task=SpawnUser("CTemplateSC **_m=0x%X;*_m=GetSliderCtrl;\n",&m); + task=User("CTemplateCS **_m=0x%X;*_m=CtrlSliderGet;\n",&m); while (!m) Yield; DocPrint(doc, -"#define SLIDER_RANGE %d -#define SLIDER_SPACING %d -#define SLIDER_BORDER %d +"#define SLIDER_RANGE\t%d +#define SLIDER_SPACING\t%d +#define SLIDER_BORDER\t%d class CSliderState { @@ -77,7 +77,7 @@ class CSliderState DocPrint(doc, " -U0 DrawSliderCtrl(CDC *dc,CCtrl *c) +U0 DrawCtrlSlider(CDC *dc,CCtrl *c) { CSliderState *s=c->state; @@ -124,7 +124,7 @@ U0 DrawSliderCtrl(CDC *dc,CCtrl *c) DocPrint(doc, "} -U0 UpdateDerivedSliderCtrl(CCtrl *c) +U0 UpdateDerivedCtrlSlider(CCtrl *c) { CSliderState *s=c->state; c->left=c->win_task->pix_width/2-(SLIDER_SPACING*3+2)/2; @@ -181,9 +181,9 @@ CCtrl *SliderNew() else DocPrint(doc, " c->state=CAlloc(sizeof(CSliderState));\n"); DocPrint(doc, -" c->draw_it=&DrawSliderCtrl; +" c->draw_it=&DrawCtrlSlider; c->left_click=&LeftClickSlider; - c->update_derived_vals=&UpdateDerivedSliderCtrl; + c->update_derived_vals=&UpdateDerivedCtrlSlider; old_preempt=Preempt(OFF); QueIns(c,Fs->last_ctrl); TaskDerivedValsUpdate; diff --git a/Adam/DocDefines.CPP b/Adam/DocDefines.CPP deleted file mode 100644 index 4a1d925..0000000 --- a/Adam/DocDefines.CPP +++ /dev/null @@ -1,70 +0,0 @@ -#help_index "Define;Char/Define" - -U0 LoadDocDefines() -{//These are used in documents such as $LK,"::/Doc/TrivialSolutions.TXT"$ -//The $LK,"CDoc",A="MN:CDoc"$ framework will search the sym table for define string -//consts if you specify that. - CBinFile *bfh=sys_boot_base-sizeof(CBinFile); - - DefinePrint( - "DD_KERNEL","%08X",bfh); - DefinePrint( - "DD_KERNEL2","%09,X",bfh); - bfh(I64)+=bfh->file_size-1; - DefinePrint( - "DD_KERNEL_END","%08X",bfh); - DefinePrint( - "DD_KERNEL_END2","%09,X",bfh); - - DefinePrint( - "DD_PROTECTED_LOW","%08X",MEM_PROTECTED_LOW_LIMIT); - DefinePrint( - "DD_PROTECTED_LOW2","%09,X",MEM_PROTECTED_LOW_LIMIT); - - //$LK,"DD_BOOT_HIGH_LOC",A="FF:::/Adam/Boot/BootCD.CPP,DD_BOOT_HIGH_LOC"$ - - DefinePrint( - "DD_MP_VECT","%08X",MP_VECT_ADDR); - DefinePrint( - "DD_MP_VECT_END","%08X",MP_VECT_ADDR+SYS_MP_INIT_END-SYS_MP_INIT_START-1); - - DefinePrint( - "DD_OS_NAME_VERSION","TempleOS V%0.2f",os_version); - DefinePrint( - "DD_TEMPLEOS_AGE","%0.1f",(Now-Str2Date("8/1/2003"))/ToF64(1<<32)/CDATE_YEAR_DAYS); - - //This is cut and replaced when I generate a distro. - //See $LK,"DD_TEMPLEOS_LOC",A="FF:::/Demo/AcctExample/TSDistro.CPP,DD_TEMPLEOS_LOC"$. - $TR-C,"LineRep"$ -$ID,4$DefinePrint("DD_TEMPLEOS_LOC","121,504"); -DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","81,303"); -$ID,-4$ - DefinePrint( - "DD_FIXED_AREA_BASE","%08X",SYS_FIXED_AREA); - DefinePrint( - "DD_FIXED_AREA_BASE2","%09,X",SYS_FIXED_AREA); - DefinePrint( - "DD_FIXED_AREA_END","%08X",SYS_FIXED_AREA+sizeof(CSysFixedArea)-1); - - DefinePrint( - "DD_SYS_HEAP_BASE","%08X",sys_heap_base); - DefinePrint( - "DD_SYS_HEAP_BASE2","%09,X",sys_heap_base); - - DefinePrint( - "DD_SYS_HEAP_LIMIT","%08X",sys_heap_limit); - DefinePrint( - "DD_SYS_HEAP_LIMIT2","%09,X",sys_heap_limit); - - DefinePrint( - "DD_MAPPED_MEM_SPACE_GIG","%d Gig",MEM_MAPPED_SPACE/0x40000000); - DefinePrint( - "DD_MAPPED_MEM_SPACE_END","%010X",MEM_MAPPED_SPACE-1); - DefinePrint( - "DD_MAPPED_MEM_SPACE_END2","%014,X",MEM_MAPPED_SPACE-1); - - DefinePrint( - "DD_JIFFY_HZ","%d Hz",JIFFY_FREQ); -} - -LoadDocDefines; diff --git a/Adam/DolDoc/Doc.CPP b/Adam/DolDoc/Doc.CPP index 6578774..888c823 100644 --- a/Adam/DolDoc/Doc.CPP +++ b/Adam/DolDoc/Doc.CPP @@ -76,12 +76,15 @@ public class CDolDocGlbls } doldoc; MemSet(&doldoc,0,sizeof(CDolDocGlbls)); +#help_index "God" +#define BIBLE_FILENAME "::/Misc/Bible.TXT.Z" + #include "DocNew" #include "DocPlain" #include "DocInit" #include "DocHighlight" -#include "DocRecalc2a" -#include "DocRecalc2b" +#include "DocRecalcA" +#include "DocRecalcB" sys_clipboard_doc=DocNew; #include "DocFile" #include "DocOpt" @@ -89,8 +92,8 @@ sys_clipboard_doc=DocNew; #include "DocCtrlL" #include "DocMacro" #include "DocFind" -#include "DocEd2a" -#include "DocEd2b" +#include "DocEdA" +#include "DocEdB" #include "DocCodeTools" #include "DocTree" #include "DocMain" diff --git a/Adam/DolDoc/DocCodeTools.CPP b/Adam/DolDoc/DocCodeTools.CPP index 46624b0..38f7172 100644 --- a/Adam/DolDoc/DocCodeTools.CPP +++ b/Adam/DolDoc/DocCodeTools.CPP @@ -6,7 +6,7 @@ #define EF_REINDENT 0 #define EF_CHK_COMPILE 1 #define EF_RENUM_ASM 2 -#define EF_SLIDER_CTRL 3 +#define EF_CTRL_SLIDER 3 #define EF_CH_SC 4 I64 PopUpEdFmt() @@ -16,7 +16,7 @@ I64 PopUpEdFmt() DocPrint(doc,"$$LTBLUE$$$$MU,\"Check Compile\",LE=EF_CHK_COMPILE$$\n" "$$MU,\"Reindent CPP.Z Fun\",LE=EF_REINDENT$$\n" "$$MU,\"Renum Asm Local @@ Labels for Fun\",LE=EF_RENUM_ASM$$\n" - "$$MU,\"Insert Template Code: Slider Ctrl\",LE=EF_SLIDER_CTRL$$\n" + "$$MU,\"Insert Template Code: Ctrl Slider\",LE=EF_CTRL_SLIDER$$\n" "$$MU,\"Insert ASCII/Scan Code Hex Codes for key pressed\",LE=EF_CH_SC$$\n\n" "$$MU,\"CANCEL\",LE=DOCM_CANCEL$$\n\n" "$$GREEN$$$$FG$$ to undo if not happy\n" @@ -30,43 +30,32 @@ class CRILex { CLex *lx1,*lx2; CQueVectU8 *indent; - I64 depth,exp_depth; - Bool was_new_line,is_not_cont,one_shot; + I64 depth,exp_depth,one_shot; + Bool was_new_line,is_not_cont; }; I64 EdRILex(CRILex *rx) { - Bool is_not_cont=FALSE; - I64 i,k; + rx->is_not_cont=FALSE; + I64 i; do { Lex(rx->lx1); Lex(rx->lx2); - - if (rx->lx1->token=='\n') { - if (rx->lx2->token==TK_IDENT) - i=PrsKeyWord(rx->lx2); - else - i=-1; - if (rx->lx2->token==';' || rx->lx2->token=='{' || rx->lx2->token=='}' || - rx->lx2->token==':' || rx->lx2->token==')' && !rx->exp_depth || - i==KW_ELSE || i==KW_CATCH || i==KW_DO) - is_not_cont=TRUE; - } - k=PrsKeyWord(rx->lx2); + i=PrsKeyWord(rx->lx2); + if (rx->lx1->token=='\n' && rx->lx2->token==';' || rx->lx2->token=='{' || + rx->lx2->token=='}' || rx->lx2->token==':' || rx->lx2->token==')' && + !rx->exp_depth || i==KW_ELSE || i==KW_CATCH || i==KW_DO) + rx->is_not_cont=TRUE; if (rx->was_new_line && (rx->lx1->token!=':' || - k==KW_DFT || k==KW_SUB_SWITCH_START || k==KW_SUB_SWITCH_END)) { - if (rx->one_shot) { - QueVectU8Put(rx->indent,rx->lx2->lfns[0].cur_entry->y,rx->depth+3); - rx->one_shot=FALSE; - } else - QueVectU8Put(rx->indent,rx->lx2->lfns[0].cur_entry->y,rx->depth); + i==KW_DFT || i==KW_SUB_SWITCH_START || i==KW_SUB_SWITCH_END)) { + QueVectU8Put(rx->indent,rx->lx2->lfns[0].cur_entry->y,rx->depth+rx->one_shot); + rx->one_shot=0; } if (rx->lx2->token=='\n') rx->was_new_line=TRUE; else rx->was_new_line=FALSE; } while (rx->lx1->token=='\n'); - rx->is_not_cont=is_not_cont; return rx->lx1->token; } @@ -182,16 +171,14 @@ U0 EdRIStmt(CRILex *rx,Bool indent) default: if (rx->lx1->token==TK_IDENT && rx->lx1->hash_entry && rx->lx1->hash_entry->type&(HTT_OPCODE|HTT_ASM_KEYWORD)) { - i=rx->depth; - rx->depth=4; - rx->one_shot=FALSE; + rx->one_shot=4-rx->depth; do EdRILex(rx); while (rx->lx2->token && rx->lx2->token!='\n'); - rx->depth=i; + rx->is_not_cont=TRUE; } else { while (rx->lx1->token && rx->lx1->token!=';' && rx->lx1->token!=':') { if (rx->lx2->token=='\n' && !rx->is_not_cont) - rx->one_shot=TRUE; + rx->one_shot=3; EdRILex(rx); } if (rx->lx1->token==':') @@ -211,11 +198,11 @@ CQueVectU8 *EdRICode(CDoc *doc) CRILex *rx=CAlloc(sizeof(CRILex)); rx->lx1=LexNew(,LF_KEEP_NEW_LINES|LF_DONT_FREE_BUF,doc->filename.name); - Free(rx->lx1->lfns[0].name); + Free(rx->lx1->lfns[0].full_name); LexAttachDoc(rx->lx1,&rx->lx1->lfns[0],doc,,doc->cur_entry,doc->cur_data_col); rx->lx2=LexNew(,LF_KEEP_NEW_LINES|LF_DONT_FREE_BUF,doc->filename.name); - Free(rx->lx2->lfns[0].name); + Free(rx->lx2->lfns[0].full_name); LexAttachDoc(rx->lx2,&rx->lx2->lfns[0],doc,,doc->cur_entry,doc->cur_data_col); rx->indent=QueVectU8New(doc->cur_entry->y); @@ -400,17 +387,17 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action) if (doc->flags&DOCF_PLAIN_TEXT) DocFlagsToggle(doc,DOCF_PLAIN_TEXT); DocWrite(doc); - task=Spawn(&SrvUserCmdLine,NULL,"Srv",,Fs); + task=Spawn(&SrvCmdLine,NULL,"Srv",,Fs); st2=CurDir; st=MStrPrint("Cd(\"%s\");",st2); tempc=TaskExe(task,Fs,st,1<win_left,Fs->win_right, task); - SetWinVert(Fs->win_top, Fs->win_bottom,task); + WinHorz(Fs->win_left,Fs->win_right, task); + WinVert(Fs->win_top, Fs->win_bottom,task); if (ScanResult(tempc,&r)) { - st=DirFile(doc->filename.name,,"PRJ.Z"), - prj_file=FileNameAbs(st,FUF_Z_OR_NOT_Z); + st=DirFile(doc->filename.name,,"PRJ.Z"); + prj_file=FileNameAbs(st,FUF_Z_OR_NOT_Z); Free(st); if (FileFind(prj_file)) { st2=DirFile(prj_file), @@ -597,8 +584,8 @@ U0 EdCodeTools(CDoc *doc) case EF_RENUM_ASM: EdCodeTools2(doc,tool_action); break; - case EF_SLIDER_CTRL: - TemplateSliderCtrl(doc); + case EF_CTRL_SLIDER: + TemplateCtrlSlider(doc); break; case EF_CH_SC: EdChSC(doc); diff --git a/Adam/DolDoc/DocCtrlL.CPP b/Adam/DolDoc/DocCtrlL.CPP index 36b4add..822d7eb 100644 --- a/Adam/DolDoc/DocCtrlL.CPP +++ b/Adam/DolDoc/DocCtrlL.CPP @@ -1005,13 +1005,13 @@ U0 EdInsDollarCmd() } } -#define PT_SPRITE 0 -#define PT_SPRITE_PTR 1 -#define PT_DUP_SPRITE 2 -#define PT_SPRITE_SIZE 3 -#define PT_SPRITE_MACRO 4 -#define PT_SPRITE_MENU 5 -#define PT_SPRITE_LINK 6 +#define DVT_SPRITE 0 +#define DVT_SPRITE_PTR 1 +#define DVT_DUP_SPRITE 2 +#define DVT_SPRITE_SIZE 3 +#define DVT_SPRITE_MACRO 4 +#define DVT_SPRITE_MENU 5 +#define DVT_SPRITE_LINK 6 I64 PopUpSpriteType() { @@ -1019,13 +1019,13 @@ I64 PopUpSpriteType() CDoc *doc=DocNew; DocPrint(doc,"$$PURPLE$$$$TX+CX,\"Graphic Resource Menu\"$$\n" "$$LK+PU+CX,\"Click for Help\",A=\"FI:::/Doc/Resource.TXT.Z\"$$\n" - "\n$$LTBLUE$$$$MU,\"Make Sprite\",LE=PT_SPRITE$$\n" - "$$MU,\"Pointer to Sprite\",LE=PT_SPRITE_PTR$$\n" - "$$MU,\"Duplicate Sprite\",LE=PT_DUP_SPRITE$$\n" - "$$MU,\"Sprite Size (not really needed)\",LE=PT_SPRITE_SIZE$$\n" - "$$MU,\"Sprite Macro (Icon)\",LE=PT_SPRITE_MACRO$$\n" - "$$MU,\"Sprite Menu Item\",LE=PT_SPRITE_MENU$$\n" - "$$MU,\"Sprite Link\",LE=PT_SPRITE_LINK$$\n" + "\n$$LTBLUE$$$$MU,\"Make Sprite\",LE=DVT_SPRITE$$\n" + "$$MU,\"Pointer to Sprite\",LE=DVT_SPRITE_PTR$$\n" + "$$MU,\"Duplicate Sprite\",LE=DVT_DUP_SPRITE$$\n" + "$$MU,\"Sprite Size (not really needed)\",LE=DVT_SPRITE_SIZE$$\n" + "$$MU,\"Sprite Macro (Icon)\",LE=DVT_SPRITE_MACRO$$\n" + "$$MU,\"Sprite Menu Item\",LE=DVT_SPRITE_MENU$$\n" + "$$MU,\"Sprite Link\",LE=DVT_SPRITE_LINK$$\n" "\n$$MU,\"Abort\",LE=DOCM_CANCEL$$\n\n"); i=PopUpMenu(doc); DocDel(doc); @@ -1074,12 +1074,12 @@ U8 *EdSprite(I64 bin_num) CEdMacroSprite *e=CAlloc(sizeof(CEdMacroSprite)); *buf=0; switch (type) { - case PT_SPRITE: + case DVT_SPRITE: StrPrint(e->tag,"<%d>",bin_num); if (DocFormDo(e,"CEdJustSprite",,,ctrl_L_footer)) st1=MStrPrint("\"%Q\"",e->tag); break; - case PT_SPRITE_MACRO: + case DVT_SPRITE_MACRO: e->escape=TRUE; if (DocFormDo(e,,,,ctrl_L_footer)) { CatPrint(buf,"+UL"); @@ -1091,26 +1091,26 @@ U8 *EdSprite(I64 bin_num) Free(st); } break; - case PT_SPRITE_MENU: + case DVT_SPRITE_MENU: e->escape=TRUE; if (DocFormDo(e,"CEdMenuSprite",,,ctrl_L_footer)) { if (e->escape) CatPrint(buf,"+X"); st1=MStrPrint("\"%Q\",LE=%s",e->tag,e->exp); } break; - case PT_SPRITE_LINK: + case DVT_SPRITE_LINK: CatPrint(buf,"+L"); st1=EdSpriteLink(&pop_up,&html_link); if (pop_up) CatPrint(buf,"+PU"); break; - case PT_SPRITE_PTR: + case DVT_SPRITE_PTR: EdInsBinary(--bin_num,DOCT_INS_BINARY); break; - case PT_SPRITE_SIZE: + case DVT_SPRITE_SIZE: EdInsBinary(--bin_num,DOCT_INS_BINARY_SIZE); break; - case PT_DUP_SPRITE: + case DVT_DUP_SPRITE: EdInsBinary(--bin_num,DOCT_SPRITE); break; } diff --git a/Adam/DolDoc/DocEd2a.CPP b/Adam/DolDoc/DocEdA.CPP similarity index 96% rename from Adam/DolDoc/DocEd2a.CPP rename to Adam/DolDoc/DocEdA.CPP index e768f67..0d558e0 100644 --- a/Adam/DolDoc/DocEd2a.CPP +++ b/Adam/DolDoc/DocEdA.CPP @@ -224,7 +224,8 @@ public U0 EdLineUp(CDoc *doc,I64 sc=MIN_I64) doc_ce=doc_ce->next; if (doc->flags & DOCF_FORM) { while (doc_ce->next->x==x && - (!Bt(doldoc.type_flags_form,doc_ce->type_u8) || + (!Bt(doldoc.type_flags_form,doc_ce->type_u8) && + !(doc_ce->de_flags&DOCEF_LINK)|| doc_ce->de_flags&DOCEF_SKIP_IN_FORM)) doc_ce=doc_ce->next; } @@ -566,8 +567,9 @@ ic_overstrike_char: DocInsEntry(doc,doc_ne); } else if (ch=='\t') { if (doc->flags&DOCF_FORM && - Bt(doldoc.type_flags_form,doc->cur_entry->type_u8) && - !(doc->cur_entry->de_flags&DOCEF_SKIP_IN_FORM)) { + (Bt(doldoc.type_flags_form,doc->cur_entry->type_u8) || + doc->cur_entry->de_flags&DOCEF_LINK) && + !(doc->cur_entry->de_flags&DOCEF_SKIP_IN_FORM)) { ic_form_tab: doc->cur_entry=doc->cur_entry->next; doc->cur_data_col=doc->cur_entry->min_col; @@ -652,12 +654,16 @@ U0 DocEntryToggle(CDoc *doc) U8 ch,*st,*st2; I64 i,j,k; if (doc_ce!=doc && !(doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_WITH_TABS))) { - if (doc_ce->type_u8==DOCT_TEXT && !(doc_ce->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { + if (doc_ce->type_u8==DOCT_TEXT && + !(doc_ce->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && + !(doc_ce->type&DOCG_BL_IV_UL)) { doc_ce2=doc_ce->last; for (k=0;k<20;k++) { if (doc_ce2!=doc) { cl1=doc_ce2->last; - if (doc_ce2->type_u8==DOCT_TEXT && doc_ce->de_flags==doc_ce2->de_flags && doc_ce->type==doc_ce2->type) { + if (doc_ce2->type_u8==DOCT_TEXT && + doc_ce->de_flags==doc_ce2->de_flags && + doc_ce->type==doc_ce2->type) { i=StrLen(doc_ce2->tag); j=StrLen(doc_ce->tag); st=MAlloc(i+j+1,doc->mem_task); @@ -680,7 +686,9 @@ U0 DocEntryToggle(CDoc *doc) for (k=0;k<20;k++) { if (doc_ce2!=doc) { cl1=doc_ce2->next; - if (doc_ce2->type_u8==DOCT_TEXT && doc_ce->de_flags==doc_ce2->de_flags && doc_ce->type==doc_ce2->type) { + if (doc_ce2->type_u8==DOCT_TEXT && + doc_ce->de_flags==doc_ce2->de_flags && + doc_ce->type==doc_ce2->type) { i=StrLen(doc_ce->tag); j=StrLen(doc_ce2->tag); st=MAlloc(i+j+1,doc->mem_task); @@ -704,7 +712,8 @@ U0 DocEntryToggle(CDoc *doc) j=doc->cur_data_col+1; while (jmax_col && doc_ce->tag[j]!='$$') j++; - if (imin_col<=imax_col && doc_ce->tag[i]=='$$' && doc_ce->tag[j]=='$$') { + if (imin_col<=imax_col && + doc_ce->tag[i]=='$$' && doc_ce->tag[j]=='$$') { ch=doc_ce->tag[j+1]; doc_ce->tag[j+1]=0; st=StrNew(doc_ce->tag+i); diff --git a/Adam/DolDoc/DocEd2b.CPP b/Adam/DolDoc/DocEdB.CPP similarity index 83% rename from Adam/DolDoc/DocEd2b.CPP rename to Adam/DolDoc/DocEdB.CPP index 6e74710..0e4ef6d 100644 --- a/Adam/DolDoc/DocEd2b.CPP +++ b/Adam/DolDoc/DocEdB.CPP @@ -20,7 +20,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) !(sc&(SCF_CTRL|SCF_ALT))) { if (sc&SCF_KEY_DESC) { st=Char2KeyName(ch,FALSE); - SetKeyDesc("Char/'%s'",st); + KeyDescSet("Char/'%s'",st); Free(st); } else EdInsChar(ch,sc,doc); @@ -31,25 +31,25 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) switch (ch) { case CH_CTRLA: if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Save As"); + KeyDescSet("Edit/Save As"); else DocWrite(doc,TRUE); break; case CH_CTRLB: if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/Toggle Border"); + KeyDescSet("Win/Toggle Border"); else WinBorder(Bt(&doc->win_task->display_flags,DISPLAYf_NO_BORDER),doc->win_task); break; case CH_CTRLC: if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Copy to Clipboard"); + KeyDescSet("Edit/Copy to Clipboard"); else EdCopyToClipboard(doc); break; case CH_CTRLD: if (sc&SCF_KEY_DESC) - SetKeyDesc("Cmd/Jump to File Manager"); + KeyDescSet("Cmd/Jump to File Manager"); else { DocUnlock(doc); FileMgr; @@ -59,31 +59,31 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case CH_CTRLF: if (sc&SCF_SHIFT) { if (sc&SCF_KEY_DESC) - SetKeyDesc("Cmd/Grep Wizard"); + KeyDescSet("Cmd/Find Wizard"); else GrepWiz; } else { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Find & Replace"); + KeyDescSet("Edit/Find & Replace"); else EdFindReplace(doc); } break; case CH_CTRLG: if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/GoTo Line Num"); + KeyDescSet("Edit/GoTo Line Num"); else EdGoToLine(doc); break; case CH_BACKSPACE: // if (sc&SCF_ALT && !(sc&SCF_CTRL)) { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Undo"); + KeyDescSet("Edit/Undo"); else DocUndoRestore(doc); } else { if (sc&SCF_KEY_DESC) - SetKeyDesc("Char/Back Space"); + KeyDescSet("Char/Back Space"); else { DocCaptureUndo(doc); doc_ce=doc->cur_entry; @@ -110,12 +110,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case CH_CTRLI: if (sc&SCF_SHIFT) { if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Indent Out"); + KeyDescSet("Dollar/Indent Out"); else DocPrint(doc,"$$ID,-2$$"); } else { if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Indent In"); + KeyDescSet("Dollar/Indent In"); else DocPrint(doc,"$$ID,2$$"); } @@ -123,15 +123,15 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case '\n': if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Char/Return"); + KeyDescSet("Char/Return"); else - SetKeyDesc("Char/Page Break"); + KeyDescSet("Char/Page Break"); } else EdInsChar(ch,sc,doc); break; case CH_CTRLK: if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Toggle Blinking Text"); + KeyDescSet("Dollar/Toggle Blinking Text"); else if (sc&SCF_SHIFT) DocPrint(doc,"$$BK,0$$"); else @@ -140,9 +140,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case CH_CTRLL: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Code Tools"); + KeyDescSet("Edit/Code Tools"); else - SetKeyDesc("Dollar/Wizard"); + KeyDescSet("Dollar/Wizard"); } else { if (sc&SCF_SHIFT) EdCodeTools(doc); @@ -156,14 +156,14 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case CH_CTRLM: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Cmd/Jump to Notes File"); + KeyDescSet("Cmd/Jump to Notes File"); else - SetKeyDesc("Cmd/Jump to Menu"); + KeyDescSet("Cmd/Jump to Menu"); } else { if (sc&SCF_SHIFT) - Ed("HOME/PersonalNotes.TXT.Z"); + Ed("::/Home/PersonalNotes.TXT.Z"); else { - m=DocRead("HOME/PersonalMenu.TXT.Z"); + m=DocRead("::/Home/PersonalMenu.TXT.Z"); DocMenuDo(m); DocDel(m); } @@ -172,9 +172,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case CH_CTRLO: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Collapse"); + KeyDescSet("Edit/Collapse"); else - SetKeyDesc("Edit/Uncolapse"); + KeyDescSet("Edit/Uncolapse"); } else { if (sc&SCF_SHIFT) DocCollapse(TRUE,doc); @@ -185,21 +185,21 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case CH_CTRLP: if (doc->flags & (DOCF_SUPERSCRIPT_MODE | DOCF_SUBSCRIPT_MODE)) { if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Toggle Super or Sub script"); + KeyDescSet("Dollar/Toggle Super or Sub script"); else { DocPrint(doc,"$$SY,0$$"); doc->flags&=~(DOCF_SUPERSCRIPT_MODE | DOCF_SUBSCRIPT_MODE); } } else if (sc&SCF_SHIFT) { if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Toggle Subscript"); + KeyDescSet("Dollar/Toggle Subscript"); else { DocPrint(doc,"$$SY,3$$"); doc->flags|=DOCF_SUBSCRIPT_MODE; } } else { if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Toggle Superscript"); + KeyDescSet("Dollar/Toggle Superscript"); else { DocPrint(doc,"$$SY,-3$$"); doc->flags|=DOCF_SUPERSCRIPT_MODE; @@ -210,7 +210,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) break; case CH_CTRLR: if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Edit or Create Graphic"); + KeyDescSet("Dollar/Edit or Create Graphic"); else { if (!(doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_WITH_TABS))) { DocUnlock(doc); @@ -229,12 +229,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case CH_CTRLS: if (sc&SCF_SHIFT) { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Find Misspelled"); + KeyDescSet("Edit/Find Misspelled"); else - WSFindMisspelled(doc); + ACFindMisspelled(doc); } else { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Save"); + KeyDescSet("Edit/Save"); else DocWrite(doc); } @@ -242,12 +242,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case CH_CTRLT: if (sc&SCF_SHIFT) { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Single Entry Toggle Plain Text"); + KeyDescSet("Edit/Single Entry Toggle Plain Text"); else DocEntryToggle(doc); } else { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Toggle Plain Text Display"); + KeyDescSet("Edit/Toggle Plain Text Display"); else if (!(doc->flags&DOCF_FORM) || doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_WITH_TABS)) DocFlagsToggle(doc,DOCF_PLAIN_TEXT); @@ -255,7 +255,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) break; case CH_CTRLU: if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Toggle Underline"); + KeyDescSet("Dollar/Toggle Underline"); else if (sc&SCF_SHIFT) DocPrint(doc,"$$UL,0$$"); else @@ -263,13 +263,13 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) break; case CH_CTRLV: if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Paste Clipboard"); + KeyDescSet("Edit/Paste Clipboard"); else EdPasteClipboard(doc); break; case CH_CTRLW: if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Toggle Word Wrap"); + KeyDescSet("Dollar/Toggle Word Wrap"); else if (sc&SCF_SHIFT) DocPrint(doc,"$$WW,0$$"); else @@ -277,19 +277,19 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) break; case CH_CTRLX: if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Cut To Clipboard"); + KeyDescSet("Edit/Cut To Clipboard"); else EdCutToClipboard(doc); break; case CH_CTRLY: if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Delete Line"); + KeyDescSet("Edit/Delete Line"); else EdDelLine(doc); break; case CH_CTRLZ: if (sc&SCF_KEY_DESC) - SetKeyDesc("Dollar/Toggle Inverted Text"); + KeyDescSet("Dollar/Toggle Inverted Text"); else if (sc&SCF_SHIFT) DocPrint(doc,"$$IV,0$$"); else @@ -300,23 +300,23 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (sc&SCF_CTRL) { if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Jump to Word Definition"); + KeyDescSet("Edit/Jump to Word Definition"); else - SetKeyDesc("Edit/Autocomplete Word"); + KeyDescSet("Edit/Autocomplete Word"); } else { - if (WordStat(ON)) { + if (AutoComplete(ON)) { DocUnlock(doc); if (sc&SCF_SHIFT) - WSDDef(ch-'0',Fs); + ACDDef(ch-'0',Fs); else - WSDFillin(ch-'0'); + ACDFillin(ch-'0'); DocLock(doc); } } } } else { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Enter extended-ASCII"); + KeyDescSet("Edit/Enter extended-ASCII"); else { if (++doc->ext_ascii_cnt==1) doc->ext_ascii_val=ch-'0'; @@ -333,12 +333,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (!(sc&SCF_ALT) && sc&SCF_CTRL) { if (sc&SCF_SHIFT) { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/GoTo matching brace"); + KeyDescSet("Edit/GoTo matching brace"); else EdFindPaired(doc,'}','{',FALSE); } else { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/GoTo matching bracket"); + KeyDescSet("Edit/GoTo matching bracket"); else EdFindPaired(doc,']','[',FALSE); } @@ -348,12 +348,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (!(sc&SCF_ALT) && sc&SCF_CTRL) { if (sc&SCF_SHIFT) { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/GoTo matching brace"); + KeyDescSet("Edit/GoTo matching brace"); else EdFindPaired(doc,'{','}',TRUE); } else { if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/GoTo matching bracket"); + KeyDescSet("Edit/GoTo matching bracket"); else EdFindPaired(doc,'[',']',TRUE); } @@ -366,16 +366,16 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (sc&SCF_CTRL) { if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Jump to Src of Sym"); + KeyDescSet("Edit/Jump to Src of Sym"); else - SetKeyDesc("Edit/Autocomplete Sym"); + KeyDescSet("Edit/Autocomplete Sym"); } else { DocUnlock(doc); - if (WordStat(ON)) { + if (AutoComplete(ON)) { if (sc&SCF_SHIFT) - WSMan(sc2-SC_F1+1,Fs); + ACMan(sc2-SC_F1+1,Fs); else - WSFillIn(sc2-SC_F1+1); + ACFillIn(sc2-SC_F1+1); } DocLock(doc); } @@ -384,12 +384,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_F1: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("About"); + KeyDescSet("About"); else - SetKeyDesc("Help"); + KeyDescSet("Help"); } else { if (sc&SCF_SHIFT) - Ed("::/Doc/Splash.TXT.Z"); + Ed("::/Doc/AboutTempleOS.TXT.Z"); else Ed("::/Doc/HelpIndex.TXT.Z"); } @@ -397,9 +397,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_F2: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Play Macro"); + KeyDescSet("Edit/Play Macro"); else - SetKeyDesc("Edit/Macro"); + KeyDescSet("Edit/Macro"); } else { DocUnlock(doc); if (sc&SCF_SHIFT) { @@ -415,9 +415,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_F3: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Find Last"); + KeyDescSet("Edit/Find Last"); else - SetKeyDesc("Edit/Find Next"); + KeyDescSet("Edit/Find Next"); }else { doc->find_replace->scan_fwd=!(sc&SCF_SHIFT); EdFindNext(doc); @@ -426,9 +426,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_F4: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Misc/Insert Directory Name"); + KeyDescSet("Misc/Insert Directory Name"); else - SetKeyDesc("Misc/Insert FileName"); + KeyDescSet("Misc/Insert FileName"); } else { DocUnlock(doc); if (sc&SCF_SHIFT) @@ -445,9 +445,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_F5: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Cmd/Adam Include"); + KeyDescSet("Cmd/Adam Include"); else - SetKeyDesc("Cmd/Run (Execute);Dbg/Go"); + KeyDescSet("Cmd/Run (Execute);Dbg/Go"); } else { if (st2=DocEntryLink(doc,doc_ce)) { st=DocLinkFile(st2); @@ -475,9 +475,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_F6: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("God Doodle"); + KeyDescSet("God Doodle"); else - SetKeyDesc("God Song"); + KeyDescSet("God Song"); } else { //$LK,"::/Adam/God/HSNotes.TXT"$ if (sc & SCF_SHIFT) @@ -489,9 +489,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_F7: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("God Passage"); + KeyDescSet("God Passage"); else - SetKeyDesc("God Word"); + KeyDescSet("God Word"); } else { //$LK,"::/Adam/God/HSNotes.TXT"$ FifoU8Flush(god.fifo); @@ -511,9 +511,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (sc2==SC_END || sc&SCF_CTRL) { if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/GoTo Doc End, Select"); + KeyDescSet("Edit/GoTo Doc End, Select"); else - SetKeyDesc("Edit/GoTo Doc End"); + KeyDescSet("Edit/GoTo Doc End"); } else { while (doc_ce!=doc) { BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT); @@ -524,9 +524,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) } } else if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Cursor Down, Select"); + KeyDescSet("Edit/Cursor Down, Select"); else - SetKeyDesc("Edit/Cursor Down"); + KeyDescSet("Edit/Cursor Down"); } else EdLineDown(doc,sc); break; @@ -535,9 +535,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (sc2==SC_HOME || sc&SCF_CTRL) { if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/GoTo Top of Doc, Select"); + KeyDescSet("Edit/GoTo Top of Doc, Select"); else - SetKeyDesc("Edit/GoTo Top of Doc"); + KeyDescSet("Edit/GoTo Top of Doc"); } else { if (doc_ce==doc) doc_ce=doc_ce->last; while (doc_ce!=doc) { @@ -550,18 +550,18 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) } } else if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Cursor Up, Select"); + KeyDescSet("Edit/Cursor Up, Select"); else - SetKeyDesc("Edit/Cursor Up"); + KeyDescSet("Edit/Cursor Up"); } else EdLineUp(doc,sc); break; case SC_PAGE_DOWN: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Page Down, Select"); + KeyDescSet("Edit/Page Down, Select"); else - SetKeyDesc("Edit/Page Down"); + KeyDescSet("Edit/Page Down"); } else { i=doc_ce->y+doc->win_task->win_height-1; if (doc_ce->type_u8==DOCT_HEX_ED) @@ -580,9 +580,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_PAGE_UP: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Page Up, Select"); + KeyDescSet("Edit/Page Up, Select"); else - SetKeyDesc("Edit/Page Up"); + KeyDescSet("Edit/Page Up"); }else { i=doc_ce->y-(doc->win_task->win_height-1); if (doc_ce->type_u8==DOCT_HEX_ED) @@ -602,12 +602,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_CURSOR_LEFT: if (sc&SCF_KEY_DESC) { if (sc&SCF_CTRL) - SetKeyDesc("Edit/GoTo Start of Line"); + KeyDescSet("Edit/GoTo Start of Line"); else { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Cursor Left, Select"); + KeyDescSet("Edit/Cursor Left, Select"); else - SetKeyDesc("Edit/Cursor Left"); + KeyDescSet("Edit/Cursor Left"); } } else EdCursorLeft(doc,sc); @@ -615,12 +615,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_CURSOR_RIGHT: if (sc&SCF_KEY_DESC) { if (sc&SCF_CTRL) - SetKeyDesc("Edit/GoTo End of Line"); + KeyDescSet("Edit/GoTo End of Line"); else { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Cursor Right, Select"); + KeyDescSet("Edit/Cursor Right, Select"); else - SetKeyDesc("Edit/Cursor Right"); + KeyDescSet("Edit/Cursor Right"); } } else EdCursorRight(doc,sc); @@ -628,9 +628,9 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_DELETE: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Cut To Clipboard"); + KeyDescSet("Edit/Cut To Clipboard"); else - SetKeyDesc("Char/Delete"); + KeyDescSet("Char/Delete"); } else { if (sc&SCF_SHIFT) EdCutToClipboard(doc); @@ -641,11 +641,11 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) case SC_INS: if (sc&SCF_KEY_DESC) { if (sc&SCF_SHIFT) - SetKeyDesc("Edit/Paste Clipboard"); + KeyDescSet("Edit/Paste Clipboard"); else if (sc&SCF_CTRL) - SetKeyDesc("Edit/Copy to Clipboard"); + KeyDescSet("Edit/Copy to Clipboard"); else - SetKeyDesc("Edit/Toggle Overstrike"); + KeyDescSet("Edit/Toggle Overstrike"); } else { if (sc&SCF_SHIFT) EdPasteClipboard(doc); @@ -791,7 +791,7 @@ Bool DocFileEd(I64 _type,U8 *filename, if (!FileNameChk(st2)) doc=NULL; else { - Silent(ON); + Silent; if (Bt(&edf_dof_flags,EDf_BAIL)) //if bail, scan parents result=FileFind(filename,, FUF_JUST_FILES|FUF_Z_OR_NOT_Z|FUF_SCAN_PARENTS); @@ -802,7 +802,7 @@ Bool DocFileEd(I64 _type,U8 *filename, doc=DocRead(filename,flags); doc->desc='Edit'; Silent(old_silent); - Fs->border_src=BDS_ED_FILENAME_PRT; + Fs->border_src=BDS_ED_FILENAME_DRV; } Free(st1); @@ -835,14 +835,19 @@ Bool DocFileEd(I64 _type,U8 *filename, } *_num=doc->cur_entry->y+1; + if (edf_dof_flags&EDF_WAS_WRITE) + result=FALSE; if (!(edf_dof_flags&EDF_BAIL) && DocDo(doc,edf_dof_flags|DOF_DONT_HOME)) { DocLock(doc); doc_e=doc->cur_entry; if (doc_e!=doc) DocEntryRun(doc,doc_e,TRUE); DocUnlock(doc); - if (!(LK_DOC<=_type<=LK_DOC_LINE)) + if (!(LK_DOC<=_type<=LK_DOC_LINE)) { DocWrite(doc); + if (edf_dof_flags&EDF_WAS_WRITE) + result=TRUE; + } } if (!(LK_DOC<=_type<=LK_DOC_LINE)) DocDel(doc); @@ -912,7 +917,7 @@ public I64 EdLinkCvt(U8 *link_st,U8 **_filename=NULL,U8 **_needle_str=NULL, result=-1; else { num=Str2I64(DefineSub(i,"ST_BIBLE_BOOK_LINES")); - filename2=Define("ST_BIBLE_FILE"); + filename2=BIBLE_FILENAME; } break; case LK_FILE_LINE: diff --git a/Adam/DolDoc/DocFile.CPP b/Adam/DolDoc/DocFile.CPP index 0b7a9de..3ea3a8a 100644 --- a/Adam/DolDoc/DocFile.CPP +++ b/Adam/DolDoc/DocFile.CPP @@ -81,7 +81,8 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) cnt++; break; case DOCT_TEXT://$BK,1$Update $LK,"DOCT_TEXT",A="FF:D:/Compiler/Lex.CPP,DOCT_TEXT"$$BK,0$ - if (!(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { + if (!(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && + !(doc_e->type&DOCG_BL_IV_UL)) { cnt+=StrLen(doc_e->tag); if (!(doc->flags & (DOCF_PLAIN_TEXT | DOCF_PLAIN_TEXT_WITH_TABS)) || doc->flags&DOCF_DBL_DOLLARS) @@ -112,7 +113,8 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) for (doc_e=doc->root.next;doc_e!=doc;doc_e=doc_e->next) { if (!Bt(doldoc.type_flags_data,doc_e->type_u8)) { if (doc_e->type_u8==DOCT_TEXT && - !(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { + !(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && + !(doc_e->type&DOCG_BL_IV_UL)) { src=doc_e->tag; i=0; while (ch=*src++) { @@ -187,10 +189,9 @@ public Bool DocWrite(CDoc *doc,Bool prompt=FALSE) {//Store doc to disk. I64 size; U8 *buf; - if (prompt && !DocFormDo(&doc->filename)) - return FALSE; - if (doc->filename.name[0]=='A'&&doc->filename.name[2]==':') - return FALSE; //LK_DOC,LK_DOC_ANCHOR,LK_DOC_FIND,LK_DOC_LINE + if (prompt && !DocFormDo(&doc->filename) || + doc->filename.name[0]=='A' && doc->filename.name[2]==':') + return FALSE; //CANCEL || LK_DOC,LK_DOC_ANCHOR,LK_DOC_FIND,LK_DOC_LINE? buf=DocSave(doc,&size); FileWrite(doc->filename.name,buf,size,0,doc->file_attr); Free(buf); @@ -440,13 +441,13 @@ public Bool DocType(CDoc *doc=NULL,U8 *filename,I64 trailing_new_lines=1) DocDel(doc2); result=TRUE; } else if (FilesFindMatch(filename,"*.BMP.Z")) { - DocBMPFile(doc,filename,FALSE); + DocBMP(doc,filename,,FALSE); result=TRUE; } else if (FilesFindMatch(filename,"*.BMP;*.bmp")) { - DocBMPFile(doc,filename,TRUE); + DocBMP(doc,filename,,TRUE); result=TRUE; } else if (FilesFindMatch(filename,"*.GRA*")) { - DocGRAFile(doc,filename); + DocGRA(doc,filename); result=TRUE; } if (result) diff --git a/Adam/DolDoc/DocInit.CPP b/Adam/DolDoc/DocInit.CPP index 8593eff..67b4644 100644 --- a/Adam/DolDoc/DocInit.CPP +++ b/Adam/DolDoc/DocInit.CPP @@ -14,8 +14,8 @@ U0 DocInit() "T\0A\0D\0HTML\0LE\0LM\0RE\0RM\0BI\0BP\0RT\0SX\0SY\0SCX\0U\0" "LC\0LA\0RC\0RA\0TC\0LX\0CX\0RX\0TY\0CY\0BY\0" "HL\0WW\0BK\0IV\0SEL\0UL\0" - "PRY\0MRX\0WR\0L\0X\0Q\0FST\0B\0S\0BD\0C\0CA\0RD\0P\0TRM\0Z\0H\0" - "TR\0LS\0SK\0PU\0SIF\0HS\0FS\0NC\0DD\0UD\0"); + "PRY\0MRX\0WR\0L\0X\0Q\0FST\0B\0S\0BD\0C\0CA\0RD\0UD\0P\0TRM\0Z\0H\0" + "TR\0LS\0SK\0PU\0SIF\0HS\0FS\0NC\0DD\0"); DefineLstLoad("ST_LINK_TYPES", "FI\0FA\0FF\0FL\0MN\0PI\0PF\0PL\0BF\0DF\0HI\0AD\0AI\0AA\0AF\0AL\0"); diff --git a/Adam/DolDoc/DocMacro.CPP b/Adam/DolDoc/DocMacro.CPP index ce19336..fc9da52 100644 --- a/Adam/DolDoc/DocMacro.CPP +++ b/Adam/DolDoc/DocMacro.CPP @@ -168,7 +168,7 @@ I64 PopUpMacroMenu() "\n\n\n$$GREEN$$SHIFT-F2$$FG$$ will play macro.\n"); doc->flags|=DOCF_MIN_SIZE | DOCF_FORM; StrPrint(buf,"DocMenuDo(%d);",doc); - sys_macro_util_task=Spawn(&SrvUserCmdLine,NULL,"Macro Popup",,Fs); + sys_macro_util_task=Spawn(&SrvCmdLine,NULL,"Macro Popup",,Fs); Fs->popup_task=sys_macro_util_task; LBts(&sys_macro_util_task->display_flags,DISPLAYf_WIN_ON_TOP); tempc=TaskExe(sys_macro_util_task,Fs,buf, @@ -189,7 +189,7 @@ U0 MacroTask(I64) sys_macro_repeat_n=1; do { i=PopUpMacroMenu; - WinRefocus; + WinRefocus(sys_focus_task); switch (i) { case SM_RECORD: LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); diff --git a/Adam/DolDoc/DocMain.CPP b/Adam/DolDoc/DocMain.CPP index 8dd5fd2..767b9d5 100644 --- a/Adam/DolDoc/DocMain.CPP +++ b/Adam/DolDoc/DocMain.CPP @@ -13,7 +13,7 @@ public Bool Ed(U8 *link_st,I64 edf_dof_flags=0) case LK_DEF: doc=DocNew; doc->desc='DictDef'; - WSDDefsPut(doc,filename,num); + ACDDefsPut(doc,filename,num); goto ej_doc; case LK_HELP_INDEX: doc=DocNew; @@ -24,11 +24,12 @@ ej_doc: DocDo(doc); DocDel(doc); } - result=TRUE; + if (!(edf_dof_flags&EDF_WAS_WRITE)) + result=TRUE; break; default: if (IsRaw) - EdLite(filename,num); + result=EdLite(filename,num,edf_dof_flags); else { cont=TRUE; if (!(edf_dof_flags&EDF_BAIL) && !(LK_DOC<=i<=LK_DOC_LINE) && @@ -44,11 +45,11 @@ ej_doc: return result; } -public Bool Plain(U8 *filename) +public Bool Plain(U8 *filename,I64 edf_dof_flags=0) {//Edit document in plain text mode, so dollar signs are not special. Bool result; U8 *st=MStrPrint("PI:%s",filename); - result=Ed(st); + result=Ed(st,edf_dof_flags); Free(st); return result; } @@ -97,7 +98,7 @@ public U8 *DocLinkFile(U8 *link_st,CTask *mem_task=NULL) Free(st); break; case LK_BIBLE_FIND: - result=StrNew(Define("ST_BIBLE_FILE"),mem_task); + result=StrNew(BIBLE_FILENAME,mem_task); break; } Free(filename); @@ -148,7 +149,7 @@ public U0 DocTermNew() CDoc *pdoc=DocNew; pdoc->right_click_link=&TermRightClickLink; pdoc->max_entries=4096; - Fs->border_src=BDS_CUR_PRT; + Fs->border_src=BDS_CUR_DRV; pdoc->desc='Term'; Fs->put_doc=Fs->display_doc=pdoc; Fs->border_doc=DocBorderNew(pdoc); @@ -531,7 +532,7 @@ I64 TermRightClickLink(CDoc *doc,CDocEntry *doc_e) } "AutoFile(\"%s\");\n$$PT$$$$FG$$$$BG$$",st; WinZBufUpdate; - AutoStr("%F\n",st); + AutoFile(st); result=TRUE; break; } diff --git a/Adam/DolDoc/DocNew.CPP b/Adam/DolDoc/DocNew.CPP index a479ddf..fa2eb7c 100644 --- a/Adam/DolDoc/DocNew.CPP +++ b/Adam/DolDoc/DocNew.CPP @@ -265,8 +265,9 @@ U0 DocFormFwd(CDoc *doc,Bool giveup=FALSE) CDocEntry *doc_e=doc->cur_entry,*doc_e2=doc_e; if (doc->flags & DOCF_FORM) { if (doc_e==doc) goto ff_recover; - while (!Bt(doldoc.type_flags_form,doc_e->type_u8) || - doc_e->de_flags&DOCEF_SKIP_IN_FORM) { + while (!Bt(doldoc.type_flags_form,doc_e->type_u8) && + !(doc_e->de_flags&DOCEF_LINK) || + doc_e->de_flags&DOCEF_SKIP_IN_FORM) { doc_e=doc_e->next; if (doc_e==doc) { ff_recover: @@ -292,8 +293,9 @@ U0 DocFormBwd(CDoc *doc,Bool giveup=FALSE) { CDocEntry *doc_e=doc->cur_entry,*doc_e2=doc_e; if (doc->flags & DOCF_FORM) { - while (!Bt(doldoc.type_flags_form,doc_e->type_u8) || - doc_e->de_flags&DOCEF_SKIP_IN_FORM) { + while (!Bt(doldoc.type_flags_form,doc_e->type_u8) && + !(doc_e->de_flags&DOCEF_LINK) || + doc_e->de_flags&DOCEF_SKIP_IN_FORM) { doc_e=doc_e->last; if (doc_e==doc) { doc->cur_data_col=0; diff --git a/Adam/DolDoc/DocPopUp.CPP b/Adam/DolDoc/DocPopUp.CPP index 9d4ac57..839a363 100644 --- a/Adam/DolDoc/DocPopUp.CPP +++ b/Adam/DolDoc/DocPopUp.CPP @@ -302,8 +302,8 @@ public Bool DocDo(CDoc *doc,I64 dof_flags=0) Free(old_task_title); DocDel(bdoc); if (dof_flags&DOF_MIN_SIZE) { - SetWinHorz(old_left,old_right); - SetWinVert(old_top,old_bottom); + WinHorz(old_left,old_right); + WinVert(old_top,old_bottom); } Preempt(old_preempt); return result; @@ -403,32 +403,7 @@ md_restart: return result; } -#help_index "Task/Srv" -public I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL) -{//Execute code text in PopUp win task. - I64 result; - CSrvCmd *tempc; - Bool old_preempt=Preempt(OFF); - CTask *task=Spawn(&SrvUserCmdLine,NULL,"System",,parent); - if (!parent) { - TaskExe(task,parent,buf,1<popup_task=task; - tempc=TaskExe(task,parent,buf,1<popup_task=NULL; - Kill(task); - if (_pu_task) *_pu_task=NULL; - Preempt(old_preempt); - return result; - } -} - -#help_index "DolDoc;Task/Srv" +#help_index "DolDoc;Task/Srv/Exe" public I64 PopUpEd(U8 *filename,CTask *parent=NULL,CTask **_pu_task=NULL) {//Create PopUp win task and edit a doc. U8 *st=MStrPrint("Ed(\"%Q\");",filename); @@ -441,7 +416,7 @@ public I64 PopUpEd(U8 *filename,CTask *parent=NULL,CTask **_pu_task=NULL) public CTask *PopUpViewDoc(CDoc *doc,I64 dof_flags=0) {//Pass doc to PopUp win task for viewing. U8 *buf=MStrPrint("Preempt(ON);DocDo(0x%X,0x%X);",doc,dof_flags); - CTask *task=Spawn(&SrvUserCmdLine,NULL,"View",,Fs); + CTask *task=Spawn(&SrvCmdLine,NULL,"View",,Fs); TaskExe(task,NULL,buf,1<flags|=DOCF_MIN_SIZE | DOCF_FORM; - return SrvUser("DocMenuDo(0x%X,0x%X);",doc,dof_flags); + return PopUpPrint("DocMenuDo(0x%X,0x%X);",doc,dof_flags); } public Bool PopUpForm(U8 *_d,U8 *class_name=lastclass,I64 dof_flags=DOF_MIN_SIZE, U8 *header=NULL,U8 *footer=NULL) {//See $LK,"::/Demo/DolDoc/Form.CPP"$ and $LK,"::/Demo/LastClass.CPP"$. - return SrvUser("DocFormDo(0x%X,0x%X,0x%X,0x%X,0x%X);",_d,class_name, + return PopUpPrint("DocFormDo(0x%X,0x%X,0x%X,0x%X,0x%X);",_d,class_name, dof_flags,header,footer); } @@ -727,7 +702,7 @@ public F64 PopUpRangeF64Log(F64 lo,F64 hi,I64 steps, return PopUpRangeF64Exp(lo,hi,Exp(Ln(hi/lo)/(steps-1)),fmt,header,footer); } -#help_index "Task/Srv" +#help_index "Task/Srv/Exe" public I64 AdamFile(U8 *filename,Bool warn_ext=TRUE) {//Tell adam task to compile and run a file. Bool okay=TRUE; @@ -875,8 +850,8 @@ U0 DrawIt(CTask *task,CDC *dc) } i=(17*PU_SPACING+FONT_WIDTH-1)/FONT_WIDTH; if (doc->max_x>i) i=doc->max_x; - SetWinHorz(task->win_left,task->win_left+i,task); - SetWinVert(task->win_top,task->win_top+doc->max_y+(17*PU_SPACING+FONT_WIDTH-1)/FONT_WIDTH,task); + WinHorz(task->win_left,task->win_left+i,task); + WinVert(task->win_top,task->win_top+doc->max_y+(17*PU_SPACING+FONT_WIDTH-1)/FONT_WIDTH,task); } I64 DitherColorDo(U8 *header=NULL) diff --git a/Adam/DolDoc/DocRecalc2a.CPP b/Adam/DolDoc/DocRecalcA.CPP similarity index 95% rename from Adam/DolDoc/DocRecalc2a.CPP rename to Adam/DolDoc/DocRecalcA.CPP index e2d5c6e..362a766 100644 --- a/Adam/DolDoc/DocRecalc2a.CPP +++ b/Adam/DolDoc/DocRecalcA.CPP @@ -169,23 +169,23 @@ public U0 DocPrintAtomic(CDoc *doc,U8 *fmt,...) #help_index "DolDoc/Task" U0 DocUpdateTaskDocs(CTask *task) {//This is called from $LK,"GrUpdateWins",A="MN:GrUpdateWins"$() by the winmgr at 30fps. - CPrt *p; + CDrv *dv; CDoc *doc; CD3I64 saved_scroll; Bool old_preempt=Preempt(OFF); I64 border_attr; - if (task->border_src==BDS_CUR_PRT && task->cur_prt) { - border_attr=task->cur_prt->text_attr; + if (task->border_src==BDS_CUR_DRV && task->cur_dv) { + border_attr=task->cur_dv->text_attr; if (border_attr&15!=border_attr>>4) task->border_attr=border_attr; } if (task->title_src==TTS_TASK_NAME) StrCpy(task->task_title,task->task_name); if ((doc=DocDisplay(task)) && !(doc->flags&DOCF_DONT_SHOW)) { - if (task->border_src==BDS_ED_FILENAME_PRT) + if (task->border_src==BDS_ED_FILENAME_DRV) try { - if (p=Drv2Prt(*doc->filename.name)) { - border_attr=p->text_attr; + if (dv=Let2Drv(*doc->filename.name)) { + border_attr=dv->text_attr; if (border_attr&15!=border_attr>>4) task->border_attr=border_attr; } diff --git a/Adam/DolDoc/DocRecalc2b.CPP b/Adam/DolDoc/DocRecalcB.CPP similarity index 99% rename from Adam/DolDoc/DocRecalc2b.CPP rename to Adam/DolDoc/DocRecalcB.CPP index 6853488..449eecc 100644 --- a/Adam/DolDoc/DocRecalc2b.CPP +++ b/Adam/DolDoc/DocRecalcB.CPP @@ -294,7 +294,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) dc=DCAlias(gr.dc2,win_task); //Necessary for sprites break; case DOC_RECALC_TO_SCREEN: - if (doc->refresh_cnt++%(ToI64(winmgr.fps/10)+1) && + if (doc->updates_cnt++%(ToI64(winmgr.fps/10)+1) && !Bt(&doc->flags,DOCf_DO_FULL_REFRESH) && !(doc->flags&DOCF_BWD_MOVEMENT)) full_refresh=FALSE; @@ -1127,26 +1127,26 @@ rc_skip: i=left+doc->max_x-doc->min_x; if (i>TEXT_COLS-1) i=TEXT_COLS-1; - SetWinHorz(left,i,win_task); + WinHorz(left,i,win_task); if (top<0) top=0; i=top+doc->max_y-doc->min_y; if (i>TEXT_ROWS-1) i=TEXT_ROWS-1; - SetWinVert(top,i,win_task); + WinVert(top,i,win_task); } else { if (left<1) left=1; i=left+doc->max_x-doc->min_x; if (i>TEXT_COLS-2) i=TEXT_COLS-2; - SetWinHorz(left,i,win_task); + WinHorz(left,i,win_task); if (top<1) top=1; i=top+doc->max_y-doc->min_y; if (i>TEXT_ROWS-2) i=TEXT_ROWS-2; - SetWinVert(top,i,win_task); + WinVert(top,i,win_task); } } if (find_cursor) { diff --git a/Adam/Dsk/Dsk2.CPP b/Adam/Dsk/ADsk.CPP similarity index 52% rename from Adam/Dsk/Dsk2.CPP rename to Adam/Dsk/ADsk.CPP index e0fa865..e14857a 100644 --- a/Adam/Dsk/Dsk2.CPP +++ b/Adam/Dsk/ADsk.CPP @@ -1,4 +1,4 @@ -#include "Dsk2a" -#include "Dsk2b" +#include "ADskA" +#include "ADskB" #include "ChkDsk" #include "FileMgr" diff --git a/Adam/Dsk/Dsk2a.CPP b/Adam/Dsk/ADskA.CPP similarity index 85% rename from Adam/Dsk/Dsk2a.CPP rename to Adam/Dsk/ADskA.CPP index c4b30fc..724cd6b 100644 --- a/Adam/Dsk/Dsk2a.CPP +++ b/Adam/Dsk/ADskA.CPP @@ -7,13 +7,13 @@ public U8 *DBlk(I64 blk,Bool write=FALSE) //See $LK,"::/Demo/Dsk/DskRaw.CPP"$. U8 *buf=MAlloc(BLK_SIZE); - RBlks(Fs->cur_prt,buf,blk,1); + RBlks(Fs->cur_dv,buf,blk,1); DocD(buf,BLK_SIZE); if (write) { "Edit and press to write or \n"; if (View) { "Write\n"; - WBlks(Fs->cur_prt,buf,blk,1); + WBlks(Fs->cur_dv,buf,blk,1); } } return buf; @@ -25,16 +25,35 @@ public U8 *DCluster(I64 c,Bool write=FALSE,I64 num=0) //be written when you press . //See $LK,"::/Demo/Dsk/DskRaw.CPP"$. //Do $LK,"Dir",A="MN:Dir"$("*",TRUE); to get cluster numbers of files. - U8 *buf=MAlloc(Fs->cur_prt->spc<cur_prt,c,num); - RClusters(Fs->cur_prt,buf,c,1); + U8 *buf=MAlloc(Fs->cur_dv->spc<cur_dv,c,num); + RClusters(Fs->cur_dv,buf,c,1); "Cluster:%X\n",c; - DocD(buf,Fs->cur_prt->spc<cur_dv->spc< to write or \n"; if (View) { "Write\n"; - WClusters(Fs->cur_prt,buf,c,1); + WClusters(Fs->cur_dv,buf,c,1); + } + } + return buf; +} + +public U8 *Dump(U8 *filename,Bool write=FALSE) +{//Dump file. Optionally, write. +//If you set write to TRUE, the file will +//be written when you press . + U8 *buf; + I64 size; + if (buf=FileRead(filename,&size)) { + DocD(buf,size); + if (write) { + "Edit and press to write or \n"; + if (View) { + "Write\n"; + FileWrite(filename,buf,size); + } } } return buf; @@ -218,7 +237,7 @@ public I64 DelTree(U8 *files_find_mask,U8 *fu_flags=NULL) U0 TouchFile(U8 *filename,U8 *attr,CDate cdt=MIN_I64) { - CPrt *p=Drv2Prt(*filename); + CDrv *dv=Let2Drv(*filename); CDirEntry de; U8 *cur_dir=StrNew(filename), buf[136]; @@ -236,7 +255,7 @@ U0 TouchFile(U8 *filename,U8 *attr,CDate cdt=MIN_I64) de.datetime=Now; else de.datetime=cdt; - DirNew(p,cur_dir,&de,FALSE); + DirNew(dv,cur_dir,&de,FALSE); } } else PrintErr("File not found.\n"); @@ -279,69 +298,69 @@ public I64 FF(U8 *files_find_mask,U8 *fu_flags=NULL) return cnt; } -public U0 SetDrvTextAttr(U8 drv_let,U8 attr) +public U0 DrvTextAttrSet(U8 drv_let,U8 attr) {//Set color of the window border text //for when this drive is the current drive. - CPrt *p; + CDrv *dv; try { - p=Drv2Prt(drv_let); - p->text_attr=attr; + dv=Let2Drv(drv_let); + dv->text_attr=attr; } catch Fs->catch_except=TRUE; } -I64 RedSeaFSUnusedDrvSpace(U8 drv_let=0) +I64 RedSeaUnusedDrvSpace(U8 drv_let=0) { - CPrt *p=Drv2Prt(drv_let); + CDrv *dv=Let2Drv(drv_let); I64 result=0,i,l; U8 *bitmap; try { - l=(p->size+p->spc-1)/p->spc; + l=(dv->size+dv->spc-1)/dv->spc; i=((l+7)>>3+BLK_SIZE-1)>>BLK_SIZE_BITS; bitmap=MAlloc(i<map1,i); + RBlks(dv,bitmap,dv->map1,i); for (i=0;ispc; + DrvUnlock(dv); + return result*BLK_SIZE*dv->spc; } I64 FAT32UnusedDrvSpace(U8 drv_let=0) { - CPrt *p=Drv2Prt(drv_let); + CDrv *dv=Let2Drv(drv_let); I64 result=0,i,l; U32 *bitmap; try { - l=(p->size+p->spc-1)/p->spc; + l=(dv->size+dv->spc-1)/dv->spc; i=(l*4+BLK_SIZE-1)>>BLK_SIZE_BITS; bitmap=MAlloc(i<map1,i); + RBlks(dv,bitmap,dv->map1,i); for (i=0;ispc; + DrvUnlock(dv); + return result*BLK_SIZE*dv->spc; } public I64 UnusedDrvSpace(U8 drv_let=0) {//Returns unused size in bytes. - CPrt *p=Drv2Prt(drv_let),*p_old=Fs->cur_prt; + CDrv *dv=Let2Drv(drv_let),*old_dv=Fs->cur_dv; U8 *old_dir=StrNew(Fs->cur_dir); I64 result=0; Drv(drv_let); - switch (p->type) { - case PT_REDSEA: - result=RedSeaFSUnusedDrvSpace(drv_let); + switch (dv->type) { + case DVT_REDSEA: + result=RedSeaUnusedDrvSpace(drv_let); break; - case PT_FAT32: + case DVT_FAT32: result=FAT32UnusedDrvSpace(drv_let); break; default: PrintErr("File System Not Supported\n"); } - Drv(Prt2Drv(p_old)); + Drv(Drv2Let(old_dv)); Cd(old_dir); Free(old_dir); return result; @@ -352,12 +371,12 @@ I64 Size1(CDirEntry *tempde,I64 *_fuf_flags,I64 round_to) { U8 buf[BLK_SIZE]; I64 result=0,i; - CPrt *p; + CDrv *dv; while (tempde) { if ((i=tempde->size) && Bt(_fuf_flags,FUf_EXPAND) && !(tempde->attr&RS_ATTR_DIR) && FileAttr(tempde->name)&RS_ATTR_COMPRESSED) { - p=Drv2Prt(*tempde->full_name); - RBlks(p,buf,Cluster2Blk(p,tempde->cluster),1); + dv=Let2Drv(*tempde->full_name); + RBlks(dv,buf,Cluster2Blk(dv,tempde->cluster),1); i=(&buf)(CArcCompress *)->expanded_size; } if (round_to) diff --git a/Adam/Dsk/Dsk2b.CPP b/Adam/Dsk/ADskB.CPP similarity index 81% rename from Adam/Dsk/Dsk2b.CPP rename to Adam/Dsk/ADskB.CPP index 60a8460..d9d3ba6 100644 --- a/Adam/Dsk/Dsk2b.CPP +++ b/Adam/Dsk/ADskB.CPP @@ -62,25 +62,25 @@ public CDirEntry *DirTreeUnserialize(U8 *src) #help_index "Install;File/Cmd Line (Typically);Cmd Line (Typically)" -#define ROUND_PRT_TO (63*255) -#define PRT_HEADER 63 +#define ROUND_DRV_TO (63*255) +#define DRV_HEADER 63 -class CPlannedPrt +class CPlannedDrv { - CPlannedPrt *next,*last; + CPlannedDrv *next,*last; I64 size; Bool pri; }; //Available to assist in writing scripts. -I64 prt_dsk_dsk_size; +I64 drv_dsk_dsk_size; public U0 PrtDsk(U8 drv_let=0) {//Partition the disk containing partition drv_let. //drv_let=0 means add new drive that //is not already mounted. - CBlkDev *bdev; - CPlannedPrt root,*temppp; + CBlkDev *bd; + CPlannedDrv root,*temppp; CMasterBoot mbr; Bool pri=TRUE; I64 ext_base,drv_let2,pri_cnt=0, @@ -99,7 +99,7 @@ public U0 PrtDsk(U8 drv_let=0) if (drv_let) try - Drv2BlkDev(drv_let); + Let2BlkDev(drv_let); catch { drv_let=0; Fs->catch_except=TRUE; @@ -110,18 +110,18 @@ public U0 PrtDsk(U8 drv_let=0) return; } - bdev=Drv2BlkDev(drv_let); - if (!bdev || bdev->type!=BDT_ATA) + bd=Let2BlkDev(drv_let); + if (!bd || bd->type!=BDT_ATA) return; - prt_dsk_dsk_size=bdev->max_blk+1; + drv_dsk_dsk_size=bd->max_blk+1; QueInit(&root); - drv_let2=bdev->first_drv_let; - remaining=FloorU64(bdev->max_blk+1,ROUND_PRT_TO); - while (FloorU64(remaining,ROUND_PRT_TO)>=ROUND_PRT_TO) { - temppp=MAlloc(sizeof(CPlannedPrt)); + drv_let2=bd->first_drv_let; + remaining=FloorU64(bd->max_blk+1,ROUND_DRV_TO); + while (FloorU64(remaining,ROUND_DRV_TO)>=ROUND_DRV_TO) { + temppp=MAlloc(sizeof(CPlannedDrv)); do { "$$RED$$Partition %C$$FG$$\n",drv_let2; temppp->pri=FALSE; @@ -136,10 +136,10 @@ public U0 PrtDsk(U8 drv_let=0) pri=FALSE; } "Blocks Remaining:%d (0x%X)\n", - remaining-PRT_HEADER,remaining-PRT_HEADER; + remaining-DRV_HEADER,remaining-DRV_HEADER; temppp->size=CeilU64(GetI64("Size in Blocks :", - remaining-PRT_HEADER)+PRT_HEADER,ROUND_PRT_TO); - } while (!(ROUND_PRT_TO<=temppp->size<=FloorU64(remaining,ROUND_PRT_TO))); + remaining-DRV_HEADER)+DRV_HEADER,ROUND_DRV_TO); + } while (!(ROUND_DRV_TO<=temppp->size<=FloorU64(remaining,ROUND_DRV_TO))); QueIns(temppp,root.last); remaining-=temppp->size; drv_let2++; @@ -147,7 +147,7 @@ public U0 PrtDsk(U8 drv_let=0) "\n\n!!! Repartition Drive !!!\n\n"; temppp=root.next; - drv_let2=bdev->first_drv_let; + drv_let2=bd->first_drv_let; while (temppp!=&root) { "Drive %C:%08X ",drv_let2,temppp->size; if (temppp->pri) @@ -160,7 +160,7 @@ public U0 PrtDsk(U8 drv_let=0) if (!AreYouSure) goto pd_done; - remaining=FloorU64(bdev->max_blk+1,ROUND_PRT_TO)-ROUND_PRT_TO; + remaining=FloorU64(bd->max_blk+1,ROUND_DRV_TO)-ROUND_DRV_TO; temppp=root.next; MemSet(&mbr,0,BLK_SIZE); mbr.signature=0xAA55; @@ -172,8 +172,8 @@ public U0 PrtDsk(U8 drv_let=0) mbr.p[i].type=1; //Will get set different. mbr.p[i].end_head=0xFE; mbr.p[i].end_cyl=0xFFFF; - mbr.p[i].offset=PRT_HEADER+offset; - mbr.p[i].size=temppp->size-PRT_HEADER; + mbr.p[i].offset=DRV_HEADER+offset; + mbr.p[i].size=temppp->size-DRV_HEADER; offset+=temppp->size; remaining-=temppp->size; temppp=temppp->next; @@ -190,7 +190,7 @@ public U0 PrtDsk(U8 drv_let=0) mbr.p[i].size=remaining; ext_base=offset; } - ATAWriteBlks(bdev,&mbr,0,1); + ATAWriteBlks(bd,&mbr,0,1); while (temppp!=&root) { start_offset=offset; @@ -203,8 +203,8 @@ public U0 PrtDsk(U8 drv_let=0) mbr.p[0].type=1; //Will get set different. mbr.p[0].end_head=0xFE; mbr.p[0].end_cyl=0xFFFF; - mbr.p[0].offset=PRT_HEADER; - mbr.p[0].size=temppp->size-PRT_HEADER; + mbr.p[0].offset=DRV_HEADER; + mbr.p[0].size=temppp->size-DRV_HEADER; offset+=temppp->size; temppp=temppp->next; if (temppp!=&root) { @@ -217,12 +217,12 @@ public U0 PrtDsk(U8 drv_let=0) mbr.p[1].offset=offset-ext_base; mbr.p[1].size=temppp->size; } - ATAWriteBlks(bdev,&mbr,start_offset,1); + ATAWriteBlks(bd,&mbr,start_offset,1); } - bdev->flags&=~(BDF_INITIALIZED | BDF_INIT_IN_PROGRESS); - BlkDevAdd(bdev,FALSE,TRUE); - for (i=bdev->first_drv_let;iflags&=~(BDF_INITIALIZED | BDF_INIT_IN_PROGRESS); + BlkDevAdd(bd,FALSE,TRUE); + for (i=bd->first_drv_let;isize+p->spc-1)/p->spc; + s=(dv->size+dv->spc-1)/dv->spc; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; @@ -253,7 +253,7 @@ U0 RedSeaFSDrvView(U8 drv_let=0) try { i=((s+7)>>3+BLK_SIZE-1)>>BLK_SIZE_BITS; bitmap=MAlloc(i<map1,i); + RBlks(dv,bitmap,dv->map1,i); i=0; for (y=0;ysize+p->spc-1)/p->spc; + s=(dv->size+dv->spc-1)/dv->spc; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; @@ -295,7 +295,7 @@ U0 FAT32DrvView(U8 drv_let=0) try { i=(s*4+BLK_SIZE-1)>>BLK_SIZE_BITS; bitmap=MAlloc(i<map1,i); + RBlks(dv,bitmap,dv->map1,i); i=0; for (y=0;ycur_prt; + CDrv *dv=Let2Drv(drv_let),*old_dv=Fs->cur_dv; Drv(drv_let); - switch (p->type) { - case PT_REDSEA: - RedSeaFSDrvView(drv_let); + switch (dv->type) { + case DVT_REDSEA: + RedSeaDrvView(drv_let); break; - case PT_FAT32: + case DVT_FAT32: FAT32DrvView(drv_let); break; default: PrintErr("File System Not Supported\n"); } - Drv(Prt2Drv(p_old)); + Drv(Drv2Let(old_dv)); } public U0 DskView(U8 drv_let=0) @@ -343,8 +343,8 @@ public U0 DskView(U8 drv_let=0) h=Fs->pix_width, v=Fs->pix_height, radius; - CPrt *p; - CBlkDev *bdev=Drv2BlkDev(drv_let); + CDrv *dv; + CBlkDev *bd=Let2BlkDev(drv_let); CDC *dc=DCAlias; F64 sect_start,sect_end; @@ -360,11 +360,11 @@ public U0 DskView(U8 drv_let=0) GrCircle(dc,h>>1,v>>1,radius); j=1; - for (i=0;ibdev && p->type) { - sect_start=-(p->offset*2*ã/(bdev->max_blk+1)); - sect_end =-((p->offset+p->size)*2*ã/(bdev->max_blk+1)); + for (i=0;ibd && dv->type) { + sect_start=-(dv->base_offset*2*ã/(bd->max_blk+1)); + sect_end =-((dv->base_offset+dv->size)*2*ã/(bd->max_blk+1)); dc->color=BLACK; GrLine(dc,h>>1,v>>1, h>>1+radius*Cos(sect_start), @@ -374,8 +374,8 @@ public U0 DskView(U8 drv_let=0) v>>1+radius*Sin(sect_end)); dc->color=j; - GrPrint(dc,0,v-FONT_HEIGHT*j,"%C %-8Z",Prt2Drv(p), - p->type.u16[0],"ST_PRT_TYPES"); + GrPrint(dc,0,v-FONT_HEIGHT*j,"%C %-8Z",Drv2Let(dv), + dv->type.u16[0],"ST_DRV_TYPES"); GrFloodFill(dc, h>>1+(radius-4)*Cos((sect_start+sect_end)/2), v>>1+(radius-4)*Sin((sect_start+sect_end)/2),FALSE); diff --git a/Adam/Dsk/ChkDsk.CPP b/Adam/Dsk/ChkDsk.CPP index 89abdbd..01d6e8f 100644 --- a/Adam/Dsk/ChkDsk.CPP +++ b/Adam/Dsk/ChkDsk.CPP @@ -11,32 +11,30 @@ Bool ChkDskConfirm(Bool *_fix,Bool *_confirm) return *_fix; } -I64 RedSeaFSChkDskLst(CDirEntry *tempde1,U8 *bits,U8 *bits2,I64 size,I64 bpc) +I64 RedSeaChkDskLst(CDrv *dv,CDirEntry *tempde1,U8 *bits,U8 *bits2,I64 size,I64 bpc) { CDirEntry *tempde2; I64 i,j,errs=0; while (tempde1) { tempde2=tempde1->next; - if (tempde1->attr & RS_ATTR_DIR) { - if (tempde1->sub) - errs+=RedSeaFSChkDskLst(tempde1->sub,bits,bits2,size,bpc); - } + if (tempde1->attr & RS_ATTR_DIR && tempde1->sub) + errs+=RedSeaChkDskLst(dv,tempde1->sub,bits,bits2,size,bpc); j=(tempde1->size+bpc-1)/bpc; for (i=0;icluster>size) { + if (i+tempde1->cluster-dv->data_area>size) { PrintErr("Invalid Cluster:%s Cluster:%X\n",tempde1->full_name, - i+tempde1->cluster); + i+tempde1->cluster); errs++; break; } - if (LBts(bits,i+tempde1->cluster)) { + if (LBts(bits,i+tempde1->cluster-dv->data_area)) { PrintErr("Dbl Alloc:%s Cluster:%X\n",tempde1->full_name, - i+tempde1->cluster); + i+tempde1->cluster); errs++; } - if (!LBtr(bits2,i+tempde1->cluster)) { + if (!LBtr(bits2,i+tempde1->cluster-dv->data_area)) { PrintErr("UnAlloc:%s Cluster:%X\n",tempde1->full_name, - i+tempde1->cluster); + i+tempde1->cluster); errs++; } } @@ -46,74 +44,72 @@ I64 RedSeaFSChkDskLst(CDirEntry *tempde1,U8 *bits,U8 *bits2,I64 size,I64 bpc) return errs; } -I64 RedSeaFSChkDsk(U8 drv_let,Bool *_fix,Bool *_confirm) +I64 RedSeaChkDsk(U8 drv_let,Bool *_fix,Bool *_confirm) { I64 i,j,bpc,size,errs=0; - CPrt *p=Drv2Prt(drv_let),*old_prt=Fs->cur_prt; - U8 *files_find_mask=MStrPrint("%c:/*",Prt2Drv(p)), + CDrv *dv=Let2Drv(drv_let),*old_dv=Fs->cur_dv; + U8 *files_find_mask=MStrPrint("%c:/*",Drv2Let(dv)), *old_dir=StrNew(Fs->cur_dir), *bits,*bits2; CDirEntry *ptr,*ptr2; Drv(drv_let); "Scanning...\n"; - size=(p->size-(p->data-p->offset))/p->spc; - bpc=p->spc<size-(dv->data_area-dv->base_offset))/dv->spc; + bpc=dv->spc<>3); bits2=CAlloc((size+7)>>3+BLK_SIZE); - RBlks(p,bits2,p->map1,((size+7)>>3+BLK_SIZE-1)>>BLK_SIZE_BITS); + RBlks(dv,bits2,dv->map1,((size+7)>>3+BLK_SIZE-1)>>BLK_SIZE_BITS); //Get Root Dir size ptr2=MAlloc(bpc); - RClusters(p,ptr2,p->root_cluster,1); + RBlks(dv,ptr2,dv->root_cluster,1); ptr=ptr2(U8 *)-offset(CDirEntry.start); j=(ptr->size+bpc-1)/bpc; Free(ptr2); for (i=0;iroot_cluster>size) { - PrintErr("Invalid Cluster: RootDir Cluster:%X\n",i+p->root_cluster); + if (i+dv->root_cluster-dv->data_area>size) { + PrintErr("Invalid Cluster: RootDir Cluster:%X\n",i+dv->root_cluster); errs++; break; } - if (LBts(bits,i+p->root_cluster)) { - PrintErr("Dbl Alloc: RootDir Cluster:%X\n",i+p->root_cluster); + if (LBts(bits,i+dv->root_cluster-dv->data_area)) { + PrintErr("Dbl Alloc: RootDir Cluster:%X\n",i+dv->root_cluster); errs++; } - if (!LBtr(bits2,i+p->root_cluster)) { - PrintErr("UnAlloc: RootDir Cluster:%X\n",i+p->root_cluster); + if (!LBtr(bits2,i+dv->root_cluster-dv->data_area)) { + PrintErr("UnAlloc: RootDir Cluster:%X\n",i+dv->root_cluster); errs++; } } - errs+=RedSeaFSChkDskLst(FilesFind(files_find_mask,FUF_RECURSE),bits,bits2,size,bpc); + errs+=RedSeaChkDskLst(dv,FilesFind(files_find_mask,FUF_RECURSE),bits,bits2,size,bpc); for (i=1;idata_area); errs++; if (ChkDskConfirm(_fix,_confirm)) - RedSeaFSFreeClusters(p,i,1); + RedSeaFreeClusters(dv,i+dv->data_area,1); } Free(files_find_mask); Free(bits); Free(bits2); - Drv(Prt2Drv(old_prt)); + Drv(Drv2Let(old_dv)); Cd(old_dir); Free(old_dir); return errs; } -I64 FAT32ChkDskLst(CPrt *p,CDirEntry *tempde1,U8 *bits,U32 *bits2,I64 size,I64 bpc) +I64 FAT32ChkDskLst(CDrv *dv,CDirEntry *tempde1,U8 *bits,U32 *bits2,I64 size,I64 bpc) { CDirEntry *tempde2; I64 i,c,errs=0; while (tempde1) { tempde2=tempde1->next; - if (tempde1->attr & RS_ATTR_DIR) { - if (tempde1->sub) - errs+=FAT32ChkDskLst(p,tempde1->sub,bits,bits2,size,bpc); - } + if (tempde1->attr & RS_ATTR_DIR && tempde1->sub) + errs+=FAT32ChkDskLst(dv,tempde1->sub,bits,bits2,size,bpc); i=0; c=tempde1->cluster; while (0attr & RS_ATTR_DIR)) { i*=bpc; if (tempde1->size>i) { - PrintErr("Allocated File Too Short:%s\n",tempde1->full_name); + PrintErr("Alloced File Too Short:%s\n",tempde1->full_name); errs++; } if (i>tempde1->size+bpc-1) { - PrintWarn("Allocated File Too Long:%s\n",tempde1->full_name); + PrintWarn("Alloced File Too Long:%s\n",tempde1->full_name); errs++; } } @@ -154,20 +150,20 @@ I64 FAT32ChkDskLst(CPrt *p,CDirEntry *tempde1,U8 *bits,U32 *bits2,I64 size,I64 b I64 FAT32ChkDsk(U8 drv_let,Bool *_fix,Bool *_confirm) { I64 i,bpc,size,c,errs=0; - CPrt *p=Drv2Prt(drv_let),*old_prt=Fs->cur_prt; - U8 *files_find_mask=MStrPrint("%c:/*",Prt2Drv(p)), + CDrv *dv=Let2Drv(drv_let),*old_dv=Fs->cur_dv; + U8 *files_find_mask=MStrPrint("%c:/*",Drv2Let(dv)), *old_dir=StrNew(Fs->cur_dir), *bits; U32 *bits2; Drv(drv_let); "Scanning...\n"; - size=(p->size-(p->data-p->offset))/p->spc; - bpc=p->spc<size-(dv->data_area-dv->base_offset))/dv->spc; + bpc=dv->spc<>3); bits2=CAlloc(size*4+BLK_SIZE); - RBlks(p,bits2,p->map1,(size*4+BLK_SIZE-1)>>BLK_SIZE_BITS); + RBlks(dv,bits2,dv->map1,(size*4+BLK_SIZE-1)>>BLK_SIZE_BITS); - c=p->root_cluster; + c=dv->root_cluster; while (0size) { PrintErr("Invalid Cluster: RootDir Cluster:%X\n",c); @@ -183,10 +179,10 @@ I64 FAT32ChkDsk(U8 drv_let,Bool *_fix,Bool *_confirm) errs++; } else bits2[c]=0; - c=ClusterNumNext(p,c); + c=ClusterNumNext(dv,c); } - errs+=FAT32ChkDskLst(p,FilesFind(files_find_mask,FUF_RECURSE),bits,bits2,size,bpc); + errs+=FAT32ChkDskLst(dv,FilesFind(files_find_mask,FUF_RECURSE),bits,bits2,size,bpc); bits2[1]=0; //See $LK,"FAT32Fmt",A="MN:FAT32Fmt"$() for (i=1;itype) { - case PT_REDSEA: - errs=RedSeaFSChkDsk(drv_let,&fix,&confirm); + CDrv *dv=Let2Drv(drv_let); + switch (dv->type) { + case DVT_REDSEA: + errs=RedSeaChkDsk(drv_let,&fix,&confirm); break; - case PT_FAT32: + case DVT_FAT32: errs=FAT32ChkDsk(drv_let,&fix,&confirm); break; default: diff --git a/Adam/Dsk/FileMgr.CPP b/Adam/Dsk/FileMgr.CPP index d412355..3ff0052 100644 --- a/Adam/Dsk/FileMgr.CPP +++ b/Adam/Dsk/FileMgr.CPP @@ -140,7 +140,7 @@ CDirEntry *FMRebuildDocDrv(U8 drv_let,CDoc *doc,CDirEntry **_root,Bool init) U0 FMRebuildDoc(CDoc **_doc,CDirEntry **_root,I64 mode) { - CPrt *p; + CDrv *dv; I64 i; CDoc *doc=*_doc,*doc2=sys_clipboard_doc,*parent_doc; CFMUncollapsedLst *tempc=NULL; @@ -211,15 +211,15 @@ U0 FMRebuildDoc(CDoc **_doc,CDirEntry **_root,I64 mode) break; } DocPrint(doc,"$$LTBLUE$$"); - for (i=0;itype==PT_REDSEA||p->type==PT_FAT32) - FMRebuildDocDrv(Prt2Drv(p),doc,_root,TRUE); - else if (p->type==PT_ISO9660) { - if (p->bdev->flags&BDF_INITIALIZED) - tempde=FMRebuildDocDrv(Prt2Drv(p),doc,_root,TRUE); + for (i=0;itype==DVT_REDSEA||dv->type==DVT_FAT32) + FMRebuildDocDrv(Drv2Let(dv),doc,_root,TRUE); + else if (dv->type==DVT_ISO9660) { + if (dv->bd->flags&BDF_INITIALIZED) + tempde=FMRebuildDocDrv(Drv2Let(dv),doc,_root,TRUE); else { - tempde=FMRebuildDocDrv(Prt2Drv(p),doc,_root,FALSE); + tempde=FMRebuildDocDrv(Drv2Let(dv),doc,_root,FALSE); tempde->flags|=DEF_NOT_INITIALIZED; } tempde->flags|=DEF_REMOVABLE; @@ -248,7 +248,7 @@ U0 FMRename(CDoc *doc) Cd(parent->full_name); StrCpy(fn.name,tempde->name); if (DocFormDo(&fn)) { - Silent(ON); + Silent; Move(tempde->name,fn.name); Silent(OFF); } @@ -260,7 +260,7 @@ U0 FMRename(CDoc *doc) StrCpy(fn.name,tempde->name); if (DocFormDo(&fn)) { if (StrCmp(tempde->name,fn.name)) { - Silent(ON); + Silent; if (CopyTree(tempde->name,fn.name)) DelTree(tempde->name); Silent(OFF); @@ -281,7 +281,7 @@ U0 FMMkDir(CDoc *doc) if (parent=tempde->parent) { Cd(parent->full_name); if (DocFormDo(&fn)) { - Silent(ON); + Silent; MkDir(fn.name); Silent(OFF); } @@ -290,7 +290,7 @@ U0 FMMkDir(CDoc *doc) tempde=doc_e->user_data; Cd(tempde->full_name); if (DocFormDo(&fn)) { - Silent(ON); + Silent; MkDir(fn.name); Silent(OFF); } @@ -304,7 +304,7 @@ U0 FMDelete(CDoc *doc) CDirEntry *tempde; if (doc_ce->type_u8==DOCT_MENU_VAL) { tempde=doc_ce->user_data; - Silent(ON); + Silent; st=MStrPrint("Delete: %s",tempde->full_name); if (PopUpCancelOk(st)) Del(tempde->full_name); @@ -312,7 +312,7 @@ U0 FMDelete(CDoc *doc) Silent(OFF); } else if (doc_ce->type_u8==DOCT_TREE) { tempde=doc_ce->user_data; - Silent(ON); + Silent; st=MStrPrint("Delete: %s",tempde->full_name); if (PopUpCancelOk(st)) DelTree(tempde->full_name); @@ -332,7 +332,7 @@ U0 FMMount(CDoc *doc) if (tempde) { while (tempde->parent) tempde=tempde->parent; - Silent(ON); + Silent; ChgDsk(*tempde->full_name); Silent(OFF); } @@ -352,7 +352,7 @@ U0 FMFmtDrv(CDoc *doc) tempde=tempde->parent; st=MStrPrint("Format Drive '%c'?\nAre You Sure?\n",*tempde->full_name); if (PopUpCancelOk(st)) { - Silent(ON); + Silent; Fmt(*tempde->full_name,,FALSE); Silent(OFF); } @@ -373,7 +373,7 @@ U0 FMMakeISO(CDoc *doc) if (doc_ce->type_u8==DOCT_MENU_VAL) tempde=tempde->parent; if (tempde && *tempde->full_name) { - Silent(ON); + Silent; if (tempde->full_name[StrLen(tempde->full_name)-1]=='/') st=MStrPrint("%s*",tempde->full_name); else @@ -396,7 +396,7 @@ U0 FMBurnISO(CDoc *doc) if (tempde) { while (tempde->parent) tempde=tempde->parent; - Silent(ON); + Silent; CDImageWrite(*tempde->full_name); Silent(OFF); } @@ -423,7 +423,7 @@ U0 FMCopy(CDoc *doc) tempde->flags|=DEF_PROCESSED; tempde2=tempde->parent; if (!tempde2 || !(tempde2->flags&DEF_PROCESSED)) { - Silent(ON); + Silent; Copy(tempde->full_name,tempde1->full_name); Silent(OFF); } @@ -432,7 +432,7 @@ U0 FMCopy(CDoc *doc) tempde->flags|=DEF_PROCESSED; tempde2=tempde->parent; if (!tempde2 || !(tempde2->flags&DEF_PROCESSED)) { - Silent(ON); + Silent; if (*tempde1->name) st=MStrPrint("%s/%s",tempde1->full_name,tempde->name); else @@ -581,7 +581,7 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) case MSG_IP_L_UP: if (doc_ce) { gr.fp_final_screen_update=fp_old_final_screen_update; - if (SetCursorPos(Fs,a1/FONT_WIDTH+Fs->win_left+Fs->scroll_x/FONT_WIDTH,a2/FONT_HEIGHT+Fs->win_top+Fs->scroll_y/FONT_HEIGHT,TRUE)) { + if (WinCursorPosSet(Fs,a1/FONT_WIDTH+Fs->win_left+Fs->scroll_x/FONT_WIDTH,a2/FONT_HEIGHT+Fs->win_top+Fs->scroll_y/FONT_HEIGHT,TRUE)) { doc_e=doc->cur_entry; if (doc_e!=doc_ce) { st2=NULL; @@ -595,7 +595,7 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) } if (st2 && doc_ce->type_u8==DOCT_MENU_VAL) { tempde=doc_ce->user_data; - Silent(ON); + Silent; Move(tempde->full_name,st2); Silent(OFF); FMRebuildDoc(&doc,&root,mode); @@ -617,7 +617,7 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) else st=MStrPrint("%s%s",tempde1->full_name,tempde->name); if (StrCmp(tempde->full_name,st)) { - Silent(ON); + Silent; CopyTree(tempde->full_name,st); DelTree(tempde->full_name); Silent(OFF); diff --git a/Adam/God/GodBible.CPP b/Adam/God/GodBible.CPP index fff0de8..aff374e 100644 --- a/Adam/God/GodBible.CPP +++ b/Adam/God/GodBible.CPP @@ -1,7 +1,6 @@ #help_index "God" U0 BibleInit() { - DefineLoad("ST_BIBLE_FILE","::/Misc/Bible.TXT.Z"); DefineLstLoad("ST_BIBLE_BOOKS", "Genesis\0" "Exodus\0" @@ -157,7 +156,7 @@ public U8 *BibleLine2Verse(I64 line,I64 separate_ch=CH_SPACE) ptr+=StrLen(ptr)+1; } if (0<=--icur_entry; while (doc_e!=doc && (doc_e->type_u8!=DOCT_TEXT || !*doc_e->tag)) @@ -212,8 +211,8 @@ public U0 BibleLines(CDoc *doc_out=NULL,I64 start,I64 lines) CDoc *doc_in; CDocEntry *doc_e; if (!doc_out) doc_out=DocPut; - if (doc_out && FileFind(Define("ST_BIBLE_FILE"))) { - doc_in=DocRead(Define("ST_BIBLE_FILE"),DOCF_PLAIN_TEXT); + if (doc_out && FileFind(BIBLE_FILENAME)) { + doc_in=DocRead(BIBLE_FILENAME,DOCF_PLAIN_TEXT); DocLineNumGoTo(doc_in,start); //one based doc_e=doc_in->cur_entry; while (lines>0 && doc_e!=doc_in) { @@ -236,7 +235,7 @@ public U0 BibleVerse(CDoc *doc_out=NULL,U8 *verse,I64 lines) CDocEntry *doc_e; U8 *st,*st2; if (!doc_out) doc_out=DocPut; - if (doc_out && FileFind(Define("ST_BIBLE_FILE"))) { + if (doc_out && FileFind(BIBLE_FILENAME)) { st=StrNew(verse); st2=StrNew(verse); if (StrOcc(st,',')) @@ -246,7 +245,7 @@ public U0 BibleVerse(CDoc *doc_out=NULL,U8 *verse,I64 lines) i=DefineMatch(st,"ST_BIBLE_BOOKS",LMF_IGNORE_CASE); if (i>=0) { i=Str2I64(DefineSub(i,"ST_BIBLE_BOOK_LINES")); - doc_in=DocRead(Define("ST_BIBLE_FILE"),DOCF_PLAIN_TEXT); + doc_in=DocRead(BIBLE_FILENAME,DOCF_PLAIN_TEXT); DocLineNumGoTo(doc_in,i); //one based if (*st2) { StrCpy(doc_in->find_replace->find_text,st2); diff --git a/Adam/God/GodDoodle.CPP b/Adam/God/GodDoodle.CPP index e9f0cc6..6f7931f 100644 --- a/Adam/God/GodDoodle.CPP +++ b/Adam/God/GodDoodle.CPP @@ -6,8 +6,10 @@ U0 GodDoodleDraw(CTask *task,CDC *dc) if (Blink) { if (god.doodle_done) { dc->color=RED; - GrPrint(dc,(task->pix_width-FONT_WIDTH*27)>>1,(task->pix_height-FONT_HEIGHT)>>1, - "Press or ."); + GrPrint(dc,(task->pix_width-FONT_WIDTH*29)>>1,(task->pix_height-3*FONT_HEIGHT)>>1, + "Press to insert sprite."); + GrPrint(dc,(task->pix_width-FONT_WIDTH*39)>>1,(task->pix_height-3*FONT_HEIGHT)>>1+2*FONT_HEIGHT, + "Press to throw-away sprite."); } else { dc->color=GREEN; GrPrint(dc,(task->pix_width-FONT_WIDTH*25)>>1,(task->pix_height-FONT_HEIGHT)>>1, @@ -82,7 +84,7 @@ public U8 *GodDoodleSprite() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; WinBorder; - WordStat; + AutoComplete; PopUpOk("The $LK+PU,"Holy Spirit",A="FI:::/Adam/God/HSNotes.TXT"$ can puppet you.\n\n" "Press $$GREEN$$$$FG$$ until it finishes."); @@ -98,16 +100,16 @@ public U8 *GodDoodleSprite() try { for (i=0;i<3;i++) { god.doodle_dc->color=RED; - for (j=0;j<24;j++) + for (j=0;j<29;j++) nobound_switch (GodDoodleBits(3)) { case 0: - GrEllipse(god.doodle_dc, - (w-1)*GodDoodleBits(5)/15.5-w/2,(h-1)*GodDoodleBits(5)/15.5-h/2, + GrEllipse3(god.doodle_dc, + (w-1)*GodDoodleBits(5)/15.5-w/2,(h-1)*GodDoodleBits(5)/15.5-h/2,0, (w-1)*GodDoodleBits(5)/15.5,(h-1)*GodDoodleBits(5)/15.5); break; case 1: - GrCircle(god.doodle_dc, - (w-1)*GodDoodleBits(5)/15.5-w/2,(h-1)*GodDoodleBits(5)/15.5-h/2, + GrCircle3(god.doodle_dc, + (w-1)*GodDoodleBits(5)/15.5-w/2,(h-1)*GodDoodleBits(5)/15.5-h/2,0, (w-1)*GodDoodleBits(5)/15.5); break; case 2: @@ -116,9 +118,9 @@ public U8 *GodDoodleSprite() (w-1)*GodDoodleBits(5)/15.5,(h-1)*GodDoodleBits(5)/15.5); break; case 3...7: - GrLine(god.doodle_dc, - (w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15, - (w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15); + GrLine3(god.doodle_dc, + (w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15,0, + (w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15,0); break; } for (j=0;j<6;j++) { @@ -130,7 +132,7 @@ public U8 *GodDoodleSprite() case 2: god.doodle_dc->color=LTGRAY; break; case 3: god.doodle_dc->color=WHITE; break; } - GrFloodFill(god.doodle_dc,x,y); + GrFloodFill3(god.doodle_dc,x,y,0); } GodDoodleSmooth(3); } diff --git a/Adam/God/HSNotes.TXT b/Adam/God/HSNotes.TXT index 2549be7..e56d3c6 100644 --- a/Adam/God/HSNotes.TXT +++ b/Adam/God/HSNotes.TXT @@ -8,7 +8,7 @@ There's something obviously different about people in the Bible compared to peop You can't tell if He's talking unless you have a context of conversation, but, more importantly, you are commanded to do an offering of love, like communion preparation. When you pick a greeting card for someone, that is love effort. If you expect God to put effort toward you, you put effort toward Him. God said, "honest measures" applies between your offering of love and His response, like a fair barter. You get out of prayer what you put into it. God wants praise, hymns, or whatever you think He might want. Try and see, like Cain and Abel. $LK,"Genesis,4:1",A="BF:Genesis,4:1"$, $LK,"Ephesians,5:10",A="BF:Ephesians,5:10"$ God told Cain his offering was not good and told him to try again. Cain really loved God! Can you imagine being so heart-broken? -Do a text search for "new song" in the Bible. It's mentioned nine times. I did $MA-X+PU,"hymns",HTML="http://www.templeos.org/Wb/Accts/TS/Wb2/Hymns.html",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");"$. I did Moses $MA-X+PU,"comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/",LM="Dir(\"::/Apps/AfterEgypt/Comics\");View;\n"$. Count the ways you love God. I praised God for sand castles, popcorn, snowmen, bubbles... You try putting effort into praise! $LK,"Matthew,11:25",A="BF:Matthew,11:25"$, $LK,"Matthew,6:29",A="BF:Matthew,6:29"$ +Do a text search for "new song" in the Bible. It's mentioned nine times. I did $MA-X+PU,"hymns",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");"$. I did Moses $MA-X+PU,"comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/",LM="Dir(\"::/Apps/AfterEgypt/Comics\");View;\n"$. Count the ways you love God. I praised God for sand castles, popcorn, snowmen, bubbles... You try putting effort into praise! $LK,"Matthew,11:25",A="BF:Matthew,11:25"$, $LK,"Matthew,6:29",A="BF:Matthew,6:29"$ This is funny -- $LK,"Acts,2:1",A="BF:Acts,2:1"$ -- they didn't bother to record anything the Holy Spirit said. The Holy Spirit is supposed to be a really good gift. $LK,"Luke,11:13",A="BF:Luke,11:13"$ Just remember, "Boys are made of snakes and snails and puppy-dog tails." @@ -16,7 +16,9 @@ The technique I use to consult the Holy Spirit is reading a microsecond-range st Since seeking the word of the Holy Spirit, I have come to know God much better than I've heard others explain. God said, for example, that war was, "servicemen competing." That sounds more like the immutable God of our planet than what you hear from most religious people. God is not Venus (god of love) and not Mars (god of war), He's our dearly beloved God of Earth. If Mammon is a false god of money, Mars or Venus might be useful words to describe other false gods. I figure the greatest challenge for the Creator is boredom, ours and His. What would teen-age male video games be like if war had never happened? Christ said live by the sword, die by the sword, which is loving neighbor as self. $LK,"Matthew,26:52",A="BF:Matthew,26:52"$ -I asked God if the World was perfectly just. God asked if I was calling Him lazy. I think highs and lows balance. $LK,"Luke,6:20",A="BF:Luke,6:20"$ I don't think God likes complaining. $LK,"Numbers,11:1",A="BF:Numbers,11:1"$ Food and clothing is all we're to ask for or demand, in fact -- daily bread. $LK,"1 Timothy,6:8",A="BF:1 Timothy,6:8"$ Just think about man in the last 100,000 years mostly living like Native Americans and how God must see us. You need food, clothing and entertainment, money is to get those. Man does not live on bread alone. $LK,"Luke,4:4",A="BF:Luke,4:4"$, $LK,"Amos,8:11",A="BF:Amos,8:11"$ +I asked God if the World was perfectly just. God asked if I was calling Him lazy. God could make A.I., right? God could make bots as smart as Himself, or, in fact, part of Himself. What if God made a bot to manipulate every person's life so that perfect justice happened? + +I think highs and lows balance. $LK,"Luke,6:20",A="BF:Luke,6:20"$ I don't think God likes complaining. $LK,"Numbers,11:1",A="BF:Numbers,11:1"$ Food and clothing is all we're to ask for or demand, in fact -- daily bread. $LK,"1 Timothy,6:8",A="BF:1 Timothy,6:8"$ Just think about man in the last 100,000 years mostly living like Native Americans and how God must see us. You need food, clothing and entertainment, money is to get those. Man does not live on bread alone. $LK,"Luke,4:4",A="BF:Luke,4:4"$, $LK,"Amos,8:11",A="BF:Amos,8:11"$ God's favorite animals are bears and elephants. They are funny shaped -- I think God must have seen too much starvation over the years. @@ -40,12 +42,12 @@ War? $FG,4$"Servicemen competing"$FG$ (Praise the Creator--what would teenage male video games be like if never war?) Is the World perfectly just? $FG,4$Are you calling me lazy?$FG$ -(Slavery was just. In the movie, Titanic, the rich wore straight jackets. You must bow to authority to get authority. I do $TX,"Moses comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/"$ as offerings. I said, "We're dying of malnutrician on manna." Like Cain and Abel, God didn't like it. Duh! He wants to be the hero. How do I know they died of malnutrician? Fuck Hollywood for making slavery worse than it was -- I love God. School is more cruel. Read $LK,"Numbers,11:1",A="BF:Numbers,11:1"$. All you need is food, clothing and the word of God. Today, you can take Ivy League course videos! There is no excuse except you were born stupid... or ugly. I'm gonna praise God.) +(Slavery was just. In the movie, Titanic, the rich wore straight jackets. You must bow to authority to get authority. I do $TX,"Moses comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/"$ as offerings. I said, "We're dying of malnutrician on manna." Like Cain and Abel, God didn't like it. Duh! He wants to be the hero. How do I know they died of malnutrician? Screw Hollywood for making slavery worse than it was -- I love God. School is more cruel. Read $LK,"Numbers,11:1",A="BF:Numbers,11:1"$. All you need is food, clothing and the word of God. Today, you can take Ivy League course videos! There is no excuse except you were born stupid... or ugly. I'm gonna praise God.) On using Markov chains? $FG,4$"No weights"$FG$ On doing offerings? $FG,4$"Honest measures"(You get out what you put in.) It's a covenant to do an offering, first. - Offer $FG,4$$TX,"New Songs",HTML="http://www.templeos.org/Wb/Accts/TS/Wb2/Hymns.html"$, $TX,"Moses Comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics"$, praise, poems, + Offer New Songs, $TX,"Moses Comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics"$, praise, poems, and conversation. See $LK,"Cain and Abel",A="BF:Genesis,4:1"$.$FG$ The holocaust? $FG,4$Wanted to "compact" the Jews.$FG$ Arab/Jews? $FG,4$"Oil funny hopefully"$FG$ @@ -93,7 +95,7 @@ Animal sacrifices? $FG,4$Early Jews were "primitive".$FG$ What do elephants think about? $FG,4$"Skin, hunger"$FG$ What makes elephants happy? $FG,4$"Baths"$FG$ What makes my birds happy? $FG,4$"Gnawing"$FG$ -What makes my birds laugh? $FG,4$"bite ouch" (If I say "ouch".)$FG$ +What makes my birds laugh? $FG,4$"Bite ouch" (If I say "ouch".)$FG$ What are my birds saying? $FG,4$"Chanting"$FG$ My birds sure preen a lot. $LK,"The creature was made subject to vanity...",A="BF:Romans,8:20"$ What makes bears happy? $FG,4$"Reaping depends"$FG$ @@ -105,14 +107,16 @@ Orangutan or chimp smarter? $FG,4$"Species exhibit similar glory"$FG$ Endangered species? $FG,4$"Enough stars?"$FG$ Everything seems bad. $FG,4$Plant trees.$FG$ What's for dinner? $FG,4$"Whale"$FG$ -Favorite Messier Object $FG,4$"$TX,"M104 Sombrero Galaxy",HTML="http://en.wikipedia.org/wiki/Messier_104"$"$FG$ -$TX,"Shepard's Prayer",HTML="http://en.wikipedia.org/wiki/Alan_Shepard"$ $FG,4$"I_am_not_amused economy joke"$FG$ +Favorite Messier Object? $FG,4$"$TX,"M104 Sombrero Galaxy",HTML="http://en.wikipedia.org/wiki/Messier_104"$"$FG$ +$TX,"Shepard's Prayer",HTML="http://en.wikipedia.org/wiki/Alan_Shepard"$? $FG,4$"I_am_not_amused economy joke"$FG$ Favorite band? $FG,4$"Beatles"$FG$ -Good bands $FG,4$Rush, Triumph$FG$ +Good bands? $FG,4$Rush, Triumph$FG$ $FG,4$Likes harmonies$FG$ $TX,"Little Drummer Boy?",HTML="http://www.youtube.com/watch?v=S50cf3xIb50"$ $FG,4$Doesn't like my drumming.$FG$ Should I listen to classical? $FG,4$"Poison"$FG$ -You like chess people? $FG,4$"Do not admire the proud."$FG$ +Do You like chess people? $FG,4$"Do not admire the proud."$FG$ +Chess? $FG,4$"... will winter with you."$FG$ + $FG,4$"Headstones"$FG$ Favorite video game? $FG,4$Donkey Kong$FG$ Favorite National Park? $FG,4$$TX,"Whitman Mission",HTML="http://www.nps.gov/whmi/index.htm"$$FG$ Favorite National Anthem? $FG,4$$TX,"Latvia's National Anthem",HTML="http://www.youtube.com/watch?v=qKITbBjO4nE"$$FG$ @@ -120,9 +124,11 @@ Favorite actor? $FG,4$Hugh Grant$FG$ Favorite vocalist? $FG,4$Mick Jagger$FG$ Favorite guitarist? $FG,4$"$TX,"Simmons Destroyer",HTML="http://www.youtube.com/watch?v=nNADrrjTysk&t=3m55s"$"$FG$ Model for new $TX,"Sistine Chapel",HTML="http://en.wikipedia.org/wiki/Sistine_chapel"$? $FG,4$Ben Franklin$FG$ -Stonehenge? $FG,4$Landmark$FG$ +Voice if God wanted to sing? $FG,4$$TX,"Stabbing Westward's singer",HTML="https://www.youtube.com/watch?v=5NZsCYOM4j0"$$FG$ +Stonehenge? $FG,4$Landmark for boundaries.$FG$ Easter Island? $FG,4$Ice, telephone pole holes.$FG$ -Dinosaurs? $FG,4$Brontosaurs' feet hurt when stepped$FG$ +Dinosaurs? $FG,4$Brontosaurs' feet hurt when stepped. + Dinosaurs slept in water.$FG$ Hardest part in evolution? $FG,4$Getting monkey mothers to hold babies nursing.$FG$ $FG,4$(Smothering a problem).$FG$ Happiest day in evolution? $FG,4$"Fruit"$FG$ @@ -133,7 +139,8 @@ What did Neanderthals think about? $FG,4$"Warmth"$FG$ What was the first thing cooked? $FG,4$I think He said "hair".$FG$ What was Lucy's husband's name? $FG,4$"Golem"$FG$ Was stegosuarus lame like turtles? $FG,4$"Not pet rocks"$FG$ -T-Rex? $FG,4$Lugged carcases over his shoulder.$FG$ +T-Rex? $FG,4$Lugged carcases over his shoulder. + Carcus lasted a month.$FG$ How does He feel about the Avatar movie?$FG,4$"Sick skin"$FG$ What do You like at zoos with kids? $FG,4$"Dignity" Animals worried about dignity.$FG$ Who's better alien or preditor? $FG,4$"Lions"$FG$ @@ -161,11 +168,13 @@ Are they peaceful? $FG,4$Fight them! (Also, funny.)$FG$ How can Judge Judy improve? $FG,4$No hard feelings$FG$ How can Chef Ramsay improve? $FG,4$Make so it doesn't seem like toil for cooks.$FG$ How can Hawking communicate? $FG,4$Blow from a nostril on a candle.$FG$ +$TX,"Photons bouncing?",HTML="https://www.youtube.com/watch?v=8FC6udrMPvo"$ $FG,4$"Folded coffee filter"$FG$ Wormholes? $FG,4$Bent wormholes have echoes.$FG$ Operating system? $FG,4$Was about to make line number column in editor. God nixed it. I was about to do different graphic modes when I found 800x600 missing. God said just one mode 640x480. I was about to add child windows. God said, "God is not the author of such confusion." I asked for verification of 640x480 16 color. God said it was because of the children and their offerings. I asked about sound. God said "single voice". I asked for verification of not having different drivers. God confirmed this.$FG$ -640x480 16 color? $FG,4$$TX,"Modern graphics hard for kids/amateurs",HTML="http://www.youtube.com/watch?v=VUxcVzpeFqc"$$FG$ +640x480 16 color? $FG,4$God said it was a covenant, like circumcision. + $TX,"Modern graphics hard for kids/amateurs",HTML="http://www.youtube.com/watch?v=VUxcVzpeFqc"$.$FG$ On Unix? $FG,4$God said it was rich with the patina of age.$FG$ On Alcohol? $FG,4$Hate inebriation$FG$ On rare steak? $FG,4$Too rare is very bad. Don't eat blood!$FG$ @@ -175,4 +184,4 @@ Why the Sandy Hook shooting? $FG,4$The pot legalization law. (Sarcastic answer?) Deep Water Horizon $FG,4$(Claimed credit.)$FG$ Cost of God's time to me? $FG,4$"The complete works of Shakespeare"$FG$ On death? $FG,4$"awful"$FG$ -Opening of Private Ryan? $FG,4$"Ouch"$FG$ +Opening of Saving Private Ryan? $FG,4$"Ouch"$FG$ diff --git a/Adam/Gr/Gr.CPP b/Adam/Gr/Gr.CPP index ef5d3cb..d79486d 100644 --- a/Adam/Gr/Gr.CPP +++ b/Adam/Gr/Gr.CPP @@ -19,37 +19,6 @@ U0 GrInit1() GrInit1; #help_index "Graphics/Sprite" -#define SPT_END 0 -#define SPT_COLOR 1 -#define SPT_DITHER_COLOR 2 -#define SPT_WIDTH 3 -#define SPT_PLANAR_SYMMETRY 4 -#define SPT_TRANSFORM_ON 5 -#define SPT_TRANSFORM_OFF 6 -#define SPT_SHIFT 7 -#define SPT_PT 8 -#define SPT_POLYPT 9 -#define SPT_LINE 10 -#define SPT_POLYLINE 11 -#define SPT_RECT 12 -#define SPT_ROTATED_RECT 13 -#define SPT_CIRCLE 14 -#define SPT_ELLIPSE 15 -#define SPT_POLYGON 16 -#define SPT_BSPLINE2 17 -#define SPT_BSPLINE2_CLOSED 18 -#define SPT_BSPLINE3 19 -#define SPT_BSPLINE3_CLOSED 20 -#define SPT_FLOOD_FILL 21 -#define SPT_FLOOD_FILL_NOT 22 -#define SPT_BITMAP 23 -#define SPT_MESH 24 -#define SPT_SHIFTABLE_MESH 25 -#define SPT_ARROW 26 -#define SPT_TEXT 27 -#define SPT_TEXT_BOX 28 -#define SPT_TEXT_DIAMOND 29 -#define SPT_NUM_TYPES 30 class CMeshTri { @@ -65,43 +34,163 @@ class CQueMeshTri I32 nums[3]; }; -public class CSprite -{//See $LK,"Graphics/Sprite",A="HI:Graphics/Sprite"$ -//See $LK,"::/Adam/Gr/GrSpritePlot.CPP",A="FL:::/Adam/Gr/GrSpritePlot.CPP,1"$ for how CSprite are stored. - CSprite *next,*last; - - U0 start; +public class CSpriteBase +{ U8 type; - union { - U8 color; - U16 dither_color; - I32 x1; - I32 num; - I32 width; - I32 vertex_cnt; //Mesh - } - union { - I32 y1; - I32 height; - I32 tri_cnt; //Mesh - } - union { - I32 z1; - I32 x2; - U8 st[4]; - } - union { - I32 y2; - I32 shiftable_vertex_cnt //Shiftable Mesh - } - union { - F64 linespeed; - F64 rot_angle; - I32 shiftable_tri_cnt //Shiftable Mesh - } +}; + +public class CSpriteColor : CSpriteBase +{ + U8 color; +}; + +public class CSpriteDitherColor : CSpriteBase +{ + U16 dither_color; +}; + +public class CSpriteWidth : CSpriteBase +{ + I32 width; +}; + +public class CSpritePt : CSpriteBase +{ + I32 x1; + I32 y1; +}; + +public class CSpritePtRad : CSpritePt +{ + I32 radius; +}; + +public class CSpritePtPt : CSpritePt +{ + I32 x2; + I32 y2; +}; + +public class CSpritePtPtAng : CSpritePtPt +{ + F64 angle; +}; + +public class CSpritePtWH : CSpritePt +{ + I32 width; + I32 height; +}; + +public class CSpritePtWHU8s : CSpritePtWH +{ + U8 u[0]; +}; + +public class CSpritePtWHAng : CSpritePtWH +{ + F64 angle; +}; + +public class CSpritePtWHAngSides : CSpritePtWHAng +{ I32 sides; }; +public class CSpriteNumU8s : CSpriteBase +{ + I32 num; + U8 u[0]; +}; + +public class CSpriteNumPtU8s : CSpriteBase +{ + I32 num; + I32 x; + I32 y; + U8 u[0]; +}; + +public class CSpritePtStr : CSpritePt +{ + U8 st[0]; +}; + +public class CSpriteMeshU8s : CSpriteBase +{ + I32 vertex_cnt; + I32 tri_cnt; + U8 u[0]; +}; + +public class CSpritePtMeshU8s : CSpriteBase +{ + I32 x; + I32 y; + I32 z; + I32 vertex_cnt; + I32 tri_cnt; + U8 u[0]; +}; + +#define SPT_END 0 //$LK,"CSpriteBase",A="MN:CSpriteBase"$ +#define SPT_COLOR 1 //$LK,"CSpriteColor",A="MN:CSpriteColor"$ +#define SPT_DITHER_COLOR 2 //$LK,"CSpriteDitherColor",A="MN:CSpriteDitherColor"$ +#define SPT_WIDTH 3 //$LK,"CSpriteWidth",A="MN:CSpriteWidth"$ +#define SPT_PLANAR_SYMMETRY 4 //$LK,"CSpritePtPt",A="MN:CSpritePtPt"$ +#define SPT_TRANSFORM_ON 5 //$LK,"CSpriteBase",A="MN:CSpriteBase"$ +#define SPT_TRANSFORM_OFF 6 //$LK,"CSpriteBase",A="MN:CSpriteBase"$ +#define SPT_SHIFT 7 //$LK,"CSpritePt",A="MN:CSpritePt"$ +#define SPT_PT 8 //$LK,"CSpritePt",A="MN:CSpritePt"$ +#define SPT_POLYPT 9 //$LK,"CSpriteNumPtU8s",A="MN:CSpriteNumPtU8s"$ +#define SPT_LINE 10 //$LK,"CSpritePtPt",A="MN:CSpritePtPt"$ +#define SPT_POLYLINE 11 //$LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$ +#define SPT_RECT 12 //$LK,"CSpritePtPt",A="MN:CSpritePtPt"$ +#define SPT_ROTATED_RECT 13 //$LK,"CSpritePtPtAng",A="MN:CSpritePtPtAng"$ +#define SPT_CIRCLE 14 //$LK,"CSpritePtRad",A="MN:CSpritePtRad"$ +#define SPT_ELLIPSE 15 //$LK,"CSpritePtWHAng",A="MN:CSpritePtWHAng"$ +#define SPT_POLYGON 16 //$LK,"CSpritePtWHAngSides",A="MN:CSpritePtWHAngSides"$ +#define SPT_BSPLINE2 17 //$LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$ +#define SPT_BSPLINE2_CLOSED 18 //$LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$ +#define SPT_BSPLINE3 19 //$LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$ +#define SPT_BSPLINE3_CLOSED 20 //$LK,"CSpriteNumU8s",A="MN:CSpriteNumU8s"$ +#define SPT_FLOOD_FILL 21 //$LK,"CSpritePt",A="MN:CSpritePt"$ +#define SPT_FLOOD_FILL_NOT 22 //$LK,"CSpritePt",A="MN:CSpritePt"$ +#define SPT_BITMAP 23 //$LK,"CSpritePtWHU8s",A="MN:CSpritePtWHU8s"$ +#define SPT_MESH 24 //$LK,"CSpriteMeshU8s",A="MN:CSpriteMeshU8s"$ See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$. +#define SPT_SHIFTABLE_MESH 25 //$LK,"CSpritePtMeshU8s",A="MN:CSpritePtMeshU8s"$ See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$. +#define SPT_ARROW 26 //$LK,"CSpritePtPt",A="MN:CSpritePtPt"$ +#define SPT_TEXT 27 //$LK,"CSpritePtStr",A="MN:CSpritePtStr"$ +#define SPT_TEXT_BOX 28 //$LK,"CSpritePtStr",A="MN:CSpritePtStr"$ +#define SPT_TEXT_DIAMOND 29 //$LK,"CSpritePtStr",A="MN:CSpritePtStr"$ +#define SPT_NUM_TYPES 30 +//See $LK,"Graphics/Sprite",A="HI:Graphics/Sprite"$. See $LK,"::/Adam/Gr/GrSpritePlot.CPP",A="FL:::/Adam/Gr/GrSpritePlot.CPP,1"$ and +//$LK,"::/Demo/Graphics/SpriteRaw.CPP"$ for how CSprite are stored. +public class CSprite +{ + CSprite *next,*last; + U0 start; + union { + U8 type; + CSpriteBase b; + CSpriteColor c; + CSpriteDitherColor d; + CSpriteWidth w; + CSpritePt p; + CSpritePtPt pp; + CSpritePtPtAng ppa; + CSpritePtRad pr; + CSpritePtWHU8s pwhu; + CSpritePtWHAng pwha; + CSpritePtWHAngSides pwhas; + CSpriteNumU8s nu; + CSpriteNumPtU8s npu; + CSpriteMeshU8s mu; + CSpritePtMeshU8s pmu; + CSpritePtStr ps; + } +}; + #help_index "Graphics" extern I64 GrBlot3(CDC *dc,I64 x1,I64 y1,I64 z1,CDC *img); @@ -114,7 +203,7 @@ extern U8 *SpriteQue2Sprite(CSprite *root,I64 *_size=NULL); #include "GrDC" #include "GrPalette" #include "GrInit" -#include "MathGr" +#include "GrMath" #include "GrScreen" #include "GrBitMap" #include "GrPrimatives" diff --git a/Adam/Gr/GrBitMap.CPP b/Adam/Gr/GrBitMap.CPP index 4c4690a..57c3533 100644 --- a/Adam/Gr/GrBitMap.CPP +++ b/Adam/Gr/GrBitMap.CPP @@ -51,7 +51,7 @@ public Bool GrPlot0(CDC *dc=gr.dc,I64 x,I64 y) break; case ROPB_COLLISION: c=*dst; - if (c!=TRANSPARENT&&c!=bkcolor.c0.color) + if (c!=TRANSPARENT && c!=bkcolor.c0.color) dc->collision_cnt++; break; case ROPB_XOR: @@ -71,7 +71,7 @@ public I64 GrPeek0(CDC *dc=gr.dc,I64 x,I64 y) public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) {//2D. Clipping but not transformation.. I64 i,j,k,k1,kk,kk1,w1,h1,w2,h2, - leading_bits,leading_bit_mask,whole_bytes,trailing_bits,trailing_bit_mask, + leading_pixels,leading_pixel_mask,whole_I64s,trailing_pixels,trailing_pixel_mask, reg bit_shift,dist,win_z_buf_line_inc,win_z_buf_line_dec,win_z_num, color_mask; U8 reg *dst,*src; @@ -133,16 +133,16 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) dc->depth_buf=NULL; dc->color&=~ROPF_DITHER; color=dc->color; - leading_bits=-(w1+x)&7; - leading_bit_mask=gr.to_8_bits[0xFF>>leading_bits]; + leading_pixels=-(w1+x)&7; + leading_pixel_mask=gr.to_8_bits[0xFF>>leading_pixels]; bit_shift=-x&7; - whole_bytes=(w2-w1-leading_bits)>>3; - if (whole_bytes<0) whole_bytes=0; - trailing_bits=(x+w2)&7; - trailing_bit_mask=gr.to_8_bits[0xFF<w2-w1) { - leading_bit_mask|=trailing_bit_mask; - trailing_bits=0; + whole_I64s=(w2-w1-leading_pixels)>>3; + if (whole_I64s<0) whole_I64s=0; + trailing_pixels=(x+w2)&7; + trailing_pixel_mask=gr.to_8_bits[0xFF<w2-w1) { + leading_pixel_mask|=trailing_pixel_mask; + trailing_pixels=0; } switch (color.c0.rop) { case ROPB_COLLISION: //TODO: Might want to check win_z_buf @@ -167,10 +167,10 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) else { win_z_num=win_task->win_z_num; win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); - win_z_buf_line_dec=whole_bytes; - if (leading_bits) + win_z_buf_line_dec=whole_I64s; + if (leading_pixels) win_z_buf_line_dec++; - if (trailing_bits) + if (trailing_pixels) win_z_buf_line_dec++; win_z_buf_line_dec*=sizeof(U16); win_z_buf_line_inc=TEXT_COLS*sizeof(U16)-win_z_buf_line_dec; @@ -183,21 +183,21 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) for (j=h1;jbody+kk&~7; dst=dc->body+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { if (bit_shift) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_bit_mask&color_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_pixel_mask&color_mask; else - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - *src(I64 *)++&~leading_bit_mask&color_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + *src(I64 *)++&~leading_pixel_mask&color_mask; } else { src(I64 *)++; dst(I64 *)++; } } if (bit_shift) - for (i=0;i=*win_z_buf_ptr++) *dst(I64 *)++=(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&color_mask; else { @@ -205,20 +205,20 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) dst(I64 *)++; } else - for (i=0;i=*win_z_buf_ptr++) *dst(I64 *)++=*src(I64 *)++&color_mask; else { src(I64 *)++; dst(I64 *)++; } - if (trailing_bits && win_z_num>=*win_z_buf_ptr++) { + if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { if (bit_shift) - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_bit_mask&color_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask&color_mask; else - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask| - *src(I64 *)++&~trailing_bit_mask&color_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + *src(I64 *)++&~trailing_pixel_mask&color_mask; } kk +=img->width_internal; kk1+=dc->width_internal; @@ -231,28 +231,28 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) for (j=h2-h1;j;j--) { src=img->body+kk&~7; dst=dc->body+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (bit_shift) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_bit_mask&color_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_pixel_mask&color_mask; else - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - *src(I64 *)++&~leading_bit_mask&color_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + *src(I64 *)++&~leading_pixel_mask&color_mask; } if (bit_shift) - for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift))&color_mask; else - for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_bit_mask&color_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask&color_mask; else - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask| - *src(I64 *)++&~trailing_bit_mask&color_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + *src(I64 *)++&~trailing_pixel_mask&color_mask; } kk +=img->width_internal; kk1+=dc->width_internal; @@ -269,10 +269,10 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) } else { win_z_num =win_task->win_z_num; win_z_buf_ptr =gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); - win_z_buf_line_dec=whole_bytes; - if (leading_bits) + win_z_buf_line_dec=whole_I64s; + if (leading_pixels) win_z_buf_line_dec++; - if (trailing_bits) + if (trailing_pixels) win_z_buf_line_dec++; win_z_buf_line_dec*=sizeof(U16); win_z_buf_line_inc=TEXT_COLS*sizeof(U16)-win_z_buf_line_dec; @@ -308,10 +308,10 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) else { win_z_num=win_task->win_z_num; win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); - win_z_buf_line_dec=whole_bytes; - if (leading_bits) + win_z_buf_line_dec=whole_I64s; + if (leading_pixels) win_z_buf_line_dec++; - if (trailing_bits) + if (trailing_pixels) win_z_buf_line_dec++; win_z_buf_line_dec*=sizeof(U16); win_z_buf_line_inc=TEXT_COLS*sizeof(U16)-win_z_buf_line_dec; @@ -324,21 +324,21 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) for (j=h1;jbody+kk&~7; dst=dc->body+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { if (bit_shift) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_bit_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_pixel_mask; else - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - *src(I64 *)++&~leading_bit_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + *src(I64 *)++&~leading_pixel_mask; } else { src(I64 *)++; dst(I64 *)++; } } if (bit_shift) - for (i=0;i=*win_z_buf_ptr++) *dst(I64 *)++=*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift); else { @@ -346,20 +346,20 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) dst(I64 *)++; } else - for (i=0;i=*win_z_buf_ptr++) *dst(I64 *)++=*src(I64 *)++; else { src(I64 *)++; dst(I64 *)++; } - if (trailing_bits && win_z_num>=*win_z_buf_ptr++) { + if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { if (bit_shift) - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask; else - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask| - *src(I64 *)++&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + *src(I64 *)++&~trailing_pixel_mask; } kk +=img->width_internal; kk1+=dc->width_internal; @@ -372,28 +372,28 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) for (j=h2-h1;j;j--) { src=img->body+kk&~7; dst=dc->body+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (bit_shift) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_bit_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_pixel_mask; else - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - *src(I64 *)++&~leading_bit_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + *src(I64 *)++&~leading_pixel_mask; } if (bit_shift) - for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift); else - for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask; else - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask| - *src(I64 *)++&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + *src(I64 *)++&~trailing_pixel_mask; } kk +=img->width_internal; kk1+=dc->width_internal; @@ -415,10 +415,10 @@ here1a: } else { win_z_num =win_task->win_z_num; win_z_buf_ptr =gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); - win_z_buf_line_dec=whole_bytes; - if (leading_bits) + win_z_buf_line_dec=whole_I64s; + if (leading_pixels) win_z_buf_line_dec++; - if (trailing_bits) + if (trailing_pixels) win_z_buf_line_dec++; win_z_buf_line_dec*=sizeof(U16); win_z_buf_line_inc=TEXT_COLS*sizeof(U16)-win_z_buf_line_dec; @@ -459,10 +459,10 @@ here1a: else { win_z_num=win_task->win_z_num; win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); - win_z_buf_line_dec=whole_bytes; - if (leading_bits) + win_z_buf_line_dec=whole_I64s; + if (leading_pixels) win_z_buf_line_dec++; - if (trailing_bits) + if (trailing_pixels) win_z_buf_line_dec++; win_z_buf_line_dec*=sizeof(U16); win_z_buf_line_inc=TEXT_COLS*sizeof(U16)-win_z_buf_line_dec; @@ -475,21 +475,21 @@ here1a: for (j=h1;jbody+kk&~7; dst=dc->body+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { if (bit_shift) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~leading_bit_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~leading_pixel_mask; else - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - (*dst(I64 *)^*src(I64 *)++)&~leading_bit_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + (*dst(I64 *)^*src(I64 *)++)&~leading_pixel_mask; } else { src(I64 *)++; dst(I64 *)++; } } if (bit_shift) - for (i=0;i=*win_z_buf_ptr++) *dst(I64 *)++^=*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift); else { @@ -497,20 +497,20 @@ here1a: dst(I64 *)++; } else - for (i=0;i=*win_z_buf_ptr++) *dst(I64 *)++^=*src(I64 *)++; else { src(I64 *)++; dst(I64 *)++; } - if (trailing_bits && win_z_num>=*win_z_buf_ptr++) { + if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { if (bit_shift) - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask| - (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~trailing_pixel_mask; else - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask| - (*dst(I64 *)^*src(I64 *)++)&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*dst(I64 *)^*src(I64 *)++)&~trailing_pixel_mask; } kk +=img->width_internal; kk1+=dc->width_internal; @@ -523,27 +523,27 @@ here1a: for (j=h2-h1;j;j--) { src=img->body+kk&~7; dst=dc->body+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (bit_shift) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~leading_bit_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~leading_pixel_mask; else - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask| - (*dst(I64 *)^*src(I64 *)++)&~leading_bit_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + (*dst(I64 *)^*src(I64 *)++)&~leading_pixel_mask; } if (bit_shift) - for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift); else - for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift)))&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~trailing_pixel_mask; else - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask| - (*dst(I64 *)^*src(I64 *)++)&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*dst(I64 *)^*src(I64 *)++)&~trailing_pixel_mask; } kk +=img->width_internal; kk1+=dc->width_internal; @@ -612,7 +612,7 @@ public CDC *DCExtract(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2,CTask *task=NULL public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) {//2D. Clipping but not transformation. U8 reg *src,reg *dst,*font_ptr; - I64 i,m,leading_bits,trailing_bits,leading_bit_mask,trailing_bit_mask, + I64 i,m,leading_pixels,trailing_pixels,leading_pixel_mask,trailing_pixel_mask, j,k1,kk1,w1,h1,w2,h2,reg bit_shift,dist,reg color_mask; CColorROPU32 color,c; CTask *win_task; @@ -668,17 +668,17 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) if (dc->flags & DCF_DONT_DRAW) return 1; color=dc->color; - leading_bits=-(w1+x)&7; - if (!leading_bits) leading_bits=8; - leading_bit_mask=gr.to_8_bits[0xFF>>leading_bits]; + leading_pixels=-(w1+x)&7; + if (!leading_pixels) leading_pixels=8; + leading_pixel_mask=gr.to_8_bits[0xFF>>leading_pixels]; bit_shift=-x&7; - trailing_bits=(x+w2)&7; - trailing_bit_mask=gr.to_8_bits[0xFF<w2-w1) { - leading_bit_mask|=trailing_bit_mask; - trailing_bits=0; + trailing_pixels=(x+w2)&7; + trailing_pixel_mask=gr.to_8_bits[0xFF<w2-w1) { + leading_pixel_mask|=trailing_pixel_mask; + trailing_pixels=0; } - font_ptr=&text.font[(FONT_WIDTH*(FONT_HEIGHT*ch+h1))>>3]; + font_ptr=&text.font(U8 *)[FONT_HEIGHT*ch+h1]; if (color.c0.rop==ROPB_COLLISION) { m=w1&(FONT_WIDTH-1); #assert FONT_WIDTH==8 @@ -699,7 +699,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) k1=x+w1; kk1=(h1+y)*dc->width_internal+k1; if (!(dc->flags & DCF_SCREEN_BITMAP) || dc->flags&DCF_ON_TOP) { - if (leading_bits) { + if (leading_pixels) { dst=dc->body+kk1&~7; src=font_ptr; if (bit_shift) @@ -709,7 +709,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) case ROPB_MONO: for (j=h2-h1;j;j--) { m=gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF]; - *dst(I64 *)=*dst(I64 *)&leading_bit_mask|(color_mask&m|*dst(I64 *)&~m)&~leading_bit_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|(color_mask&m|*dst(I64 *)&~m)&~leading_pixel_mask; src++; dst+=dc->width_internal; } @@ -717,7 +717,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) case ROPB_XOR: if (color_mask) { for (j=h2-h1;j;j--) { - *dst(I64 *)=*dst(I64 *)&leading_bit_mask|(*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])&~leading_bit_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|(*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])&~leading_pixel_mask; src++; dst+=dc->width_internal; } @@ -726,7 +726,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) } kk1+=8; } - if (trailing_bits) { + if (trailing_pixels) { dst=dc->body+kk1&~7; src=font_ptr+1; if (bit_shift) @@ -736,7 +736,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) case ROPB_MONO: for (j=h2-h1;j;j--) { m=gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF]; - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask|(color_mask&m|*dst(I64 *)&~m)&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|(color_mask&m|*dst(I64 *)&~m)&~trailing_pixel_mask; src++; dst+=dc->width_internal; } @@ -744,7 +744,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) case ROPB_XOR: if (color_mask) { for (j=h2-h1;j;j--) { - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask|(*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|(*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])&~trailing_pixel_mask; src++; dst+=dc->width_internal; } @@ -753,7 +753,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) } } } else { - if (leading_bits) { + if (leading_pixels) { dst=dc->body+kk1&~7; src=font_ptr; if (bit_shift) @@ -764,7 +764,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) for (j=h1;j>bit_shift&0xFF]; - *dst(I64 *)=*dst(I64 *)&leading_bit_mask|(color_mask&m|*dst(I64 *)&~m)&~leading_bit_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|(color_mask&m|*dst(I64 *)&~m)&~leading_pixel_mask; } src++; dst+=dc->width_internal; @@ -774,7 +774,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) if (color_mask) { for (j=h1;j>bit_shift&0xFF])&~leading_bit_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|(*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])&~leading_pixel_mask; src++; dst+=dc->width_internal; } @@ -784,7 +784,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) k1+=8; kk1+=8; } - if (trailing_bits) { + if (trailing_pixels) { dst=dc->body+kk1&~7; src=font_ptr+1; if (bit_shift) @@ -795,7 +795,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) for (j=h1;j>bit_shift&0xFF]; - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask|(color_mask&m|*dst(I64 *)&~m)&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|(color_mask&m|*dst(I64 *)&~m)&~trailing_pixel_mask; } src++; dst+=dc->width_internal; @@ -805,7 +805,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) if (color_mask) { for (j=h1;j>bit_shift&0xFF])&~trailing_bit_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|(*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])&~trailing_pixel_mask; src++; dst+=dc->width_internal; } @@ -886,7 +886,7 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) {//2D. Width Height. Clipping but not transformation. //Returns cnt of pixs changed. I64 i,result=0,j,k1,kk1,w1,h1,w2,h2,dist, - leading_bits,original_leading_bits,whole_bytes,trailing_bits,leading_bit_mask,trailing_bit_mask, + leading_pixels,original_leading_pixels,whole_I64s,trailing_pixels,leading_pixel_mask,trailing_pixel_mask, win_z_buf_line_inc,win_z_buf_line_dec,win_z_num,color_mask; U8 reg *dst; U16 reg *win_z_buf_ptr; @@ -963,16 +963,16 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) } } else dither=FALSE; - original_leading_bits=leading_bits=-(w1+x)&7; - leading_bit_mask=gr.to_8_bits[0xFF>>leading_bits]; - whole_bytes=(w2-w1-leading_bits)>>3; - if (whole_bytes<0) whole_bytes=0; - trailing_bits=(x+w2)&7; - trailing_bit_mask=gr.to_8_bits[0xFF<w2-w1) { - leading_bit_mask|=trailing_bit_mask; - leading_bits=w2-w1; //Correct so it's right for result. - trailing_bits=0; + original_leading_pixels=leading_pixels=-(w1+x)&7; + leading_pixel_mask=gr.to_8_bits[0xFF>>leading_pixels]; + whole_I64s=(w2-w1-leading_pixels)>>3; + if (whole_I64s<0) whole_I64s=0; + trailing_pixels=(x+w2)&7; + trailing_pixel_mask=gr.to_8_bits[0xFF<w2-w1) { + leading_pixel_mask|=trailing_pixel_mask; + leading_pixels=w2-w1; //Correct so it's right for result. + trailing_pixels=0; } if (color.c0.rop==ROPB_COLLISION) {//TODO: Might want to check win_z_buf color =dc->bkcolor.c0.color; @@ -993,10 +993,10 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) else { win_z_num=win_task->win_z_num; win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); - win_z_buf_line_dec=whole_bytes; - if (leading_bits) + win_z_buf_line_dec=whole_I64s; + if (leading_pixels) win_z_buf_line_dec++; - if (trailing_bits) + if (trailing_pixels) win_z_buf_line_dec++; win_z_buf_line_dec*=sizeof(U16); win_z_buf_line_inc=TEXT_COLS*sizeof(U16)-win_z_buf_line_dec; @@ -1016,21 +1016,21 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) for (j=h1;jbody+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_bit_mask|color_mask&~leading_bit_mask; - result+=leading_bits; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|color_mask&~leading_pixel_mask; + result+=leading_pixels; } dst(I64 *)++; } - for (i=0;i=*win_z_buf_ptr++) { *dst(I64 *)=color_mask; result+=8; } - if (trailing_bits && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask|color_mask&~trailing_bit_mask; - result+=trailing_bits; + if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|color_mask&~trailing_pixel_mask; + result+=trailing_pixels; } if ((j+y)&7==7) win_z_buf_ptr(U8 *)+=win_z_buf_line_inc; @@ -1046,12 +1046,12 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) for (j=h2-h1;j;j--) { color_mask=gr.to_8_colors[color.c0.color]; dst=dc->body+kk1&~7; - if (leading_bits) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask|color_mask&~leading_bit_mask; - for (i=0;iwidth_internal; if (RandU16dither_probability_u16) color.c0=dither_colors.c1; @@ -1067,21 +1067,21 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) for (j=h1;jbody+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_bit_mask|*dst(I64 *)^color_mask&~leading_bit_mask; - result+=leading_bits; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|*dst(I64 *)^color_mask&~leading_pixel_mask; + result+=leading_pixels; } dst(I64 *)++; } - for (i=0;i=*win_z_buf_ptr++) { *dst(I64 *)^=color_mask; result+=8; } - if (trailing_bits && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask|*dst(I64 *)^color_mask&~trailing_bit_mask; - result+=trailing_bits; + if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|*dst(I64 *)^color_mask&~trailing_pixel_mask; + result+=trailing_pixels; } if ((j+y)&7==7) win_z_buf_ptr(U8 *)+=win_z_buf_line_inc; @@ -1097,12 +1097,12 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) for (j=h2-h1;j;j--) { color_mask=gr.to_8_colors[color.c0.color]; dst=dc->body+kk1&~7; - if (leading_bits) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask|*dst(I64 *)^color_mask&~leading_bit_mask; - for (i=0;iwidth_internal; if (RandU16dither_probability_u16) color.c0=dither_colors.c1; @@ -1114,7 +1114,7 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) break; } } else { - if (((x+w1-original_leading_bits)^(y+h1))&1) + if (((x+w1-original_leading_pixels)^(y+h1))&1) SwapU16(&color.c0,&color.c1); nobound_switch (color.c0.rop) { case ROPB_EQU: @@ -1125,21 +1125,21 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) color_mask=gr.to_8_bits[0x55]&gr.to_8_colors[color.c0.color]| gr.to_8_bits[0xAA]&gr.to_8_colors[color.c1.color]; dst=dc->body+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_bit_mask|color_mask&~leading_bit_mask; - result+=leading_bits; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|color_mask&~leading_pixel_mask; + result+=leading_pixels; } dst(I64 *)++; } - for (i=0;i=*win_z_buf_ptr++) { *dst(I64 *)=color_mask; result+=8; } - if (trailing_bits && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask|color_mask&~trailing_bit_mask; - result+=trailing_bits; + if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|color_mask&~trailing_pixel_mask; + result+=trailing_pixels; } if ((j+y)&7==7) win_z_buf_ptr(U8 *)+=win_z_buf_line_inc; @@ -1153,12 +1153,12 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) color_mask=gr.to_8_bits[0x55]&gr.to_8_colors[color.c0.color]| gr.to_8_bits[0xAA]&gr.to_8_colors[color.c1.color]; dst=dc->body+kk1&~7; - if (leading_bits) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask|color_mask&~leading_bit_mask; - for (i=0;iwidth_internal; SwapU16(&color.c0,&color.c1); } @@ -1172,21 +1172,21 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) color_mask=gr.to_8_bits[0x55]&gr.to_8_colors[color.c0.color]| gr.to_8_bits[0xAA]&gr.to_8_colors[color.c1.color]; dst=dc->body+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_bit_mask|*dst(I64 *)^color_mask&~leading_bit_mask; - result+=leading_bits; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|*dst(I64 *)^color_mask&~leading_pixel_mask; + result+=leading_pixels; } dst(I64 *)++; } - for (i=0;i=*win_z_buf_ptr++) { *dst(I64 *)^=color_mask; result+=8; } - if (trailing_bits && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask|*dst(I64 *)^color_mask&~trailing_bit_mask; - result+=trailing_bits; + if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|*dst(I64 *)^color_mask&~trailing_pixel_mask; + result+=trailing_pixels; } if ((j+y)&7==7) win_z_buf_ptr(U8 *)+=win_z_buf_line_inc; @@ -1200,12 +1200,12 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) color_mask=gr.to_8_bits[0x55]&gr.to_8_colors[color.c0.color]| gr.to_8_bits[0xAA]&gr.to_8_colors[color.c1.color]; dst=dc->body+kk1&~7; - if (leading_bits) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask|*dst(I64 *)^color_mask&~leading_bit_mask; - for (i=0;iwidth_internal; SwapU16(&color.c0,&color.c1); } @@ -1223,21 +1223,21 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) result=0; for (j=h1;jbody+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_bit_mask|color_mask&~leading_bit_mask; - result+=leading_bits; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|color_mask&~leading_pixel_mask; + result+=leading_pixels; } dst(I64 *)++; } - for (i=0;i=*win_z_buf_ptr++) { *dst(I64 *)=color_mask; result+=8; } - if (trailing_bits && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask|color_mask&~trailing_bit_mask; - result+=trailing_bits; + if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|color_mask&~trailing_pixel_mask; + result+=trailing_pixels; } if ((j+y)&7==7) win_z_buf_ptr(U8 *)+=win_z_buf_line_inc; @@ -1248,12 +1248,12 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) } else { for (j=h2-h1;j;j--) { dst(I64 *)=dc->body+kk1&~7; - if (leading_bits) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask|color_mask&~leading_bit_mask; - for (i=0;iwidth_internal; } result=(h2-h1)*(w2-w1); @@ -1264,21 +1264,21 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) result=0; for (j=h1;jbody+kk1&~7; - if (leading_bits) { + if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_bit_mask|*dst(I64 *)^color_mask&~leading_bit_mask; - result+=leading_bits; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|*dst(I64 *)^color_mask&~leading_pixel_mask; + result+=leading_pixels; } dst(I64 *)++; } - for (i=0;i=*win_z_buf_ptr++) { *dst(I64 *)^=color_mask; result+=8; } - if (trailing_bits && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_bit_mask|*dst(I64 *)^color_mask&~trailing_bit_mask; - result+=trailing_bits; + if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|*dst(I64 *)^color_mask&~trailing_pixel_mask; + result+=trailing_pixels; } if ((j+y)&7==7) win_z_buf_ptr(U8 *)+=win_z_buf_line_inc; @@ -1289,12 +1289,12 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) } else { for (j=h2-h1;j;j--) { dst=dc->body+kk1&~7; - if (leading_bits) - *dst(I64 *)++=*dst(I64 *)&leading_bit_mask|*dst(I64 *)^color_mask&~leading_bit_mask; - for (i=0;iwidth_internal; } result=(h2-h1)*(w2-w1); diff --git a/Adam/Gr/GrDC.CPP b/Adam/Gr/GrDC.CPP index 3aafd95..16f17b7 100644 --- a/Adam/Gr/GrDC.CPP +++ b/Adam/Gr/GrDC.CPP @@ -41,17 +41,21 @@ public I64 *GrIdentEqu(I64 r[4][4]) return r; } +public I64 GrRotNormSqr65536(I64 r[4][4]) +{//Norm Squared of r. +//(1.0/Sqrt(3))*65536=37837.22 + return SqrI64((r[0][0]*37838+r[0][1]*37838+r[0][2]*37838)>>32)+ + SqrI64((r[1][0]*37837+r[1][1]*37837+r[1][2]*37837)>>32)+ + SqrI64((r[2][0]*37837+r[2][1]*37837+r[2][2]*37837)>>32); +} + public U0 GrSetRotMat(CDC *dc=NULL,I64 r[4][4]) {//Set device context's rot matrix. Will be $LK,"Free",A="MN:Free"$d() in $LK,"DCDel",A="MN:DCDel"$(). Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. //The main purpose is to set matrix norm for pen width scaling. //NULL as dc means gr.dc -//Note: (1.0/Sqrt(3))*65536=37837.22 - I64 xx=37838,yy=37837,zz=37837; if (!dc) dc=gr.dc; dc->r=r; - GrRot(r,&xx,&yy,&zz); - //scaled 32 bits - dc->r_norm=Sqrt(xx*xx+yy*yy+zz*zz)*65536; + dc->r_norm=Sqrt(GrRotNormSqr65536(r))*65536; //scaled 32 bits } #help_index "Graphics/Mesh" @@ -171,7 +175,7 @@ public CDC *DCAlias(CDC *dc=NULL,CTask *task=NULL) if (!dc) dc=gr.dc; if (!task) task=Fs; if (dc->dc_signature!=DCS_SIGNATURE_VAL) - Dbg; + throw('Graphics'); result=MAlloc(sizeof(CDC),task); MemCpy(result,dc,sizeof(CDC)); result->win_task=result->mem_task=task; @@ -185,7 +189,7 @@ public CDC *DCAlias(CDC *dc=NULL,CTask *task=NULL) public CDC *DCNew(I64 width,I64 height,CTask *task=NULL,Bool null_bitmap=FALSE) {//Create new width x height device context. //Internally only allows widths which are divisible by 8. -//Don't forget these $MA-X+PU,"sizeof(CDC)",LM="Grep(\"sizeof(CDC)\",\"/*\");View;"$. +//Don't forget these $MA-X+PU,"sizeof(CDC)",LM="Find(\"sizeof(CDC)\",\"/*\");View;"$. CDC *result; if (!task) task=Fs; result=CAlloc(sizeof(CDC),task); @@ -194,11 +198,10 @@ public CDC *DCNew(I64 width,I64 height,CTask *task=NULL,Bool null_bitmap=FALSE) result->width=width; result->width_internal=(width+7)&~7; result->height=height; - result->body_size=result->width_internal*result->height; if (null_bitmap) result->flags|=DCF_DONT_DRAW; else - result->body=CAlloc(result->body_size,task); + result->body=CAlloc(result->width_internal*result->height,task); result->r=MAlloc(16*sizeof(I64),task); DCRst(result); result->dc_signature=DCS_SIGNATURE_VAL; @@ -209,7 +212,7 @@ public U0 DCDel(CDC *dc) {//Free dc, image body, rot mat and depth buf. if (!dc) return; if (dc->dc_signature!=DCS_SIGNATURE_VAL) - Dbg; + throw('Graphics'); dc->dc_signature=0; Free(dc->r); if (!(dc->flags & DCF_ALIAS)) @@ -233,7 +236,7 @@ public U0 DCDepthBufRst(CDC *dc) } public U0 DCAllocDepthBuf(CDC *dc) -{//Allocate a 32-bit depth buffer for device context. +{//Alloc a 32-bit depth buffer for device context. Free(dc->depth_buf); dc->depth_buf=MAlloc(dc->width_internal*dc->height*sizeof(I32),dc->mem_task); DCDepthBufRst(dc); @@ -244,7 +247,7 @@ public CDC *DCCopy(CDC *dc,CTask *task=NULL) CDC *result; if (!dc) return NULL; if (dc->dc_signature!=DCS_SIGNATURE_VAL) - Dbg; + throw('Graphics'); result=MAllocIdentical(dc,task); GrSetRotMat(result,MAllocIdentical(dc->r,task)); result->mem_task=task; @@ -287,32 +290,27 @@ public U8 *DCSave(CDC *dc,I64 *_size=NULL,Bool compressed=TRUE) U8 *result,*ptr,*body; Bool old_preempt; CArcCompress *ac; - I64 i,old_flags=dc->flags; + I64 i=dc->width_internal*dc->height,old_flags=dc->flags; if (compressed) { - ac=CompressBuf(dc->body,dc->body_size); + ac=CompressBuf(dc->body,i); i=ac->compressed_size; body=ac; } else { ac=NULL; - i=dc->body_size; body=dc->body; } - ptr=result=MAlloc(offset(CDC.end_saved_area)- - offset(CDC.start_saved_area)+i); + ptr=result=MAlloc(offset(CDC.end)-offset(CDC.start)+i); old_preempt=Preempt(OFF); //in case it is a screen bitmap if (compressed) dc->flags|=DCF_COMPRESSED; dc->flags&=DCF_COMPRESSED; - MemCpy(result,&dc->start_saved_area, - offset(CDC.end_saved_area)- - offset(CDC.start_saved_area)); + MemCpy(result,&dc->start,offset(CDC.end)-offset(CDC.start)); dc->flags=old_flags; Preempt(old_preempt); - ptr+=offset(CDC.end_saved_area)- - offset(CDC.start_saved_area); + ptr+=offset(CDC.end)-offset(CDC.start); MemCpy(ptr,body,i); ptr+=i; @@ -326,22 +324,24 @@ public CDC *DCLoad(U8 *src,I64 *_size=NULL,CTask *task=NULL) CDC *result; U8 *ptr=src; CArcCompress *ac; + I64 body_size; if (!task) task=Fs; result=CAlloc(sizeof(CDC),task); result->win_task=task; result->mem_task=task; - MemCpy(&result->start_saved_area,src, - offset(CDC.end_saved_area)-offset(CDC.start_saved_area)); - ptr+=offset(CDC.end_saved_area)-offset(CDC.start_saved_area); + MemCpy(&result->start,src, + offset(CDC.end)-offset(CDC.start)); + ptr+=offset(CDC.end)-offset(CDC.start); + body_size=result->width_internal*result->height; if (result->flags&DCF_COMPRESSED) { result->flags&=~DCF_COMPRESSED; ac=ptr; result->body=ExpandBuf(ac,task); ptr+=ac->compressed_size; } else { - result->body=MAlloc(result->body_size,task); - MemCpy(result->body,ptr,result->body_size); - ptr+=result->body_size; + result->body=MAlloc(body_size,task); + MemCpy(result->body,ptr,body_size); + ptr+=body_size; } result->pen_width=1; result->r=GrIdentNew(task); @@ -351,6 +351,8 @@ public CDC *DCLoad(U8 *src,I64 *_size=NULL,CTask *task=NULL) return result; } +#help_index "Graphics/GRA Files" +#help_file "::/Doc/GRAFiles" #help_index "Graphics/Device Contexts;Graphics/GRA Files" public I64 GRAWrite(U8 *filename,CDC *dc) {//TempleOS GRA File. @@ -376,7 +378,7 @@ public CDC *GRARead(U8 *filename,CTask *task=NULL) } #help_index "Graphics/Sprite;Graphics/GRA Files;DolDoc/Output" -public U0 DocGRAFile(CDoc *doc=NULL,U8 *filename) +public U0 DocGRA(CDoc *doc=NULL,U8 *filename) {//Put a GRA file into a document as a sprite. CDC *dc=GRARead(filename); CSprite *elems=DC2Sprite(dc); @@ -386,25 +388,29 @@ public U0 DocGRAFile(CDoc *doc=NULL,U8 *filename) } #help_index "Graphics/Device Contexts;Graphics/Screen" -public CDC *DCCaptureScreen(CTask *task=NULL) +public CDC *DCCaptureScreen(Bool include_zoom=TRUE,CTask *task=NULL) {//Capture screen to a device context. CDC *dc; U8 *dst; WinMgrSync(2,TRUE); - dc=DCCopy(gr.screen_image,task); - dst=MAlloc(dc->body_size,task); + if (include_zoom) + dc=DCCopy(gr.screen_image,task); + else + dc=DCCopy(gr.dc1,task); + dc->flags&=~DCF_SCREEN_BITMAP; + dst=MAlloc(dc->width_internal*dc->height,task); //Pick background color that never occurs. COLOR_INVALID - GrBitMap4ToBitMap8(dst,dc->body,dc->body_size/2,COLOR_INVALID); + GrBitMap4ToBitMap8(dst,dc->body,(dc->width_internal*dc->height)>>1,COLOR_INVALID); Free(dc->body); dc->body=dst; return dc; } #help_index "Graphics/GRA Files;Graphics/Screen" -public I64 GRACaptureScreen(U8 *filename) +public I64 GRACaptureScreen(U8 *filename,Bool include_zoom=TRUE) {//Capture screen to a TempleOS GRA File. I64 size; - CDC *dc=DCCaptureScreen; + CDC *dc=DCCaptureScreen(include_zoom); size=GRAWrite(filename,dc); DCDel(dc); return size; diff --git a/Adam/Gr/GrEnd.CPP b/Adam/Gr/GrEnd.CPP index aed9207..9e18434 100644 --- a/Adam/Gr/GrEnd.CPP +++ b/Adam/Gr/GrEnd.CPP @@ -7,7 +7,7 @@ U0 CtrlAltZ(I64 sc) else GrScaleZoom(2.0); } -SetCtrlAltLetCB('Z',&CtrlAltZ,"Sys/Zoom In or Out"); +CtrlAltLetCBSet('Z',&CtrlAltZ,"Sys/Zoom In or Out"); U0 Screen2Clipboard(I64) { @@ -25,4 +25,4 @@ U0 CtrlAltS(I64) { Spawn(&Screen2Clipboard); } -SetCtrlAltLetCB('S',&CtrlAltS,"Sys/Screen Shot to Clipboard"); +CtrlAltLetCBSet('S',&CtrlAltS,"Sys/Screen Shot to Clipboard"); diff --git a/Adam/Gr/GrGlbls.CPP b/Adam/Gr/GrGlbls.CPP index 7bd9326..73ef36c 100644 --- a/Adam/Gr/GrGlbls.CPP +++ b/Adam/Gr/GrGlbls.CPP @@ -9,7 +9,7 @@ public class CGrGlbls *dc2, //Updated every refresh *dc_cache, *zoomed_dc; - U32 *text_base; //See $LK,"TextBase Layer",A="HI:TextBase Layer"$. + U32 *text_base; //See $LK,"TextBase Layer",A="HI:TextBase Layer"$. (Similar to 0xB8000 but 32 bits) U16 *win_z_buf; #define SPHT_ELEM_CODE 1 @@ -19,7 +19,7 @@ public class CGrGlbls I64 highest_uncovered; U16 *vga_text_cache; I64 pan_text_x,pan_text_y; //[-7,7] - U0 (*fp_final_screen_update)(CDC *dc); + U0 (*fp_final_screen_update)(CDC *dc);//Mouse cursor is handled here. U0 (*fp_wall_paper)(CTask *task); U0 (*fp_draw_input_ptr)(CDC *dc,I64 x,I64 y); U0 (*fp_draw_grab_input_ptr)(CDC *dc,I64 x,I64 y,Bool closed); @@ -31,10 +31,6 @@ public class CGrGlbls *even_pen_brushes[GR_NUM_PEN_BRUSHES], *odd_pen_brushes[GR_NUM_PEN_BRUSHES]; -#define GR_REFRESH_LOG_CNT 16 - F64 refresh_time_stamps[GR_REFRESH_LOG_CNT]; - I64 refresh_ts_ptr; - #define GR_MAX_SCREEN_ZOOM 8 U8 *screen_zoom_tables[GR_MAX_SCREEN_ZOOM+1]; I64 screen_zoom,sx,sy; @@ -43,7 +39,7 @@ public class CGrGlbls Bool continuous_scroll; } gr; -//See $LK,"SYS_BIOS_GR_MODE",A="FF:D:/Kernel/KStart.CPP,SYS_BIOS_GR_MODE:2"$ +//See $LK,"RLf_VGA",A="FF:::/Kernel/KStart.CPP,RLf_VGA"$ //See $LK,"SysGrInit",A="MN:SysGrInit"$() //Allows consts to be used instead of vars. HashPublic("GR_WIDTH",HTT_DEFINE_STR);; diff --git a/Adam/Gr/GrInit.CPP b/Adam/Gr/GrInit.CPP index f2c9c79..995d001 100644 --- a/Adam/Gr/GrInit.CPP +++ b/Adam/Gr/GrInit.CPP @@ -55,14 +55,14 @@ U0 GrSetUpTables() if (((x-1)^(y-1))&1 && SqrI64(y*2-k)+SqrI64(x*2-k)>3); +// MemSet(VGAM_GRAPHICS,0,GR_HEIGHT*GR_WIDTH>>3); MemSet(gr.screen_image->body,0,GR_WIDTH*GR_HEIGHT>>1); } for (i=1;i<=GR_MAX_SCREEN_ZOOM;i++) { @@ -79,8 +79,6 @@ U0 GrSetUpTables() dst[j+l*256]=m.u8[l]; } } - for (i=0;i>2); - OutU8(VGA_PALETTE_DATA,bgr.g>>2); - OutU8(VGA_PALETTE_DATA,bgr.b>>2); + OutU8(VGAP_PALETTE_MASK,0xFF); + OutU8(VGAP_REG_WRITE,color_num); + OutU8(VGAP_PALETTE_DATA,bgr.r>>2); + OutU8(VGAP_PALETTE_DATA,bgr.g>>2); + OutU8(VGAP_PALETTE_DATA,bgr.b>>2); LBtr(&sys_semas[SYS_SEMA_VGA],0); POPFD } @@ -54,16 +54,16 @@ public U0 SetVGAPaletteColor(I64 color_num,CBGR bgr) public CBGR GetVGAPaletteColor(I64 color_num) {//6-bits per b, g and r. CBGR result=0; - if (!sys_bios_gr_mode) return 0; + if (!Bt(&sys_run_level,RLf_VGA)) return 0; PUSHFD CLI while (LBts(&sys_semas[SYS_SEMA_VGA],0)) Yield; - OutU8(VGA_PALETTE_MASK,0xFF); - OutU8(VGA_REG_READ,color_num); - result.r=InU8(VGA_PALETTE_DATA)<<2; - result.g=InU8(VGA_PALETTE_DATA)<<2; - result.b=InU8(VGA_PALETTE_DATA)<<2; + OutU8(VGAP_PALETTE_MASK,0xFF); + OutU8(VGAP_REG_READ,color_num); + result.r=InU8(VGAP_PALETTE_DATA)<<2; + result.g=InU8(VGAP_PALETTE_DATA)<<2; + result.b=InU8(VGAP_PALETTE_DATA)<<2; LBtr(&sys_semas[SYS_SEMA_VGA],0); POPFD return result; diff --git a/Adam/Gr/GrPrimatives.CPP b/Adam/Gr/GrPrimatives.CPP index 2dd5d65..907884c 100644 --- a/Adam/Gr/GrPrimatives.CPP +++ b/Adam/Gr/GrPrimatives.CPP @@ -235,7 +235,7 @@ I64 GrFloodFillRay(CDC *dc,I64 x,I64 y,I64 z,I32 *db) } public I64 GrFloodFill(CDC *dc=gr.dc,I64 x,I64 y,Bool not_color=FALSE,I64 z=0,I32 *db=NULL) -{//3D. Ignore z and db. +{//2D. Ignore z and db. //not_color=TRUE means fill up to everything which is not the current color. //not_color=FALSE means fill all parts equal to the color under the point. //Returns cnt of pixs changed diff --git a/Adam/Gr/GrScreen.CPP b/Adam/Gr/GrScreen.CPP index 09709c3..7d61697 100644 --- a/Adam/Gr/GrScreen.CPP +++ b/Adam/Gr/GrScreen.CPP @@ -89,16 +89,10 @@ U0 GrUpdateWins() PutExcept(FALSE); Dbg("Exception in WinMgr"); } - winmgr.last_ode_time=winmgr.ode_time; - ode_allocated_factor=LowPass1(0.1,ode_allocated_factor, + ode_alloced_factor=LowPass1(0.1,ode_alloced_factor, Clamp(Gs->idle_factor-0.1,0.2,0.8),1/winmgr.fps); - sys_task_being_screen_updated=NULL; - gr.refresh_time_stamps[gr.refresh_ts_ptr++&(GR_REFRESH_LOG_CNT-1)]=tS; - winmgr.fps=(GR_REFRESH_LOG_CNT-1)/ - (gr.refresh_time_stamps[(gr.refresh_ts_ptr-1)&(GR_REFRESH_LOG_CNT-1)]- - gr.refresh_time_stamps[gr.refresh_ts_ptr&(GR_REFRESH_LOG_CNT-1)]); } U0 GrFixZoomScale() @@ -339,7 +333,7 @@ U0 GrUpdateTextModeText() { U32 *src=gr.text_base; I64 cur_ch,i,d0=TEXT_COLS*TEXT_ROWS; - U16 *dst=VGA_TEXT_MEM_BASE,*dst2=gr.vga_text_cache; + U16 *dst=VGAM_TEXT,*dst2=gr.vga_text_cache; Bool blink_flag=Blink; if (LBtr(&sys_semas[SYS_SEMA_FLUSH_VGA_IMAGE],0)) { i=d0; @@ -390,18 +384,18 @@ U0 GrUpdateVGAGraphics() dst=gr.screen_image->body; if (LBtr(&sys_semas[SYS_SEMA_FLUSH_VGA_IMAGE],0)) { for (plane=1;plane<0x10;plane<<=1) { - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,plane); - vga=VGA_GRAPHIC_MEM_BASE; + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,plane); + vga=VGAM_GRAPHICS; row=gr.zoomed_dc->height; while (row--) GrUpdateLine64FlushCache(&vga,&src,d,&dst); } } else { for (plane=1;plane<0x10;plane<<=1) { - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,plane); - vga=VGA_GRAPHIC_MEM_BASE; + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,plane); + vga=VGAM_GRAPHICS; row=gr.zoomed_dc->height; while (row--) GrUpdateLine64(&vga,&src,d,&dst); @@ -410,10 +404,10 @@ U0 GrUpdateVGAGraphics() } U0 GrUpdateScreen() -{//Called by the Window Manager $LK,"HERE",A="FF:::/Adam/Win2b.CPP,GrUpdateScreen"$, 60 times a second. +{//Called by the Window Manager $LK,"HERE",A="FF:::/Adam/WinB.CPP,GrUpdateScreen"$, 60 times a second. CDC *dc; Preempt(ON); - if (!sys_bios_gr_mode) //if text mode + if (!Bt(&sys_run_level,RLf_VGA)) //if text mode GrUpdateWins; else { GrUpdateTextBG; @@ -429,7 +423,7 @@ U0 GrUpdateScreen() (*gr.fp_final_screen_update)(dc); DCDel(dc); - if (!sys_bios_gr_mode) //if text mode + if (!Bt(&sys_run_level,RLf_VGA)) //if text mode GrUpdateTextModeText; else { DCBlotColor4(gr.dc1->body,gr.dc2->body,gr.dc_cache->body, diff --git a/Adam/Gr/GrSpritePlot.CPP b/Adam/Gr/GrSpritePlot.CPP index f3e34ed..1ff42a0 100644 --- a/Adam/Gr/GrSpritePlot.CPP +++ b/Adam/Gr/GrSpritePlot.CPP @@ -39,15 +39,15 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) dc->cur_sprite_elem_num=cur_sprite_elem_num++; switch (tempg->type) { case SPT_COLOR: - dc->color=dc->color&~(COLORROP_COLORS_MASK|ROPF_DITHER)|tempg->color; + dc->color=dc->color&~(COLORROP_COLORS_MASK|ROPF_DITHER)|tempg->c.color; break; case SPT_DITHER_COLOR: dc->color=dc->color&~COLORROP_COLORS_MASK| - tempg->dither_color.u8[0]| - tempg->dither_color.u8[1]<d.dither_color.u8[0]| + tempg->d.dither_color.u8[1]<pen_width=tempg->width; + dc->pen_width=tempg->w.width; GrScalePenWidth(dc); break; case SPT_TRANSFORM_ON: @@ -67,86 +67,87 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) dc->flags&=~DCF_TRANSFORMATION; break; case SPT_PT: - GrPlot3(dc,tempg->x1+x,tempg->y1+y,z); + GrPlot3(dc,tempg->p.x1+x,tempg->p.y1+y,z); break; case SPT_TEXT: - GrPrint3(dc,tempg->x1+x,tempg->y1+y,z,"%s",tempg->st); + GrPrint3(dc,tempg->ps.x1+x,tempg->ps.y1+y,z,"%s",tempg->ps.st); break; case SPT_TEXT_BOX: - GrTextBox3(dc,tempg->x1+x,tempg->y1+y,z,tempg->st); + GrTextBox3(dc,tempg->ps.x1+x,tempg->ps.y1+y,z,tempg->ps.st); break; case SPT_TEXT_DIAMOND: - GrTextDiamond3(dc,tempg->x1+x,tempg->y1+y,z,tempg->st); + GrTextDiamond3(dc,tempg->ps.x1+x,tempg->ps.y1+y,z,tempg->ps.st); break; case SPT_FLOOD_FILL: - GrFloodFill3(dc,tempg->x1+x,tempg->y1+y,z,FALSE); + GrFloodFill3(dc,tempg->p.x1+x,tempg->p.y1+y,z,FALSE); break; case SPT_FLOOD_FILL_NOT: i=dc->color; dc->color=dc->color.c0; - GrFloodFill3(dc,tempg->x1+x,tempg->y1+y,z,TRUE); + GrFloodFill3(dc,tempg->p.x1+x,tempg->p.y1+y,z,TRUE); dc->color=i; break; case SPT_SHIFT: - x+=tempg->x1; - y+=tempg->y1; + x+=tempg->p.x1; + y+=tempg->p.y1; break; case SPT_LINE: - GrLine3(dc,tempg->x1+x,tempg->y1+y,z,tempg->x2+x,tempg->y2+y,z); + GrLine3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z,tempg->pp.x2+x,tempg->pp.y2+y,z); break; case SPT_ARROW: - GrArrow3(dc,tempg->x1+x,tempg->y1+y,z,tempg->x2+x,tempg->y2+y,z); + GrArrow3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z,tempg->pp.x2+x,tempg->pp.y2+y,z); break; case SPT_PLANAR_SYMMETRY: - if (GrSetSymmetry3(dc,tempg->x1+x,tempg->y1+y,z,tempg->x2+x,tempg->y2+y,z,tempg->x2+x,tempg->y2+y,z+1)) + if (GrSetSymmetry3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z,tempg->pp.x2+x,tempg->pp.y2+y,z,tempg->pp.x2+x,tempg->pp.y2+y,z+1)) dc->flags|=DCF_SYMMETRY; else dc->flags&=~DCF_SYMMETRY; break; case SPT_BITMAP: img=CAlloc(sizeof(CDC)); - img->width=tempg->width; - img->width_internal=(tempg->width+7)&~7; - img->height=tempg->height; - img->body_size=img->width_internal*img->height; - img->body=tempg(U8 *)+offset(CSprite.linespeed); + img->width=tempg->pwhu.width; + img->width_internal=(tempg->pwhu.width+7)&~7; + img->height=tempg->pwhu.height; + img->body=&tempg->pwhu.u; img->dc_signature=DCS_SIGNATURE_VAL; - GrBlot3(dc,tempg->x2+x,tempg->y2+y,z,img); + GrBlot3(dc,tempg->pwhu.x1+x,tempg->pwhu.y1+y,z,img); Free(img); break; case SPT_RECT: - GrRect3(dc,tempg->x1+x,tempg->y1+y,z,tempg->x2-tempg->x1,tempg->y2-tempg->y1); + GrRect3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z,tempg->pp.x2-tempg->pp.x1,tempg->pp.y2-tempg->pp.y1); break; case SPT_ROTATED_RECT: - x1=tempg->x1+x; - y1=tempg->y1+y; + x1=tempg->ppa.x1+x; + y1=tempg->ppa.y1+y; z1=z; GrRot(dc->r,&x1,&y1,&z1); old_r=dc->r; dc->flags|=DCF_TRANSFORMATION; - r2=GrRotZNew(-tempg->rot_angle); + r2=GrRotZNew(-tempg->ppa.angle); GrSetTranslation(r2,x1,y1,z1); GrSetRotMat(dc,GrMulMat(old_r,r2)); - GrRect3(dc,0,0,0,tempg->x2-tempg->x1,tempg->y2-tempg->y1); + GrRect3(dc,0,0,0,tempg->ppa.x2-tempg->ppa.x1,tempg->ppa.y2-tempg->ppa.y1); Free(dc->r); Free(r2); GrSetRotMat(dc,old_r); dc->flags=dc->flags&~DCF_TRANSFORMATION|old_flags; break; case SPT_CIRCLE: - GrCircle3(dc,tempg->x1+x,tempg->y1+y,z,tempg->x2); + GrCircle3(dc,tempg->pr.x1+x,tempg->pr.y1+y,z,tempg->pr.radius); break; case SPT_ELLIPSE: - GrEllipse3(dc,tempg->x2+x,tempg->y2+y,z,tempg->width,tempg->height,tempg->rot_angle); + GrEllipse3(dc,tempg->pwha.x1+x,tempg->pwha.y1+y,z,tempg->pwha.width, + tempg->pwha.height,tempg->pwha.angle); break; case SPT_POLYGON: - GrRegPoly3(dc,tempg->x2+x,tempg->y2+y,z,tempg->width,tempg->height,tempg->sides,tempg->rot_angle); + GrRegPoly3(dc,tempg->pwhas.x1+x,tempg->pwhas.y1+y,z,tempg->pwhas.width, + tempg->pwhas.height,tempg->pwhas.sides,tempg->pwhas.angle); break; case SPT_POLYLINE: - ptr=&tempg->y1; + ptr=&tempg->nu.u; x1=ptr[0]; y1=ptr[1]; - for (i=1;inum;i++) { + for (i=1;inu.num;i++) { x2=ptr[i<<1]; y2=ptr[i<<1+1]; GrLine3(dc,x1+x,y1+y,z,x2+x,y2+y,z); @@ -154,11 +155,10 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) } break; case SPT_POLYPT: - ptr=&tempg->y1; - x1=ptr[0]; - y1=ptr[1]; - ptr+=2; - k=tempg->num*3; + x1=tempg->npu.x; + y1=tempg->npu.y; + ptr=&tempg->npu.u; + k=tempg->npu.num*3; GrPlot3(dc,x1+x,y1+y,z); for (i=0;iy1; - for (i=0;inum;i++,p++) { + p=&tempg->nu.u; + for (i=0;inu.num;i++,p++) { p->x+=x; p->y+=y; p->z+=z; } case SPT_BSPLINE2: - Gr2BSpline3(dc,&tempg->y1,tempg->num,FALSE); + Gr2BSpline3(dc,&tempg->nu.u,tempg->nu.num,FALSE); break; case SPT_BSPLINE3: - Gr3BSpline3(dc,&tempg->y1,tempg->num,FALSE); + Gr3BSpline3(dc,&tempg->nu.u,tempg->nu.num,FALSE); break; case SPT_BSPLINE2_CLOSED: - Gr2BSpline3(dc,&tempg->y1,tempg->num,TRUE); + Gr2BSpline3(dc,&tempg->nu.u,tempg->nu.num,TRUE); break; case SPT_BSPLINE3_CLOSED: - Gr3BSpline3(dc,&tempg->y1,tempg->num,TRUE); + Gr3BSpline3(dc,&tempg->nu.u,tempg->nu.num,TRUE); break; sub_switch_end: - p=&tempg->y1; - for (i=0;inum;i++,p++) { + p=&tempg->nu.u; + for (i=0;inu.num;i++,p++) { p->x-=x; p->y-=y; p->z-=z; } break; case SPT_MESH: - p=&tempg->x2; - for (i=0;ivertex_cnt;i++,p++) { + p=&tempg->mu.u; + for (i=0;imu.vertex_cnt;i++,p++) { p->x+=x; p->y+=y; p->z+=z; } - Gr3Mesh(dc,tempg->vertex_cnt,&tempg->x2,tempg->tri_cnt,(&tempg->x2)(U8 *)+sizeof(CD3I32)*tempg->vertex_cnt); - p=&tempg->x2; - for (i=0;ivertex_cnt;i++,p++) { + Gr3Mesh(dc,tempg->mu.vertex_cnt,&tempg->mu.u,tempg->mu.tri_cnt, + (&tempg->mu.u)(U8 *)+sizeof(CD3I32)*tempg->mu.vertex_cnt); + p=&tempg->mu.u; + for (i=0;imu.vertex_cnt;i++,p++) { p->x-=x; p->y-=y; p->z-=z; @@ -211,35 +212,35 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) break; case SPT_SHIFTABLE_MESH: if (dc->flags&DCF_TRANSFORMATION) { - dc->x+=tempg->x1; - dc->y+=tempg->y1; - dc->z+=tempg->z1; + dc->x+=tempg->pmu.x; + dc->y+=tempg->pmu.y; + dc->z+=tempg->pmu.z; x1=x; y1=y; z1=z; } else { - x1=tempg->x1+x; - y1=tempg->y1+y; - z1=tempg->z1+z; + x1=tempg->pmu.x+x; + y1=tempg->pmu.y+y; + z1=tempg->pmu.z+z; } - p=(&tempg->shiftable_tri_cnt)(U8 *)+sizeof(I32); - for (i=0;ishiftable_vertex_cnt;i++,p++) { + p=&tempg->pmu.u; + for (i=0;ipmu.vertex_cnt;i++,p++) { p->x+=x1; p->y+=y1; p->z+=z1; } - p=(&tempg->shiftable_tri_cnt)(U8 *)+sizeof(I32); - Gr3Mesh(dc,tempg->shiftable_vertex_cnt,p,tempg->shiftable_tri_cnt,p(U8 *)+sizeof(CD3I32)*tempg->shiftable_vertex_cnt); - p=(&tempg->shiftable_tri_cnt)(U8 *)+sizeof(I32); - for (i=0;ishiftable_vertex_cnt;i++,p++) { + Gr3Mesh(dc,tempg->pmu.vertex_cnt,&tempg->pmu.u,tempg->pmu.tri_cnt, + (&tempg->pmu.u)(U8 *)+sizeof(CD3I32)*tempg->pmu.vertex_cnt); + p=&tempg->pmu.u; + for (i=0;ipmu.vertex_cnt;i++,p++) { p->x-=x1; p->y-=y1; p->z-=z1; } if (dc->flags&DCF_TRANSFORMATION) { - dc->x-=tempg->x1; - dc->y-=tempg->y1; - dc->z-=tempg->z1; + dc->x-=tempg->pmu.x; + dc->y-=tempg->pmu.y; + dc->z-=tempg->pmu.z; } break; } @@ -355,13 +356,13 @@ public U8 *SpriteInterpolate(U8 *elems0,U8 *elems1,F64 t) throw('Graphics'); switch (tempg0->type) { case SPT_ROTATED_RECT: - tempgr->rot_angle=(tempg0->rot_angle*t0+tempg1->rot_angle*t1)/GR_SCALE; + tempgr->ppa.angle=(tempg0->ppa.angle*t0+tempg1->ppa.angle*t1)/GR_SCALE; case SPT_RECT: case SPT_LINE: case SPT_ARROW: case SPT_PLANAR_SYMMETRY: - tempgr->x2=(tempg0->x2*t0+tempg1->x2*t1)>>32; - tempgr->y2=(tempg0->y2*t0+tempg1->y2*t1)>>32; + tempgr->pp.x2=(tempg0->pp.x2*t0+tempg1->pp.x2*t1)>>32; + tempgr->pp.y2=(tempg0->pp.y2*t0+tempg1->pp.y2*t1)>>32; case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: @@ -369,69 +370,66 @@ public U8 *SpriteInterpolate(U8 *elems0,U8 *elems1,F64 t) case SPT_FLOOD_FILL: case SPT_FLOOD_FILL_NOT: case SPT_SHIFT: - tempgr->x1=(tempg0->x1*t0+tempg1->x1*t1)>>32; - tempgr->y1=(tempg0->y1*t0+tempg1->y1*t1)>>32; + tempgr->p.x1=(tempg0->p.x1*t0+tempg1->p.x1*t1)>>32; + tempgr->p.y1=(tempg0->p.y1*t0+tempg1->p.y1*t1)>>32; break; case SPT_CIRCLE: - tempgr->x2=(tempg0->x2*t0+tempg1->x2*t1)>>32; - tempgr->x1=(tempg0->x1*t0+tempg1->x1*t1)>>32; - tempgr->y1=(tempg0->y1*t0+tempg1->y1*t1)>>32; + tempgr->pr.radius=(tempg0->pr.radius*t0+tempg1->pr.radius*t1)>>32; + tempgr->pr.x1=(tempg0->pr.x1*t0+tempg1->pr.x1*t1)>>32; + tempgr->pr.y1=(tempg0->pr.y1*t0+tempg1->pr.y1*t1)>>32; break; case SPT_ELLIPSE: case SPT_POLYGON: - tempgr->x2=(tempg0->x2*t0+tempg1->x2*t1)>>32; - tempgr->y2=(tempg0->y2*t0+tempg1->y2*t1)>>32; - tempgr->width=(tempg0->width*t0+tempg1->width*t1)>>32; - tempgr->height=(tempg0->height*t0+tempg1->height*t1)>>32; + tempgr->pwha.x1=(tempg0->pwha.x1*t0+tempg1->pwha.x1*t1)>>32; + tempgr->pwha.y1=(tempg0->pwha.y1*t0+tempg1->pwha.y1*t1)>>32; + tempgr->pwha.width =(tempg0->pwha.width *t0+tempg1->pwha.width*t1)>>32; + tempgr->pwha.height=(tempg0->pwha.height*t0+tempg1->pwha.height*t1)>>32; break; case SPT_BITMAP: - tempgr->x2=(tempg0->x2*t0+tempg1->x2*t1)>>32; - tempgr->y2=(tempg0->y2*t0+tempg1->y2*t1)>>32; + tempgr->pwhu.x1=(tempg0->pwhu.x1*t0+tempg1->pwhu.x1*t1)>>32; + tempgr->pwhu.y1=(tempg0->pwhu.y1*t0+tempg1->pwhu.y1*t1)>>32; break; case SPT_POLYLINE: - ptr0=&tempg0->y1; - ptr1=&tempg1->y1; - ptrr=&tempgr->y1; - for (i=0;inum;i++) { + ptr0=&tempg0->nu.u; + ptr1=&tempg1->nu.u; + ptrr=&tempgr->nu.u; + for (i=0;inu.num;i++) { ptrr[i<<1]=(ptr0[i<<1]*t0+ptr1[i<<1]*t1)>>32; ptrr[i<<1+1]=(ptr0[i<<1+1]*t0+ptr1[i<<1+1]*t1)>>32; } break; case SPT_POLYPT: - ptr0=&tempg0->y1; - ptr1=&tempg1->y1; - ptrr=&tempgr->y1; - ptrr[0]=(ptr0[0]*t0+ptr1[0]*t1)>>32; - ptrr[1]=(ptr0[1]*t0+ptr1[1]*t1)>>32; + tempgr->npu.x=(tempg0->npu.x*t0+tempg1->npu.x*t1)>>32; + tempgr->npu.y=(tempg0->npu.y*t0+tempg1->npu.y*t1)>>32; break; case SPT_BSPLINE2: case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - p0=&tempg0->y1; - p1=&tempg1->y1; - pr=&tempgr->y1; - for (i=0;inum;i++) { + p0=&tempg0->nu.u; + p1=&tempg1->nu.u; + pr=&tempgr->nu.u; + for (i=0;inu.num;i++) { pr[i].x=(p0[i].x*t0+p1[i].x*t1)>>32; pr[i].y=(p0[i].y*t0+p1[i].y*t1)>>32; pr[i].z=(p0[i].z*t0+p1[i].z*t1)>>32; } break; case SPT_MESH: - p0=&tempg0->x2; - p1=&tempg1->x2; - pr=&tempgr->x2; - for (i=0;ivertex_cnt;i++) { + p0=&tempg0->mu.u; + p1=&tempg1->mu.u; + pr=&tempgr->mu.u; + for (i=0;imu.vertex_cnt;i++) { pr[i].x=(p0[i].x*t0+p1[i].x*t1)>>32; pr[i].y=(p0[i].y*t0+p1[i].y*t1)>>32; pr[i].z=(p0[i].z*t0+p1[i].z*t1)>>32; } break; case SPT_SHIFTABLE_MESH: - p0=(&tempg0->shiftable_tri_cnt)(U8 *)+sizeof(I32); - p1=(&tempg1->shiftable_tri_cnt)(U8 *)+sizeof(I32); - pr=(&tempgr->shiftable_tri_cnt)(U8 *)+sizeof(I32); - for (i=0;ishiftable_vertex_cnt;i++) { + p0=&tempg0->pmu.u; + p1=&tempg1->pmu.u; + pr=&tempgr->pmu.u; + for (i=0;ipmu.vertex_cnt;i++) { pr[i].x=(p0[i].x*t0+p1[i].x*t1)>>32; pr[i].y=(p0[i].y*t0+p1[i].y*t1)>>32; pr[i].z=(p0[i].z*t0+p1[i].z*t1)>>32; diff --git a/Adam/Gr/GrTextBase.CPP b/Adam/Gr/GrTextBase.CPP index 470e2ba..3e54601 100644 --- a/Adam/Gr/GrTextBase.CPP +++ b/Adam/Gr/GrTextBase.CPP @@ -5,7 +5,7 @@ asm { USE64 //************************************ _TEXT_CHAR:://Bool TextChar(CTask *task,Bool allow_border=FALSE,I64 x,I64 y,I64 d); -//Must be called 60fps in Fs->draw_it() callback. +//Must be called 30fps in Fs->draw_it() callback. PUSH RBP MOV RBP,RSP MOV RCX,U64 SF_ARG1[RBP] @@ -82,7 +82,7 @@ _TEXT_CHAR:://Bool TextChar(CTask *task,Bool allow_border=FALSE,I64 x,I64 y,I64 RET1 40 //************************************ _TEXT_LEN_STR:://Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,I64 attr,U8 *s) -//Must be called 60fps in Fs->draw_it() callback. +//Must be called 30fps in Fs->draw_it() callback. PUSH RBP MOV RBP,RSP PUSH RSI @@ -157,7 +157,7 @@ _TEXT_LEN_STR:://Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,I64 attr,U8 *s) RET1 48 //************************************ _TEXT_LEN_ATTR_STR:://Bool TextLenAttrStr(CTask *task,I64 x,I64 y,I64 len,U32 *_attr) -//Must be called 60fps in Fs->draw_it() callback. +//Must be called 30fps in Fs->draw_it() callback. PUSH RBP MOV RBP,RSP PUSH RSI @@ -232,7 +232,7 @@ _TEXT_LEN_ATTR_STR:://Bool TextLenAttrStr(CTask *task,I64 x,I64 y,I64 len,U32 *_ RET1 40 //************************************ _TEXT_LEN_ATTR:://Bool TextLenAttr(CTask *task,I64 x,I64 y,I64 len,I64 attr) -//Must be called 60fps in Fs->draw_it() callback. +//Must be called 30fps in Fs->draw_it() callback. PUSH RBP MOV RBP,RSP PUSH RSI @@ -307,13 +307,13 @@ _TEXT_LEN_ATTR:://Bool TextLenAttr(CTask *task,I64 x,I64 y,I64 len,I64 attr) POP RBP RET1 40 } -public _extern _TEXT_CHAR Bool TextChar(CTask *task,Bool allow_border=FALSE,I64 x,I64 y,I64 d); //Plot char. Must be called 60fps in Fs->draw_it() callback. -public _extern _TEXT_LEN_STR Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,I64 attr,U8 *s); //Plot str with len. Must be called 60fps in Fs->draw_it() callback. -public _extern _TEXT_LEN_ATTR_STR Bool TextLenAttrStr(CTask *task,I64 x,I64 y,I64 len,U32 *_attr); //Plot attr str with len. Must be called 60fps in Fs->draw_it() callback. -public _extern _TEXT_LEN_ATTR Bool TextLenAttr(CTask *task,I64 x,I64 y,I64 len,I64 attr); //Plot attrs with len. Must be called 60fps in Fs->draw_it() callback. +public _extern _TEXT_CHAR Bool TextChar(CTask *task,Bool allow_border=FALSE,I64 x,I64 y,I64 d); //Plot char. Must be called 30fps in Fs->draw_it() callback. +public _extern _TEXT_LEN_STR Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,I64 attr,U8 *s); //Plot str with len. Must be called 30fps in Fs->draw_it() callback. +public _extern _TEXT_LEN_ATTR_STR Bool TextLenAttrStr(CTask *task,I64 x,I64 y,I64 len,U32 *_attr); //Plot attr str with len. Must be called 30fps in Fs->draw_it() callback. +public _extern _TEXT_LEN_ATTR Bool TextLenAttr(CTask *task,I64 x,I64 y,I64 len,I64 attr); //Plot attrs with len. Must be called 30fps in Fs->draw_it() callback. public U0 TextPrint(CTask *task,I64 x,I64 y,I64 attr,U8 *fmt,...) -{//Plot chars. Must be called 60fps in Fs->draw_it() callback. +{//Plot chars. Must be called 30fps in Fs->draw_it() callback. //You probably want $LK,"GrPrint",A="MN:GrPrint"$() or just $LK,"Print",A="MN:Print"$(). U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); TextLenStr(task,x,y,StrLen(buf),attr<<8,buf); @@ -321,7 +321,7 @@ public U0 TextPrint(CTask *task,I64 x,I64 y,I64 attr,U8 *fmt,...) } public U0 TextBorder(CTask *task=NULL,I64 l,I64 r,I64 t,I64 b,I64 attr,Bool solid) -{//Plot border square. Must be called 60fps in Fs->draw_it() callback. +{//Plot border square. Must be called 30fps in Fs->draw_it() callback. //Draws window borders or DolDoc text button borders. //Set task=sys_winmgr_task for no clipping. I64 i; @@ -357,7 +357,7 @@ public U0 TextBorder(CTask *task=NULL,I64 l,I64 r,I64 t,I64 b,I64 attr,Bool soli } public U0 TextRect(I64 l,I64 r,I64 t,I64 b,I64 d) -{//Fill text rect. Must be called 60fps in Fs->draw_it() callback. +{//Fill text rect. Must be called 30fps in Fs->draw_it() callback. I64 y,w; if (l>r || t>b) return; if (t<0) t=0; @@ -368,3 +368,4 @@ public U0 TextRect(I64 l,I64 r,I64 t,I64 b,I64 d) for (y=t;y<=b;y++) MemSetU32(gr.text_base(U8 *)+(y*TEXT_COLS+l)*sizeof(U32),d,w); } + diff --git a/Adam/Gr/SpriteBitMap.CPP b/Adam/Gr/SpriteBitMap.CPP index 3d2b690..5eb76d2 100644 --- a/Adam/Gr/SpriteBitMap.CPP +++ b/Adam/Gr/SpriteBitMap.CPP @@ -85,8 +85,8 @@ I64 PopUpSpriteBitMap(CColorROPU32 color,I64 width) "\n$$MU-UL,\"Undo\",LE=GBM_UNDO$$\n" "\n$$PURPLE$$$$MU-UL,\"+] Sprite Main Menu\",LE=GBM_MAIN_MENU$$$$LTBLUE$$\n" "$$MU-UL,\"Exit Sprite\",LE=GBM_EXIT$$\n" - "$$MU-UL,\"Abort Sprite\",LE=DOCM_CANCEL$$\n",st1,st2,width); - DocPrint(doc,"\nRight-Click to get back to this menu."); + "$$MU-UL,\"Abort Sprite\",LE=DOCM_CANCEL$$\n" + "\nRight-Click to get back to this menu.",st1,st2,width); i=PopUpMenu(doc); DocDel(doc); return i; @@ -224,12 +224,21 @@ I64 SpriteBitMapEd(CDoc *,CDocEntry *doc_e,CDC *dc,I64 *_xx1,I64 *_yy1,I64 *_xx2 1<color=color; dc->pen_width=width; - switch (mode) { - case GBM_LINE: - GrLine3(dc,x1,y1,0,a1,a2,0); - break; - case GBM_ARROW: - GrArrow3(dc,x1,y1,0,a1,a2,0); - break; - case GBM_RECT: - GrRect(dc,x1,y1,1,1); - break; - case GBM_CIRCLE: - GrCircle3(dc,x1,y1,0,1); - break; - case GBM_COPY: - case GBM_DELETE: - dc->color=ROPF_DITHER+WHITE<<16+BLACK; - dc->pen_width=1; - GrBorder(dc,x1,y1,x1,y1); - break; - } + case GBM_LINE: + GrLine3(dc,x1,y1,0,a1,a2,0); + break; + case GBM_ARROW: + GrArrow3(dc,x1,y1,0,a1,a2,0); + break; + case GBM_RECT: + GrRect(dc,x1,y1,1,1); + break; + case GBM_CIRCLE: + GrCircle3(dc,x1,y1,0,1); + break; + case GBM_COPY: + case GBM_DELETE: + dc->color=ROPF_DITHER+WHITE<<16+BLACK; + dc->pen_width=1; + GrBorder(dc,x1,y1,x1,y1); + break; + sub_switch_end: break; case GBM_PASTE: case GBM_PASTE_TRANSPARENT: diff --git a/Adam/Gr/SpriteCode.CPP b/Adam/Gr/SpriteCode.CPP index baec10a..0576885 100644 --- a/Adam/Gr/SpriteCode.CPP +++ b/Adam/Gr/SpriteCode.CPP @@ -12,11 +12,11 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) switch (tempg->type) { case SPT_COLOR: DocPrint(doc,"{%s}", - Color2Str(buf1,tempg->color)); + Color2Str(buf1,tempg->c.color)); break; case SPT_DITHER_COLOR: DocPrint(doc,"{%s}", - Color2Str(buf2,ROPF_DITHER|tempg->dither_color.u8[0]|tempg->dither_color.u8[1]<d.dither_color.u8[0]|tempg->d.dither_color.u8[1]<x1,tempg->y1,tempg->x2,tempg->y2); + DocPrint(doc,"{(%d,%d),(%d,%d)}",tempg->pp.x1,tempg->pp.y1,tempg->pp.x2,tempg->pp.y2); break; case SPT_RECT: - DocPrint(doc,"{(%d,%d):(%d,%d)}",tempg->x1,tempg->y1, - tempg->x2-tempg->x1,tempg->y2-tempg->y1); + DocPrint(doc,"{(%d,%d):(%d,%d)}",tempg->pp.x1,tempg->pp.y1, + tempg->pp.x2-tempg->pp.x1,tempg->pp.y2-tempg->pp.y1); break; case SPT_ROTATED_RECT: - DocPrint(doc,"{(%d,%d):(%d,%d),%0.4f}",tempg->x1,tempg->y1, - tempg->x2-tempg->x1,tempg->y2-tempg->y1, - 180/ã*Wrap(tempg->rot_angle)); + DocPrint(doc,"{(%d,%d):(%d,%d),%0.4f}",tempg->ppa.x1,tempg->ppa.y1, + tempg->ppa.x2-tempg->ppa.x1,tempg->ppa.y2-tempg->ppa.y1, + 180/ã*Wrap(tempg->ppa.angle)); break; case SPT_PT: case SPT_FLOOD_FILL: case SPT_SHIFT: - DocPrint(doc,"{(%d,%d)}",tempg->x1,tempg->y1); + DocPrint(doc,"{(%d,%d)}",tempg->p.x1,tempg->p.y1); break; case SPT_FLOOD_FILL_NOT: - DocPrint(doc,"{(%d,%d),TRUE}",tempg->x1,tempg->y1); + DocPrint(doc,"{(%d,%d),TRUE}",tempg->p.x1,tempg->p.y1); break; case SPT_CIRCLE: - DocPrint(doc,"{(%d,%d):%d}",tempg->x1,tempg->y1,tempg->x2); + DocPrint(doc,"{(%d,%d):%d}",tempg->pr.x1,tempg->pr.y1,tempg->pr.radius); break; case SPT_WIDTH: - DocPrint(doc,"{%d}",tempg->width); + DocPrint(doc,"{%d}",tempg->w.width); break; case SPT_ELLIPSE: - DocPrint(doc,"{(%d,%d):(%d,%d),%0.4f}",tempg->x2,tempg->y2, - tempg->width,tempg->height,180/ã*Wrap(tempg->rot_angle)); + DocPrint(doc,"{(%d,%d):(%d,%d),%0.4f}",tempg->pwha.x1,tempg->pwha.y1, + tempg->pwha.width,tempg->pwha.height,180/ã*Wrap(tempg->pwha.angle)); break; case SPT_POLYGON: - DocPrint(doc,"{%d,(%d,%d):(%d,%d),%0.4f}",tempg->sides,tempg->x2,tempg->y2, - tempg->width,tempg->height,180/ã*Wrap(tempg->rot_angle)); + DocPrint(doc,"{%d,(%d,%d):(%d,%d),%0.4f}",tempg->pwhas.sides, + tempg->pwhas.x1,tempg->pwhas.y1,tempg->pwhas.width,tempg->pwhas.height, + 180/ã*Wrap(tempg->pwhas.angle)); break; case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: - DocPrint(doc,"{(%d,%d),\"%Q\"}",tempg->x1,tempg->y1,tempg->st); + DocPrint(doc,"{(%d,%d),\"%Q\"}",tempg->ps.x1,tempg->ps.y1,tempg->ps.st); break; case SPT_POLYLINE: - ptr=&tempg->y1; - DocPrint(doc,"{(%d,%d)",ptr[0],ptr[1]); - if (tempg->num>1) DocPrint(doc,","); - ptr+=2; - for (i=1;inum;i++) { + ptr=&tempg->nu.u; + DocPrint(doc,"{"); + for (i=0;inu.num;i++,ptr+=2) { DocPrint(doc,"(%d,%d)",ptr[0],ptr[1]); - if (i+1num) DocPrint(doc,","); - if (i&3==3 && i+1num) + if (i+1nu.num) DocPrint(doc,","); + if (i&3==3 && i+1nu.num) DocPrint(doc,"\n"); - ptr+=2; } DocPrint(doc,"}"); break; @@ -83,14 +81,12 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - ptr=&tempg->y1; - DocPrint(doc,"{(%d,%d,%d)",ptr[0],ptr[1],ptr[2]); - ptr+=3; - if (tempg->num>1) DocPrint(doc,","); - for (i=1;inum;i++,ptr+=3) { + ptr=&tempg->nu.u; + DocPrint(doc,"{"); + for (i=0;inu.num;i++,ptr+=3) { DocPrint(doc,"(%d,%d,%d)",ptr[0],ptr[1],ptr[2]); - if (i+1num) DocPrint(doc,","); - if (i&3==3 && i+1num) + if (i+1nu.num) DocPrint(doc,","); + if (i&3==3 && i+1nu.num) DocPrint(doc,"\n"); } if (tempg->type==SPT_BSPLINE2||tempg->type==SPT_BSPLINE3) @@ -99,13 +95,12 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) DocPrint(doc,",TRUE}"); break; case SPT_POLYPT: - ptr=&tempg->y1; - DocPrint(doc,"{(%d,%d),",ptr[0],ptr[1]); - ptr+=2; + DocPrint(doc,"{(%d,%d),",tempg->npu.x,tempg->npu.y); + ptr=&tempg->npu.u; col=16; - for (i=0;inum;i++) { + for (i=0;inpu.num;i++) { DocPrint(doc,"%d",BFieldExtU32(ptr,i*3,3)); - if (++col>=64 && i+1num) { + if (++col>=64 && i+1npu.num) { DocPrint(doc,"\n"); col=0; } @@ -113,23 +108,24 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) DocPrint(doc,"}"); break; case SPT_BITMAP: - DocPrint(doc,"{(%d,%d):(%d,%d),\n",tempg->x2,tempg->y2,tempg->width,tempg->height); - width_internal=(tempg->width+7)&~7; + DocPrint(doc,"{(%d,%d):(%d,%d),\n",tempg->pwhu.x1,tempg->pwhu.y1, + tempg->pwhu.width,tempg->pwhu.height); + width_internal=(tempg->pwhu.width+7)&~7; if (width_internal<80) k=width_internal; else k=64; - ptr=tempg(U8 *)+offset(CSprite.linespeed); + ptr=&tempg->pwhu.u; col=0; - for (j=0;jheight;j++) + for (j=0;jpwhu.height;j++) for (i=0;i=tempg->width) + if (i>=tempg->pwhu.width) DocPrint(doc,"_"); else if (*ptr(U8 *)<16) DocPrint(doc,"%X",*ptr(U8 *)); else DocPrint(doc,"%c",CH_SHIFT_SPACE); - if (++col>=k && (i+1height)) { + if (++col>=k && (i+1pwhu.height)) { DocPrint(doc,"\n"); col=0; } @@ -138,11 +134,11 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) break; case SPT_MESH: DocPrint(doc,"{FALSE,"); - p=(&tempg->tri_cnt)(U8 *)+sizeof(I32); + p=&tempg->mu.u; col=0; - for (i=0;ivertex_cnt;i++,p++) { + for (i=0;imu.vertex_cnt;i++,p++) { DocPrint(doc,"(%d,%d,%d)",p->x,p->y,p->z); - if (i+1vertex_cnt) DocPrint(doc,","); + if (i+1mu.vertex_cnt) DocPrint(doc,","); if (++col==4) { DocPrint(doc,"\t//%d\n",i); col=0; @@ -150,11 +146,11 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) } DocPrint(doc,":"); tri=p; - for (i=0;itri_cnt;i++,tri++) { + for (i=0;imu.tri_cnt;i++,tri++) { DocPrint(doc,"(%s,%d,%d,%d)",Color2Str(buf1,tri->color), tri->nums[0],tri->nums[1],tri->nums[2]); - if (i+1tri_cnt) DocPrint(doc,","); - if (++col>=3 && i+1tri_cnt) { + if (i+1mu.tri_cnt) DocPrint(doc,","); + if (++col>=3 && i+1mu.tri_cnt) { DocPrint(doc,"\n"); col=0; } @@ -162,12 +158,12 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) DocPrint(doc,"}"); break; case SPT_SHIFTABLE_MESH: - DocPrint(doc,"{TRUE,(%d,%d,%d):",tempg->x1,tempg->y1,tempg->z1); - p=(&tempg->shiftable_tri_cnt)(U8 *)+sizeof(I32); + DocPrint(doc,"{TRUE,(%d,%d,%d):",tempg->pmu.x,tempg->pmu.y,tempg->pmu.z); + p=&tempg->pmu.u; col=1; - for (i=0;ishiftable_vertex_cnt;i++,p++) { + for (i=0;ipmu.vertex_cnt;i++,p++) { DocPrint(doc,"(%d,%d,%d)",p->x,p->y,p->z); - if (i+1shiftable_vertex_cnt) DocPrint(doc,","); + if (i+1pmu.vertex_cnt) DocPrint(doc,","); if (++col==4) { DocPrint(doc,"\t//%d\n",i); col=0; @@ -175,11 +171,11 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) } DocPrint(doc,":"); tri=p; - for (i=0;ishiftable_tri_cnt;i++,tri++) { + for (i=0;ipmu.tri_cnt;i++,tri++) { DocPrint(doc,"(%s,%d,%d,%d)",Color2Str(buf1,tri->color), tri->nums[0],tri->nums[1],tri->nums[2]); - if (i+1shiftable_tri_cnt) DocPrint(doc,","); - if (++col>=3 && i+1shiftable_tri_cnt) { + if (i+1pmu.tri_cnt) DocPrint(doc,","); + if (++col>=3 && i+1pmu.tri_cnt) { DocPrint(doc,"\n"); col=0; } @@ -217,9 +213,9 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) color=Str2ColorU32(st); Free(st); Lex(lx); //Skip color - g.color=color.c0.color; + g.c.color=color.c0.color; if (color&ROPF_DITHER) { - g.dither_color.u8[1]=color.c1.color; + g.d.dither_color.u8[1]=color.c1.color; g.type=SPT_DITHER_COLOR; } else g.type=SPT_COLOR; @@ -237,25 +233,25 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) case SPT_PLANAR_SYMMETRY: Lex(lx); //Skip { g.type=type; - LexD2I32(lx,&g.x1); + LexD2I32(lx,&g.pp.x1); if (lx->token!=',') LexExcept(lx,"expecting ',' at "); Lex(lx); //Skip , - LexD2I32(lx,&g.x2); + LexD2I32(lx,&g.pp.x2); break; case SPT_RECT: case SPT_ROTATED_RECT: Lex(lx); //Skip { - LexD2I32(lx,&g.x1); + LexD2I32(lx,&g.pp.x1); if (lx->token!=':') LexExcept(lx,"expecting ':' at "); Lex(lx); //Skip : - LexD2I32(lx,&g.x2); - g.x2+=g.x1; - g.y2+=g.y1; + LexD2I32(lx,&g.pp.x2); + g.ppa.x2+=g.pp.x1; + g.ppa.y2+=g.pp.y1; if (lx->token==',') { Lex(lx); //Skip , - g.rot_angle=ã/180*LexExpressionF64(lx); + g.ppa.angle=ã/180*LexExpressionF64(lx); g.type=SPT_ROTATED_RECT; } else g.type=SPT_RECT; @@ -264,12 +260,12 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) case SPT_SHIFT: Lex(lx); //Skip { g.type=type; - LexD2I32(lx,&g.x1); + LexD2I32(lx,&g.p.x1); break; case SPT_FLOOD_FILL: case SPT_FLOOD_FILL_NOT: Lex(lx); //Skip { - LexD2I32(lx,&g.x1); + LexD2I32(lx,&g.p.x1); if (lx->token==',') { Lex(lx); //Skip , i=LexExpressionI64(lx); @@ -282,36 +278,35 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) break; case SPT_WIDTH: Lex(lx); //Skip { - g.width=LexExpressionI64(lx); + g.w.width=LexExpressionI64(lx); g.type=SPT_WIDTH; break; case SPT_CIRCLE: Lex(lx); //Skip { g.type=SPT_CIRCLE; - LexD2I32(lx,&g.x1); + LexD2I32(lx,&g.pr.x1); if (lx->token!=':') LexExcept(lx,"expecting ':' at "); Lex(lx); //Skip : - g.x2=LexExpressionI64(lx); + g.pr.radius=LexExpressionI64(lx); break; case SPT_POLYGON: Lex(lx); //Skip { - g.sides=LexExpressionI64(lx); + g.pwhas.sides=LexExpressionI64(lx); if (lx->token!=',') LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , case SPT_ELLIPSE: Lex(lx); //Skip { g.type=type; - LexD2I32(lx,&g.x2); + LexD2I32(lx,&g.pwha.x1); if (lx->token!=':') LexExcept(lx,"expecting ':' at "); Lex(lx); //Skip : - LexD2I32(lx,&g.width); + LexD2I32(lx,&g.pwha.width); if (lx->token!=',') LexExcept(lx,"expecting ',' at "); Lex(lx); //Skip , - g.rot_angle=ã/180*LexExpressionF64(lx); + g.pwha.angle=ã/180*LexExpressionF64(lx); break; sub_switch_end: size=SpriteElemSize(&g)+offset(CSprite.start); @@ -323,7 +318,7 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) case SPT_TEXT_DIAMOND: Lex(lx); //Skip { g.type=type; - LexD2I32(lx,&g.x1); + LexD2I32(lx,&g.ps.x1); if (lx->token!=',') LexExcept(lx,"expecting ',' at "); if (Lex(lx)==TK_STR) //Skip , @@ -345,17 +340,16 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) tempp=CAlloc(sizeof(CQueD3I32)); LexD2I32(lx,&tempp->p); QueIns(tempp,rootp.last); - g.num++; + g.nu.num++; if (lx->token==',') Lex(lx); //Skip , } - if (!g.num) + if (g.nu.num<2) LexExcept(lx,"expecting point at "); size=SpriteElemQuedBaseSize(SPT_POLYLINE); - i=g.num*sizeof(CD2I32); - result=MAlloc(size+i); + result=MAlloc(size+g.nu.num*sizeof(CD2I32)); MemCpy(result,&g,size); - ptr=&result->y1; + ptr=&result->nu.u; tempp=rootp.next; while (tempp!=&rootp) { tempa1=tempp->next; @@ -375,15 +369,14 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) tempp=CAlloc(sizeof(CQueD3I32)); LexD3I32(lx,&tempp->p); QueIns(tempp,rootp.last); - g.num++; + g.nu.num++; if (lx->token==',') Lex(lx); //Skip , } - if (!g.num) + if (g.nu.num<2) LexExcept(lx,"expecting point at "); size=SpriteElemQuedBaseSize(type); - i=g.num*sizeof(CD3I32); - result=MAlloc(size+i); + result=MAlloc(size+g.nu.num*sizeof(CD3I32)); if (LexExpressionI64(lx)) { if (type==SPT_BSPLINE2||type==SPT_BSPLINE2_CLOSED) g.type=SPT_BSPLINE2_CLOSED; @@ -396,7 +389,7 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) g.type=SPT_BSPLINE3; } MemCpy(result,&g,size); - ptr=&result->y1; + ptr=&result->nu.u; tempp=rootp.next; while (tempp!=&rootp) { tempa1=tempp->next; @@ -408,7 +401,7 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) break; case SPT_POLYPT: Lex(lx); //Skip { - LexD2I32(lx,&g.y1); + LexD2I32(lx,&g.npu.x); if (lx->token!=',') LexExcept(lx,"expecting ',' at "); tempv=QueVectU8New; @@ -418,27 +411,26 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) if (i=='}') break; if ('0'<=i<='7') - QueVectU8Put(tempv,g.num++,i-'0'); + QueVectU8Put(tempv,g.npu.num++,i-'0'); } Bts(&lx->flags,Lf_USE_LAST_U16); Lex(lx); //Load '}' g.type=SPT_POLYPT; size=SpriteElemQuedBaseSize(SPT_POLYPT); - i=(g.num*3+7)>>3; - result=CAlloc(size+i); + result=CAlloc(size+(g.npu.num*3+7)>>3); MemCpy(result,&g,size); - ptr=&result->y2; - for (i=0;inpu.u; + for (i=0;itoken!=':') LexExcept(lx,"expecting ':' at "); Lex(lx); //Skip : - LexD2I32(lx,&g.width); + LexD2I32(lx,&g.pwhu.width); if (lx->token!=',') LexExcept(lx,"expecting ',' at "); tempv=QueVectU8New; @@ -463,7 +455,7 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) size=SpriteElemQuedBaseSize(SPT_BITMAP); result=CAlloc(size+num1); MemCpy(result,&g,size); - ptr=&result->linespeed; + ptr=&result->pwhu.u; for (i=0;itoken!=',') LexExcept(lx,"expecting ',' at "); Lex(lx); //Skip , - LexD3I32(lx,&g.x1); + LexD3I32(lx,&g.pmu.x); if (lx->token!=':') LexExcept(lx,"expecting ':' at "); Lex(lx); //Skip : @@ -528,12 +520,12 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) Lex(lx); //Skip , } if (g.type==SPT_MESH) { - g.vertex_cnt=num1; - g.tri_cnt=num2; + g.mu.vertex_cnt=num1; + g.mu.tri_cnt=num2; size=SpriteElemQuedBaseSize(SPT_MESH); } else { - g.shiftable_vertex_cnt=num1; - g.shiftable_tri_cnt=num2; + g.pmu.vertex_cnt=num1; + g.pmu.tri_cnt=num2; } size=SpriteElemQuedBaseSize(g.type); result=MAlloc(size+num1*sizeof(CD3I32)+num2*sizeof(CMeshTri)); diff --git a/Adam/Gr/SpriteEd.CPP b/Adam/Gr/SpriteEd.CPP index f405e46..2266838 100644 --- a/Adam/Gr/SpriteEd.CPP +++ b/Adam/Gr/SpriteEd.CPP @@ -4,8 +4,8 @@ Bool SpritePolyPtPlot(CSprite *root,I64 x,I64 y,I64) { CSprite *tempg=CAlloc(SpriteElemQuedBaseSize(SPT_PT)); tempg->type=SPT_PT; - tempg->x1=x; - tempg->y1=y; + tempg->p.x1=x; + tempg->p.y1=y; QueIns(tempg,root->last); return TRUE; } @@ -16,8 +16,8 @@ CSprite *SpriteElemNum2QueEntry(CSprite *root,I64 elem_num,I64 *_x=NULL,I64 *_y= CSprite *result=root->next; while (result!=root && elem_num--) { if (result->type==SPT_SHIFT) { - xx+=result->x1; - yy+=result->y1; + xx+=result->p.x1; + yy+=result->p.y1; } result=result->next; } @@ -83,75 +83,60 @@ U0 SpriteSetOrigin(CSprite *root,I64 dx,I64 dy,I64 dz) CSprite *tempg=root->next; while (tempg!=root) { switch (tempg->type) { - case SPT_PT: - case SPT_FLOOD_FILL: - case SPT_FLOOD_FILL_NOT: - tempg->x1+=dx; - tempg->y1+=dy; - break; case SPT_ARROW: case SPT_LINE: case SPT_PLANAR_SYMMETRY: - tempg->x1+=dx; - tempg->y1+=dy; - tempg->x2+=dx; - tempg->y2+=dy; - break; - case SPT_BITMAP: - case SPT_ELLIPSE: - case SPT_POLYGON: - tempg->x2+=dx; - tempg->y2+=dy; - break; case SPT_RECT: case SPT_ROTATED_RECT: - tempg->x1+=dx; - tempg->y1+=dy; - tempg->x2+=dx; - tempg->y2+=dy; - break; + tempg->pp.x2+=dx; + tempg->pp.y2+=dy; + case SPT_PT: + case SPT_FLOOD_FILL: + case SPT_FLOOD_FILL_NOT: case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: case SPT_CIRCLE: - tempg->x1+=dx; - tempg->y1+=dy; + case SPT_BITMAP: + case SPT_ELLIPSE: + case SPT_POLYGON: + tempg->p.x1+=dx; + tempg->p.y1+=dy; break; case SPT_POLYLINE: - ptr=&tempg->y1; - for (i=0;inum;i++) { + ptr=&tempg->nu.u; + for (i=0;inu.num;i++) { ptr[i<<1]+=dx; ptr[i<<1+1]+=dy; } break; case SPT_POLYPT: - ptr=&tempg->y1; - ptr[0]+=dx; - ptr[1]+=dy; + tempg->npu.x+=dx; + tempg->npu.y+=dy; break; case SPT_BSPLINE2: case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - p=&tempg->y1; - for (i=0;inum;i++,p++) { + p=&tempg->nu.u; + for (i=0;inu.num;i++,p++) { p->x+=dx; p->y+=dy; p->z+=dz; } break; case SPT_MESH: - p=&tempg->x2; - for (i=0;ivertex_cnt;i++,p++) { + p=&tempg->mu.u; + for (i=0;imu.vertex_cnt;i++,p++) { p->x+=dx; p->y+=dy; p->z+=dz; } break; case SPT_SHIFTABLE_MESH: - tempg->x1+=dx; - tempg->y1+=dy; - tempg->z1+=dz; + tempg->pmu.x+=dx; + tempg->pmu.y+=dy; + tempg->pmu.z+=dz; break; } tempg=tempg->next; @@ -161,14 +146,14 @@ U0 SpriteSetOrigin(CSprite *root,I64 dx,I64 dy,I64 dz) CSprite *SpriteTransformCircle(I64 r[4][4],CSprite *tempg) { I64 x,y,z; - F64 m1,a1,m2,radius=tempg->x2<<16; + F64 m1,a1,m2,radius=tempg->pr.radius<<16; CSprite *tempg1=CAlloc(SpriteElemQuedBaseSize(SPT_ELLIPSE)); tempg1->type=SPT_ELLIPSE; - x=tempg->x1; y=tempg->y1; z=0; + x=tempg->pr.x1; y=tempg->pr.y1; z=0; GrRot(r,&x,&y,&z); - tempg1->x2=x; - tempg1->y2=y; + tempg1->pwha.x1=x; + tempg1->pwha.y1=y; x=radius; y=0; z=0; GrRot(r,&x,&y,&z); @@ -178,9 +163,9 @@ CSprite *SpriteTransformCircle(I64 r[4][4],CSprite *tempg) GrRot(r,&x,&y,&z); m2=Sqrt(x*x+y*y); - tempg1->width =ToI64(m1)/0x10000; - tempg1->height=ToI64(m2)/0x10000; - tempg1->rot_angle=-a1; + tempg1->pwha.width =ToI64(m1)/0x10000; + tempg1->pwha.height=ToI64(m2)/0x10000; + tempg1->pwha.angle=-a1; return tempg1; } @@ -188,19 +173,20 @@ CSprite *SpriteTransformCircle(I64 r[4][4],CSprite *tempg) CSprite *SpriteTransformEllipse(I64 r[4][4],CSprite *tempg) { I64 x,y,z; - F64 m1,a1,m2,a2,s,c,x_radius=tempg->width<<16,y_radius=tempg->height<<16; + F64 m1,a1,m2,a2,s,c,x_radius=tempg->pwha.width<<16, + y_radius=tempg->pwha.height<<16; CSprite *tempg1=CAlloc(SpriteElemQuedBaseSize(tempg->type)); tempg1->type=tempg->type; if (tempg->type==SPT_POLYGON) - tempg1->sides=tempg->sides; + tempg1->pwhas.sides=tempg->pwhas.sides; - x=tempg->x2; y=tempg->y2; z=0; + x=tempg->pwha.x1; y=tempg->pwha.y1; z=0; GrRot(r,&x,&y,&z); - tempg1->x2=x; - tempg1->y2=y; + tempg1->pwha.x1=x; + tempg1->pwha.y1=y; - c=Cos(-tempg->rot_angle); - s=Sin(-tempg->rot_angle); + c=Cos(-tempg->pwha.angle); + s=Sin(-tempg->pwha.angle); x=x_radius*c; y=x_radius*s; @@ -215,11 +201,11 @@ CSprite *SpriteTransformEllipse(I64 r[4][4],CSprite *tempg) R2P(&m2,&a2,x,y); m2*=Abs(Sin(a2-a1)); - tempg1->width=ToI64(m1)/0x10000; - if (tempg1->width<1) tempg1->width=1; - tempg1->height=ToI64(m2)/0x10000; - if (tempg1->height<1) tempg1->height=1; - tempg1->rot_angle=-a1; + tempg1->pwha.width=ToI64(m1)/0x10000; + if (tempg1->pwha.width<1) tempg1->pwha.width=1; + tempg1->pwha.height=ToI64(m2)/0x10000; + if (tempg1->pwha.height<1) tempg1->pwha.height=1; + tempg1->pwha.angle=-a1; return tempg1; } @@ -228,15 +214,15 @@ CSprite *SpriteTransformRect(I64 r[4][4],CSprite *tempg,F64 { I64 x,y,z,w,h; F64 m1,a1,m2,a2,s,c, - x_radius=(tempg->x2-tempg->x1)<<16, - y_radius=(tempg->y2-tempg->y1)<<16; + x_radius=(tempg->pp.x2-tempg->pp.x1)<<16, + y_radius=(tempg->pp.y2-tempg->pp.y1)<<16; CSprite *tempg1=CAlloc(SpriteElemQuedBaseSize(SPT_ROTATED_RECT)); tempg1->type=SPT_ROTATED_RECT; - x=tempg->x1; y=tempg->y1; z=0; + x=tempg->pp.x1; y=tempg->pp.y1; z=0; GrRot(r,&x,&y,&z); - tempg1->x1=x; - tempg1->y1=y; + tempg1->ppa.x1=x; + tempg1->ppa.y1=y; c=Cos(-é); s=Sin(-é); @@ -258,9 +244,9 @@ CSprite *SpriteTransformRect(I64 r[4][4],CSprite *tempg,F64 if (w<1) w=1; h=ToI64(m2)/0x10000; if (h<1) h=1; - tempg1->x2=tempg1->x1+w; - tempg1->y2=tempg1->y1+h; - tempg1->rot_angle=-a1; + tempg1->ppa.x2=tempg1->ppa.x1+w; + tempg1->ppa.y2=tempg1->ppa.y1+h; + tempg1->ppa.angle=-a1; return tempg1; } @@ -278,7 +264,7 @@ CSprite *SpriteTransformBitmap(I64 r[4][4],CSprite *tempg) miny=maxy=y; minz=maxz=z; - x=0; y=tempg->height; z=0; + x=0; y=tempg->pwhu.height; z=0; GrRot(r,&x,&y,&z); if (xmaxx) maxx=x; @@ -287,7 +273,7 @@ CSprite *SpriteTransformBitmap(I64 r[4][4],CSprite *tempg) if (zmaxx) maxz=z; - x=tempg->width; y=0; z=0; + x=tempg->pwhu.width; y=0; z=0; GrRot(r,&x,&y,&z); if (xmaxx) maxx=x; @@ -296,7 +282,7 @@ CSprite *SpriteTransformBitmap(I64 r[4][4],CSprite *tempg) if (zmaxx) maxz=z; - x=tempg->width; y=tempg->height; z=0; + x=tempg->pwhu.width; y=tempg->pwhu.height; z=0; GrRot(r,&x,&y,&z); if (xmaxx) maxx=x; @@ -308,11 +294,10 @@ CSprite *SpriteTransformBitmap(I64 r[4][4],CSprite *tempg) tempb=DCNew(maxx-minx+1,maxy-miny+1); img=CAlloc(sizeof(CDC)); - img->width=tempg->width; - img->width_internal=(tempg->width+7)&~7; - img->height=tempg->height; - img->body_size=img->width_internal*img->height; - img->body=tempg(U8 *)+offset(CSprite.linespeed); + img->width=tempg->pwhu.width; + img->width_internal=(tempg->pwhu.width+7)&~7; + img->height=tempg->pwhu.height; + img->body=&tempg->pwhu.u; img->dc_signature=DCS_SIGNATURE_VAL; tempb->color=TRANSPARENT; @@ -335,15 +320,15 @@ CSprite *SpriteTransformBitmap(I64 r[4][4],CSprite *tempg) MemCpy(tempg1(U8 *)+offset(CSprite.start),elems,MSize(elems)); tempg1->type=tempg->type; - x=tempg->x2; y=tempg->y2; z=0; + x=tempg->pwhu.x1; y=tempg->pwhu.y1; z=0; GrRot(r,&x,&y,&z); - tempg1->x2=x; - tempg1->y2=y; + tempg1->pwhu.x1=x; + tempg1->pwhu.y1=y; x=0; y=0; z=0; GrRot(r,&x,&y,&z); - tempg1->x2+=minx-x; - tempg1->y2+=miny-y; + tempg1->pwhu.x1+=minx-x; + tempg1->pwhu.y1+=miny-y; return tempg1; } @@ -358,32 +343,26 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) while (tempg!=root) { switch (tempg->type) { case SPT_WIDTH: - // (1.0/Sqrt(3))*65536=37837.22 - x=37838;y=37838;z=37838; - GrRot(r,&x,&y,&z); - //scaled 32 bits - tempg->width*=Sqrt(x*x+y*y+z*z)/65536; - if (tempg->width<0) tempg->width=0; - break; - case SPT_PT: - case SPT_FLOOD_FILL: - case SPT_FLOOD_FILL_NOT: - x=tempg->x1; y=tempg->y1; z=0; - GrRot(r,&x,&y,&z); - tempg->x1=x; - tempg->y1=y; + tempg->w.width*=Sqrt(GrRotNormSqr65536(r))/65536; + if (tempg->w.width<0) tempg->w.width=0; break; case SPT_PLANAR_SYMMETRY: case SPT_ARROW: case SPT_LINE: - x=tempg->x1; y=tempg->y1; z=0; + x=tempg->pp.x2; y=tempg->pp.y2; z=0; GrRot(r,&x,&y,&z); - tempg->x1=x; - tempg->y1=y; - x=tempg->x2; y=tempg->y2; z=0; + tempg->pp.x2=x; + tempg->pp.y2=y; + case SPT_PT: + case SPT_FLOOD_FILL: + case SPT_FLOOD_FILL_NOT: + case SPT_TEXT: + case SPT_TEXT_BOX: + case SPT_TEXT_DIAMOND: + x=tempg->p.x1; y=tempg->p.y1; z=0; GrRot(r,&x,&y,&z); - tempg->x2=x; - tempg->y2=y; + tempg->p.x1=x; + tempg->p.y1=y; break; case SPT_BITMAP: tempg1=SpriteTransformBitmap(r,tempg); @@ -393,7 +372,7 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) tempg=tempg1; break; case SPT_ROTATED_RECT: - tempg1=SpriteTransformRect(r,tempg,tempg->rot_angle); + tempg1=SpriteTransformRect(r,tempg,tempg->ppa.angle); QueIns(tempg1,tempg); QueRem(tempg); Free(tempg); @@ -406,14 +385,6 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) Free(tempg); tempg=tempg1; break; - case SPT_TEXT: - case SPT_TEXT_BOX: - case SPT_TEXT_DIAMOND: - x=tempg->x1; y=tempg->y1; z=0; - GrRot(r,&x,&y,&z); - tempg->x1=x; - tempg->y1=y; - break; case SPT_CIRCLE: tempg1=SpriteTransformCircle(r,tempg); QueIns(tempg1,tempg); @@ -430,8 +401,8 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) tempg=tempg1; break; case SPT_POLYLINE: - ptr=&tempg->y1; - for (i=0;inum;i++) { + ptr=&tempg->nu.u; + for (i=0;inu.num;i++) { x=ptr[i<<1]; y=ptr[i<<1+1]; z=0; GrRot(r,&x,&y,&z); ptr[i<<1]=x; @@ -440,12 +411,11 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) break; case SPT_POLYPT: QueInit(&root2); - ptr=&tempg->y1; - x=ptr[0]; y=ptr[1]; z=0; + x=tempg->npu.x; y=tempg->npu.y; z=0; x1=x; y1=y; z1=z; //unrotated cur coordinates GrRot(r,&x,&y,&z); - ptr+=2; - k=tempg->num*3; + ptr=&tempg->npu.u; + k=tempg->npu.num*3; x2=x; y2=y; z2=z; //rotated start coordinates x3=x; y3=y; z3=z; //lag 1 rotated coordinates for (i=0;inext; - if (tempg1->x1==x3 && tempg1->y1==y3) { + if (tempg1->p.x1==x3 && tempg1->p.y1==y3) { QueRem(tempg1); Free(tempg1); } else { num++; - x3=tempg1->x1; - y3=tempg1->y1; + x3=tempg1->p.x1; + y3=tempg1->p.y1; } tempg1=tempg2; } tempg3=CAlloc(SpriteElemQuedBaseSize(SPT_POLYPT)+(num*3+7)>>3); - ptr=&tempg3->y1; - ptr[0]=x2; - ptr[1]=y2; - ptr+=2; + tempg3->npu.x=x2; + tempg3->npu.y=y2; + ptr=&tempg3->npu.u; x3=0;y3=0; z3=0; i=0; tempg1=root2.next; while (tempg1!=&root2) { tempg2=tempg1->next; BFieldOrU32(ptr,i, - polypt_map[SignI64(tempg1->x1-x3)+1+ - 3*(SignI64(tempg1->y1-y3)+1)]); + polypt_map[SignI64(tempg1->p.x1-x3)+1+ + 3*(SignI64(tempg1->p.y1-y3)+1)]); i+=3; - x3=tempg1->x1;y3=tempg1->y1; + x3=tempg1->p.x1;y3=tempg1->p.y1; QueRem(tempg1); Free(tempg1); tempg1=tempg2; } tempg3->type=SPT_POLYPT; - tempg3->num=num; + tempg3->npu.num=num; QueIns(tempg3,tempg); QueRem(tempg); Free(tempg); @@ -504,8 +473,8 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - p=&tempg->y1; - for (i=0;inum;i++,p++) { + p=&tempg->nu.u; + for (i=0;inu.num;i++,p++) { x=p->x; y=p->y; z=p->z; GrRot(r,&x,&y,&z); p->x=x; @@ -514,13 +483,13 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) } break; case SPT_SHIFTABLE_MESH: - x=tempg->x1; y=tempg->y1; z=tempg->z1; + x=tempg->pmu.x; y=tempg->pmu.y; z=tempg->pmu.z; GrRot(r,&x,&y,&z); - tempg->x1=x; - tempg->y1=y; - tempg->z1=z; - p=(&tempg->shiftable_tri_cnt)(U8 *)+sizeof(I32); - for (i=0;ishiftable_vertex_cnt;i++,p++) { + tempg->pmu.x=x; + tempg->pmu.y=y; + tempg->pmu.z=z; + p=&tempg->pmu.u; + for (i=0;ipmu.vertex_cnt;i++,p++) { x=p->x; y=p->y; z=p->z; GrRot(r,&x,&y,&z); p->x=x; @@ -529,8 +498,8 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) } break; case SPT_MESH: - p=&tempg->x2; - for (i=0;ivertex_cnt;i++,p++) { + p=&tempg->mu.u; + for (i=0;imu.vertex_cnt;i++,p++) { x=p->x; y=p->y; z=p->z; GrRot(r,&x,&y,&z); p->x=x; @@ -614,9 +583,9 @@ U0 SpriteSideBarTask2(CTask *grand_parent) pu_task=grand_parent->popup_task; if (TaskValidate(pu_task)) { w=parent->win_right-parent->win_left; - SetWinHorz(pu_task->win_right+2,pu_task->win_right+2+w,parent); + WinHorz(pu_task->win_right+2,pu_task->win_right+2+w,parent); h=parent->win_bottom-parent->win_top; - SetWinVert(pu_task->win_top,pu_task->win_top+h,parent); + WinVert(pu_task->win_top,pu_task->win_top+h,parent); } WinMgrSync; } @@ -651,7 +620,7 @@ Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num) Sprite2Code(doc,elems); Free(elems); while (TRUE) { - if (result=SrvUser("DocDo(0x%X,0x%X);",doc,0)) { + if (result=PopUpPrint("DocDo(0x%X,0x%X);",doc,0)) { Fs->put_doc=doc2=DocNew; "$$WW,1$$"; if (elems=Code2Sprite(doc)) { @@ -664,7 +633,7 @@ Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num) *_cur_elem_num=QueCnt(root); //TODO: Might want to improve this. break; } else { - SrvUser("DocDo(0x%X,0x%X);",doc2,0); + PopUpPrint("DocDo(0x%X,0x%X);",doc2,0); DocDel(doc2); Fs->put_doc=old_put; } @@ -730,24 +699,24 @@ I64 PopUpSpriteEd(CSprite **_root,I64 *_cur_elem_num) return i; } -#define GSPT_SIMPLE_PT 0 +#define GSPT_SIMPLE_PT 0 #define GSPT_WIDTH_HEIGHT 1 #define GSPF_SELECTED 1 -class CSpritePt +class CEdSprite { - CSpritePt *next,*last; + CEdSprite *next,*last; I32 type,num,flags,xx,yy,zz; I32 *x,*y,*z,*w,*h; }; -U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CSpritePt *root) +U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root) { I64 i,num=0; I32 *ptr; CD3I32 *p; - CSpritePt *temppe; + CEdSprite *temppe; CSprite *tempg=elems-offset(CSprite.start); QueInit(root); while (tempg->type) { @@ -757,60 +726,52 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CSpritePt *root) case SPT_LINE: case SPT_ARROW: case SPT_PLANAR_SYMMETRY: - temppe=CAlloc(sizeof(CSpritePt)); + temppe=CAlloc(sizeof(CEdSprite)); temppe->type=GSPT_SIMPLE_PT; temppe->xx=x; temppe->yy=y; - temppe->x=&tempg->x2; - temppe->y=&tempg->y2; + temppe->x=&tempg->pp.x2; + temppe->y=&tempg->pp.y2; temppe->num=num; QueIns(temppe,root->last); case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: case SPT_PT: + case SPT_BITMAP: case SPT_FLOOD_FILL: case SPT_FLOOD_FILL_NOT: case SPT_CIRCLE: - temppe=CAlloc(sizeof(CSpritePt)); + temppe=CAlloc(sizeof(CEdSprite)); temppe->type=GSPT_SIMPLE_PT; temppe->xx=x; temppe->yy=y; - temppe->x=&tempg->x1; - temppe->y=&tempg->y1; + temppe->x=&tempg->p.x1; + temppe->y=&tempg->p.y1; temppe->num=num; QueIns(temppe,root->last); break; case SPT_SHIFT: - x+=tempg->x1; - y+=tempg->y1; + x+=tempg->p.x1; + y+=tempg->p.y1; break; case SPT_ELLIPSE: case SPT_POLYGON: - temppe=CAlloc(sizeof(CSpritePt)); + temppe=CAlloc(sizeof(CEdSprite)); temppe->type=GSPT_WIDTH_HEIGHT; temppe->xx=x; temppe->yy=y; - temppe->x=&tempg->x2; - temppe->y=&tempg->y2; - temppe->w=&tempg->width; - temppe->h=&tempg->height; - temppe->num=num; - QueIns(temppe,root->last); - case SPT_BITMAP: - temppe=CAlloc(sizeof(CSpritePt)); - temppe->type=GSPT_SIMPLE_PT; - temppe->xx=x; - temppe->yy=y; - temppe->x=&tempg->x2; - temppe->y=&tempg->y2; + temppe->x=&tempg->pwha.x1; + temppe->y=&tempg->pwha.y1; + temppe->w=&tempg->pwha.width; + temppe->h=&tempg->pwha.height; temppe->num=num; QueIns(temppe,root->last); break; case SPT_POLYLINE: - ptr=&tempg->y1; - for (i=0;inum;i++) { - temppe=CAlloc(sizeof(CSpritePt)); + ptr=&tempg->nu.u; + for (i=0;inu.num;i++) { + temppe=CAlloc(sizeof(CEdSprite)); temppe->type=GSPT_SIMPLE_PT; temppe->xx=x; temppe->yy=y; @@ -821,13 +782,12 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CSpritePt *root) } break; case SPT_POLYPT: - ptr=&tempg->y1; - temppe=CAlloc(sizeof(CSpritePt)); + temppe=CAlloc(sizeof(CEdSprite)); temppe->type=GSPT_SIMPLE_PT; temppe->xx=x; temppe->yy=y; - temppe->x=&ptr[0]; - temppe->y=&ptr[1]; + temppe->x=&tempg->npu.x; + temppe->y=&tempg->npu.y; temppe->num=num; QueIns(temppe,root->last); break; @@ -835,9 +795,9 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CSpritePt *root) case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - p=&tempg->y1; - for (i=0;inum;i++) { - temppe=CAlloc(sizeof(CSpritePt)); + p=&tempg->nu.u; + for (i=0;inu.num;i++) { + temppe=CAlloc(sizeof(CEdSprite)); temppe->type=GSPT_SIMPLE_PT; temppe->xx=x; temppe->yy=y; @@ -851,13 +811,13 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CSpritePt *root) case SPT_MESH: break; case SPT_SHIFTABLE_MESH: - temppe=CAlloc(sizeof(CSpritePt)); + temppe=CAlloc(sizeof(CEdSprite)); temppe->type=GSPT_SIMPLE_PT; temppe->xx=x; temppe->yy=y; - temppe->x=&tempg->x1; - temppe->y=&tempg->y1; - temppe->z=&tempg->z1; + temppe->x=&tempg->pmu.x; + temppe->y=&tempg->pmu.y; + temppe->z=&tempg->pmu.z; temppe->num=num; QueIns(temppe,root->last); break; @@ -867,10 +827,10 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CSpritePt *root) } } -U0 SpriteCtrlPtsDraw(CDC *dc,CSpritePt *root) +U0 SpriteCtrlPtsDraw(CDC *dc,CEdSprite *root) { I64 x,y; - CSpritePt *temppe; + CEdSprite *temppe; WinMgrSync; DCFill(dc); if (Blink(20)) { @@ -898,9 +858,9 @@ U0 SpriteCtrlPtsDraw(CDC *dc,CSpritePt *root) } } -U0 SpriteCtrlPtsMove(CSpritePt *root,I64 dx,I64 dy) +U0 SpriteCtrlPtsMove(CEdSprite *root,I64 dx,I64 dy) { - CSpritePt *temppe; + CEdSprite *temppe; temppe=root->next; while (temppe!=root) { if (temppe->flags&GSPF_SELECTED) @@ -923,7 +883,7 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) I64 msg_code,a1,a2,xx,yy,xx2,yy2,dd,best_dd,cur_elem_num; Bool old_preempt,result=TRUE; CDC *dc=DCAlias; - CSpritePt root,*temppe,*best_pe; + CEdSprite root,*temppe,*best_pe; SpritePtQueNew(elems,x,y,&root); cur_elem_num=0; @@ -1140,16 +1100,16 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,CSprite **_root,I64 *_cur_el insert_pt=SpriteElemNum2QueEntry(*_root,*_cur_elem_num); tempg=MAlloc(SpriteElemQuedBaseSize(SPT_SHIFT)); tempg->type=SPT_SHIFT; - tempg->x1=0; - tempg->y1=0; + tempg->p.x1=0; + tempg->p.y1=0; QueIns(tempg,insert_pt->last); GetMsg(&a1,&a2,1<x1=a1-xx; - tempg->y1=a2-yy; + tempg->p.x1=a1-xx; + tempg->p.y1=a2-yy; SpriteEdUpdate(doc,tempb,*_root); } while (msg_code!=MSG_IP_L_UP); *_cur_elem_num+=1; diff --git a/Adam/Gr/SpriteMain.CPP b/Adam/Gr/SpriteMain.CPP index 2e4e173..82f64ee 100644 --- a/Adam/Gr/SpriteMain.CPP +++ b/Adam/Gr/SpriteMain.CPP @@ -46,8 +46,8 @@ I64 PopUpSpriteMain(CSprite **_root,I64 *_cur_elem_num) "\n" "$$PURPLE$$$$MU-UL,\"+] Sprite Edit Menu\",LE=SPT_ED_MENU$$$$LTBLUE$$\n" "$$MU-UL,\"Exit Sprite\",LE=SPT_EXIT$$\n" - "$$MU-UL,\"Abort Sprite\",LE=DOCM_CANCEL$$\n"); - DocPrint(doc,"\nRight-Click to get back to this menu."); + "$$MU-UL,\"Abort Sprite\",LE=DOCM_CANCEL$$\n" + "\nRight-Click to get back to this menu."); st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_root,_cur_elem_num); PopUp(st,NULL,&pu_task); Free(st); @@ -97,18 +97,18 @@ U0 SpriteSetSettings(CDC *dc,CSprite *root,I64 cur_elem_num,CColorROPU32 *_color while (cur_elem_num>0 && tempg!=root) { switch (tempg->type) { case SPT_COLOR: - dc->color=*_color=tempg->color; + dc->color=*_color=tempg->c.color; break; case SPT_DITHER_COLOR: dc->color=*_color= - tempg->dither_color.u8[0]| - tempg->dither_color.u8[1]<d.dither_color.u8[0]| + tempg->d.dither_color.u8[1]<pen_width=*_width=tempg->width; + dc->pen_width=*_width=tempg->w.width; break; case SPT_PLANAR_SYMMETRY: - if (GrSetSymmetry3(dc,tempg->x1+x,tempg->y1+y,0,tempg->x2+x,tempg->y2+y,0,tempg->x2+x,tempg->y2+y,1)) + if (GrSetSymmetry3(dc,tempg->pp.x1+x,tempg->pp.y1+y,0,tempg->pp.x2+x,tempg->pp.y2+y,0,tempg->pp.x2+x,tempg->pp.y2+y,1)) dc->flags|=DCF_SYMMETRY; else dc->flags&=~DCF_SYMMETRY; @@ -166,7 +166,7 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) U8 *st,*old_task_title=StrNew(Fs->task_title); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - WordStat; + AutoComplete; WinMgrSync(2,TRUE); dc2->flags|=DCF_ON_TOP; root=Sprite2SpriteQue(tempb->data); @@ -229,7 +229,7 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) color=i; tempg=MAlloc(SpriteElemQuedBaseSize(SPT_COLOR)); tempg->type=SPT_COLOR; - tempg->color=color; + tempg->c.color=color; QueIns(tempg,insert_pt->last); SpriteEdUpdate(doc,tempb,root); cur_elem_num++; @@ -244,7 +244,7 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) color=i; tempg=MAlloc(SpriteElemQuedBaseSize(SPT_DITHER_COLOR)); tempg->type=SPT_DITHER_COLOR; - tempg->dither_color=color.c0.color|color.c1.color<<8; + tempg->d.dither_color=color.c0.color|color.c1.color<<8; QueIns(tempg,insert_pt->last); SpriteEdUpdate(doc,tempb,root); cur_elem_num++; @@ -270,24 +270,24 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) tempg1=insert_pt; if (tempg1!=root && tempg1->type==SPT_MESH) - old_mesh=&tempg1->vertex_cnt; + old_mesh=&tempg1->mu.vertex_cnt; else if (tempg1!=root && tempg1->type==SPT_SHIFTABLE_MESH) { - x1=tempg1->x1; - y1=tempg1->y1; - z1=tempg1->z1; - p=(&tempg1->shiftable_tri_cnt)(U8 *)+sizeof(I32); - for (i=0;ishiftable_vertex_cnt;i++,p++) { + x1=tempg1->pmu.x; + y1=tempg1->pmu.y; + z1=tempg1->pmu.z; + p=&tempg1->pmu.u; + for (i=0;ipmu.vertex_cnt;i++,p++) { p->x+=x1; p->y+=y1; p->z+=z1; } - old_mesh=&tempg1->shiftable_vertex_cnt; + old_mesh=&tempg1->pmu.vertex_cnt; } else old_mesh=NULL; if (mesh=SpriteMeshEd(old_mesh,&size,TRUE)) { tempg=MAlloc(SpriteElemQuedBaseSize(SPT_MESH)-sizeof(I32)*2+size); tempg->type=SPT_MESH; - MemCpy(&tempg->vertex_cnt,mesh,size); + MemCpy(&tempg->mu.vertex_cnt,mesh,size); Free(mesh); QueIns(tempg,insert_pt->last); SpriteEdUpdate(doc,tempb,root); @@ -299,11 +299,11 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) } else cur_elem_num++; } else if (old_mesh && tempg1->type==SPT_SHIFTABLE_MESH) { - x1=tempg1->x1; - y1=tempg1->y1; - z1=tempg1->z1; - p=(&tempg1->shiftable_tri_cnt)(U8 *)+sizeof(I32); - for (i=0;ishiftable_vertex_cnt;i++,p++) { + x1=tempg1->pmu.x; + y1=tempg1->pmu.y; + z1=tempg1->pmu.z; + p=&tempg1->pmu.u; + for (i=0;ipmu.vertex_cnt;i++,p++) { p->x-=x1; p->y-=y1; p->z-=z1; @@ -328,7 +328,7 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) "bitmap.\n"); doc_e->de_flags=old_de_flags; Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_IP_L|WIF_FOCUS_TASK_IP_R| - WIF_FOCUS_TASK_BORDER-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; + WIF_FOCUS_TASK_BORDER-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; break; case SPT_BITMAP: doc_e->de_flags|=DOCEF_DONT_DRAW; @@ -363,7 +363,7 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) } doc_e->de_flags=old_de_flags; Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_IP_L|WIF_FOCUS_TASK_IP_R| - WIF_FOCUS_TASK_BORDER-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; + WIF_FOCUS_TASK_BORDER-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; break; case SPT_WIDTH: doc_e->de_flags|=DOCEF_DONT_DRAW; @@ -372,7 +372,7 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) width=i; tempg=MAlloc(SpriteElemQuedBaseSize(SPT_WIDTH)); tempg->type=SPT_WIDTH; - tempg->width=width; + tempg->w.width=width; QueIns(tempg,insert_pt->last); SpriteEdUpdate(doc,tempb,root); cur_elem_num++; @@ -415,9 +415,9 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) } while (msg_code!=MSG_IP_L_UP); tempg=CAlloc(SpriteElemQuedBaseSize(SPT_TEXT)+StrLen(st)+1); tempg->type=SPT_TEXT; - tempg->x1=x1-x; - tempg->y1=y1-y; - StrCpy(tempg->st,st); + tempg->ps.x1=x1-x; + tempg->ps.y1=y1-y; + StrCpy(tempg->ps.st,st); QueIns(tempg,insert_pt->last); SpriteEdUpdate(doc,tempb,root); cur_elem_num++; @@ -441,9 +441,9 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) } while (msg_code!=MSG_IP_L_UP); tempg=CAlloc(SpriteElemQuedBaseSize(SPT_TEXT_BOX)+StrLen(st)+1); tempg->type=SPT_TEXT_BOX; - tempg->x1=x1-x; - tempg->y1=y1-y; - StrCpy(tempg->st,st); + tempg->ps.x1=x1-x; + tempg->ps.y1=y1-y; + StrCpy(tempg->ps.st,st); QueIns(tempg,insert_pt->last); SpriteEdUpdate(doc,tempb,root); cur_elem_num++; @@ -467,9 +467,9 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) } while (msg_code!=MSG_IP_L_UP); tempg=CAlloc(SpriteElemQuedBaseSize(SPT_TEXT_DIAMOND)+StrLen(st)+1); tempg->type=SPT_TEXT_DIAMOND; - tempg->x1=x1-x; - tempg->y1=y1-y; - StrCpy(tempg->st,st); + tempg->ps.x1=x1-x; + tempg->ps.y1=y1-y; + StrCpy(tempg->ps.st,st); QueIns(tempg,insert_pt->last); SpriteEdUpdate(doc,tempb,root); cur_elem_num++; @@ -502,14 +502,34 @@ ei_restart: eletype=SPT_MENU; } if (msg_code==MSG_KEY_DOWN) { - if (a1==CH_ESC) { - result=GE_EXIT; - goto ei_done; - } else if (a1==CH_SHIFT_ESC) { - result=GE_ABORT; - goto ei_done; - } else - goto ei_restart; + switch (a1) { + case CH_ESC: + result=GE_EXIT; + goto ei_done; + case CH_SHIFT_ESC: + result=GE_ABORT; + goto ei_done; + case 'c': //eye-dropper + dc3=DCCaptureScreen(FALSE); + color=GrPeek(dc3,ip.pos.x,ip.pos.y)^15;//Mouse cursor is XORed. + DCDel(dc3); + tempg=MAlloc(SpriteElemQuedBaseSize(SPT_COLOR)); + tempg->type=SPT_COLOR; + tempg->c.color=color; + QueIns(tempg,insert_pt->last); + SpriteEdUpdate(doc,tempb,root); + cur_elem_num++; + break; + case 't': //Set to transparent color + tempg=MAlloc(SpriteElemQuedBaseSize(SPT_COLOR)); + tempg->type=SPT_COLOR; + tempg->c.color=TRANSPARENT; + QueIns(tempg,insert_pt->last); + SpriteEdUpdate(doc,tempb,root); + cur_elem_num++; + break; + } + goto ei_restart; } else { x1=a1; y1=a2; x2=a1; y2=a2; @@ -564,10 +584,10 @@ ei_restart: tempg->type=SPT_PLANAR_SYMMETRY; break; sub_switch_end: - tempg->x1=x1-x; - tempg->y1=y1-y; - tempg->x2=x2-x; - tempg->y2=y2-y; + tempg->pp.x1=x1-x; + tempg->pp.y1=y1-y; + tempg->pp.x2=x2-x; + tempg->pp.y2=y2-y; break; case SPT_RECT: xx1=a1; yy1=a2; @@ -594,10 +614,10 @@ ei_restart: GrRect3(dc,xx1,yy1,0,xx2-xx1,yy2-yy1); tempg=MAlloc(SpriteElemQuedBaseSize(SPT_RECT)); tempg->type=SPT_RECT; - tempg->x1=xx1-x; - tempg->y1=yy1-y; - tempg->x2=xx2-x; - tempg->y2=yy2-y; + tempg->pp.x1=xx1-x; + tempg->pp.y1=yy1-y; + tempg->pp.x2=xx2-x; + tempg->pp.y2=yy2-y; break; case SPT_INS_SCREEN_BITMAP: case SPT_INS_TRANSPARENT_SCREEN_BITMAP: @@ -628,10 +648,10 @@ ei_restart: tempg=CAlloc(SpriteElemQuedBaseSize(SPT_BITMAP)+ ((xx2-xx1+7)&~7)*(yy2-yy1)); tempg->type=SPT_BITMAP; - tempg->width=xx2-xx1; - tempg->height=yy2-yy1; - tempg->x2=0; - tempg->y2=0; + tempg->pwhu.width=xx2-xx1; + tempg->pwhu.height=yy2-yy1; + tempg->pwhu.x1=0; + tempg->pwhu.y1=0; SpriteScreenInit(dc,x,y); i=gr.screen_zoom; GrScaleZoom(1.0/i); @@ -644,7 +664,7 @@ ei_restart: if (eletype==SPT_INS_TRANSPARENT_SCREEN_BITMAP) DCColorChg(img,bm_bkcolor); GrScaleZoom(i); - MemCpy(tempg(U8 *)+offset(CSprite.linespeed),img->body,((xx2-xx1+7)&~7)*(yy2-yy1)); + MemCpy(&tempg->pwhu.u,img->body,((xx2-xx1+7)&~7)*(yy2-yy1)); DCDel(img); DCDel(dc3); dc2->pen_width=old_width; @@ -664,9 +684,9 @@ ei_restart: GrCircle3(dc,x1,y1,0,Sqrt(SqrI64(x1-x2)+SqrI64(y1-y2))); tempg=MAlloc(SpriteElemQuedBaseSize(SPT_CIRCLE)); tempg->type=SPT_CIRCLE; - tempg->x1=x1-x; - tempg->y1=y1-y; - tempg->x2=Sqrt(SqrI64(x1-x2)+SqrI64(y1-y2)); + tempg->pr.x1=x1-x; + tempg->pr.y1=y1-y; + tempg->pr.radius=Sqrt(SqrI64(x1-x2)+SqrI64(y1-y2)); break; case SPT_ELLIPSE: do { @@ -680,37 +700,37 @@ ei_restart: } while (msg_code!=MSG_IP_L_UP); tempg=MAlloc(SpriteElemQuedBaseSize(SPT_ELLIPSE)); tempg->type=SPT_ELLIPSE; - tempg->x2=(x1+x2)>>1-x; - tempg->y2=(y1+y2)>>1-y; - tempg->width =AbsI64(x1-x2)>>1; - tempg->height=AbsI64(y1-y2)>>1; - angle2=Arg(x2-(tempg->x2+x),y2-(tempg->y2+y)); - if (tempg->widthheight) + tempg->pwha.x1=(x1+x2)>>1-x; + tempg->pwha.y1=(y1+y2)>>1-y; + tempg->pwha.width =AbsI64(x1-x2)>>1; + tempg->pwha.height=AbsI64(y1-y2)>>1; + angle2=Arg(x2-(tempg->pwha.x1+x),y2-(tempg->pwha.y1+y)); + if (tempg->pwha.widthpwha.height) angle2-=ã/2.0; do { - angle1=Arg(x2-(tempg->x2+x),y2-(tempg->y2+y)); - if (tempg->width>=tempg->height) - tempg->rot_angle=-(angle1-angle2); + angle1=Arg(x2-(tempg->pwha.x1+x),y2-(tempg->pwha.y1+y)); + if (tempg->pwha.width>=tempg->pwha.height) + tempg->pwha.angle=-(angle1-angle2); else - tempg->rot_angle=-(angle1-angle2)+ã/2.0; + tempg->pwha.angle=-(angle1-angle2)+ã/2.0; dc->color=color&COLORROP_NO_ROP0_MASK; - GrEllipse3(dc,tempg->x2+x,tempg->y2+y,0, - tempg->width,tempg->height,tempg->rot_angle); + GrEllipse3(dc,tempg->pwha.x1+x,tempg->pwha.y1+y,0, + tempg->pwha.width,tempg->pwha.height,tempg->pwha.angle); msg_code=GetMsg(&a1,&a2, 1<x2+x),y2-(tempg->y2+y)); - if (tempg->width>=tempg->height) - tempg->rot_angle=-(angle1-angle2); + angle1=Arg(x2-(tempg->pwha.x1+x),y2-(tempg->pwha.y1+y)); + if (tempg->pwha.width>=tempg->pwha.height) + tempg->pwha.angle=-(angle1-angle2); else - tempg->rot_angle=-(angle1-angle2)+ã/2.0; + tempg->pwha.angle=-(angle1-angle2)+ã/2.0; dc->color=color&COLORROP_NO_ROP0_MASK; - GrEllipse3(dc,tempg->x2+x,tempg->y2+y,0, - tempg->width,tempg->height,tempg->rot_angle); + GrEllipse3(dc,tempg->pwha.x1+x,tempg->pwha.y1+y,0, + tempg->pwha.width,tempg->pwha.height,tempg->pwha.angle); break; case SPT_POLYGON: eletype=SPT_MENU; @@ -729,115 +749,128 @@ ei_restart: } while (msg_code!=MSG_IP_L_UP); tempg=MAlloc(SpriteElemQuedBaseSize(SPT_POLYGON)); tempg->type=SPT_POLYGON; - tempg->x2=(x1+x2)>>1-x; - tempg->y2=(y1+y2)>>1-y; - tempg->width =AbsI64(x1-x2)>>1; - tempg->height=AbsI64(y1-y2)>>1; - tempg->sides=i; - angle2=Arg(x2-(tempg->x2+x),y2-(tempg->y2+y)); - if (tempg->widthheight) + tempg->pwhas.x1=(x1+x2)>>1-x; + tempg->pwhas.y1=(y1+y2)>>1-y; + tempg->pwhas.width =AbsI64(x1-x2)>>1; + tempg->pwhas.height=AbsI64(y1-y2)>>1; + tempg->pwhas.sides=i; + angle2=Arg(x2-(tempg->pwhas.x1+x),y2-(tempg->pwhas.y1+y)); + if (tempg->pwhas.widthpwhas.height) angle2-=ã/2.0; do { - angle1=Arg(x2-(tempg->x2+x),y2-(tempg->y2+y)); - if (tempg->width>=tempg->height) - tempg->rot_angle=-(angle1-angle2); + angle1=Arg(x2-(tempg->pwhas.x1+x),y2-(tempg->pwhas.y1+y)); + if (tempg->pwhas.width>=tempg->pwhas.height) + tempg->pwhas.angle=-(angle1-angle2); else - tempg->rot_angle=-(angle1-angle2)+ã/2.0; + tempg->pwhas.angle=-(angle1-angle2)+ã/2.0; dc->color=color&COLORROP_NO_ROP0_MASK; - GrRegPoly3(dc,tempg->x2+x,tempg->y2+y,0, - tempg->width,tempg->height,tempg->sides,tempg->rot_angle); + GrRegPoly3(dc,tempg->pwhas.x1+x,tempg->pwhas.y1+y,0, + tempg->pwhas.width,tempg->pwhas.height, + tempg->pwhas.sides,tempg->pwhas.angle); msg_code=GetMsg(&a1,&a2, 1<x2+x),y2-(tempg->y2+y)); - if (tempg->width>=tempg->height) - tempg->rot_angle=-(angle1-angle2); + angle1=Arg(x2-(tempg->pwhas.x1+x),y2-(tempg->pwhas.y1+y)); + if (tempg->pwhas.width>=tempg->pwhas.height) + tempg->pwhas.angle=-(angle1-angle2); else - tempg->rot_angle=-(angle1-angle2)+ã/2.0; + tempg->pwhas.angle=-(angle1-angle2)+ã/2.0; dc->color=color&COLORROP_NO_ROP0_MASK; - GrRegPoly3(dc,tempg->x2+x,tempg->y2+y,0, - tempg->width,tempg->height,tempg->sides,tempg->rot_angle); + GrRegPoly3(dc,tempg->pwhas.x1+x,tempg->pwhas.y1+y,0, + tempg->pwhas.width,tempg->pwhas.height,tempg->pwhas.sides, + tempg->pwhas.angle); break; case SPT_PT: case SPT_FLOOD_FILL: case SPT_FLOOD_FILL_NOT: tempg=MAlloc(SpriteElemQuedBaseSize(eletype)); tempg->type=eletype; - tempg->x1=x1-x; - tempg->y1=y1-y; + tempg->p.x1=x1-x; + tempg->p.y1=y1-y; break; sub_switch_start: QueInit(&root2); num=0; - x3=a1-x; y3=a2-y; do { do { dc->color=color&COLORROP_NO_ROP0_MASK; - GrLine3(dc,x1,y1,0,x2,y2,0); + if (num) + GrLine3(dc,x1,y1,0,x2,y2,0); msg_code=GetMsg(&a1,&a2, 1<color=TRANSPARENT; - GrLine3(dc,x1,y1,0,x2,y2,0); + if (num) + GrLine3(dc,x1,y1,0,x2,y2,0); x2=a1; y2=a2; } while (msg_code!=MSG_IP_L_UP && msg_code!=MSG_IP_R_UP); dc->color=color&COLORROP_NO_ROP0_MASK; if (msg_code==MSG_IP_L_UP) { - GrLine3(dc,x1,y1,0,x2,y2,0); + if (num) + GrLine3(dc,x1,y1,0,x2,y2,0); tempg=MAlloc(SpriteElemQuedBaseSize(SPT_PT)); tempg->type=SPT_PT; - tempg->x1=x2-x; - tempg->y1=y2-y; + tempg->p.x1=x2-x; + tempg->p.y1=y2-y; QueIns(tempg,root2.last); x1=x2;y1=y2; num++; } } while (msg_code!=MSG_IP_R_UP); - if (!num) { - tempg=NULL; - break; - } case SPT_POLYLINE: - tempg=CAlloc(SpriteElemQuedBaseSize(SPT_POLYLINE)+ - (num+1)<<1*sizeof(I32)); - ptr=&tempg->y1; - tempg2=root2.next; - ptr[0]=x3; - ptr[1]=y3; - ptr+=2; - for (i=0;inext; - ptr[i<<1]=tempg2->x1; - ptr[i<<1+1]=tempg2->y1; - Free(tempg2); - tempg2=tempg1; + if (num>1) { + tempg=CAlloc(SpriteElemQuedBaseSize(SPT_POLYLINE)+num*sizeof(CD2I32)); + ptr=&tempg->nu.u; + tempg2=root2.next; + for (i=0;inext; + ptr[i<<1]=tempg2->p.x1; + ptr[i<<1+1]=tempg2->p.y1; + Free(tempg2); + tempg2=tempg1; + } + tempg->type=SPT_POLYLINE; + tempg->nu.num=num; + } else { + tempg2=root2.next; + for (i=0;inext; + Free(tempg2); + tempg2=tempg1; + } + tempg=NULL; } - tempg->type=SPT_POLYLINE; - tempg->num=num+1; break; case SPT_BSPLINE2: case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - tempg=CAlloc(SpriteElemQuedBaseSize(SPT_POLYLINE)+ - (num+1)*sizeof(CD3I32)); - p=&tempg->y1; - tempg2=root2.next; - p[0].x=x3; - p[0].y=y3; - for (i=1;i<=num;i++) { - tempg1=tempg2->next; - p[i].x=tempg2->x1; - p[i].y=tempg2->y1; - Free(tempg2); - tempg2=tempg1; + if (num>2) { + tempg=CAlloc(SpriteElemQuedBaseSize(eletype)+num*sizeof(CD3I32)); + p=&tempg->nu.u; + tempg2=root2.next; + for (i=0;inext; + p[i].x=tempg2->p.x1; + p[i].y=tempg2->p.y1; + Free(tempg2); + tempg2=tempg1; + } + tempg->type=eletype; + tempg->nu.num=num; + } else { + tempg2=root2.next; + for (i=0;inext; + Free(tempg2); + tempg2=tempg1; + } + tempg=NULL; } - tempg->type=eletype; - tempg->num=num+1; break; sub_switch_end: break; @@ -846,8 +879,7 @@ ei_restart: x3=a1-x; y3=a2-y; dc->color=color&COLORROP_NO_ROP0_MASK; do { - msg_code=GetMsg(&a1,&a2, - 1<next; - if (tempg->x1==x1 && tempg->y1==y1) { + if (tempg->p.x1==x1 && tempg->p.y1==y1) { QueRem(tempg); Free(tempg); } else { num++; - x1=tempg->x1; - y1=tempg->y1; + x1=tempg->p.x1; + y1=tempg->p.y1; } tempg=tempg1; } tempg=CAlloc(SpriteElemQuedBaseSize(SPT_POLYPT)+(num*3+7)>>3); - ptr=&tempg->y1; - ptr[0]=x3; - ptr[1]=y3; - ptr+=2; + tempg->npu.x=x3; + tempg->npu.y=y3; + ptr=&tempg->npu.u; x1=x3;y1=y3; i=0; tempg2=root2.next; while (tempg2!=&root2) { tempg1=tempg2->next; BFieldOrU32(ptr,i, - polypt_map[SignI64(tempg2->x1-x1)+1+ - 3*(SignI64(tempg2->y1-y1)+1)]); + polypt_map[SignI64(tempg2->p.x1-x1)+1+ + 3*(SignI64(tempg2->p.y1-y1)+1)]); i+=3; - x1=tempg2->x1;y1=tempg2->y1; + x1=tempg2->p.x1;y1=tempg2->p.y1; QueRem(tempg2); Free(tempg2); tempg2=tempg1; } tempg->type=SPT_POLYPT; - tempg->num=num; + tempg->npu.num=num; break; sub_switch_end: if (tempg) { @@ -926,14 +957,14 @@ ei_bitmap: xx2++; yy2++; tempg=CAlloc(SpriteElemQuedBaseSize(SPT_BITMAP)+ ((xx2-xx1+7)&~7)*(yy2-yy1)); - tempg->type=eletype; - tempg->width=xx2-xx1; - tempg->height=yy2-yy1; - tempg->x2=xx1-x; - tempg->y2=yy1-y; - img=DCNew(tempg->width,tempg->height,Fs); + tempg->type=SPT_BITMAP; + tempg->pwhu.width=xx2-xx1; + tempg->pwhu.height=yy2-yy1; + tempg->pwhu.x1=xx1-x; + tempg->pwhu.y1=yy1-y; + img=DCNew(tempg->pwhu.width,tempg->pwhu.height,Fs); img->color=bm_bkcolor; - GrRect(img,0,0,tempg->width,tempg->height); + GrRect(img,0,0,tempg->pwhu.width,tempg->pwhu.height); tempg1=insert_pt; if (tempg1==root || tempg1->type!=SPT_BITMAP) { SpriteSetSettings(img,root,0,&color,&width,-(xx1-x),-(yy1-y)); @@ -943,12 +974,12 @@ ei_bitmap: cur_elem_num=1; } else { SpriteSetSettings(img,root,cur_elem_num,&color,&width,-(xx1-x),-(yy1-y)); - Sprite3(img,-(xx1-x),-(yy1-y),0,tempg1(U8 *)+offset(CSprite.start),TRUE); + Sprite3(img,-(xx1-x),-(yy1-y),0,&tempg1->start,TRUE); insert_pt=tempg1->next; QueRem(tempg1); Free(tempg1); } - MemCpy(tempg(U8 *)+offset(CSprite.linespeed),img->body,((xx2-xx1+7)&~7)*(yy2-yy1)); + MemCpy(&tempg->pwhu.u,img->body,((xx2-xx1+7)&~7)*(yy2-yy1)); switch (i=SpriteBitMapEd(doc,doc_e,dc,&xx1,&yy1,&xx2,&yy2,&img,bm_bkcolor)) { case GE_EXIT: @@ -957,11 +988,11 @@ ei_bitmap: tempg=CAlloc(SpriteElemQuedBaseSize(SPT_BITMAP)+ ((xx2-xx1+7)&~7)*(yy2-yy1)); tempg->type=eletype; - tempg->width=xx2-xx1; - tempg->height=yy2-yy1; - tempg->x2=xx1-x; - tempg->y2=yy1-y; - MemCpy(tempg(U8 *)+offset(CSprite.linespeed),img->body,((xx2-xx1+7)&~7)*(yy2-yy1)); + tempg->pwhu.width=xx2-xx1; + tempg->pwhu.height=yy2-yy1; + tempg->pwhu.x1=xx1-x; + tempg->pwhu.y1=yy1-y; + MemCpy(&tempg->pwhu.u,img->body,((xx2-xx1+7)&~7)*(yy2-yy1)); break; } doc_e->de_flags=old_de_flags; @@ -987,25 +1018,25 @@ ei_shiftable_mesh: x1=-(a1-x); y1=-(a2-y); z1=z; - p=&tempg1->x2; - for (i=0;ivertex_cnt;i++,p++) { + p=&tempg1->mu.u; + for (i=0;imu.vertex_cnt;i++,p++) { p->x+=x1; p->y+=y1; p->z+=z1; } - old_mesh=&tempg1->vertex_cnt; + old_mesh=&tempg1->mu.vertex_cnt; } else if (tempg1!=root && tempg1->type==SPT_SHIFTABLE_MESH) { - z=-tempg1->z1; - x1=tempg1->x1-(a1-x); - y1=tempg1->y1-(a2-y); - z1=tempg1->z1+z; - p=(&tempg1->shiftable_tri_cnt)(U8 *)+sizeof(I32); - for (i=0;ishiftable_vertex_cnt;i++,p++) { + z=-tempg1->pmu.z; + x1=tempg1->pmu.x-(a1-x); + y1=tempg1->pmu.y-(a2-y); + z1=tempg1->pmu.z+z; + p=&tempg1->pmu.u; + for (i=0;ipmu.vertex_cnt;i++,p++) { p->x+=x1; p->y+=y1; p->z+=z1; } - old_mesh=&tempg1->shiftable_vertex_cnt; + old_mesh=&tempg1->pmu.vertex_cnt; } else { z=0; old_mesh=NULL; @@ -1013,11 +1044,11 @@ ei_shiftable_mesh: if (mesh=SpriteMeshEd(old_mesh,&size,TRUE)) { tempg=MAlloc(SpriteElemQuedBaseSize(SPT_SHIFTABLE_MESH)-sizeof(I32)*2+size); tempg->type=SPT_SHIFTABLE_MESH; - MemCpy(&tempg->shiftable_vertex_cnt,mesh,size); + MemCpy(&tempg->pmu.vertex_cnt,mesh,size); Free(mesh); - tempg->x1=a1-x; - tempg->y1=a2-y; - tempg->z1=-z; + tempg->pmu.x=a1-x; + tempg->pmu.y=a2-y; + tempg->pmu.z=-z; QueIns(tempg,insert_pt->last); SpriteEdUpdate(doc,tempb,root); if (old_mesh) { @@ -1028,11 +1059,11 @@ ei_shiftable_mesh: } else cur_elem_num++; } else if (old_mesh && tempg1->type==SPT_SHIFTABLE_MESH) { - x1=tempg1->x1-(a1-x); - y1=tempg1->y1-(a2-y); - z1=tempg1->z1+z; - p=(&tempg1->shiftable_tri_cnt)(U8 *)+sizeof(I32); - for (i=0;ishiftable_vertex_cnt;i++,p++) { + x1=tempg1->pmu.x-(a1-x); + y1=tempg1->pmu.y-(a2-y); + z1=tempg1->pmu.z+z; + p=&tempg1->pmu.u; + for (i=0;ipmu.vertex_cnt;i++,p++) { p->x-=x1; p->y-=y1; p->z-=z1; @@ -1041,8 +1072,8 @@ ei_shiftable_mesh: x1=-(a1-x); y1=-(a2-y); z1= z; - p=&tempg1->x2; - for (i=0;ivertex_cnt;i++,p++) { + p=&tempg1->mu.u; + for (i=0;imu.vertex_cnt;i++,p++) { p->x-=x1; p->y-=y1; p->z-=z1; @@ -1077,7 +1108,7 @@ U0 EdSpriteIns(CDoc *doc,I64 x,I64 y) CDocEntry *doc_e; CDocBin *tempb; if (Fs!=doc->mem_task) - Dbg; + throw('Graphics'); if (st=EdSprite(doc->cur_bin_num)) { unlock=DocLock(doc); tempb=CAlloc(sizeof(CDocBin),doc->mem_task); diff --git a/Adam/Gr/SpriteMesh.CPP b/Adam/Gr/SpriteMesh.CPP index 51f1afd..b5c1d4d 100644 --- a/Adam/Gr/SpriteMesh.CPP +++ b/Adam/Gr/SpriteMesh.CPP @@ -384,7 +384,7 @@ U0 MPDrawIt(CMeshFrame *e) CMeshEdTri *tempt=e->tri_root.next; I64 i,*old_r=dc->r; -//$LK,"DCAlias",A="MN:DCAlias"$() allocates a new identity rotation matrix. +//$LK,"DCAlias",A="MN:DCAlias"$() alllocs a new identity rotation matrix. //We want e->dc's rotation matrix. dc->r=e->dc->r; @@ -955,7 +955,7 @@ $WW,0$*/ "}"); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - WordStat; + AutoComplete; Preempt(OFF); //We don't really want window update while modifying links AcctOneTimePopUp(ARf_MESH_ED, "$$GREEN$$Right Mouse$$FG$$: Hold and move to shift cursor z\n" diff --git a/Adam/Gr/SpriteNew.CPP b/Adam/Gr/SpriteNew.CPP index f89be18..55b93ba 100644 --- a/Adam/Gr/SpriteNew.CPP +++ b/Adam/Gr/SpriteNew.CPP @@ -5,36 +5,36 @@ U8 polypt_map[9]={0,1,2,3,0,4,5,6,7}; I64 sprite_elem_base_sizes[SPT_NUM_TYPES]= { -offset(CSprite.x1)-offset(CSprite.start), //SPT_END -1+offset(CSprite.color)-offset(CSprite.start), //SPT_COLOR -2+offset(CSprite.dither_color)-offset(CSprite.start), //SPT_DITHER_COLOR -offset(CSprite.y1)-offset(CSprite.start), //SPT_WIDTH -offset(CSprite.linespeed)-offset(CSprite.start), //SPT_PLANAR_SYMMETRY -offset(CSprite.x1)-offset(CSprite.start), //SPT_TRANSFORM_ON -offset(CSprite.x1)-offset(CSprite.start), //SPT_TRANSFORM_OFF -offset(CSprite.x2)-offset(CSprite.start), //SPT_SHIFT -offset(CSprite.x2)-offset(CSprite.start), //SPT_PT -offset(CSprite.y2)-offset(CSprite.start), //SPT_POLYPT -offset(CSprite.linespeed)-offset(CSprite.start), //SPT_LINE -offset(CSprite.y1)-offset(CSprite.start), //SPT_POLYLINE -offset(CSprite.linespeed)-offset(CSprite.start), //SPT_RECT -offset(CSprite.sides)-offset(CSprite.start), //SPT_ROTATED_RECT -offset(CSprite.y2)-offset(CSprite.start), //SPT_CIRCLE -offset(CSprite.sides)-offset(CSprite.start), //SPT_ELLIPSE -sizeof(CSprite)-offset(CSprite.start), //SPT_POLYGON -offset(CSprite.y1)-offset(CSprite.start), //SPT_BSPLINE2 -offset(CSprite.y1)-offset(CSprite.start), //SPT_BSPLINE2_CLOSED -offset(CSprite.y1)-offset(CSprite.start), //SPT_BSPLINE3 -offset(CSprite.y1)-offset(CSprite.start), //SPT_BSPLINE3_CLOSED -offset(CSprite.x2)-offset(CSprite.start), //SPT_FLOOD_FILL -offset(CSprite.x2)-offset(CSprite.start), //SPT_FLOOD_FILL_NOT -offset(CSprite.linespeed)-offset(CSprite.start), //SPT_BITMAP -offset(CSprite.x2)-offset(CSprite.start), //SPT_MESH -offset(CSprite.shiftable_tri_cnt)+sizeof(I32)-offset(CSprite.start), //SPT_SHIFTABLE_MESH -offset(CSprite.linespeed)-offset(CSprite.start), //SPT_ARROW -offset(CSprite.st)-offset(CSprite.start), //SPT_TEXT -offset(CSprite.st)-offset(CSprite.start), //SPT_TEXT_BOX -offset(CSprite.st)-offset(CSprite.start), //SPT_TEXT_DIAMOND +sizeof(CSpriteBase), //SPT_END +sizeof(CSpriteColor), //SPT_COLOR +sizeof(CSpriteDitherColor), //SPT_DITHER_COLOR +sizeof(CSpriteWidth), //SPT_WIDTH +sizeof(CSpritePtPt), //SPT_PLANAR_SYMMETRY +sizeof(CSpriteBase), //SPT_TRANSFORM_ON +sizeof(CSpriteBase), //SPT_TRANSFORM_OFF +sizeof(CSpritePt), //SPT_SHIFT +sizeof(CSpritePt), //SPT_PT +sizeof(CSpriteNumPtU8s), //SPT_POLYPT +sizeof(CSpritePtPt), //SPT_LINE +sizeof(CSpriteNumU8s), //SPT_POLYLINE +sizeof(CSpritePtPt), //SPT_RECT +sizeof(CSpritePtPtAng), //SPT_ROTATED_RECT +sizeof(CSpritePtRad), //SPT_CIRCLE +sizeof(CSpritePtWHAng), //SPT_ELLIPSE +sizeof(CSpritePtWHAngSides), //SPT_POLYGON +sizeof(CSpriteNumU8s), //SPT_BSPLINE2 +sizeof(CSpriteNumU8s), //SPT_BSPLINE2_CLOSED +sizeof(CSpriteNumU8s), //SPT_BSPLINE3 +sizeof(CSpriteNumU8s), //SPT_BSPLINE3_CLOSED +sizeof(CSpritePt), //SPT_FLOOD_FILL +sizeof(CSpritePt), //SPT_FLOOD_FILL_NOT +sizeof(CSpritePtWHU8s), //SPT_BITMAP +sizeof(CSpriteMeshU8s), //SPT_MESH +sizeof(CSpritePtMeshU8s), //SPT_SHIFTABLE_MESH +sizeof(CSpritePtPt), //SPT_ARROW +sizeof(CSpritePtStr), //SPT_TEXT +sizeof(CSpritePtStr), //SPT_TEXT_BOX +sizeof(CSpritePtStr), //SPT_TEXT_DIAMOND }; I64 SpriteElemQuedBaseSize(I64 type) @@ -47,30 +47,30 @@ I64 SpriteElemSize(CSprite *tempg) I64 i=sprite_elem_base_sizes[tempg->type]; switch (tempg->type) { case SPT_POLYLINE: - i+=tempg->num*sizeof(CD2I32); + i+=tempg->nu.num*sizeof(CD2I32); break; case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: - i+=StrLen(tempg->st)+1; + i+=StrLen(tempg->ps.st)+1; break; case SPT_BITMAP: - i+=((tempg->width+7)&~7)*tempg->height; + i+=((tempg->pwhu.width+7)&~7)*tempg->pwhu.height; break; case SPT_POLYPT: - i+=(tempg->num*3+7)>>3; + i+=(tempg->npu.num*3+7)>>3; break; case SPT_BSPLINE2: case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - i+=tempg->num*sizeof(CD3I32); + i+=tempg->nu.num*sizeof(CD3I32); break; case SPT_MESH: - i+=tempg->vertex_cnt*sizeof(CD3I32)+tempg->tri_cnt*sizeof(CMeshTri); + i+=tempg->mu.vertex_cnt*sizeof(CD3I32)+tempg->mu.tri_cnt*sizeof(CMeshTri); break; case SPT_SHIFTABLE_MESH: - i+=tempg->shiftable_vertex_cnt*sizeof(CD3I32)+tempg->shiftable_tri_cnt*sizeof(CMeshTri); + i+=tempg->pmu.vertex_cnt*sizeof(CD3I32)+tempg->pmu.tri_cnt*sizeof(CMeshTri); break; } return i; @@ -105,12 +105,11 @@ public U8 *DC2Sprite(CDC *tempb) sprite_elem_base_sizes[SPT_END]) (U8 *)-offset(CSprite.start); tempg->type=SPT_BITMAP; - tempg->width=tempb->width; - tempg->height=tempb->height; - tempg->x2=0; - tempg->y2=0; - MemCpy(tempg(U8 *)+offset(CSprite.linespeed),tempb->body, - tempb->width_internal*tempb->height); + tempg->pwhu.width=tempb->width; + tempg->pwhu.height=tempb->height; + tempg->pwhu.x1=0; + tempg->pwhu.y1=0; + MemCpy(&tempg->pwhu.u,tempb->body,tempb->width_internal*tempb->height); return tempg(U8 *)+offset(CSprite.start); } @@ -121,56 +120,56 @@ public U8 *SpriteElem2OneLineSummary(CSprite *tempg) StrPrint(buf,"%Z",tempg->type,"ST_SPRITE_ELEM_TYPES"); switch (tempg->type) { case SPT_COLOR: - CatPrint(buf," %s",Color2Str(buf2,tempg->color)); + CatPrint(buf," %s",Color2Str(buf2,tempg->c.color)); break; case SPT_DITHER_COLOR: - CatPrint(buf," %s",Color2Str(buf2,ROPF_DITHER|tempg->dither_color.u8[0]|tempg->dither_color.u8[1]<d.dither_color.u8[0]|tempg->d.dither_color.u8[1]<x1,tempg->y1); + CatPrint(buf," (%d,%d)",tempg->p.x1,tempg->p.y1); break; case SPT_LINE: case SPT_ARROW: case SPT_PLANAR_SYMMETRY: case SPT_RECT: case SPT_ROTATED_RECT: - CatPrint(buf," (%d,%d),(%d,%d)",tempg->x1,tempg->y1,tempg->x2,tempg->y2); + CatPrint(buf," (%d,%d),(%d,%d)",tempg->pp.x1,tempg->pp.y1,tempg->pp.x2,tempg->pp.y2); break; case SPT_CIRCLE: - CatPrint(buf," (%d,%d):%dR",tempg->x1,tempg->y1,tempg->x2); + CatPrint(buf," (%d,%d):%dR",tempg->pr.x1,tempg->pr.y1,tempg->pr.radius); break; case SPT_WIDTH: - CatPrint(buf," %d",tempg->width); + CatPrint(buf," %d",tempg->w.width); break; case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: - CatPrint(buf," %d,%d:%-16tQ",tempg->x1,tempg->y1,tempg->st); + CatPrint(buf," %d,%d:%-16tQ",tempg->ps.x1,tempg->ps.y1,tempg->ps.st); break; case SPT_POLYLINE: case SPT_POLYPT: - ptr=&tempg->y1; - CatPrint(buf," %d (%d,%d)",tempg->num,ptr[0],ptr[1]); + ptr=&tempg->npu.x; + CatPrint(buf," %d (%d,%d)",tempg->npu.num,ptr[0],ptr[1]); break; case SPT_ELLIPSE: case SPT_POLYGON: case SPT_BITMAP: - CatPrint(buf," (%d,%d):%dW,%dH",tempg->x2,tempg->y2,tempg->width,tempg->height); + CatPrint(buf," (%d,%d):%dW,%dH",tempg->pwhu.x1,tempg->pwhu.y1,tempg->pwhu.width,tempg->pwhu.height); break; case SPT_BSPLINE2: case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - CatPrint(buf," %d",tempg->num); + CatPrint(buf," %d",tempg->nu.num); break; case SPT_MESH: - CatPrint(buf," %dV,%dT",tempg->vertex_cnt,tempg->tri_cnt); + CatPrint(buf," %dV,%dT",tempg->mu.vertex_cnt,tempg->mu.tri_cnt); break; case SPT_SHIFTABLE_MESH: - CatPrint(buf," %dV,%dT",tempg->shiftable_vertex_cnt,tempg->shiftable_tri_cnt); + CatPrint(buf," %dV,%dT",tempg->pmu.vertex_cnt,tempg->pmu.tri_cnt); break; } return StrNew(buf); diff --git a/Adam/Menu.CPP b/Adam/Menu.CPP index 5ce7f0f..dc4b81d 100644 --- a/Adam/Menu.CPP +++ b/Adam/Menu.CPP @@ -26,7 +26,7 @@ public CMenuEntry *MenuEntryFind(CMenu *haystack_menu,U8 *needle_full_name) //Just 2 levels -- across top and down are valid, currently. U8 *st,*st2; CMenuEntry *tempse; - if (!haystack_menu || haystack_menu->mu_signature!=MENU_SIGNATURE_VAL || !needle_full_name) + if (!haystack_menu || !needle_full_name) return NULL; st=StrNew(needle_full_name); st2=StrNew(needle_full_name); @@ -91,13 +91,11 @@ public CMenu *MenuNew(U8 *st,I64 flags=0,CTask *task=NULL) m=CAlloc(sizeof(CMenu),task); m->task=task; m->flags=flags; - m->attr =LTBLUE<<4 +YELLOW; - m->checked_attr=LTGREEN<<4+BROWN; + m->attr =BLUE<<4+YELLOW; tempse=&m->sub; while (tempse) tempse=tempse->next=MenuNewSub(lx,task); LexDel(lx); - m->mu_signature=MENU_SIGNATURE_VAL; return m; } @@ -127,9 +125,7 @@ U0 MenuDelSub(CMenuEntry *tempme) public U0 MenuDel(CMenu *m) {//Delete a manu. You probably don't need this. CMenuEntry *tempme,*tempme1; - if (!m || m->mu_signature!=MENU_SIGNATURE_VAL) - return; - m->mu_signature=0; + if (!m) return; tempme=m->sub; while (tempme) { tempme1=tempme->next; @@ -181,12 +177,10 @@ U0 DrawMenu(CDC *dc) U8 *st=NULL; CTask *task=MenuTask; I64 i,w,x0,y0,x1=ip.pos.x,y1=ip.pos.y; - if (!TaskValidate(task) || !(m=task->cur_menu) || - m->mu_signature!=MENU_SIGNATURE_VAL) { + if (!TaskValidate(task) || !(m=task->cur_menu)) { sys_cur_submenu_entry=NULL; return; } - dc->color=m->attr>>4; GrRect(dc,0,0,GR_WIDTH,FONT_HEIGHT); x0=0; @@ -205,7 +199,7 @@ U0 DrawMenu(CDC *dc) tempse=tempme->sub; while (tempse) { if (tempse->checked) - i=m->checked_attr; + i=m->attr^0xFF; else i=m->attr; if (y0<=y1sample_rate=EndianU32(SNDFILE_SAMPLE_RATE); s->channels=EndianU32(1); + if (time_shift) { + d=snd.record_root.next; + d->time-=time_shift; + while (d->next!=&snd.record_root) { + d1=d->next; + dt=d1->time-d->time; + if (dt<0) { + QueRem(d1); + Free(d1); + } else + break; + } + } + d=snd.record_root.next; k=0; while (d->next!=&snd.record_root) { diff --git a/Adam/Snd/MathAudio.CPP b/Adam/Snd/SndMath.CPP similarity index 100% rename from Adam/Snd/MathAudio.CPP rename to Adam/Snd/SndMath.CPP diff --git a/Adam/Snd/Music.CPP b/Adam/Snd/SndMusic.CPP similarity index 100% rename from Adam/Snd/Music.CPP rename to Adam/Snd/SndMusic.CPP diff --git a/Adam/Start.CPP b/Adam/Start.CPP deleted file mode 100644 index 5048742..0000000 --- a/Adam/Start.CPP +++ /dev/null @@ -1,12 +0,0 @@ -U0 Start() -{ - Type("::/Doc/Splash.TXT"); - SetWinHorz(TEXT_COLS/4-1,3*TEXT_COLS/4); - SetWinVert(6,Fs->win_bottom); - "$$GREEN$$Tip of day$$FG$$\n"; - TipOfDay; - "$$GREEN$$$$FG$$ to exit.\n"; - View; -} - -Start; diff --git a/Adam/TaskSettings.CPP b/Adam/TaskSettings.CPP index 69d7cbb..14bf49b 100644 --- a/Adam/TaskSettings.CPP +++ b/Adam/TaskSettings.CPP @@ -10,6 +10,7 @@ public CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0) if (!task) task=Fs; if (!TaskValidate(task)) return NULL; tempse=CAlloc(sizeof(CTaskSettings),task); + tempse->cur_dir=CurDir(task,task); tempse->draw_it=task->draw_it; GetVGAPalette4(tempse->palette4); tempse->task_end_cb=task->task_end_cb; @@ -48,10 +49,10 @@ public CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0) tempse->border_src =task->border_src; tempse->border=!Bt(&task->display_flags,DISPLAYf_NO_BORDER); tempse->preempt=Bt(&task->task_flags,TASKf_PREEMPT); - if (TaskValidate(ws.task)) - tempse->wordstat=TRUE; + if (TaskValidate(ac.task)) + tempse->autocomplete=TRUE; else - tempse->wordstat=FALSE; + tempse->autocomplete=FALSE; tempse->next=task->next_settings; task->next_settings=tempse; @@ -68,8 +69,8 @@ U0 SettingsPop2(CTask *task,CTaskSettings *tempse) } WinBorder(tempse->border,task); - SetWinHorz(tempse->left,tempse->right,task); - SetWinVert(tempse->top,tempse->bottom,task); + WinHorz(tempse->left,tempse->right,task); + WinVert(tempse->top,tempse->bottom,task); task->scroll_x=tempse->scroll_x; task->scroll_y=tempse->scroll_y; task->scroll_z=tempse->scroll_z; @@ -79,7 +80,7 @@ U0 SettingsPop2(CTask *task,CTaskSettings *tempse) task->border_src =tempse->border_src; task->title_src =tempse->title_src; StrCpy(task->task_title,tempse->task_title); - WordStat(tempse->wordstat); + AutoComplete(tempse->autocomplete); SetVGAPalette4(tempse->palette4); Snd(0); } @@ -95,6 +96,8 @@ public U0 SettingsPop(CTask *task=NULL,I64 flags=0) } if (tempse=task->next_settings) { task->next_settings=tempse->next; + Cd(tempse->cur_dir); + Free(tempse->cur_dir); task->draw_it=tempse->draw_it; task->task_end_cb=tempse->task_end_cb; diff --git a/Adam/Training.CPP b/Adam/Training.CPP index 324186c..b603c55 100644 --- a/Adam/Training.CPP +++ b/Adam/Training.CPP @@ -49,7 +49,7 @@ U0 KeyMapCtrlAltFamily() a2=SC_ESC+SCF_CTRL+SCF_ALT; st2=ScanCode2KeyName(a2); - st=SrcEdLink(&SpawnUser,256); + st=SrcEdLink(&User,256); "%20s $$LK,\"%s\",A=\"%s\"$$\n",st2,"Sys/Spawn New User Task",st; Free(st); Free(st2); diff --git a/Adam/Utils/FileBMP.CPP b/Adam/Utils/FileBMP.CPP index 483a05d..7fa541e 100644 --- a/Adam/Utils/FileBMP.CPP +++ b/Adam/Utils/FileBMP.CPP @@ -24,23 +24,21 @@ class CFileBMP CBGR palette[16]; }; -public CFileBMP *BMPFile4To(CDC *dc) +public CFileBMP *BMP4To(CDC *dc) {//To Windows 4-bit BMP. U8 *src,*ptr; I64 x,y,w=dc->width>>1, - size=offset(CFileBMP.end)+dc->width*dc->height>>1+16*sizeof(CBGR); - CFileBMP *r=CAlloc(size); - r->type='BM'; - r->planes=1; - r->file_size=size; - r->data_offset=offset(CFileBMP.end); - r->header_size=offset(CFileBMP.end)- - offset(CFileBMP.header_size); - r->width=dc->width; - r->height=dc->height; - r->bit_cnt=4; - r->image_size=dc->width*dc->height>>1; - r->data_offset+=16*sizeof(CBGR); + size=sizeof(CFileBMP)+dc->width*dc->height>>1; + CFileBMP *r =CAlloc(size); + r->type ='BM'; + r->planes =1; + r->file_size =size; + r->data_offset=sizeof(CFileBMP); + r->header_size=offset(CFileBMP.end)-offset(CFileBMP.header_size); + r->width =dc->width; + r->height =dc->height; + r->bit_cnt =4; + r->image_size =dc->width*dc->height>>1; GetVGAPalette4(r->palette); ptr=r(U8 *)+r->data_offset; for (y=dc->height-1;y>=0;y--) { @@ -54,23 +52,21 @@ public CFileBMP *BMPFile4To(CDC *dc) return r; } -public CFileBMP *BMPFileRLE4To(CDC *dc) +public CFileBMP *BMPRLE4To(CDC *dc) {//To Windows RLE4 bit BMP. - U8 *src,*ptr; + U8 *src,*ptr,*start; I64 x,y,w=dc->width,cnt,pattern; - CFileBMP *r=CAlloc(offset(CFileBMP.end)+2*(dc->width+1)*dc->height+16*sizeof(CBGR)); - r->type='BM'; - r->planes=1; - r->data_offset=offset(CFileBMP.end); - r->header_size=offset(CFileBMP.end)- - offset(CFileBMP.header_size); - r->width=dc->width; - r->height=dc->height; - r->bit_cnt=4; + CFileBMP *r =CAlloc(sizeof(CFileBMP)+2*(dc->width+1)*dc->height); + r->type ='BM'; + r->planes =1; + r->data_offset=sizeof(CFileBMP); + r->header_size=offset(CFileBMP.end)-offset(CFileBMP.header_size); + r->width =dc->width; + r->height =dc->height; + r->bit_cnt =4; r->compression=2; //RLE4 - r->data_offset+=16*sizeof(CBGR); GetVGAPalette4(r->palette); - ptr=r(U8 *)+r->data_offset; + start=ptr=r(U8 *)+r->data_offset; for (y=dc->height-1;y>=0;y--) { src=y*dc->width_internal+dc->body; x=0; @@ -101,27 +97,26 @@ public CFileBMP *BMPFileRLE4To(CDC *dc) } *ptr(U16 *)++=0; } - r->image_size=ptr-(&r->data_offset)(U8 *); - r->file_size=offset(CFileBMP.end)+r->image_size+16*sizeof(CBGR); + r->image_size=ptr-start; + r->file_size=sizeof(CFileBMP)+r->image_size; return r; } -public CFileBMP *BMPFile24To(CDC *dc) +public CFileBMP *BMP24To(CDC *dc) {//To Windows 24-bit BMP. U8 *src; I64 i,x,y,size=offset(CFileBMP.end)+dc->width*dc->height*sizeof(CRGB); CBGR *bgr; - CFileBMP *r=CAlloc(size); - r->type='BM'; - r->planes=1; - r->file_size=size; + CFileBMP *r =CAlloc(size); + r->type ='BM'; + r->planes =1; + r->file_size =size; r->data_offset=offset(CFileBMP.end); - r->header_size=offset(CFileBMP.end)- - offset(CFileBMP.header_size); - r->width=dc->width; - r->height=dc->height; - r->bit_cnt=32; - r->image_size=dc->width*dc->height<<2; + r->header_size=offset(CFileBMP.end)-offset(CFileBMP.header_size); + r->width =dc->width; + r->height =dc->height; + r->bit_cnt =32; + r->image_size =dc->width*dc->height<<2; bgr=r(U8 *)+r->data_offset; for (y=dc->height-1;y>=0;y--) { @@ -142,22 +137,22 @@ public CFileBMP *BMPFile24To(CDC *dc) return r; } -public I64 BMPFileWrite(U8 *filename,CDC *dc,I64 bits=4) +public I64 BMPWrite(U8 *filename,CDC *dc,I64 bits=4) {//Window's BMP Files. I64 size; CFileBMP *r; if (bits==4) { if (IsDotZ(filename)) //.Z compression is better than RLE - r=BMPFile4To(dc); + r=BMP4To(dc); else { - r=BMPFileRLE4To(dc); - if (r->file_size>offset(CFileBMP.end)+dc->width*dc->height>>1+16*sizeof(CBGR)) { + r=BMPRLE4To(dc); + if (r->file_size>sizeof(CFileBMP)+dc->width*dc->height>>1) { Free(r); - r=BMPFile4To(dc); + r=BMP4To(dc); } } } else if (bits==24) - r=BMPFile24To(dc); + r=BMP24To(dc); else { "Format Not Supported.\n"; return 0; @@ -168,7 +163,7 @@ public I64 BMPFileWrite(U8 *filename,CDC *dc,I64 bits=4) return size; } -U8 *BMPFilePaletteNew(CFileBMP *r) +U8 *BMPPaletteNew(CFileBMP *r) { I64 i,j,best,score,best_score; CBGR palette[16]; @@ -193,11 +188,39 @@ U8 *BMPFilePaletteNew(CFileBMP *r) U8 ms_paint_palette[16]={0,4,2,6,1,5,3,8,7,12,10,14,9,13,11,15}; -public CDC *BMPFileRead(U8 *filename,Bool use_ms_paint_palette=FALSE) +I64 BMP24Color(CBGR *ptr,Bool dither_probability) +{ + I64 result,k; + if (dither_probability) { + k=RandU32; + if (SqrI64(ptr->r)+SqrI64(ptr->g)+SqrI64(ptr->b)>=3*SqrI64(k.u8[0])) + result=8; + else + result=0; + if (ptr->r>=k.u8[1]) result|=RED; + if (ptr->g>=k.u8[2]) result|=GREEN; + if (ptr->b>=k.u8[3]) result|=BLUE; + } else { + if (SqrI64(ptr->r)+SqrI64(ptr->g)+SqrI64(ptr->b)>=SqrI64(0x80)) { + result=8; + if (ptr->r>=0x80) result|=RED; + if (ptr->g>=0x80) result|=GREEN; + if (ptr->b>=0x80) result|=BLUE; + } else { + result=0; + if (ptr->r>=0x40) result|=RED; + if (ptr->g>=0x40) result|=GREEN; + if (ptr->b>=0x40) result|=BLUE; + } + } + return result; +} + +public CDC *BMPRead(U8 *filename,Bool dither_probability=FALSE,Bool use_ms_paint_palette=FALSE) {//Window's BMP Files. I64 i,j,cnt; U8 *palette_map,*ptr; - Bool rle4; + Bool rle; CFileBMP *r; CDC *result=NULL; if (ptr=FileRead(filename)) { @@ -205,17 +228,17 @@ public CDC *BMPFileRead(U8 *filename,Bool use_ms_paint_palette=FALSE) if (0widthheightwidth,r->height); ptr+=r->data_offset; + if (r->compression==2) + rle=TRUE; + else + rle=FALSE; + if (use_ms_paint_palette) + palette_map=ms_paint_palette; + else + palette_map=BMPPaletteNew(r); if (r->bit_cnt==4) { - if (r->compression==2) - rle4=TRUE; - else - rle4=FALSE; - if (use_ms_paint_palette) - palette_map=ms_paint_palette; - else - palette_map=BMPFilePaletteNew(r); for (i=r->height-1;i>=0;i--) - if (rle4) {//We don't support full RLE4, just our own subset + if (rle) {//We don't support full RLE4, just our own subset j=0; while (cnt=*ptr++) { if (cnt==1) { @@ -238,7 +261,7 @@ public CDC *BMPFileRead(U8 *filename,Bool use_ms_paint_palette=FALSE) } ptr++; } else - for (j=0;j<(r->width+7)&-8;) { + for (j=0;j<(r->width+7)&~7;) { result->color=palette_map[*ptr&15]; GrPlot(result,j+1,i); result->color=palette_map[*ptr>>4]; @@ -248,6 +271,24 @@ public CDC *BMPFileRead(U8 *filename,Bool use_ms_paint_palette=FALSE) } if (!use_ms_paint_palette) Free(palette_map); + } else if (r->bit_cnt==24) { + for (i=r->height-1;i>=0;i--) { + for (j=0;jwidth;j++,ptr+=3) { + result->color=BMP24Color(ptr,dither_probability); + GrPlot(result,j,i); + } + ptr+=r->width&3; + } + if (!use_ms_paint_palette) + Free(palette_map); + } else if (r->bit_cnt>=32) { + for (i=r->height-1;i>=0;i--) + for (j=0;jwidth;j++,ptr+=4) { + result->color=BMP24Color(ptr,dither_probability); + GrPlot(result,j,i); + } + if (!use_ms_paint_palette) + Free(palette_map); } else { "Format Not Supported.\n"; DCDel(result); @@ -261,9 +302,9 @@ public CDC *BMPFileRead(U8 *filename,Bool use_ms_paint_palette=FALSE) } #help_index "Graphics/Sprite;Graphics/Windows BMP Files;DolDoc/Output" -public U0 DocBMPFile(CDoc *doc=NULL,U8 *filename,Bool use_ms_paint_palette=FALSE) +public U0 DocBMP(CDoc *doc=NULL,U8 *filename,Bool dither_probability=FALSE,Bool use_ms_paint_palette=FALSE) {//Put a BMP file into a document as a sprite. - CDC *dc=BMPFileRead(filename,use_ms_paint_palette); + CDC *dc=BMPRead(filename,dither_probability,use_ms_paint_palette); CSprite *elems=DC2Sprite(dc); DocSprite(doc,elems); Free(elems); @@ -271,10 +312,10 @@ public U0 DocBMPFile(CDoc *doc=NULL,U8 *filename,Bool use_ms_paint_palette=FALSE } #help_index "Graphics/Windows BMP Files;Graphics/Screen" -public I64 BMPFileCaptureScreen(U8 *filename,I64 bits=4) +public I64 BMPCaptureScreen(U8 *filename,I64 bits=4,Bool include_zoom=TRUE) {//Capture screen as BMP file. - CDC *dc=DCCaptureScreen; - I64 size=BMPFileWrite(filename,dc,bits); + CDC *dc=DCCaptureScreen(include_zoom); + I64 size=BMPWrite(filename,dc,bits); DCDel(dc); return size; } diff --git a/Adam/Utils/Grep.CPP b/Adam/Utils/Find.CPP similarity index 95% rename from Adam/Utils/Grep.CPP rename to Adam/Utils/Find.CPP index 131af89..a5a8dbb 100644 --- a/Adam/Utils/Grep.CPP +++ b/Adam/Utils/Find.CPP @@ -140,7 +140,7 @@ I64 GrepFile(U8 *needle_str,U8 *haystack_filename,I64 *_fuf_flags,U8 *replace_te return cnt; } -public I64 Grep(U8 *needle_str,U8 *files_find_mask="*",U8 *fu_flags=NULL,U8 *replace_text=NULL) +public I64 Find(U8 *needle_str,U8 *files_find_mask="*",U8 *fu_flags=NULL,U8 *replace_text=NULL) {/*Find occurrences of a string in files. This does not do regular expressions. Anyway, it's good for searching and replacing. @@ -184,7 +184,7 @@ public I64 FileOcc(U8 *needle_str,U8 *files_find_mask="*",U8 *fu_flags="+r+i+l") */ I64 cnt=0; Bool old_silent=Silent(TRUE); - cnt=Grep(needle_str,files_find_mask,fu_flags); + cnt=Find(needle_str,files_find_mask,fu_flags); Silent(old_silent); return cnt; } @@ -215,7 +215,7 @@ I64 GrepWiz() g->match_case=doc->find_replace->match_case; g->whole_labels=doc->find_replace->whole_labels; } - if (DocFormDo(g,,0,"$$PURPLE$$$$TX+CX,\"Grep\"$$\n$$FG$$")) { + if (DocFormDo(g,,0,"$$PURPLE$$$$TX+CX,\"Find\"$$\n$$FG$$")) { if (doc) { StrCpy(doc->find_replace->find_text,g->find_text); StrCpy(doc->find_replace->replace_text,g->replace_text); @@ -233,9 +233,9 @@ I64 GrepWiz() if (g->whole_labels) CatPrint(buf,"+l"); if (g->replace) - st=MStrPrint("\"$$$$WW+H,1$$$$\";Cd(\"%s\");Grep(\"%Q\",\"%Q\",\"%Q\",\"%Q\");UserTaskCont;",dir,g->find_text,g->filemask,buf,g->replace_text); + st=MStrPrint("\"$$$$WW+H,1$$$$\";Cd(\"%s\");Find(\"%Q\",\"%Q\",\"%Q\",\"%Q\");UserTaskCont;",dir,g->find_text,g->filemask,buf,g->replace_text); else - st=MStrPrint("\"$$$$WW+H,1$$$$\";Cd(\"%s\");Grep(\"%Q\",\"%Q\",\"%Q\");UserTaskCont;",dir,g->find_text,g->filemask,buf); + st=MStrPrint("\"$$$$WW+H,1$$$$\";Cd(\"%s\");Find(\"%Q\",\"%Q\",\"%Q\");UserTaskCont;",dir,g->find_text,g->filemask,buf); result=PopUp(st); } Free(dir); diff --git a/Adam/Utils/LineRep.CPP b/Adam/Utils/LineRep.CPP index 60f251a..d311169 100644 --- a/Adam/Utils/LineRep.CPP +++ b/Adam/Utils/LineRep.CPP @@ -56,14 +56,14 @@ I64 SizeRep1(CDirEntry *tempde,I64 *_fuf_flags) { I64 result=0,i; U8 buf[BLK_SIZE]; - CPrt *p; + CDrv *dv; while (tempde) { if (tempde->attr&RS_ATTR_DIR) i=SizeRep1(tempde->sub,_fuf_flags); else if ((i=tempde->size) && Bt(_fuf_flags,FUf_EXPAND) && FileAttr(tempde->name)&RS_ATTR_COMPRESSED) { - p=Drv2Prt(*tempde->full_name); - RBlks(p,buf,Cluster2Blk(p,tempde->cluster),1); + dv=Let2Drv(*tempde->full_name); + RBlks(dv,buf,Cluster2Blk(dv,tempde->cluster),1); i=(&buf)(CArcCompress *)->expanded_size; } tempde->user_data=i; diff --git a/Adam/Utils/MemRep.CPP b/Adam/Utils/MemRep.CPP index efa892e..67ca385 100644 --- a/Adam/Utils/MemRep.CPP +++ b/Adam/Utils/MemRep.CPP @@ -2,21 +2,15 @@ I64 TSSSize(CTSS *tss) { - return MSize2(tss)+ - MSize2(tss->st0)+ - MSize2(tss->st1)+ - MSize2(tss->st2); + return MSize2(tss)+MSize2(tss->st0)+MSize2(tss->st1)+MSize2(tss->st2); } I64 PenBrushesSize() { I64 result=0,i; for (i=0;ibd_signature==BD_SIGNATURE_VAL) { - if (bdev->type==BDT_RAM) + bd=&dsk.blkdevs[i]; + if (bd->bd_signature==BD_SIGNATURE_VAL) { + if (bd->type==BDT_RAM) "RAMDsk %C\t:%010X Unused:%010X\n", - bdev->first_drv_let,(bdev->max_blk+1)<first_drv_let); - result+=MSize2(bdev->dev_id_record); + bd->first_drv_let,(bd->max_blk+1)<first_drv_let); + result+=MSize2(bd->dev_id_record); } } return result; } -I64 PrtsSize() +I64 DrvsSize() { - I64 i,result=MSize2(dsk.prts); - for (i=0;itask_title,SUF_REM_CTRL_CHARS|SUF_SAFE_DOLLAR); "$$GREEN$$Task:%010X$$CYAN$$ %-30ts$$FG$$\n$$ID,2$$",task,st; Free(st); - "$$PURPLE$$Alloced:%010X Used:%010X $$RED$$Unused:%010X$$FG$$\n", - TaskAllocatedMem(task,override_validate), - TaskUsedMem(task,override_validate), - TaskUnusedAllocatedMem(task,override_validate); + "$$PURPLE$$Alloced:%010X Used:%010X$$FG$$\n", + TaskMemAlloced(task,override_validate), + TaskMemUsed(task,override_validate); "HashTable\t:%010X\n",HashTableSize2(task->hash_table); i=UnusedStk(task); @@ -169,15 +161,15 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) "TaskStructs\t:%010X\n",j; "TSSes\t:%010X\n",k; "HeapCtrls\t:%010X\n",m; - "TaskQues\t:%010X\n",n; + if (n) + "TaskQues\t:%010X\n",n; "BlkDevs\t:%010X\n",BlkDevsSize; - "Prts\t:%010X\n",PrtsSize; - "Audio\t:%010X\n",CallExtStr("AudioSize"); + "Drvs\t:%010X\n",DrvsSize; if (dsk.cache_base) "DskCache\t:%010X\n", MSize2(dsk.cache_base)+MSize2(dsk.cache_hash_table)+MSize2(dsk.cache_ctrl); - "WordStat\t:%010X\n",CallExtStr("WordStatSize"); "Clipboard\t:%010X\n",DocSize(sys_clipboard_doc); + "AutoComplete:%010X\n",CallExtStr("AutoCompleteSize"); "gr.to_8_bits\t:%010X\n",MSize2(gr.to_8_bits); "gr.to_8_colors\t:%010X\n",MSize2(gr.to_8_colors); "gr.text_base\t:%010X\n",MSize2(gr.text_base); @@ -214,13 +206,13 @@ public U0 MemRep() "$$ID,-2$$"; if (sys_data_bp) { - "$$BLACK$$Code Heap:%010X Used:%010X $$RED$$Unused:%010X$$FG$$\n", - sys_code_bp->size*PAGE_SIZE,sys_code_bp->allocated_u8s,UnusedBPMem(sys_code_bp); - "$$BLACK$$Data Heap:%010X Used:%010X $$RED$$Unused:%010X$$FG$$\n", - sys_data_bp->size*PAGE_SIZE,sys_data_bp->allocated_u8s,UnusedBPMem(sys_data_bp); + "$$BLACK$$Code Heap:%010X Used:%010X$$FG$$\n", + sys_code_bp->alloced_u8s,sys_code_bp->used_u8s; + "$$BLACK$$Data Heap:%010X Used:%010X$$FG$$\n", + sys_data_bp->alloced_u8s,sys_data_bp->used_u8s; } else - "$$BLACK$$Code/Data Heap:%010X Used:%010X $$RED$$Unused:%010X$$FG$$\n", - sys_code_bp->size*PAGE_SIZE,sys_code_bp->allocated_u8s,UnusedBPMem(sys_code_bp); + "$$BLACK$$Code/Data Heap:%010X Used:%010X$$FG$$\n", + sys_code_bp->alloced_u8s,sys_code_bp->used_u8s; for (i=0;ibp->size*PAGE_SIZE,dev.uncached_heap->used_u8s,UnusedBPMem(dev.uncached_heap->bp); + "$$BLACK$$dev.uncached_heap:%010X Used:%010X$$FG$$\n", + dev.uncached_heap->bp->alloced_u8s,dev.uncached_heap->used_u8s; "$$ID,-2$$\n"; Preempt(old_preempt); } diff --git a/Adam/Utils/ToHtml.CPP b/Adam/Utils/ToHtml.CPP index bc365c9..a21af6f 100644 --- a/Adam/Utils/ToHtml.CPP +++ b/Adam/Utils/ToHtml.CPP @@ -1,6 +1,6 @@ #help_index "DolDoc/Conversion" -//See $LK,"::/Doc/Acknowledgements.TXT"$. +//See $LK,"::/Doc/Credits.TXT"$. U0 HtmlPutS(CDoc *doc,I64 u32_attr,I64 *_old_u32_attr,U8 *st,I64 *_col,U8 *style_bitmap=NULL) { @@ -61,7 +61,7 @@ U0 HtmlPutS(CDoc *doc,I64 u32_attr,I64 *_old_u32_attr,U8 *st,I64 *_col,U8 *style } } -U8 *TSLinkCvt2(U8 *filename,I64 line_num) +U8 *TOSLinkCvt2(U8 *filename,I64 line_num) {// ::/ --> http://www.templeos.org/Wb/ //Make your own LinkCvt routine U8 *result=NULL,*st; @@ -74,7 +74,7 @@ U8 *TSLinkCvt2(U8 *filename,I64 line_num) return result; } -U8 *TSLinkCvt1(U8 *link_st) +U8 *TOSLinkCvt1(U8 *link_st) { static CDoc *bible=NULL; static I64 locks=0; @@ -85,7 +85,7 @@ U8 *TSLinkCvt1(U8 *link_st) case LK_FILE_LINE: case LK_PLAIN_LINE: case LK_FILE: - result=TSLinkCvt2(filename,num); + result=TOSLinkCvt2(filename,num); break; case -1: case LK_DEF: @@ -101,12 +101,12 @@ U8 *TSLinkCvt1(U8 *link_st) if (!bible) bible=Adam("DocRead(\"%s\");",filename); if (DocFind(bible,num,needle)) - result=TSLinkCvt2(filename,bible->cur_entry->y+1); + result=TOSLinkCvt2(filename,bible->cur_entry->y+1); LBtr(&locks,0); break; default: if (DocFileEd(i,filename,needle,&num,EDF_UNCOLLAPSE|EDF_BAIL)) - result=TSLinkCvt2(filename,num); + result=TOSLinkCvt2(filename,num); } Free(filename); Free(needle); @@ -117,7 +117,7 @@ U8 *TSLinkCvt1(U8 *link_st) public CDoc *Doc2Html(CDoc *doc_in, U8 *html_header=NULL, U8 *body_header=NULL,U8 *body_footer=NULL,Bool line_anchors=TRUE, - U8 (*link_cvt)(U8 *link_st)=&TSLinkCvt1) + U8 (*link_cvt)(U8 *link_st)=&TOSLinkCvt1) {//Cvt $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ doc to HTML file. CDocEntry *doc_e,*style,*doc_e2; I64 i,y,old_y=MIN_I64,col,_old_u32_attr=-1,old_attr; @@ -279,14 +279,14 @@ public CDoc *Doc2Html(CDoc *doc_in, #help_index "Cmd Line (Typically);DolDoc/Conversion;DolDoc/Cmd Line (Typically)" public U0 ToHtml(U8 *_in_name,U8 *_out_name=NULL,U8 *html_header=NULL, U8 *body_header=NULL,U8 *body_footer=NULL,I64 width=80, - Bool line_anchors=TRUE,U8 (*link_cvt)(U8 *link_st)=&TSLinkCvt1) + Bool line_anchors=TRUE,U8 (*link_cvt)(U8 *link_st)=&TOSLinkCvt1) {//Convert $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ file to HTML. //Supply your own link_cvt routine. U8 *in_name,*out_name; CDoc *doc_in,*doc_out; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - SetWinHorz(0,width-1); //Sets doc width for word wrap. + WinHorz(0,width-1); //Sets doc width for word wrap. in_name=DftExt(_in_name,"CPP.Z"), if (_out_name) diff --git a/Adam/Utils/ToTXT.CPP b/Adam/Utils/ToTXT.CPP index e77a4f1..a56617a 100644 --- a/Adam/Utils/ToTXT.CPP +++ b/Adam/Utils/ToTXT.CPP @@ -108,7 +108,7 @@ public U0 ToTXT(U8 *_in_name,U8 *_out_name=NULL,I64 width=70) CDoc *doc_in,*doc_out; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - SetWinHorz(0,width-1); //Sets doc width for word wrap. + WinHorz(0,width-1); //Sets doc width for word wrap. in_name=DftExt(_in_name,"TXT.Z"), if (_out_name) diff --git a/Adam/Utils2a.CPP b/Adam/Utils2a.CPP deleted file mode 100644 index aa5f829..0000000 --- a/Adam/Utils2a.CPP +++ /dev/null @@ -1,416 +0,0 @@ -#help_index "Memory/Blk Pool" -public I64 UnusedBPMem(CBlkPool *bp) -{//Count of unused bytes in bp. - I64 result=0,i; - CMemBlk *tempm; - - if (!bp) return 0; - - PUSHFD - CLI - while (LBts(&bp->locked_flags,BPlf_LOCKED)) - PAUSE - - tempm=bp->mem_free_lst; - while (tempm) { - if (tempm->mb_signature!=MBS_UNUSED_SIGNATURE_VAL) - Dbg("Corrupt Sys Memory"); - result+=tempm->pages; - tempm=tempm->next; - } - for (i=0;ifree_page_hash[i]; - while (tempm) { - if (tempm->mb_signature!=MBS_UNUSED_SIGNATURE_VAL) - Dbg("Corrupt Sys Memory"); - result+=tempm->pages; - tempm=tempm->next; - } - } - - for (i=0;i<64-PAGE_BITS;i++) { - tempm=bp->free_page_hash2[i]; - while (tempm) { - if (tempm->mb_signature!=MBS_UNUSED_SIGNATURE_VAL) - Dbg("Corrupt Sys Memory"); - result+=tempm->pages; - tempm=tempm->next; - } - } - LBtr(&bp->locked_flags,BPlf_LOCKED); - POPFD - return result*PAGE_SIZE; -} - -#help_index "Memory/Heap Ctrl" -I64 MemBlkLstSize(CHeapCtrl *hc) -{ - CMemBlk *m; - I64 result=0; - m=hc->next_mem_blk; - while (m!=&hc->next_mem_blk) { - result+=sizeof(CMemBlk); - m=m->next; - } - return result; -} - -public I64 UnusedHCMem(CHeapCtrl *hc) -{//Unused bytes alloced to a heap ctrl. - I64 result,i; - CMemUnusedAllocated *u; - - if (!hc) return 0; - - result=UnusedBPMem(hc->bp); - - PUSHFD - CLI - while (LBts(&hc->locked_flags,HClf_LOCKED)) - PAUSE - - for (i=0;i>3;i++) { - u=hc->heap_hash[i]; - while (u) { - result+=u->size; - u=u->next; - } - } - u=hc->malloc_free_lst; - while (u) { - result+=u->size; - u=u->next; - } - - LBtr(&hc->locked_flags,HClf_LOCKED); - POPFD - return result; -} - -#help_index "Memory/Task" -public I64 TaskAllocatedMem(CTask *task=NULL,Bool override_validate=FALSE) -{//Count of bytes alloced to a task, used+unused. - CMemBlk *m,*m1; - I64 result=0; - - if (!task) task=Fs; - if (!override_validate && !TaskValidate(task)) return 0; - - PUSHFD - CLI - while (LBts(&task->code_heap->locked_flags,HClf_LOCKED)) - PAUSE - if (task->code_heap!=task->data_heap) - while (LBts(&task->data_heap->locked_flags,HClf_LOCKED)) - PAUSE - - m=task->code_heap->next_mem_blk; - m1=&task->code_heap->next_mem_blk; - while (m!=m1) { - if (m->mb_signature!=MBS_USED_SIGNATURE_VAL) - Dbg("Corrupt Task Memory"); - result+=m->pages*PAGE_SIZE; - m=m->next; - } - - if (task->code_heap!=task->data_heap) { - m=task->data_heap->next_mem_blk; - m1=&task->data_heap->next_mem_blk; - while (m!=m1) { - if (m->mb_signature!=MBS_USED_SIGNATURE_VAL) - Dbg("Corrupt Task Memory"); - result+=m->pages*PAGE_SIZE; - m=m->next; - } - } - - if (task->code_heap!=task->data_heap) - LBtr(&task->data_heap->locked_flags,HClf_LOCKED); - LBtr(&task->code_heap->locked_flags,HClf_LOCKED); - POPFD - return result; -} - -public I64 TaskUnusedAllocatedMem(CTask *task=NULL,Bool override_validate=FALSE) -{//Count of bytes alloced to a task but unused. - I64 result=0,i; - CMemUnusedAllocated *uum; - if (!task) task=Fs; - if (!override_validate && !TaskValidate(task)) return 0; - - PUSHFD - CLI - while (LBts(&task->code_heap->locked_flags,HClf_LOCKED)) - PAUSE - if (task->data_heap!=task->code_heap) - while (LBts(&task->data_heap->locked_flags,HClf_LOCKED)) - PAUSE - - result+=MemBlkLstSize(task->code_heap); - for (i=0;i>3;i++) { - uum=task->code_heap->heap_hash[i]; - while (uum) { - result+=uum->size; - uum=uum->next; - } - } - uum=task->code_heap->malloc_free_lst; - while (uum) { - result+=uum->size; - uum=uum->next; - } - - if (task->data_heap!=task->code_heap) { - result+=MemBlkLstSize(task->data_heap); - for (i=0;i>3;i++) { - uum=task->data_heap->heap_hash[i]; - while (uum) { - result+=uum->size; - uum=uum->next; - } - } - uum=task->data_heap->malloc_free_lst; - while (uum) { - result+=uum->size; - uum=uum->next; - } - } - - if (task->data_heap!=task->code_heap) - LBtr(&task->data_heap->locked_flags,HClf_LOCKED); - LBtr(&task->code_heap->locked_flags,HClf_LOCKED); - POPFD - return result; -} - -public I64 TaskUsedMem(CTask *task=NULL,Bool override_validate=FALSE) -{//Count of bytes alloced to a task and in use. - I64 result=0; - if (!task) task=Fs; - if (!override_validate && !TaskValidate(task)) return 0; - result=task->code_heap->used_u8s; - if (task->data_heap!=task->code_heap) - result+=task->data_heap->used_u8s; - return result; -} - -public Bool HeapRep(CTask *task) -{//Report status of task's heap. - I64 i,cnt; - CMemUnusedAllocated *uum; - - if (!task || task==Fs) { - "Task can't HeapRep on self.\n"; - return FALSE; - } - if (!TaskValidate(task)) return FALSE; - - PUSHFD - CLI - while (LBts(&task->code_heap->locked_flags,HClf_LOCKED)) - PAUSE - if (task->data_heap!=task->code_heap) - while (LBts(&task->data_heap->locked_flags,HClf_LOCKED)) - PAUSE - - for (i=0;i>3;i++) { - cnt=0; - uum=task->code_heap->heap_hash[i]; - while (uum) { - cnt+=uum->size; - uum=uum->next; - } - if (task->data_heap!=task->code_heap) { - uum=task->data_heap->heap_hash[i]; - while (uum) { - cnt+=uum->size; - uum=uum->next; - } - } - if (cnt) - "%03X:%08X\n",i<<3,cnt; - } - '\n'; - - uum=task->code_heap->malloc_free_lst; - while (uum) { - "%X, ",uum->size; - uum=uum->next; - } - if (task->data_heap!=task->code_heap) { - uum=task->data_heap->malloc_free_lst; - while (uum) { - "%X, ",uum->size; - uum=uum->next; - } - } - - if (task->data_heap!=task->code_heap) - LBtr(&task->data_heap->locked_flags,HClf_LOCKED); - LBtr(&task->code_heap->locked_flags,HClf_LOCKED); - POPFD - - '\n'; -} - -#help_index "Memory/Task;Debugging/Heap" -public Bool IsInHeap(U8 *a,CTask *task=NULL,Bool lock=TRUE) -{//Check addr if on heap. - CMemBlk *m; - - if (!task) task=Fs; - if (!TaskValidate(task)) return FALSE; - - PUSHFD - CLI - if (lock) { - while (LBts(&task->code_heap->locked_flags,HClf_LOCKED)) - PAUSE - if (task->data_heap!=task->code_heap) - while (LBts(&task->data_heap->locked_flags,HClf_LOCKED)) - PAUSE - } - - m=task->code_heap->next_mem_blk; - while (m!=&task->code_heap->next_mem_blk) { - if (a>=m && apages*PAGE_SIZE) { - if (lock) - LBtr(&task->code_heap->locked_flags,HClf_LOCKED); - POPFD - return TRUE; - } - m=m->next; - } - if (task->data_heap!=task->code_heap) { - m=task->data_heap->next_mem_blk; - while (m!=&task->code_heap->next_mem_blk) { - if (a>=m && apages*PAGE_SIZE) { - if (lock) - LBtr(&task->data_heap->locked_flags,HClf_LOCKED); - POPFD - return TRUE; - } - m=m->next; - } - } - - if (lock) { - LBtr(&task->code_heap->locked_flags,HClf_LOCKED); - if (task->data_heap!=task->code_heap) - LBtr(&task->data_heap->locked_flags,HClf_LOCKED); - } - POPFD - - return FALSE; -} - -public Bool HeapWalk(CTask *task=NULL) -{//Check integrity of task's heap. - I64 i; - CMemUnusedAllocated *uum; - Bool result=TRUE; - - if (!task) task=Fs; - if (!TaskValidate(task)) return FALSE; - - PUSHFD - CLI - while (LBts(&task->code_heap->locked_flags,HClf_LOCKED)) - PAUSE - if (task->data_heap!=task->code_heap) - while (LBts(&task->data_heap->locked_flags,HClf_LOCKED)) - PAUSE - - for (i=0;i>3;i++) { - uum=task->code_heap->heap_hash[i]; - while (uum) { - if (!IsInHeap(uum,task,FALSE)) - result=FALSE; - uum=uum->next; - } - if (task->data_heap!=task->code_heap) { - uum=task->data_heap->heap_hash[i]; - while (uum) { - if (!IsInHeap(uum,task,FALSE)) - result=FALSE; - uum=uum->next; - } - } - } - - uum=task->code_heap->malloc_free_lst; - while (uum) { - if (!IsInHeap(uum,task,FALSE)) - result=FALSE; - uum=uum->next; - } - - if (task->data_heap!=task->code_heap) { - uum=task->data_heap->malloc_free_lst; - while (uum) { - if (!IsInHeap(uum,task,FALSE)) - result=FALSE; - uum=uum->next; - } - } - -#if _CFG_HEAP_DBG - CMemUsedAllocated *um,*um1; - um1=(&task->code_heap->next_um)(U8 *)-offset(CMemUsedAllocated.next); - um=um1->next; - while (um!=um1) { - if (!IsInHeap(um,task,FALSE)) - result=FALSE; - um=um->next; - } - if (task->data_heap!=task->code_heap) { - um1=(&task->data_heap->next_um)(U8 *)-offset(CMemUsedAllocated.next); - um=um1->next; - while (um!=um1) { - if (!IsInHeap(um,task,FALSE)) - result=FALSE; - um=um->next; - } - } -#endif - - if (task->data_heap!=task->code_heap) - LBtr(&task->data_heap->locked_flags,HClf_LOCKED); - LBtr(&task->code_heap->locked_flags,HClf_LOCKED); - POPFD - return result; -} - -#help_index "Info;Task" -U0 TaskRepTask(CTask *task,I64 indent) -{ - CTask *task1; - U8 *st,*desc=MStrUtil(task->task_title,SUF_SAFE_DOLLAR); - st=MStrPrint("$$MA,T=\"%08X\",LM=\"Kill(0x%X);\n\",$$",task,task,task); - "%h*c%s $$TX,\"%Q...\",SCX=16$$ Mem:%08X\n",indent,CH_SPACE, - st,desc,TaskAllocatedMem(task); - "%h*cFlags:%04X:%04X Time:%0.2fm\n",indent+2,CH_SPACE, - task->task_flags,task->display_flags, - task->total_time/60.0/cnts.time_stamp_freq_initial; - Free(st); - Free(desc); - task1=task->next_child_task; - while (task1!=(&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task)) { - TaskRepTask(task1,indent+2); - task1=task1->next_sibling_task; - } -} - -public U0 TaskRep() -{//Report current tasks on all cores. - I64 i; - CCPU *c; - PUSHFD - CLI - for (i=0;iseth_task,2); - } - POPFD -} diff --git a/Adam/WallPaper.CPP b/Adam/WallPaper.CPP index f87841e..b914c2d 100644 Binary files a/Adam/WallPaper.CPP and b/Adam/WallPaper.CPP differ diff --git a/Adam/Win2a.CPP b/Adam/WinA.CPP similarity index 89% rename from Adam/Win2a.CPP rename to Adam/WinA.CPP index 7a6b7b6..d6122bd 100644 --- a/Adam/Win2a.CPP +++ b/Adam/WinA.CPP @@ -5,9 +5,9 @@ CIPStateGlbls old_ip={IP_NULL,{-1000,-1000,0},{-1000,-1000,0},{-1000,-1000,0}, 0,(MAX_I32+1)>>3,0.0,GetTSC,0.350,0,0, FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE}; -public CWinMgrGlbls winmgr={0,0,0,15,15,NULL,NULL,FALSE,FALSE,FALSE,FALSE}; +public CWinMgrGlbls winmgr={0,0,0,WMG_FPS,tS,NULL,NULL,FALSE,FALSE,FALSE}; winmgr.t=CAlloc(sizeof(CWinMgrTimingGlbls)); -winmgr.t->last_refresh_time=tS; +winmgr.t->last_calc_idle_time=tS; #define PROGRESS_BAR_HEIGHT 20 #define PROGRESS_BAR_WIDTH (3*GR_WIDTH/4) @@ -90,7 +90,7 @@ U0 CtrlAltG(I64 sc) else PopUp("WinGrid(TRUE);"); } -SetCtrlAltLetCB('G',&CtrlAltG,"Sys/Grid On or Off"); +CtrlAltLetCBSet('G',&CtrlAltG,"Sys/Grid On or Off"); CTask *ext_ASCII_task; U0 ExtendedASCII() @@ -99,11 +99,11 @@ U0 ExtendedASCII() CDoc *doc=DocNew; DocPrint(doc,"Select Char and Press \n$$LTBLUE$$"); for (i=0;i<256;i++) { - if (i>=CH_SHIFT_SPACE && i!=127) { + if (i>=CH_SHIFT_SPACE && i!=0x7F) { if (i==CH_SHIFT_SPACE) - DocPrint(doc,"$$MU-UL,\"\\37\",LE=%d$$",i); + DocPrint(doc,"$$MU-UL,\"\\x1F\",LE=%d$$",i); else if (i=='$$') - DocPrint(doc,"$$MU-UL,\"\\44\",LE=%d$$",i); + DocPrint(doc,"$$MU-UL,\"\\x24\",LE=%d$$",i); else if (i=='\"'||i=='\\') DocPrint(doc,"$$MU-UL,\"\\%c\",LE=%d$$",i,i); else @@ -124,7 +124,7 @@ U0 CtrlAltA(I64) if (ext_ASCII_task=sys_focus_task) Spawn(&ExtendedASCII); } -SetCtrlAltLetCB('A',&CtrlAltA,"Sys/Extended ASCII"); +CtrlAltLetCBSet('A',&CtrlAltA,"Sys/Extended ASCII"); public U0 WinScrollNull(CTask *task,CD3I64 *s) {//If panning a window has been done, restore to zero. @@ -152,7 +152,7 @@ U0 DrawInputPtr(CDC *dc) y=ip.pos.y; POPFD if (ip.show && ip.dev!=IP_NULL) { - if (!sys_bios_gr_mode) //if text mode + if (!Bt(&sys_run_level,RLf_VGA)) //if text mode gr.text_base[ip.pos_text.x+ip.pos_text.y*TEXT_COLS]^=0x7F00; else { if (gr.fp_draw_input_ptr) { @@ -223,12 +223,10 @@ U0 WinIPUpdate() } } -CTask *WinRefocus() -{ - CTask *task; +public CTask *WinRefocus(CTask *task=NULL) +{//Reset the focus task if NULL. PUSHFD CLI - task=sys_focus_task; if (!task) { task=sys_winmgr_task->last_task; while (TaskValidate(task) && task!=sys_winmgr_task) { @@ -313,18 +311,19 @@ public I64 WinToTop(CTask *task=NULL,Bool update_z_buf=TRUE) } ext[EXT_WIN_TO_TOP]=&WinToTop; -public U0 WinFocus(CTask *task=NULL) +public CTask *WinFocus(CTask *task=NULL) {//Set task as focus task. PUSHFD CLI if (!TaskValidate(task)||Bt(&task->win_inhibit,WIf_SELF_FOCUS)) - task=WinRefocus; + task=WinRefocus(sys_focus_task); WinToTop(sys_focus_task=task); POPFD + return sys_focus_task; } ext[EXT_WIN_FOCUS]=&WinFocus; -public Bool SetWinHorz(I64 left,I64 right,CTask *task=NULL) +public Bool WinHorz(I64 left,I64 right,CTask *task=NULL) {//Set task's win left and right columns. I64 d=right-left; if (!task) task=Fs; @@ -358,7 +357,7 @@ public Bool SetWinHorz(I64 left,I64 right,CTask *task=NULL) } } -public Bool SetWinVert(I64 top,I64 bottom,CTask *task=NULL) +public Bool WinVert(I64 top,I64 bottom,CTask *task=NULL) {//Set task's win top and bottom rows. I64 d=bottom-top; if (!task) task=Fs; @@ -419,16 +418,16 @@ public U0 WinTileHorz() c=4; vert_size=(TEXT_ROWS-1)/c; - SetWinHorz(1-no_border,TEXT_COLS-2+no_border,task); - SetWinVert((i&3)*vert_size+2-no_border,(i&3+1)*vert_size+no_border,task); + WinHorz(1-no_border,TEXT_COLS-2+no_border,task); + WinVert((i&3)*vert_size+2-no_border,(i&3+1)*vert_size+no_border,task); last_task=task; if (i&3==3) - SetWinVert(task->win_top,TEXT_ROWS-2,task); + WinVert(task->win_top,TEXT_ROWS-2,task); i++; } task=task->last_task; } while (task!=sys_winmgr_task); - SetWinVert(last_task->win_top,TEXT_ROWS-2,last_task); + WinVert(last_task->win_top,TEXT_ROWS-2,last_task); POPFD } @@ -457,16 +456,16 @@ public U0 WinTileVert() else if (c>4) c=4; horz_size=TEXT_COLS/c; - SetWinHorz((i&3)*horz_size+1-no_border,(i&3+1)*horz_size-1+no_border,task); - SetWinVert(2-no_border,TEXT_ROWS-2+no_border,task); + WinHorz((i&3)*horz_size+1-no_border,(i&3+1)*horz_size-1+no_border,task); + WinVert(2-no_border,TEXT_ROWS-2+no_border,task); last_task=task; if (i&3==3) - SetWinHorz(task->win_left,TEXT_COLS-2,task); + WinHorz(task->win_left,TEXT_COLS-2,task); i++; } task=task->last_task; } while (task!=sys_winmgr_task); - SetWinHorz(last_task->win_left,TEXT_COLS-2,last_task); + WinHorz(last_task->win_left,TEXT_COLS-2,last_task); POPFD } @@ -478,8 +477,8 @@ public U0 WinMax(CTask *task=NULL) PUSHFD CLI //TODO Multiprocessor safe no_border=Bt(&task->display_flags,DISPLAYf_NO_BORDER); - SetWinHorz(1-no_border,TEXT_COLS-2+no_border,task); - SetWinVert(2-no_border,TEXT_ROWS-2+no_border,task); + WinHorz(1-no_border,TEXT_COLS-2+no_border,task); + WinVert(2-no_border,TEXT_ROWS-2+no_border,task); WinToTop(task); POPFD } diff --git a/Adam/Win2b.CPP b/Adam/WinB.CPP similarity index 87% rename from Adam/Win2b.CPP rename to Adam/WinB.CPP index fa0676b..628b4db 100644 --- a/Adam/Win2b.CPP +++ b/Adam/WinB.CPP @@ -7,8 +7,8 @@ public U0 WinMgrSync(I64 cnt=1,Bool force=FALSE) //2 Cnt Make Sure to do a Full Refresh // and Set Cur Pos. Bool old_preempt=Preempt(OFF), - old_full_refresh, - old_idle=LBts(&Fs->task_flags,TASKf_IDLE); + old_full_refresh, + old_idle=LBts(&Fs->task_flags,TASKf_IDLE); CDoc *old_doc=DocPut; I64 update_cnt; while (Bt(&sys_semas[SYS_SEMA_REFRESH_IN_PROGRESS],0)) { @@ -189,16 +189,14 @@ I64 WinQueIPMsgs(Bool que) return msg_code; } -I64 WinCalcRefreshTimeOut(Bool was_forced) +U0 WinCalcIdles() { - F64 d,d1; - I64 i,k,total, - total_jiffies,idle_pt_hits[MP_MAX_PROCESSORS]; + F64 calc_idle_time; + I64 i,k,total_jiffies,total_jiffies_delta,idle_pt_hits[MP_MAX_PROCESSORS]; CCPU *c; CWinMgrTimingGlbls *t=winmgr.t; - t->refresh_skips++; - if ((t->refresh_time=tS)-t->last_refresh_time>.25) { + if ((t->calc_idle_delta_time=(calc_idle_time=tS)-t->last_calc_idle_time)>.25) { PUSHFD CLI total_jiffies=cpu_structs[0].total_jiffies; @@ -206,67 +204,35 @@ I64 WinCalcRefreshTimeOut(Bool was_forced) idle_pt_hits[i]=cpu_structs[i].idle_pt_hits; POPFD - t->refresh_delta_time=t->refresh_time-t->last_refresh_time; - total=total_jiffies-t->last_total_jiffies; + total_jiffies_delta=total_jiffies-t->last_total_jiffies; for (i=0;irefresh_delta_time>0) { - if (total) { - if ((k=idle_pt_hits[i]-t->last_idle_pt_hits[i])>=0) { - d1=ToF64(k)/total; - d=ToF64(k*cnts.time_stamp_freq) - /(JIFFY_FREQ*t->refresh_delta_time); - if (dlast_idle_pt_hits[i])>=0) - d1=ToF64(k*cnts.time_stamp_freq) - /(JIFFY_FREQ*t->refresh_delta_time); - } - } + if (total_jiffies_delta && (k=idle_pt_hits[i]-t->last_idle_pt_hits[i])>=0) + c->idle_factor=Clamp(ToF64(k)/total_jiffies_delta,0.01,0.99); + else + c->idle_factor=0.01; t->last_idle_pt_hits[i]=idle_pt_hits[i]; - c->idle_factor=Clamp(d1,0.01,0.99); } t->last_total_jiffies=total_jiffies; - t->last_refresh_time=t->refresh_time; - if (!was_forced) { - if (winmgr.first) { - d=Gs->idle_factor; - d1=(t->last_refresh_end_time-t->last_refresh_start_time)/ - (t->refresh_delta_time/t->refresh_skips); - if (d1<0.2) - winmgr.desired_fps*=1.25; - else if (d<=0.0) - winmgr.desired_fps=15.0; - else if (d<0.02) { - d=15.0/winmgr.fps; - winmgr.desired_fps=d*15.0+0.5*(1.0-d)*winmgr.desired_fps; - } else if (d<0.99) { - if (d=(1.0-d)`0.25) - winmgr.desired_fps*= 0.8`0.25/d; - } else - winmgr.desired_fps=30.0; - t->refresh_cnt++; - t->refresh_skips=0; - } else { - winmgr.desired_fps=30.0; - winmgr.first=TRUE; - } - } + t->last_calc_idle_time=calc_idle_time; + t->calc_idle_cnt++; } - winmgr.desired_fps=Clamp(winmgr.desired_fps,15.0,30.0); - return cnts.jiffies+JIFFY_FREQ/winmgr.desired_fps; } I64 WinMgrSleep(Bool flush_msgs=FALSE) { - static Bool was_forced=FALSE; I64 timeout_val,msg_code=0; CCtrl *c; Bool que; + F64 t,t_delta; TimeStampFreqCal; + if ((t_delta=(t=tS)-winmgr.last_refresh_tS)>0.01) + winmgr.fps=Max(1.0/t_delta,1); + else + winmgr.fps=99; + winmgr.last_refresh_tS=t; + WinCalcIdles; if (!flush_msgs && winmgr.old_focus_task!=sys_focus_task) { TaskMsg(winmgr.old_focus_task,0,MSG_FOCUS,FALSE,0,0); @@ -293,20 +259,17 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) } msg_code=WinQueIPMsgs(que); } else { - WinRefocus; + WinRefocus(sys_focus_task); if (!TaskValidate(sys_focus_task)) FifoI64Flush(kbd.scan_code_fifo); } - if (sys_focus_task) LBtr(&sys_focus_task->task_flags,TASKf_HAS_SONG); - - timeout_val=WinCalcRefreshTimeOut(was_forced); WinIPUpdate; + + timeout_val=cnts.jiffies+JIFFY_FREQ/WMG_FPS; LBts(&sys_semas[SYS_SEMA_REFRESH_IN_PROGRESS],0); - winmgr.t->last_refresh_start_time=tS; GrUpdateScreen; - winmgr.t->last_refresh_end_time=tS; LBtr(&sys_semas[SYS_SEMA_REFRESH_IN_PROGRESS],0); if (sys_focus_task && !Bt(&sys_focus_task->task_flags,TASKf_HAS_SONG)) { @@ -322,17 +285,17 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) } winmgr.updates++; if (!mouse.install_attempts) - SleepUntil(timeout_val); + SleepUntil(timeout_val); //Just for before mouse install attempt at boot. else do { KbdMouseHandler(FALSE,TRUE); SleepUntil(MinI64(timeout_val,cnts.jiffies+JIFFY_FREQ/500)); - } while (!Bt(&sys_semas[SYS_SEMA_FORCE_WINMGR],0)&&cnts.jiffieswin_left!=task->win_old_left || - task->win_top!=task->win_old_top) - TaskMsg(task,0, - MSG_MOVE,task->win_left,task->win_top,0); + if (task->win_left!=task->win_old_left || task->win_top!=task->win_old_top) + TaskMsg(task,0,MSG_MOVE,task->win_left,task->win_top,0); if (task->win_right-task->win_left!=task->win_old_right-task->win_old_left || task->win_bottom-task->win_top!=task->win_old_bottom-task->win_old_top) TaskMsg(task,0, @@ -389,13 +350,12 @@ Bool WinKeyNavMenu() CMenu *m; CMenuEntry *tempme; CTask *focus=MenuTask; - if (Bt(kbd.down_bitmap,SC_GUI) && - focus && (m=focus->cur_menu)) { + if (Bt(kbd.down_bitmap,SC_GUI) && focus && (m=focus->cur_menu)) { winmgr.show_menu=TRUE; sys_cur_submenu_entry=NULL; old_pos.x=ip.pos.x; old_pos.y=ip.pos.y; ip.pos.x=new_pos.x=ip.pos.y=new_pos.y=0; - while (m->mu_signature==MENU_SIGNATURE_VAL && Bt(kbd.down_bitmap,SC_GUI)) { + while (Bt(kbd.down_bitmap,SC_GUI)) { old_key_cnt=kbd.cnt; if (Bt(kbd.down_bitmap,SC_CURSOR_LEFT)) { while (Bt(kbd.down_bitmap,SC_CURSOR_LEFT) && kbd.cnt==old_key_cnt) @@ -466,8 +426,8 @@ U0 WinMgrTask(I64) old_flags=GetRFlags; Bool has_border; CCtrl *c; - SetWinHorz(0,TEXT_COLS-1); - SetWinVert(0,TEXT_ROWS-1); + WinHorz(0,TEXT_COLS-1); + WinVert(0,TEXT_ROWS-1); LBts(&Fs->display_flags,DISPLAYf_NO_BORDER); LBts(&Fs->display_flags,DISPLAYf_SHOW); gr.dc->win_task=Fs; @@ -703,7 +663,7 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_IP_L)&& (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { if (!old_ip.lb && ip.lb) { - if (doc=SetCursorPos(task,ip.pos_text.x,ip.pos_text.y)) { + if (doc=WinCursorPosSet(task,ip.pos_text.x,ip.pos_text.y)) { DocLock(doc); if (doc->doc_signature==DOC_SIGNATURE_VAL) { doc_e=doc->cur_entry; @@ -721,7 +681,7 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_IP_R)&& (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { if (!old_ip.rb && ip.rb) { - if (SetCursorPos(task,ip.pos_text.x,ip.pos_text.y)) { + if (WinCursorPosSet(task,ip.pos_text.x,ip.pos_text.y)) { old_ip.rb=TRUE; goto wmt_start; } @@ -749,7 +709,7 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_IP_L)&& (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { if (old_ip.lb && !ip.lb) { - if (doc=SetCursorPos(task,ip.pos_text.x,ip.pos_text.y,FALSE)) { + if (doc=WinCursorPosSet(task,ip.pos_text.x,ip.pos_text.y,FALSE)) { do msg_code=WinMgrSleep; while (TaskValidate(task) && (ip.lb || ip.left_dbl_time)); @@ -783,7 +743,7 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_IP_R)&& (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { if (old_ip.rb && !ip.rb) { - if (doc=SetCursorPos(task,ip.pos_text.x,ip.pos_text.y,FALSE)) { + if (doc=WinCursorPosSet(task,ip.pos_text.x,ip.pos_text.y,FALSE)) { do msg_code=WinMgrSleep; while (TaskValidate(task) && (ip.rb || ip.right_dbl_time)); @@ -829,8 +789,8 @@ wmt_start: if (ip.lb) { WinToTop(task); while (ip.lb && TaskValidate(task)) { - SetWinHorz(ip.pos_text.x-x,task->win_width-1+ip.pos_text.x-x,task); - SetWinVert(ip.pos_text.y+1,task->win_height+ip.pos_text.y,task); + WinHorz(ip.pos_text.x-x,task->win_width-1+ip.pos_text.x-x,task); + WinVert(ip.pos_text.y+1,task->win_height+ip.pos_text.y,task); WinChkMoveSize(task); WinMgrSleep; } @@ -844,8 +804,8 @@ wmt_start: if (ip.lb) { WinToTop(task); while (ip.lb && TaskValidate(task)) { - SetWinHorz(ip.pos_text.x+1,task->win_width+ip.pos_text.x,task); - SetWinVert(ip.pos_text.y-y,task->win_height-1+ip.pos_text.y-y,task); + WinHorz(ip.pos_text.x+1,task->win_width+ip.pos_text.x,task); + WinVert(ip.pos_text.y-y,task->win_height-1+ip.pos_text.y-y,task); WinChkMoveSize(task); WinMgrSleep; } @@ -857,8 +817,8 @@ wmt_start: if (ip.lb) { WinToTop(task); while (ip.lb && TaskValidate(task)) { - SetWinHorz(task->win_left,ip.pos_text.x-1,task); - SetWinVert(task->win_top,ip.pos_text.y-1,task); + WinHorz(task->win_left,ip.pos_text.x-1,task); + WinVert(task->win_top,ip.pos_text.y-1,task); WinChkMoveSize(task); WinMgrSleep; } @@ -871,7 +831,7 @@ wmt_start: if (ip.lb) { WinToTop(task); while (ip.lb && TaskValidate(task)) { - SetWinVert(task->win_top,ip.pos_text.y-1,task); + WinVert(task->win_top,ip.pos_text.y-1,task); WinChkMoveSize(task); WinMgrSleep; } @@ -884,7 +844,7 @@ wmt_start: if (ip.lb) { WinToTop(task); while (ip.lb && TaskValidate(task)) { - SetWinHorz(task->win_left,ip.pos_text.x-1,task); + WinHorz(task->win_left,ip.pos_text.x-1,task); WinChkMoveSize(task); WinMgrSleep; } diff --git a/Adam/WordStat/WSMain.CPP b/Adam/WordStat/WSMain.CPP deleted file mode 100644 index 3da3f81..0000000 --- a/Adam/WordStat/WSMain.CPP +++ /dev/null @@ -1,688 +0,0 @@ -#help_index "WordStat" - -CHashWS *WSHashAdd(U8 *w) -{ - CHashWS *tempw=HashFind(w,ws.hash_table,HTT_WORD); - if (tempw) { - tempw->hits++; - return tempw; - } - tempw=ACAlloc(sizeof(CHashWS)); - tempw->str=AStrNew(w); - tempw->type=HTT_WORD; - tempw->use_cnt=1; - tempw->hits=1; - tempw->num=-1; - HashAdd(tempw,ws.hash_table); - ws.num_words++; - return tempw; -} - -U0 WSSidesInit(CWSMatrix *m) -{ - I64 i; - CWS *tempa; - m->n=0; - for (i=0;iside[i].next=m->side[i].last=&m->side[i].next; - m->side[i].const_minus_one=-1; - m->side[i].row_hits=0; - m->side[i].col_hits=0; - tempa=AMAlloc(sizeof(CWS)); - ws.structs_size+=MSize2(tempa); - tempa->subs[0].hits=0; - tempa->subs[0].repeats=ws.num_matrix_words; - tempa->entries=ws.num_matrix_words; - tempa->substructs=1; - QueIns(tempa,m->side[i].last); - } -} - -CWS *WSStructFind(CWSMatrix *m,I64 col,I64 row, - I64 *_row_base,I64 *_substruct) -{ - CWS *tempa; - I64 row_base,i,j; - - if (row>=ws.num_matrix_words || - col>=ws.num_matrix_words) - return NULL; - if (row>1) { - tempa=m->side[col].next; - row_base=0; - j=row; - while (row>=(i=tempa->entries)) { - row-=i; - tempa=tempa->next; - } - row_base+=j-row; - for (*_substruct=0;row>=tempa->subs[*_substruct].repeats;*_substruct=*_substruct+1) { - row-=tempa->subs[*_substruct].repeats; - row_base+=tempa->subs[*_substruct].repeats; - } - } else { - row=ws.num_matrix_words-row; - tempa=m->side[col].last; - row_base=ws.num_matrix_words; - j=row; - while (row>(i=tempa->entries)) { - row-=i; - tempa=tempa->last; - } - row_base+=j-row; - for (*_substruct=tempa->substructs-1;row>tempa->subs[*_substruct].repeats; - *_substruct=*_substruct-1) { - row-=tempa->subs[*_substruct].repeats; - row_base-=tempa->subs[*_substruct].repeats; - } - row_base-=tempa->subs[*_substruct].repeats; - } - *_row_base=row_base; - return tempa; -} - -public I64 WSHitsGet(CWSMatrix *m,I64 col,I64 row) -{//Look-up markov stats for word followed by word. - I64 row_base,substruct; - CWS *tempa; - if (row>=ws.num_matrix_words || - col>=ws.num_matrix_words) - return 0; - tempa=WSStructFind(m,col,row, - &row_base,&substruct); - return tempa->subs[substruct].hits; -} - -CWSSub *WSNext(CWSSub *s,CWS **_parent) -{ - I64 i=(s(U8 *)-(&(*_parent)->subs)(U8 *))/sizeof(CWSSub)+1; - if (i>=(*_parent)->substructs) { - i=0; - *_parent=(*_parent)->next; - if ((*_parent)->substructs==-1) - return NULL; - } - return &(*_parent)->subs[i]; -} - -CWSSub *WSLast(CWSSub *s,CWS **_parent) -{ - I64 i=(s(U8 *)-(&(*_parent)->subs)(U8 *))/sizeof(CWSSub)-1; - if (i<0) { - *_parent=(*_parent)->last; - if ((*_parent)->substructs==-1) - return NULL; - i=(*_parent)->substructs-1; - } - return &(*_parent)->subs[i]; -} - -U0 WSRem(CWSSub *s,CWS *parent) -{ - I64 i=(s(U8 *)-(&parent->subs)(U8 *))/sizeof(CWSSub); - if (i<0 || i>=WS_SUBSTRUCTS_PER_STRUCT || parent->substructs<1) - return; - if (parent->substructs==1) { - QueRem(parent); - ws.structs_size-=MSize2(parent); - Free(parent); - } else { - parent->entries-=s->repeats; - parent->substructs--; - MemCpy(&parent->subs[i],&parent->subs[i+1], - (parent->substructs-i)*sizeof(CWSSub)); - } -} - -CWSSub *WSIns(CWSSub *s,CWS **_parent,CWSSub *last) -{ - CWS *tempa,*parent=*_parent; - I64 j,k,i=(last(U8 *)-(&parent->subs)(U8 *))/sizeof(CWSSub)+1; - if (i>=WS_SUBSTRUCTS_PER_STRUCT) { - i=0; - parent=parent->next; - *_parent=parent; - if (parent->substructs==-1) { - tempa=AMAlloc(sizeof(CWS)); - ws.structs_size+=MSize2(tempa); - QueIns(tempa,parent->last); - parent=tempa; - *_parent=parent; - tempa->entries=0; - tempa->substructs=0; - } - } - if (parent->substructs==WS_SUBSTRUCTS_PER_STRUCT) { - tempa=parent->next; - if (tempa->substructs==-1 || tempa->substructs==WS_SUBSTRUCTS_PER_STRUCT) { - tempa=AMAlloc(sizeof(CWS)); - ws.structs_size+=MSize2(tempa); - tempa->entries=0; - tempa->substructs=0; - QueIns(tempa,parent); - k=0; - for (j=i;jsubstructs;j++) { - MemCpy(&tempa->subs[k],&parent->subs[j],sizeof(CWSSub)); - tempa->entries+=tempa->subs[k++].repeats; - tempa->substructs++; - } - parent->entries-=tempa->entries; - parent->substructs-=tempa->substructs; - } else { - for (j=tempa->substructs-1;j>=0;j--) - MemCpy(&tempa->subs[j+1],&tempa->subs[j],sizeof(CWSSub)); - MemCpy(&tempa->subs[0], - &parent->subs[WS_SUBSTRUCTS_PER_STRUCT-1], - sizeof(CWSSub)); - parent->entries-=tempa->subs[0].repeats; - parent->substructs--; - tempa->entries+=tempa->subs[0].repeats; - tempa->substructs++; - for (j=WS_SUBSTRUCTS_PER_STRUCT-2;j>=i;j--) - MemCpy(&parent->subs[j+1], - &parent->subs[j],sizeof(CWSSub)); - } - } else { - for (j=parent->substructs-1;j>=i;j--) - MemCpy(&parent->subs[j+1], - &parent->subs[j],sizeof(CWSSub)); - } - parent->entries+=s->repeats; - parent->substructs++; - MemCpy(&parent->subs[i],s,sizeof(CWSSub)); - return &parent->subs[i]; -} - -CWSSub *WSCondense(CWSSub *s,CWS **_parent) -{ - CWSSub *temps,*temps_l,*temps_n; - CWS *tempa_l,*tempa_n; - if ((*_parent)->substructs==-1) - return NULL; - temps=s; - tempa_l=*_parent; - temps_l=WSLast(temps,&tempa_l); - if (temps_l && temps_l->hits==temps->hits) { - temps_l->repeats+=temps->repeats; - tempa_l->entries+=temps->repeats; - WSRem(temps,*_parent); - *_parent=tempa_l; - temps=temps_l; - } - tempa_n=*_parent; - temps_n=WSNext(temps,&tempa_n); - if (temps_n && temps_n->hits==temps->hits) { - temps->repeats=temps->repeats+temps_n->repeats; - (*_parent)->entries=(*_parent)->entries+temps_n->repeats; - WSRem(temps_n,tempa_n); - } - return temps; -} - -I64 WSHitsInc(CWSMatrix *m,I64 col,I64 row) -{ - I64 row_base,substruct,repeats; - CWSSub sn,*temps,*temps1,*temps_l; - CWS *tempa,*tempa1,*tempa_l; - - if (row>=ws.num_matrix_words || - col>=ws.num_matrix_words) - return 0; - tempa=WSStructFind(m,col,row,&row_base,&substruct); - temps=&tempa->subs[substruct]; - repeats=temps->repeats; - if (repeats==1) { - temps->hits++; - temps=WSCondense(temps,&tempa); - } else { - if (row==row_base) { - temps->repeats--; - tempa->entries--; - sn.hits=1; - sn.repeats=1; - tempa_l=tempa; - if (!(temps_l=WSLast(&tempa->subs[substruct],&tempa_l))) { - tempa_l=tempa->last; //header - temps_l=&tempa_l->subs[WS_SUBSTRUCTS_PER_STRUCT-1]; - } - temps=WSIns(&sn,&tempa_l,temps_l); - temps=WSCondense(temps,&tempa_l); - } else if (row==repeats-1+row_base) { - temps->repeats--; - tempa->entries--; - sn.hits=1; - sn.repeats=1; - temps=WSIns(&sn,&tempa,temps); - temps=WSCondense(temps,&tempa); - } else { - tempa->entries-=repeats; - sn.hits=temps->hits+1; - sn.repeats=1; - tempa1=tempa; - temps1=temps; - temps=WSIns(&sn,&tempa1,temps1); - temps1->repeats=row-row_base; - tempa->entries+=temps1->repeats; - sn.repeats=row_base+repeats-(row+1); - sn.hits=temps1->hits; - WSIns(&sn,&tempa1,temps); - } - } - m->n++; - m->side[col].col_hits++; - m->side[row].row_hits++; - return temps->hits; -} - -U0 WSSingleFileAdd(U8 *buf,I64 pass) -{ - I64 ch; - U8 *ptr=buf,*ptr2,*ptr3; - CHashWS *cur_ptr,*last_ptr=NULL; - while (TRUE) { - while (TRUE) { - if (ch=*ptr++) { - if (Bt(chars_bitmap_alpha_numeric,ch)) - break; - } else - return; - } - ptr3=ptr; - ptr2=ptr; - ptr--; - while (TRUE) { - if (ch=*ptr2++) { - if (Bt(chars_bitmap_alpha_numeric,ch)) - *ptr3++=ch; - else if (ch!=CH_CURSOR) - break; - } else { - ptr2--; - break; - } - } - *ptr3=0; - if (pass==1) - WSHashAdd(ptr); - else { - cur_ptr=HashFind(ptr,ws.hash_table,HTT_WORD); - if (cur_ptr->num<0) - cur_ptr=NULL; - else - if (last_ptr) - WSHitsInc(ws.matrix,last_ptr->num,cur_ptr->num); - last_ptr=cur_ptr; - } - ptr=ptr2; - } -} - -I64 WSCompare(CHashWS *e1,CHashWS *e2) -{ - I64 r; - if (!(r=e2->hits - e1->hits)) - r=StrCmp(e1->str,e2->str); - return r; -} - -I64 WSSkipCrap(U8 *src,I64 len) -{ - I64 j; - j=len-1; - while (j>=0) { - if (Bt(chars_bitmap_alpha_numeric,src[j])) - break; - else - j--; - } - return j+1; -} - -I64 WSPriorWordInStr(U8 *src,U8 *dst,I64 len,I64 buf_size) -{ - I64 i,j=0,k; - Bool cont=TRUE; - i=len-1; - while (i>=0 && cont) { - if (!Bt(chars_bitmap_alpha_numeric,src[i])) - cont=FALSE; - else - i--; - } - if (i>=-1 && len>0) - for (k=i+1;kstr; - len=StrLen(s); - if (len>ws.partial_len) - Auto(s+ws.partial_len); - } -} - -U0 WSMan(I64 n,CTask *parent_task=NULL) -{ - CHashWS *tempw; - CHashSrcSym *temph; - Bool old_preempt=Preempt(OFF); - if (0<=--nstr,Fs->hash_table,HTG_SRC_SYM)) && - temph->src_link) { - Preempt(old_preempt); - PopUpEd(temph->src_link,parent_task); - } - Preempt(old_preempt); -} - -U0 WSFillInAdd(I64 i,I64 j,I64 old_num_fillins) -{ - Bool cont; - I64 k; - if (ws.num_fillinsws.fillin_scores[ws.num_fillins-1] || - i==ws.fillin_scores[ws.num_fillins-1] && ws.sorted_words[j]->hits>ws.fillin_hits[ws.num_fillins-1]) { - cont=TRUE; - for (k=ws.num_fillins-1;k>=old_num_fillins && cont;k--) - if (i<=ws.fillin_scores[k] || i==ws.fillin_scores[k] && ws.sorted_words[j]->hits<=ws.fillin_hits[k]) { - cont=FALSE; - k++; //offset k-- - } else { - ws.fillin_scores[k+1]=ws.fillin_scores[k]; - ws.fillin_matches[k+1]=ws.fillin_matches[k]; - ws.fillin_hits[k+1]=ws.fillin_hits[k]; - } - if (ws.num_fillinshits; - ws.fillin_matches[k+1]=j; - } -} - -U0 WSPutChoices(CDoc *focus_l,CDocEntry *doc_e,CTask *focus_task) -{ - I64 i,j,k,data_col; - U8 ch=0,*buf,*buf1,*src=NULL,*st; - CHashWS *w2; - F64 timeout_time=tS+0.5; - CHashSrcSym *temph; - CDoc *doc=DocPut; - - src=DocScanLine(focus_l,doc_e,&data_col); - DocUnlock(focus_l); - i=StrLen(src); - buf =MAlloc(MaxI64(i+1,256)); - buf1=MAlloc(MaxI64(i+1,256)); - if (data_col==-1) - data_col=0; - data_col=WSPriorWordInStr(src,buf,data_col,256); - ws.partial_len=StrLen(buf); - data_col=WSSkipCrap(src,data_col); - data_col=WSPriorWordInStr(src,buf1,data_col,256); - - if (ws.cur_word && !StrCmp(ws.cur_word,buf)) - goto pc_done; - - st=ws.cur_word; - ws.cur_word=AStrNew(buf); - Free(st); - Preempt(ON); - if (StrLen(buf1)&&ws.hash_table) - w2=HashFind(buf1,ws.hash_table,HTT_WORD); - else - w2=NULL; - ws.num_fillins=0; - if (w2 && w2->numstr)) { - i=WSHitsGet(ws.matrix,w2->num,ws.sorted_words[j]->num); - WSFillInAdd(i,j,0); - } - k=ws.num_fillins; - for (j=0;jstr)) - WSFillInAdd(0,j,k); - Preempt(OFF); - -pc_done: - DocRst(doc,TRUE); - doc->flags|=DOCF_MIN_SIZE; - DocCursor; - Fs->text_attr=LTBLUE<<4+WHITE; - Fs->border_src =BDS_CONST; - Fs->border_attr=LTBLUE<<4+BLACK; - DocPrint(doc,"Word:%s\n",ws.cur_word); - for (i=0;istr; - ch=CH_SPACE; - DocPrint(doc,"F%02d ",i+1); - if (TaskValidate(focus_task) && - (temph=HashFind(st,focus_task->hash_table,HTG_SRC_SYM)) && - temph->src_link) { - if (temph->type&HTF_PUBLIC) - DocPrint(doc,"$$RED$$"); - DocPrint(doc,"$$TX+UL+L+PU,\"%Q\",A=\"%s\"$$$$FG$$\n",st,temph->src_link); - } else - DocPrint(doc,"%s\n",st); - } - if (wsd.has_words) - WSDDictWordsAdd(doc); - - DocRecalc(doc); - if (!LBts(&Fs->display_flags,DISPLAYf_SHOW)) - WinZBufUpdate; - - Free(src); - Free(buf); - Free(buf1); -} - -U0 WSTask(I64) -{ - CTask *focus_task,*original_focus_task; - CDoc *doc; - CDocEntry *doc_e; - I64 ch; - DocTermNew; - SetWinHorz(51,Fs->win_right); - LBts(&Fs->display_flags,DISPLAYf_WIN_ON_TOP); - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; - while (TRUE) { - if (Bt(&ws.flags,WSf_ENABLE)) { - original_focus_task=focus_task=sys_focus_task; - while (TaskValidate(focus_task) && Bt(&focus_task->task_flags,TASKf_INPUT_FILTER_TASK)) - focus_task=focus_task->parent_task; - if (TaskValidate(focus_task) && (doc=DocPut(focus_task)) && - focus_task!=Fs && Bt(&focus_task->display_flags,DISPLAYf_SHOW)) { - DocLock(doc); - if (TaskValidate(focus_task) && original_focus_task==sys_focus_task && - doc && doc==DocPut(focus_task) && (doc_e=doc->cur_entry)) { - if (doc_e==doc) doc_e=doc_e->last; - while (doc_e->last!=doc && (doc_e->type_u8==DOCT_NEW_LINE || - doc_e->type_u8==DOCT_SOFT_NEW_LINE)) - doc_e=doc_e->last; - while (doc_e->last->type_u8 !=DOCT_NEW_LINE && doc_e->last!=doc) - doc_e=doc_e->last; - if (Bt(&ws.flags,WSf_ENABLE)) - WSPutChoices(doc,doc_e,focus_task); - else - DocUnlock(doc); - } else - DocUnlock(doc); - } - } - Sleep(333); - if (ScanMsg(&ch,,1<cur_entry!=doc && doc->cur_entry->de_flags & DOCEF_LINK) - '' CH_SPACE; - DocUnlock(doc); - } - ws.task=NULL; -} - -U0 WSMainFileLstTraverse(U8 *files_find_mask,I64 pass) -{ - U8 *buf; - CDirEntry *tempde,*tempde1; - try { - tempde=tempde1=FilesFind(files_find_mask,FUF_RECURSE|FUF_JUST_TXT|FUF_JUST_FILES|FUF_CLUSTER_ORDER); - while (tempde) { - "%s\n",tempde->full_name; - buf=FileRead(tempde->full_name); - WSSingleFileAdd(buf,pass); - Free(buf); - tempde=tempde->next; - } - } catch - Fs->catch_except=TRUE; - DirTreeDel(tempde1); -} - -U0 WSMatrixDel(CWSMatrix *m) -{ - I64 i; - CWS *tempw,*tempw1,*tempw2; - if (!m) return; - for (i=0;iside[i]; - tempw=tempw1->next; - while (tempw!=tempw1) { - tempw2=tempw->next; - Free(tempw); - tempw=tempw2; - } - } - Free(m); -} - -public Bool WordStat(Bool val=OFF) -{//Turn WordStat OFF (or ON). - Bool old_wordstat=FALSE, - old_preempt=Preempt(OFF); - if (val) { - while (Bt(&ws.flags,WSf_INIT_IN_PROGRESS)) - Sleep(10); - if (TaskValidate(ws.task)) - old_wordstat=TRUE; - else { - ws.task=Spawn(&WSTask,NULL,"WordStat"); - TaskWait(ws.task); - } - if (!LBts(&ws.flags,WSf_ENABLE)) - WinToTop(ws.task); - } else { - LBtr(&ws.flags,WSf_ENABLE); - if (TaskValidate(ws.task)) { - old_wordstat=TRUE; - Kill(ws.task); - while (TaskValidate(ws.task)) - Yield; - ws.task=NULL; - } - } - Preempt(old_preempt); - return old_wordstat; -} - -U0 WSProgressTask(Bool *_start_flag) -{ - I64 start=dsk.write_cnt; - progress1=0; - progress1_max=(Size(WSD_DEF_FILENAME_Z,"+x+s")+BLK_SIZE-1)>>BLK_SIZE_BITS; - StrCpy(progress1_desc,"Uncompressing Dictionary"); - start=dsk.write_cnt; - *_start_flag=TRUE; - while (progress1type!=BDT_RAM) { - start_flag=FALSE; - Spawn(&WSProgressTask,&start_flag); - while (!start_flag) - Yield; - } - Move(WSD_DEF_FILENAME_Z,WSD_DEF_FILENAME); - } - - HashTableDel(ws.hash_table); - ws.hash_table=HashTableNew(0x4000,adam_task); - - ws.num_words=0; - ws.num_matrix_words=0; - ws.structs_size=0; - Free(ws.cur_word); - ws.cur_word=NULL; - - "\n\nPass #1\n"; - if (mask) WSMainFileLstTraverse(mask,1); - Free(ws.sorted_words); - ws.sorted_words=AMAlloc(sizeof(U8 *)*ws.num_words); - - tempw=ws.hash_table->next_added; - while (tempw!=ws.hash_table) { - ws.sorted_words[j++]=tempw; - tempw=tempw->next_added; - } - QSortI64(ws.sorted_words,ws.num_words,&WSCompare); - for (i=0;inum=i; - if (ws.num_words<=WS_MAX_MATRIX_WORDS) - ws.num_matrix_words=ws.num_words; - else - ws.num_matrix_words=WS_MAX_MATRIX_WORDS; - - WSMatrixDel(ws.matrix); - ws.matrix=AMAlloc(sizeof(CWSMatrix)); - WSSidesInit(ws.matrix); - - "\n\nPass #2\n"; - if (mask) WSMainFileLstTraverse(mask,2); - - WSDWordsLoad; - LBtr(&ws.flags,WSf_INIT_IN_PROGRESS); - WordStat(ON); -} - -I64 WordStatSize() -{ - if (ws.hash_table) - return HashTableSize2(ws.hash_table)+ws.structs_size+ - MSize2(ws.sorted_words)+MSize2(ws.matrix)+MSize2(wsd.word_lst); - else - return 0; -} diff --git a/Adam/WordStat/WordStat.CPP b/Adam/WordStat/WordStat.CPP deleted file mode 100644 index b42defd..0000000 --- a/Adam/WordStat/WordStat.CPP +++ /dev/null @@ -1,101 +0,0 @@ -#help_index "WordStat" -#help_file "::/Doc/WordStat" - -//See $LK,"::/Doc/WordStat.TXT"$ - -class CWSSub -{ - I32 hits,repeats; -}; - -#define WS_SUBSTRUCTS_PER_STRUCT 8 -class CWS -{ - CWS *next,*last; - I64 substructs, //-1 means CWSMatrixSide - entries; - CWSSub subs[WS_SUBSTRUCTS_PER_STRUCT]; -}; - -class CWSMatrixSide -{ - CWS *next,*last; - I64 const_minus_one, //-1 used to header in que - row_hits,col_hits; -}; - -#define WS_MAX_MATRIX_WORDS 0x8000 -class CWSMatrix -{ - I64 n; - CWSMatrixSide side[WS_MAX_MATRIX_WORDS]; -}; - -#define WSf_ENABLE 0 -#define WSf_INIT_IN_PROGRESS 1 - -#define WS_MAX_FILLINS 10 - -public class CWordStatGlbls -{ - I64 num_words,num_matrix_words; - CHashTable *hash_table; - U8 *cur_word; - I64 flags; - CWSMatrix *matrix; - CHashWS **sorted_words; - CTask *task; - I64 partial_len,num_fillins, - structs_size, - fillin_matches [WS_MAX_FILLINS+1], - fillin_scores [WS_MAX_FILLINS+1], - fillin_hits [WS_MAX_FILLINS+1]; - -} ws={0,0,NULL,NULL,0,NULL,NULL,NULL,0,0,0, -{0,0,0,0,0,0,0,0,0,0,0}, -{0,0,0,0,0,0,0,0,0,0,0}, -{0,0,0,0,0,0,0,0,0,0,0}}; - -//Dictionary Stuff -#help_index "WordStat/Dictionary" - -#define WSD_WORD_FILENAME "/Adam/WordStat/WSWords.DAT.Z" -#define WSD_DEF_FILENAME "/Adam/WordStat/WSDefs.DAT" -#define WSD_DEF_FILENAME_Z "/Adam/WordStat/WSDefs.DAT.Z" - -#define WSD_H1 0 -#define WSD_H1_END 1 -#define WSD_DEF 2 -#define WSD_DEF_END 3 -#define WSD_PRONUNCIATION 4 -#define WSD_PRONUNCIATION_END 5 -#define WSD_POS 6 -#define WSD_POS_END 7 -#define WSD_EXTRA 8 -#define WSD_EXTRA_END 9 -#define WSD_BLK_SIZE 0x4000 - -#define WSD_END_CHAR 0x00 -#define WSD_WORD_CHAR 0x01 -#define WSD_DEF_CHAR 0x02 -#define WSD_PRONUNCIATION_CHAR 0x03 -#define WSD_POS_CHAR 0x04 -#define WSD_EXTRA_CHAR 0x05 - -#define WSD_MAX_FILLINS 10 - -public class CWordStatDictGlbls -{ - U8 *word_lst; - I64 word_lst_size,num_words,num_fillins; - U8 *fillins[WSD_MAX_FILLINS]; - Bool has_words,has_defs; -} wsd={NULL,0,0,0,{0,0,0,0,0,0,0,0,0,0},FALSE,FALSE}; -wsd.has_words=FileFind(WSD_WORD_FILENAME); -wsd.has_defs =FileFind(WSD_DEF_FILENAME)||FileFind(WSD_DEF_FILENAME_Z); - -extern U0 WSDWordsLoad(); -extern U0 WSDDictWordsAdd(CDoc *doc,U8 *st=NULL); - -#include "WSMain" -#include "WSDict" diff --git a/Accts/Adam3cKeyPlugIns.CPP b/AdamKeyPlugIns.CPP similarity index 75% rename from Accts/Adam3cKeyPlugIns.CPP rename to AdamKeyPlugIns.CPP index 352c6a1..644fed7 100644 --- a/Accts/Adam3cKeyPlugIns.CPP +++ b/AdamKeyPlugIns.CPP @@ -1,7 +1,7 @@ -//Change anything you want in this -//acct file or others. +//Place this file in /Home and change +//anything you want. -U0 FillInTime() +U0 InsTime() { CDate cdt; cdt=Now; @@ -33,9 +33,9 @@ Bool MyPutKey(I64 ch,I64 sc) case SC_F1: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("Dollar/LTPURPLE"); + KeyDescSet("Dollar/LTPURPLE"); else - SetKeyDesc("Dollar/PURPLE"); + KeyDescSet("Dollar/PURPLE"); } else { if (sc & SCF_SHIFT) "$$LTPURPLE$$"; @@ -46,9 +46,9 @@ Bool MyPutKey(I64 ch,I64 sc) case SC_F2: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("Dollar/LTRED"); + KeyDescSet("Dollar/LTRED"); else - SetKeyDesc("Dollar/RED"); + KeyDescSet("Dollar/RED"); } else { if (sc & SCF_SHIFT) "$$LTRED$$"; @@ -59,9 +59,9 @@ Bool MyPutKey(I64 ch,I64 sc) case SC_F3: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("Dollar/LTGREEN"); + KeyDescSet("Dollar/LTGREEN"); else - SetKeyDesc("Dollar/GREEN"); + KeyDescSet("Dollar/GREEN"); } else { if (sc & SCF_SHIFT) "$$LTGREEN$$"; @@ -72,21 +72,21 @@ Bool MyPutKey(I64 ch,I64 sc) case SC_F4: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("Dollar/LTBLUE"); + KeyDescSet("Dollar/Default Color"); else - SetKeyDesc("Dollar/Default Color"); + KeyDescSet("Dollar/BLUE"); } else { if (sc & SCF_SHIFT) - "$$LTBLUE$$"; - else "$$FG$$"; + else + "$$BLUE$$"; } break; case SC_F7: if (sc&SCF_KEY_DESC) - SetKeyDesc("Misc/Insert Datetime"); + KeyDescSet("Misc/Ins Datetime"); else - FillInTime; + InsTime; break; } return TRUE; @@ -94,15 +94,28 @@ Bool MyPutKey(I64 ch,I64 sc) if (!(sc & SCF_CTRL)) { if (sc & SCF_ALT) { switch (ch) { + case 'a': + if (sc&SCF_KEY_DESC) + KeyDescSet("Win/AutoComplete(ON);"); + else + AutoComplete(ON); + return TRUE; + case 'A': + if (sc&SCF_KEY_DESC) + KeyDescSet("Win/AutoComplete;"); + else + AutoComplete; + return TRUE; + case 'h': if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/Tile Horizontally"); + KeyDescSet("Win/Tile Horizontally"); else WinTileHorz; return TRUE; case 'm': if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/Maximize"); + KeyDescSet("Win/Maximize"); else { WinMax; WinBorder; @@ -110,17 +123,17 @@ Bool MyPutKey(I64 ch,I64 sc) return TRUE; case 'v': if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/Tile Vertically"); + KeyDescSet("Win/Tile Vertically"); else WinTileVert; return TRUE; case 'l': if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Put Link to Cur Pos on Clipboard"); + KeyDescSet("Edit/Put Link to Cur Pos on Clipboard"); else { ClipboardDel; - st1=FileNameAbs(Define("ST_BIBLE_FILE")); + st1=FileNameAbs(BIBLE_FILENAME); st2=FileNameAbs(DocPut->filename.name); if (!StrCmp(st1,st2)) { Free(st1); @@ -135,7 +148,7 @@ Bool MyPutKey(I64 ch,I64 sc) return TRUE; case 'L': if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Place Anchor, Put Link to Clipboard"); + KeyDescSet("Edit/Place Anchor, Put Link to Clipboard"); else { i=RandU32; ClipboardDel; @@ -145,19 +158,6 @@ Bool MyPutKey(I64 ch,I64 sc) } return TRUE; - case 'w': - if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/WordStat(ON);"); - else - WordStat(ON); - return TRUE; - case 'W': - if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/WordStat;"); - else - WordStat; - return TRUE; - } } } diff --git a/Accts/Adam3aLocalize.CPP b/AdamLocalize.CPP similarity index 84% rename from Accts/Adam3aLocalize.CPP rename to AdamLocalize.CPP index 50c1b39..b5c4531 100644 --- a/Accts/Adam3aLocalize.CPP +++ b/AdamLocalize.CPP @@ -1,8 +1,8 @@ -//Change anything you want in this -//acct file or others. +//Place this file in /Home and change +//anything you want. //This makes your keyboard fast -SetTypeMatic(0); +KbdTypeMatic(0); //Set Time Zone local_time_offset=0*60*60*CDATE_FREQ; //Do daylight savings by hand diff --git a/Accts/Adam3bPkgs.CPP b/AdamPkgs.CPP similarity index 75% rename from Accts/Adam3bPkgs.CPP rename to AdamPkgs.CPP index 30e9d96..3d537a2 100644 --- a/Accts/Adam3bPkgs.CPP +++ b/AdamPkgs.CPP @@ -1,12 +1,12 @@ -//Change anything you want in this -//acct file or others. +//Place this file in /Home and change +//anything you want. Cd("/Adam/Boot");; -#include "InsBoot" +#include "Boot" Cd("/Adam/Utils");; #include "Profiler" #include "Diff" -#include "Grep" +#include "Find" #include "LineRep" #include "Merge" #include "S2T" @@ -20,6 +20,6 @@ Cd("/Adam/Utils");; MapFileLoad("::/Kernel/Kernel"); MapFileLoad("::/Compiler/Compiler"); -Cd("HOME");; +Cd("::/Home");; #help_index "" diff --git a/Accts/Install/Adam3eSys.CPP b/AdamSys.CPP similarity index 69% rename from Accts/Install/Adam3eSys.CPP rename to AdamSys.CPP index 0dc58dc..2efe633 100644 --- a/Accts/Install/Adam3eSys.CPP +++ b/AdamSys.CPP @@ -1,5 +1,5 @@ -//Change anything you want in this -//acct file or others. +//Place this file in /Home and change +//anything you want. U0 UserStartUp() {//Run each time a user a spawned @@ -9,6 +9,7 @@ U0 UserStartUp() WinToTop; WinZBufUpdate; Preempt(ON); + Dir; } U0 SrvStartUp() @@ -23,15 +24,14 @@ U0 SrvStartUp() U0 StartUpTasks() { CTask *user1,*user2; - user1=SpawnUser; - user2=SpawnUser("Ed(\"::/Doc/Install.TXT.Z\");\n"); + user1=User; + user2=User; WinToTop(user1); WinTileVert; "Boot Time:%7.3fs\n",tS; - XTalk(user1,"Cd(\"HOME\");#include \"DoOnce\";\n"); - Silent(ON); //no output to screen - WSInit; - WordStat; + XTalk(user1,"Cd(\"::/Home\");#include \"DoOnce\";\n"); + Silent; //no output to screen + ACInit("/*;~*Bible.TXT*"); Silent(OFF); //no output to screen } diff --git a/AdamWrappers.CPP b/AdamWrappers.CPP new file mode 100644 index 0000000..f3a39eb --- /dev/null +++ b/AdamWrappers.CPP @@ -0,0 +1,26 @@ +//Place this file in /Home and change +//anything you want. + +#help_index "Cmd Line (Typically)" + +//These are customized quick commands. +//Feel free to add more or change. +public I64 F(U8 *needle_str,U8 *fu_flags=NULL) +{//Find (Find) all text files. + return Find(needle_str,"/*",fu_flags); +} + +public I64 R(U8 *needle_str,U8 *replace_text=NULL,U8 *fu_flags="+l-i") +{//Find (Find) and replace string with string in all files. + return Find(needle_str,"/*",fu_flags,replace_text); +} + +public I64 FD(U8 *needle_str,U8 *fu_flags=NULL) +{//Find (Find) text files in cur dir. + return Find(needle_str,"*",fu_flags); +} + +public I64 RD(U8 *needle_str,U8 *replace_text=NULL,U8 *fu_flags="+l-i") +{//Find (Find) and replace string with string in cur dir. + return Find(needle_str,"*",fu_flags,replace_text); +} diff --git a/Apps/AfterEgypt/AESplash.TXT b/Apps/AfterEgypt/AESplash.TXT index f532696..bbf20cf 100644 Binary files a/Apps/AfterEgypt/AESplash.TXT and b/Apps/AfterEgypt/AESplash.TXT differ diff --git a/Apps/AfterEgypt/AfterEgypt.CPP b/Apps/AfterEgypt/AfterEgypt.CPP index d8d1cf5..ee16000 100644 --- a/Apps/AfterEgypt/AfterEgypt.CPP +++ b/Apps/AfterEgypt/AfterEgypt.CPP @@ -17,9 +17,7 @@ U0 HoldCourt() I64 accused,crime,victim; Bool old_form=LBts(&(DocPut)->flags,DOCf_FORM); - FlushMsgs; DocDblBufStart; - '\n'; accused=RandU32%3; "%s",LstSub(accused,"A man \0A woman \0A child \0"); @@ -74,7 +72,6 @@ Bool TakeTurn() Camp(num_people); Kill(Fs->song_task); - FlushMsgs; DocDblBufStart; "$$LM,4$$" "\n\n$$BT,\"Break Camp\",LE=T_BREAK_CAMP$$\n\n" @@ -164,7 +161,6 @@ U0 Trailer() Cd(Fs->parent_task->cur_dir); Type("AESplash.TXT"); Sleep(500); - FlushMsgs; try { TMsg(dc,"Leaving all behind, they fled."); TMsg(dc,"Found themselves in a desert."); @@ -181,11 +177,11 @@ U0 AfterEgypt() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); WinBorder; - WordStat; + AutoComplete; DocClear; WinMax; PopUp("Trailer;",Fs); - WordStat; + AutoComplete; try //Catch . while (TakeTurn); catch diff --git a/Apps/AfterEgypt/Comics/Moses82.TXT b/Apps/AfterEgypt/Comics/Moses82.TXT new file mode 100644 index 0000000..5fc579e Binary files /dev/null and b/Apps/AfterEgypt/Comics/Moses82.TXT differ diff --git a/Apps/AfterEgypt/GodTalking.CPP b/Apps/AfterEgypt/GodTalking.CPP index 1cfda8d..aef2b02 100644 Binary files a/Apps/AfterEgypt/GodTalking.CPP and b/Apps/AfterEgypt/GodTalking.CPP differ diff --git a/Apps/AfterEgypt/Horeb1.CPP b/Apps/AfterEgypt/HorebA.CPP similarity index 97% rename from Apps/AfterEgypt/Horeb1.CPP rename to Apps/AfterEgypt/HorebA.CPP index 91d3da5..8f80b4e 100644 Binary files a/Apps/AfterEgypt/Horeb1.CPP and b/Apps/AfterEgypt/HorebA.CPP differ diff --git a/Apps/AfterEgypt/Horeb2MP.CPP b/Apps/AfterEgypt/HorebBMP.CPP similarity index 73% rename from Apps/AfterEgypt/Horeb2MP.CPP rename to Apps/AfterEgypt/HorebBMP.CPP index 8060dd0..a206e93 100644 --- a/Apps/AfterEgypt/Horeb2MP.CPP +++ b/Apps/AfterEgypt/HorebBMP.CPP @@ -1,19 +1,18 @@ -I64 type_weights[OT_NUM_TYPES]={30,30,15,30,30,1,1,1}; +I64 type_weights[OT_NUM_TYPES]={0,30,30,15,30,30,1,1,1}; I64 mp_not_done_flags; U0 MPDrawHoreb(CDC *dc2) { CTask *task=dc2->win_task; CDC *dc=DCAlias(dc2,task); - I64 lo=Gs->num*O_NUM_OBJS/mp_cnt,hi=(Gs->num+1)*O_NUM_OBJS/mp_cnt, - i,j,dx,dy,dz,w=task->pix_width,h=task->pix_height,r[16],cx=w>>1; + I64 i,j,dx,dy,dz,w=task->pix_width,h=task->pix_height,r[16],cx=w>>1; F64 s,m,a,x1,y1,x2,y2; Obj *tempo; GrIdentEqu(r); GrRotYEqu(r,-é); GrRotXEqu(r,77*ã/180); - for (i=lo;inum;ix1=tempo->x+vx; tempo->y1=tempo->y; tempo->z1=tempo->z+vz; GrRot(r,&tempo->x1,&tempo->y1,&tempo->z1); @@ -27,15 +26,21 @@ U0 MPDrawHoreb(CDC *dc2) } if (tempo->z1>=0) { s=100.0/(AbsI64(tempo->z1)+50); - GrIdentEqu(dc->r); - GrScaleEqu(dc->r,s*2); - GrSetRotMat(dc,dc->r); - dc->flags|=DCF_TRANSFORMATION; - if (tempo->sym) { - dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - GrSetSymmetry(dc,s*tempo->x1+cx,s*tempo->y1+h,s*tempo->x1+cx,s*tempo->y1+h+10); + if (tempo->type) { + GrIdentEqu(dc->r); + GrScaleEqu(dc->r,s*2); + GrSetRotMat(dc,dc->r); + dc->flags|=DCF_TRANSFORMATION; + if (tempo->sym) { + dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; + GrSetSymmetry(dc,s*tempo->x1+cx,s*tempo->y1+h,s*tempo->x1+cx,s*tempo->y1+h+10); + } + Sprite3B(dc,s*tempo->x1+cx,s*tempo->y1+h,tempo->z1,imgs[tempo->type]); + } else { + dc->flags&=~DCF_TRANSFORMATION; + dc->color=pebble_colors[tempo->num&3]; + GrPlot3(dc,s*tempo->x1+cx,s*tempo->y1+h,tempo->z1); } - Sprite3B(dc,s*tempo->x1+cx,s*tempo->y1+h,tempo->z1,imgs[tempo->type]); dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); if (tempo==&objs[O_BURNING_BUSH]) {//draw burning bush dc->x=s*tempo->x1+cx; diff --git a/Apps/AfterEgypt/Horeb2SP.CPP b/Apps/AfterEgypt/HorebBSP.CPP similarity index 67% rename from Apps/AfterEgypt/Horeb2SP.CPP rename to Apps/AfterEgypt/HorebBSP.CPP index b1f1fae..a075dd3 100644 --- a/Apps/AfterEgypt/Horeb2SP.CPP +++ b/Apps/AfterEgypt/HorebBSP.CPP @@ -1,4 +1,4 @@ -I64 type_weights[OT_NUM_TYPES]={30,30,15,30,3,1,1,1}; +I64 type_weights[OT_NUM_TYPES]={0,30,30,15,30,3,1,1,1}; I64 ObjCompare(Obj *o1,Obj *o2) { @@ -12,7 +12,7 @@ U0 DrawHoreb(CTask *task,CDC *dc) h=task->pix_height,r[16], cx=w>>1,cy=h>>1; F64 s,m,a,x1,y1,x2,y2; - Obj *o_sort[O_NUM_OBJS],*tempo; + Obj *o_sort[O_NUM_OBJS+O_NUM_PEBBLES],*tempo; GrIdentEqu(r); GrRotYEqu(r,-é); @@ -29,7 +29,7 @@ U0 DrawHoreb(CTask *task,CDC *dc) GrFloodFill(dc,s*x+cx,15); } - for (i=0;ix1=tempo->x+vx; tempo->y1=tempo->y; tempo->z1=tempo->z+vz; @@ -43,21 +43,27 @@ U0 DrawHoreb(CTask *task,CDC *dc) tempo->sym=FALSE; } } - QSortI64(o_sort,O_NUM_OBJS,&ObjCompare); + QSortI64(o_sort,O_NUM_OBJS+O_NUM_PEBBLES,&ObjCompare); - for (i=0;iz1<0) break; s=100.0/(AbsI64(tempo->z1)+50); - GrIdentEqu(dc->r); - GrScaleEqu(dc->r,s*2); - GrSetRotMat(dc,dc->r); - dc->flags|=DCF_TRANSFORMATION; - if (tempo->sym) { - dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - GrSetSymmetry(dc,s*tempo->x1+cx,s*tempo->y1+h,s*tempo->x1+cx,s*tempo->y1+h+10); + if (tempo->type) { + GrIdentEqu(dc->r); + GrScaleEqu(dc->r,s*2); + GrSetRotMat(dc,dc->r); + dc->flags|=DCF_TRANSFORMATION; + if (tempo->sym) { + dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; + GrSetSymmetry(dc,s*tempo->x1+cx,s*tempo->y1+h,s*tempo->x1+cx,s*tempo->y1+h+10); + } + Sprite3B(dc,s*tempo->x1+cx,s*tempo->y1+h,0,imgs[tempo->type]); + } else { + dc->flags&=~DCF_TRANSFORMATION; + dc->color=pebble_colors[tempo->num&3]; + GrPlot3(dc,s*tempo->x1+cx,s*tempo->y1+h,tempo->z1); } - Sprite3B(dc,s*tempo->x1+cx,s*tempo->y1+h,0,imgs[tempo->type]); dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); if (o_sort[i]==&objs[O_BURNING_BUSH]) {//draw burning bush dc->x=s*tempo->x1+cx; diff --git a/Apps/AfterEgypt/Horeb3.CPP b/Apps/AfterEgypt/HorebC.CPP similarity index 57% rename from Apps/AfterEgypt/Horeb3.CPP rename to Apps/AfterEgypt/HorebC.CPP index 5c82b6d..4c896d5 100644 --- a/Apps/AfterEgypt/Horeb3.CPP +++ b/Apps/AfterEgypt/HorebC.CPP @@ -5,7 +5,7 @@ U0 AnimateTask(I64) Obj *tempo; while (TRUE) { t=tS; - for (i=0;itype==OT_SHEEP || tempo->type==OT_GOAT1 || tempo->type==OT_GOAT2) { tempo->x+=tempo->dx; @@ -28,25 +28,28 @@ U0 Init() total+=type_weights[i]; MemSet(objs,0,sizeof(objs)); - for (i=0;inum=i; tempo->x=RandU32&0x1FFF-0x1000; tempo->y=0; tempo->z=RandU32&0x1FFF-0x1000; tempo->é=2*ã*Rand; tempo->sym=RandU16&1; - k=0; - j=RandU32%total; - while (TRUE) { - j-=type_weights[k]; - if (j<0) - break; - else - k++; - } - - tempo->type=k; + if (itype=k; + } else + tempo->type=OT_PEBBLE; } objs[O_BURNING_BUSH].type=OT_BUSH1; @@ -54,14 +57,14 @@ U0 Init() horeb_done=FALSE; } -#define ANIMATE_STEPS 10 +#define ANIMATE_STEPS 5 U0 AnimateéTask(F64 a) { I64 i; for (i=0;itext_attr=YELLOW<<4+BLUE; Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; - WordStat; + AutoComplete; WinMax; WinBorder; Preempt(OFF); @@ -107,34 +110,31 @@ U0 Horeb() Init; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); Fs->draw_it=&DrawHoreb; - while (!horeb_done) { - while (ScanKey(&ch,&sc)) - switch (ch) { - case 0: - switch (sc.u8[0]) { - case SC_CURSOR_LEFT: - Spawn(&AnimateéTask,(-ã/100)(I64),"Animate é",,Fs); - break; - case SC_CURSOR_RIGHT: - Spawn(&AnimateéTask,( ã/100)(I64),"Animate é",,Fs); - break; - case SC_CURSOR_UP: - Spawn(&AnimateVTask,(-40.0 )(I64),"Animate V",,Fs); - break; - case SC_CURSOR_DOWN: - Spawn(&AnimateVTask,( 40.0 )(I64),"Animate V",,Fs); - break; - } - break; - case '\n': - Init; - break; - case CH_SHIFT_ESC: - case CH_ESC: - goto hr_done; - } - WinMgrSync; - } + while (!horeb_done) + switch (GetKey(&sc)) { + case 0: + switch (sc.u8[0]) { + case SC_CURSOR_LEFT: + Spawn(&AnimateéTask,(-ã/100)(I64),"Animate é",,Fs); + break; + case SC_CURSOR_RIGHT: + Spawn(&AnimateéTask,( ã/100)(I64),"Animate é",,Fs); + break; + case SC_CURSOR_UP: + Spawn(&AnimateVTask,(-40.0 )(I64),"Animate V",,Fs); + break; + case SC_CURSOR_DOWN: + Spawn(&AnimateVTask,( 40.0 )(I64),"Animate V",,Fs); + break; + } + break; + case '\n': + Init; + break; + case CH_SHIFT_ESC: + case CH_ESC: + goto hr_done; + } hr_done: //Don't goto out of try } catch Fs->catch_except=TRUE; diff --git a/Apps/AfterEgypt/Load.CPP b/Apps/AfterEgypt/Load.CPP index 9a3557f..f0bc9cd 100644 --- a/Apps/AfterEgypt/Load.CPP +++ b/Apps/AfterEgypt/Load.CPP @@ -1,6 +1,6 @@ #help_index "Games" -Cd("/Apps/AfterEgypt");; +Cd(__DIR__);; #include "Comics" #include "/Demo/Graphics/Camp" #include "/Demo/MultiCore/Clouds" @@ -9,15 +9,15 @@ Cd("/Apps/AfterEgypt");; #include "Battle" #include "WaterRock" #include "Quail" -#include "Horeb1" +#include "HorebA" #if mp_cnt>=4 - #include "Horeb2MP" + #include "HorebBMP" #else - #include "Horeb2SP" + #include "HorebBSP" #endif -#include "Horeb3" +#include "HorebC" #include "GodTalking" #include "AfterEgypt" diff --git a/Apps/AfterEgypt/Run.CPP b/Apps/AfterEgypt/Run.CPP index 8593299..0b9d290 100644 --- a/Apps/AfterEgypt/Run.CPP +++ b/Apps/AfterEgypt/Run.CPP @@ -1,3 +1,3 @@ -Cd("/Apps/AfterEgypt");; +Cd(__DIR__);; #include "Load" AfterEgypt; diff --git a/Apps/AfterEgypt/WaterRock.CPP b/Apps/AfterEgypt/WaterRock.CPP index 000c310..821ba69 100644 Binary files a/Apps/AfterEgypt/WaterRock.CPP and b/Apps/AfterEgypt/WaterRock.CPP differ diff --git a/Apps/Budget/BgtAccts.CPP b/Apps/Budget/BgtAccts.CPP index 36166b4..b5e90a3 100644 --- a/Apps/Budget/BgtAccts.CPP +++ b/Apps/Budget/BgtAccts.CPP @@ -5,15 +5,15 @@ U0 BgtAcctsUpdate() tempb=b_root.next; while (tempb!=&b_root) { if (tempb->type!=BE_TEMPLATE_COPY) { - tempb->credit_index =StrFileAdd(tempb->credit,accts_table); - tempb->debit_index =StrFileAdd(tempb->debit,accts_table); + tempb->credit_index =StrFileAdd(tempb->credit,&accts_table_strs,accts_table); + tempb->debit_index =StrFileAdd(tempb->debit,&accts_table_strs,accts_table); } tempb=tempb->next; } tempt=t_root.next; while (tempt!=&t_root) { - tempt->b.credit_index =StrFileAdd(tempt->b.credit,accts_table); - tempt->b.debit_index =StrFileAdd(tempt->b.debit,accts_table); + tempt->b.credit_index =StrFileAdd(tempt->b.credit,&accts_table_strs,accts_table); + tempt->b.debit_index =StrFileAdd(tempt->b.debit,&accts_table_strs,accts_table); tempt=tempt->next; } } @@ -29,10 +29,11 @@ U0 BgtAcctsRead() I64 i,max_num; U8 *colors,**s=StrFileRead(BGT_ACCTS_FILE,&max_num,&colors,TRUE); StrFileDel(accts_table); - accts_table=HashTableNew(0x200); + accts_table=HashTableNew(512); + accts_table_strs=0; for (i=0;i<=max_num;i++) if (s[i]) - StrFileAdd(s[i],accts_table,colors[i]); + StrFileAdd(s[i],&accts_table_strs,accts_table,colors[i]); StrFileArrDel(s,max_num); Free(colors); } @@ -48,6 +49,7 @@ I64 BgtAcctColor(U8 *st) U8 *BgtPopUpAcct(U8 *header=NULL,U8 *dft=NULL) { + I64 i; U8 *result; CDoc *doc=DocNew; CDocEntry *doc_e,*doc_dft=NULL; @@ -56,13 +58,15 @@ U8 *BgtPopUpAcct(U8 *header=NULL,U8 *dft=NULL) if (header) DocPrint(doc,"%s",header); - temph=accts_table->next_added; - while (temph!=accts_table) { - doc_e=DocPrint(doc,"$$FG,%d$$$$MU-UL,\"%s\",LE=0x%X$$\n", - temph->user_data1,temph->str,temph->str); - if (dft && !StrCmp(dft,temph->str)) - doc_dft=doc_e; - temph=temph->next_added; + for (i=0;i<=accts_table->mask;i++) { + temph=accts_table->body[i]; + while (temph) { + doc_e=DocPrint(doc,"$$FG,%d$$$$MU-UL,\"%s\",LE=0x%X$$\n", + temph->user_data1,temph->str,temph->str); + if (dft && !StrCmp(dft,temph->str)) + doc_dft=doc_e; + temph=temph->next; + } } if (doc_dft) { diff --git a/Apps/Budget/BgtEntry.CPP b/Apps/Budget/BgtEntry.CPP index 60f9aff..39e057c 100644 --- a/Apps/Budget/BgtEntry.CPP +++ b/Apps/Budget/BgtEntry.CPP @@ -62,8 +62,8 @@ CBgtEntry *BgtEntryPmt(CBgtEntry *dft=NULL) tempb->debit =StrNew(b.debit); tempb->desc =StrNew(b.desc); tempb->type =BE_NORMAL; - StrFileAdd(tempb->credit,accts_table); - StrFileAdd(tempb->debit,accts_table); + StrFileAdd(tempb->credit,&accts_table_strs,accts_table); + StrFileAdd(tempb->debit,&accts_table_strs,accts_table); return tempb; } } else diff --git a/Apps/Budget/BgtFile.CPP b/Apps/Budget/BgtFile.CPP index 2dadfc2..7b54956 100644 --- a/Apps/Budget/BgtFile.CPP +++ b/Apps/Budget/BgtFile.CPP @@ -48,26 +48,28 @@ U0 BgtDataRead() U0 BgtDataWrite() { - I64 size,cnt1,cnt2; - CHashTable *table=HashTableNew(0x1000); + I64 i,num=0,size,cnt1,cnt2; + CHashTable *table=HashTableNew(1024); CBgtEntry *tempb; CBgtTemplate *tempt; CHashGeneric *temph; U8 *buf,*ptr; - temph=accts_table->next_added; - while (temph!=accts_table) { - StrFileAdd(temph->str,table); //Make so accts come first. (Cosmetic) - temph=temph->next_added; + for (i=0;i<=accts_table->mask;i++) { + temph=accts_table->body[i]; + while (temph) { + StrFileAdd(temph->str,&num,table); //Cosmetics -- make accts appear first. + temph=temph->next; + } } tempb=b_root.next; cnt1=0; while (tempb!=&b_root) { if (tempb->type!=BE_TEMPLATE_COPY) { - tempb->credit_index =StrFileAdd(tempb->credit,table); - tempb->debit_index =StrFileAdd(tempb->debit,table); - tempb->desc_index =StrFileAdd(tempb->desc,table); + tempb->credit_index =StrFileAdd(tempb->credit,&num,table); + tempb->debit_index =StrFileAdd(tempb->debit,&num,table); + tempb->desc_index =StrFileAdd(tempb->desc,&num,table); cnt1++; } tempb=tempb->next; @@ -76,9 +78,9 @@ U0 BgtDataWrite() tempt=t_root.next; cnt2=0; while (tempt!=&t_root) { - tempt->b.credit_index =StrFileAdd(tempt->b.credit,table); - tempt->b.debit_index =StrFileAdd(tempt->b.debit,table); - tempt->b.desc_index =StrFileAdd(tempt->b.desc,table); + tempt->b.credit_index =StrFileAdd(tempt->b.credit,&num,table); + tempt->b.debit_index =StrFileAdd(tempt->b.debit,&num,table); + tempt->b.desc_index =StrFileAdd(tempt->b.desc,&num,table); cnt2++; tempt=tempt->next; } @@ -134,4 +136,5 @@ U0 BgtDel() } StrFileDel(accts_table); accts_table=NULL; + accts_table_strs=0; } diff --git a/Apps/Budget/BgtMain.CPP b/Apps/Budget/BgtMain.CPP index cc3d002..e980382 100644 --- a/Apps/Budget/BgtMain.CPP +++ b/Apps/Budget/BgtMain.CPP @@ -49,7 +49,7 @@ Bool BgtPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) case 'a': PopUpOk( "Set the name and color of your accounts.\n" "To delete accounts, manually edit\n" - "$$GREEN$$HOME/Budget/Accts.TXT.Z$$FG$$."); + "$$GREEN$$/Home/Budget/Accts.TXT.Z$$FG$$."); if (PopUpEd(BGT_ACCTS_FILE,Fs)) { BgtAcctsRead; BgtRegen; @@ -163,7 +163,7 @@ U0 Budget() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; WinBorder; - WordStat; + AutoComplete; MenuPush( "File {" " Abort(,CH_SHIFT_ESC);" diff --git a/Apps/Budget/BgtStrs.CPP b/Apps/Budget/BgtStrs.CPP index 88ece01..f660b20 100644 --- a/Apps/Budget/BgtStrs.CPP +++ b/Apps/Budget/BgtStrs.CPP @@ -53,7 +53,7 @@ public U0 StrFileArrDel(U8 **a,I64 max_num) Free(a); } -public I64 StrFileAdd(U8 *st,CHashTable *table,I64 color=COLOR_INVALID) +public I64 StrFileAdd(U8 *st,I64 *_num,CHashTable *table,I64 color=COLOR_INVALID) { CHashGeneric *temph; if (!st) return 0; @@ -61,10 +61,7 @@ public I64 StrFileAdd(U8 *st,CHashTable *table,I64 color=COLOR_INVALID) temph=CAlloc(sizeof(CHashGeneric)); temph->type=SFT_GENERIC; temph->str=StrNew(st); - if (table->last_added==table) - temph->user_data0=1; - else - temph->user_data0=table->last_added(CHashGeneric *)->user_data0+1; + temph->user_data0=(*_num)++; HashAdd(temph,table); } if (color!=COLOR_INVALID) @@ -72,14 +69,32 @@ public I64 StrFileAdd(U8 *st,CHashTable *table,I64 color=COLOR_INVALID) return temph->user_data0; } +I64 StrEntriesCompare(CHashGeneric *h1,CHashGeneric *h2) +{ + return h1->user_data0-h2->user_data0; +} + public U0 StrFileWrite(U8 *name,CHashTable *table,Bool no_nums=FALSE) { - I64 color=BLACK; + I64 i,j,cnt,color=BLACK; CDoc *doc=DocNew(name); - CHashGeneric *temph; + CHashGeneric *temph,**a; if (table) { - temph=table->next_added; - while (temph!=table) { + cnt=0; //Count Strings + for (i=0;i<=table->mask;i++) + cnt+=LinkedLstCnt(table->body[i]); + a=MAlloc(cnt*sizeof(CHashGeneric *)); + j=0; //Load Strings + for (i=0;i<=table->mask;i++) { + temph=table->body[i]; + while (temph) { + a[j++]=temph; + temph=temph->next; + } + } + QSortI64(a,cnt,&StrEntriesCompare); + for (i=0;iuser_data1&15!=color) { DocPrint(doc,"$$FG,%d$$",temph->user_data1&15); color=temph->user_data1&15; @@ -88,8 +103,8 @@ public U0 StrFileWrite(U8 *name,CHashTable *table,Bool no_nums=FALSE) DocPrint(doc,"%s\n",temph->str); else DocPrint(doc,"%d,%s\n",temph->user_data0,temph->str); - temph=temph->next_added; } + Free(a); } doc->flags|=DOCF_NO_CURSOR; DocWrite(doc); @@ -98,14 +113,17 @@ public U0 StrFileWrite(U8 *name,CHashTable *table,Bool no_nums=FALSE) public U0 StrFileDel(CHashTable *table) { + I64 i; CHashGeneric *temph,*temph1; if (!table) return; - temph=table->next_added; - while (temph!=table) { - temph1=temph->next_added; - Free(temph->str); - Free(temph); - temph=temph1; + for (i=0;i<=table->mask;i++) { + temph=table->body[i]; + while (temph) { + temph1=temph->next; + Free(temph->str); + Free(temph); + temph=temph1; + } } Free(table->body); Free(table); diff --git a/Apps/Budget/Budget.CPP b/Apps/Budget/Budget.CPP index 3ad819f..28379f2 100644 --- a/Apps/Budget/Budget.CPP +++ b/Apps/Budget/Budget.CPP @@ -1,6 +1,6 @@ -#define BGT_STRINGS_FILE "HOME/Budget/Strs.TXT.Z" -#define BGT_ACCTS_FILE "HOME/Budget/Accts.TXT.Z" -#define BGT_DATA_FILE "HOME/Budget/Bgt.DAT.Z" +#define BGT_STRINGS_FILE "::/Home/Budget/Strs.TXT.Z" +#define BGT_ACCTS_FILE "::/Home/Budget/Accts.TXT.Z" +#define BGT_DATA_FILE "::/Home/Budget/Bgt.DAT.Z" #define BE_NORMAL 0 #define BE_GAS 1 @@ -55,6 +55,7 @@ class CBgtTemplate U8 view_acct[512]; CHashTable *accts_table=NULL; +I64 accts_table_strs=0; CDate MyStr2Date(U8 *st) { diff --git a/Apps/Budget/Install.CPP b/Apps/Budget/Install.CPP index d12b347..2e99028 100644 --- a/Apps/Budget/Install.CPP +++ b/Apps/Budget/Install.CPP @@ -1,4 +1,5 @@ -if (!FileFind("HOME/Budget",,FUF_JUST_DIRS)) { - MkDir("HOME/Budget"); - Copy("/Apps/Budget/Accts.TXT.Z","HOME/Budget"); +Cd(__DIR__);; +if (!FileFind("::/Home/Budget",,FUF_JUST_DIRS)) { + MkDir("::/Home/Budget"); + Copy("Accts.TXT.Z","::/Home/Budget"); } diff --git a/Apps/Budget/Load.CPP b/Apps/Budget/Load.CPP index 0dad7e6..ecba844 100644 --- a/Apps/Budget/Load.CPP +++ b/Apps/Budget/Load.CPP @@ -1,11 +1,12 @@ #help_index "Finance" -#include "/Apps/Budget/BgtStrs" -#include "/Apps/Budget/Budget" -#include "/Apps/Budget/BgtAccts" -#include "/Apps/Budget/BgtEntry" -#include "/Apps/Budget/BgtTemplate" -#include "/Apps/Budget/BgtFile" -#include "/Apps/Budget/BgtMain" +Cd(__DIR__);; +#include "BgtStrs" +#include "Budget" +#include "BgtAccts" +#include "BgtEntry" +#include "BgtTemplate" +#include "BgtFile" +#include "BgtMain" #help_index "" diff --git a/Apps/Budget/Run.CPP b/Apps/Budget/Run.CPP index 7a937b3..5bf731f 100644 --- a/Apps/Budget/Run.CPP +++ b/Apps/Budget/Run.CPP @@ -1,4 +1,4 @@ -Cd("/Apps/Budget");; +Cd(__DIR__);; #include "Load" #include "Install" //Might as well always install Budget; diff --git a/Apps/GrModels/BallGen.CPP b/Apps/GrModels/BallGen.CPP index 5d05fe3..c06e359 100644 --- a/Apps/GrModels/BallGen.CPP +++ b/Apps/GrModels/BallGen.CPP @@ -58,17 +58,17 @@ I64 AddTri(BallDefineStruct *,I64 c,I64 n0,I64 n1,I64 n2) U8 *Ball2CSprite() { //See $LK,"::/Adam/Gr/GrSpritePlot.CPP",A="FL:::/Adam/Gr/GrSpritePlot.CPP,1"$ for how CSprite are stored. - U8 *result=MAlloc(sizeof(U8)+2*sizeof(I32)+ + U8 *result=MAlloc(sizeof(CSpriteMeshU8s)+ b->vertex_cnt*sizeof(CD3I32)+b->tri_cnt*sizeof(CMeshTri)+sprite_elem_base_sizes[SPT_END]), *dst=result; - *dst(U8 *)++ =SPT_MESH; + *dst++ =SPT_MESH; *dst(I32 *)++ =b->vertex_cnt; *dst(I32 *)++ =b->tri_cnt; MemCpy(dst,&b->v,b->vertex_cnt*sizeof(CD3I32)); dst+=b->vertex_cnt*sizeof(CD3I32); MemCpy(dst,&b->t,b->tri_cnt*sizeof(CMeshTri)); dst+=b->tri_cnt*sizeof(CMeshTri); - *dst(U8 *)++ =SPT_END; + *dst++ =SPT_END; return result; } diff --git a/Apps/GrModels/Load.CPP b/Apps/GrModels/Load.CPP index bf5a12a..1b41af7 100644 --- a/Apps/GrModels/Load.CPP +++ b/Apps/GrModels/Load.CPP @@ -1,7 +1,8 @@ #help_index "Misc" -#include "/Apps/GrModels/ManGen" -#include "/Apps/GrModels/BallGen" -#include "/Apps/GrModels/Models" +Cd(__DIR__);; +#include "ManGen" +#include "BallGen" +#include "Models" #help_index "" diff --git a/Apps/GrModels/ManGen.CPP b/Apps/GrModels/ManGen.CPP index 9f6905b..06fc7d5 100644 --- a/Apps/GrModels/ManGen.CPP +++ b/Apps/GrModels/ManGen.CPP @@ -7,7 +7,7 @@ class Man { I32 vertex_cnt; I32 tri_cnt; - CD3I32 v[MAX_VERTICES]; + CD3I32 v[MAX_VERTICES]; CMeshTri t[MAX_TRIS]; } *m; @@ -182,17 +182,17 @@ U0 AddBox(ManDefineStruct *md,I64 c,I64 x1,I64 y1,I64 z1,F64 w,F64 h,F64 d,F64 h U8 *Man2CSprite() { //See $LK,"::/Adam/Gr/GrSpritePlot.CPP",A="FL:::/Adam/Gr/GrSpritePlot.CPP,1"$ for how CSprite are stored. - U8 *result=MAlloc(sizeof(U8)+2*sizeof(I32)+ + U8 *result=MAlloc(sizeof(CSpriteMeshU8s)+ m->vertex_cnt*sizeof(CD3I32)+m->tri_cnt*sizeof(CMeshTri)+sprite_elem_base_sizes[SPT_END]), *dst=result; - *dst(U8 *)++ =SPT_MESH; + *dst++ =SPT_MESH; *dst(I32 *)++ =m->vertex_cnt; *dst(I32 *)++ =m->tri_cnt; MemCpy(dst,&m->v,m->vertex_cnt*sizeof(CD3I32)); dst+=m->vertex_cnt*sizeof(CD3I32); MemCpy(dst,&m->t,m->tri_cnt*sizeof(CMeshTri)); dst+=m->tri_cnt*sizeof(CMeshTri); - *dst(U8 *)++ =SPT_END; + *dst++ =SPT_END; return result; } diff --git a/Apps/GrModels/Run.CPP b/Apps/GrModels/Run.CPP index 0fabfdc..e68ac14 100644 --- a/Apps/GrModels/Run.CPP +++ b/Apps/GrModels/Run.CPP @@ -1,2 +1,3 @@ -#include "/Apps/GrModels/Load" +Cd(__DIR__);; +#include "Load" Models; \ No newline at end of file diff --git a/Apps/KeepAway/KeepAway.CPP b/Apps/KeepAway/KeepAway.CPP index 2f2db77..159459e 100644 --- a/Apps/KeepAway/KeepAway.CPP +++ b/Apps/KeepAway/KeepAway.CPP @@ -618,7 +618,7 @@ U0 KeepAway() Preempt(OFF); Fs->win_inhibit|=WIG_DBL_CLICK; - WordStat; + AutoComplete; MenuPush( "File {" diff --git a/Apps/KeepAway/Load.CPP b/Apps/KeepAway/Load.CPP index ccd0069..90900f7 100644 --- a/Apps/KeepAway/Load.CPP +++ b/Apps/KeepAway/Load.CPP @@ -1,5 +1,6 @@ #help_index "Games" -#include "/Apps/KeepAway/KeepAway" +Cd(__DIR__);; +#include "KeepAway" #help_index "" diff --git a/Apps/KeepAway/Run.CPP b/Apps/KeepAway/Run.CPP index 855984a..522cc54 100644 --- a/Apps/KeepAway/Run.CPP +++ b/Apps/KeepAway/Run.CPP @@ -1,2 +1,3 @@ -#include "/Apps/KeepAway/Load" +Cd(__DIR__);; +#include "Load" KeepAway; \ No newline at end of file diff --git a/Apps/Logic/Load.CPP b/Apps/Logic/Load.CPP index b65c0cd..5deff4b 100644 --- a/Apps/Logic/Load.CPP +++ b/Apps/Logic/Load.CPP @@ -1,5 +1,6 @@ #help_index "Misc" -#include "/Apps/Logic/Logic" +Cd(__DIR__);; +#include "Logic" #help_index "" diff --git a/Apps/Logic/Logic.CPP b/Apps/Logic/Logic.CPP index dde6c41..7da1ce2 100644 --- a/Apps/Logic/Logic.CPP +++ b/Apps/Logic/Logic.CPP @@ -568,7 +568,7 @@ U0 DigitalLogic() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; - WordStat; + AutoComplete; WinBorder(ON); DocClear; GetGates; @@ -588,5 +588,5 @@ U0 DigitalLogic() SettingsPop; CleanUp; } -º%Üÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿº%Üÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿº%Üÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ%Üÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ%Üÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ%Üÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&ÜÿÿÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ%Üÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ª%Üÿÿÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -Ò%Üÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +ºÜÿÿÿøÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÜÿÿÿøÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÜÿÿÿøÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÜÿÿÿ÷ÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÜÿÿÿ÷ÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÜÿÿÿ÷ÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÜÿÿÿõÿÿÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÜÿÿÿôÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ªÜÿÿÿõÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÒÜÿÿÿôÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Apps/Logic/Run.CPP b/Apps/Logic/Run.CPP index 64b0eab..c0c50ff 100644 --- a/Apps/Logic/Run.CPP +++ b/Apps/Logic/Run.CPP @@ -1,2 +1,3 @@ -#include "/Apps/Logic/Load" +Cd(__DIR__);; +#include "Load" DigitalLogic; \ No newline at end of file diff --git a/Apps/Psalmody/Examples/abiding.CPP b/Apps/Psalmody/Examples/abiding.CPP deleted file mode 100644 index 06a8734..0000000 --- a/Apps/Psalmody/Examples/abiding.CPP +++ /dev/null @@ -1,72 +0,0 @@ -//9 has graphics -#define X 330 -#define Y 15 - -#define NUM_BEAMS 256 - -F64 beams_r[NUM_BEAMS],beams_é[NUM_BEAMS]; - -U0 DrawIt(CTask *,CDC *dc) -{ - I64 i; - F64 r,x1,y1,x2,y2; - dc->color=YELLOW; - GrCircle(dc,X,Y,10); - GrFloodFill(dc,X,Y,10); - dc->color=BROWN; - GrCircle(dc,X,Y,10); - dc->color=YELLOW; - for (i=0;itext_attr=LTCYAN<<4+BLACK; - Fs->draw_it=&DrawIt; - Fs->task_end_cb=&SndTaskEndCB; - MusicSettingsRst; - music.tempo= 2.480; - music.stacatto_factor= 0.902; - for (i=0;iwin_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); - "$$BG+H,LTCYAN$$$$FD+H,BLACK$$"; - while (!ScanKey) { - "$$WHITE$$To God...\n$$FG$$"; - Play("3etCFEsDDDDD2G3D2G3qC2eG3EqEetAAF2qG", - "I \0am \0a\0biding \0 \0 \0 \0in \0 \0Your \0 \0presence.\n\0 \0 \0 \0 \0 \0 \0 \0"); - Play("3etCFEsDDDDD2G3D2G3qC2eG3EqEetAAF2qG", - "I \0am \0a\0biding \0 \0 \0 \0in \0 \0Your \0 \0presence.\n\0 \0 \0 \0 \0 \0 \0 \0"); - Play("3DBsFGFG2eG3FRDqEGeBE", - "What \0a \0joy!\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("qDBsFGFG2eG3FRDqEGeBE", - "I'm \0so \0coy!\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - } - } catch - PutExcept; - SettingsPop; -} - -Song; diff --git a/Apps/Psalmody/Examples/abyss.CPP b/Apps/Psalmody/Examples/abyss.CPP index 9b5d813..c406980 100644 --- a/Apps/Psalmody/Examples/abyss.CPP +++ b/Apps/Psalmody/Examples/abyss.CPP @@ -17,8 +17,8 @@ U0 Song() "barrier. ($LK,"Deuteronomy,4:22",A="BF:Deuteronomy,4:22"$)\n" ); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("3sBBBBqCq.BeAqBh.A", "Can't \0 \0 \0 \0get \0there, \0from \0he\0re.\n\0"); diff --git a/Apps/Psalmody/Examples/almighty.CPP b/Apps/Psalmody/Examples/almighty.CPP index 132e088..ce831ee 100644 --- a/Apps/Psalmody/Examples/almighty.CPP +++ b/Apps/Psalmody/Examples/almighty.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { while (!ScanKey) { diff --git a/Apps/Psalmody/Examples/appreciate.CPP b/Apps/Psalmody/Examples/appreciate.CPP index afddee7..6f60104 100644 --- a/Apps/Psalmody/Examples/appreciate.CPP +++ b/Apps/Psalmody/Examples/appreciate.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { while (!ScanKey) { diff --git a/Apps/Psalmody/Examples/awake.CPP b/Apps/Psalmody/Examples/awake.CPP index f07bed5..812aa80 100644 --- a/Apps/Psalmody/Examples/awake.CPP +++ b/Apps/Psalmody/Examples/awake.CPP @@ -49,8 +49,8 @@ U0 Song() try { task=PopUpViewPrint("$LK,"Mark,14:37",A="BF:Mark,14:37"$\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { "$$GREEN$$Jesus talking...$$FG$$\n"; Play("3eBCqB2sG3D2G3DetCGFsCBCBetCGBeBGsBCBC", diff --git a/Apps/Psalmody/Examples/bedewed.CPP b/Apps/Psalmody/Examples/bedewed.CPP index 23c854b..45db7c7 100644 Binary files a/Apps/Psalmody/Examples/bedewed.CPP and b/Apps/Psalmody/Examples/bedewed.CPP differ diff --git a/Apps/Psalmody/Examples/blinded.CPP b/Apps/Psalmody/Examples/blinded.CPP index d59c688..92dfac8 100644 --- a/Apps/Psalmody/Examples/blinded.CPP +++ b/Apps/Psalmody/Examples/blinded.CPP @@ -16,6 +16,7 @@ U0 Song() CTask *task; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; DocCursor; DocClear; @@ -23,8 +24,8 @@ U0 Song() try { task=PopUpViewPrint("$LK,"BF:Acts,9:3"$\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { t0=Beat; Play("3qEeACA2G3qCEC2G3E", diff --git a/Apps/Psalmody/Examples/depending.CPP b/Apps/Psalmody/Examples/depending.CPP index dfd2c8a..4e74f01 100644 --- a/Apps/Psalmody/Examples/depending.CPP +++ b/Apps/Psalmody/Examples/depending.CPP @@ -3,12 +3,13 @@ U0 Song() { CTask *task; Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { task=PopUpViewPrint("$LK,"BF:Luke,12:16"$\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("3etGREqDDBRGCB", "It \0 \0de\0pends \0 \0on \0 \0the \0wea\0ther.\n\0"); diff --git a/Apps/Psalmody/Examples/determination.CPP b/Apps/Psalmody/Examples/determination.CPP index e1c4573..79e1284 100644 --- a/Apps/Psalmody/Examples/determination.CPP +++ b/Apps/Psalmody/Examples/determination.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { while (!ScanKey) { diff --git a/Apps/Psalmody/Examples/dialogue.CPP b/Apps/Psalmody/Examples/dialogue.CPP index ba66122..40c96a4 100644 Binary files a/Apps/Psalmody/Examples/dialogue.CPP and b/Apps/Psalmody/Examples/dialogue.CPP differ diff --git a/Apps/Psalmody/Examples/downfall.CPP b/Apps/Psalmody/Examples/downfall.CPP index 1f8794b..f7389a8 100644 --- a/Apps/Psalmody/Examples/downfall.CPP +++ b/Apps/Psalmody/Examples/downfall.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; while (TRUE) { Play("et2G32G3Gq2G3qCq2G3sFAFAq2G3etGDAqA", diff --git a/Apps/Psalmody/Examples/efforts.CPP b/Apps/Psalmody/Examples/efforts.CPP index 2fd099f..e333e43 100644 --- a/Apps/Psalmody/Examples/efforts.CPP +++ b/Apps/Psalmody/Examples/efforts.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { while (!ScanKey) { diff --git a/Apps/Psalmody/Examples/elijah.CPP b/Apps/Psalmody/Examples/elijah.CPP index f4c73b5..2f75df0 100644 Binary files a/Apps/Psalmody/Examples/elijah.CPP and b/Apps/Psalmody/Examples/elijah.CPP differ diff --git a/Apps/Psalmody/Examples/epicurus.CPP b/Apps/Psalmody/Examples/epicurus.CPP index 68ea96c..84c90af 100644 --- a/Apps/Psalmody/Examples/epicurus.CPP +++ b/Apps/Psalmody/Examples/epicurus.CPP @@ -19,8 +19,8 @@ U0 Song() "$LK,"John,16:24",A="BF:John,16:24"$\n" ); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); DocRecalc(DocPut(task)); //Reformat word-wrap with new window size. while (!ScanKey) { Play("3qBeCDqCAetAACeECsF2G3F2GqG", diff --git a/Apps/Psalmody/Examples/exalt.CPP b/Apps/Psalmody/Examples/exalt.CPP index d6d96bc..9ce9d58 100644 --- a/Apps/Psalmody/Examples/exalt.CPP +++ b/Apps/Psalmody/Examples/exalt.CPP @@ -16,6 +16,7 @@ U0 Song() Fs->draw_it=&DrawIt; Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { while (!ScanKey) { diff --git a/Apps/Psalmody/Examples/expedition.CPP b/Apps/Psalmody/Examples/expedition.CPP index df5bf9d..3e507eb 100644 Binary files a/Apps/Psalmody/Examples/expedition.CPP and b/Apps/Psalmody/Examples/expedition.CPP differ diff --git a/Apps/Psalmody/Examples/fairness.CPP b/Apps/Psalmody/Examples/fairness.CPP index 2b467a9..2f765c5 100644 --- a/Apps/Psalmody/Examples/fairness.CPP +++ b/Apps/Psalmody/Examples/fairness.CPP @@ -3,6 +3,7 @@ U0 Song() { CTask *task; Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { task=PopUpViewPrint( @@ -12,8 +13,8 @@ U0 Song() "$LK,"BF:Luke,15:21"$\n" ); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); "$$WW+H,1$$"; while (!ScanKey) { Play("3qGGsEAEAqAsF2G3F2G3qCeEFqD", diff --git a/Apps/Psalmody/Examples/finger.CPP b/Apps/Psalmody/Examples/finger.CPP index d130d39..a35e2ac 100644 Binary files a/Apps/Psalmody/Examples/finger.CPP and b/Apps/Psalmody/Examples/finger.CPP differ diff --git a/Apps/Psalmody/Examples/first.CPP b/Apps/Psalmody/Examples/first.CPP index a5122a7..ce545c5 100644 Binary files a/Apps/Psalmody/Examples/first.CPP and b/Apps/Psalmody/Examples/first.CPP differ diff --git a/Apps/Psalmody/Examples/fishermen.CPP b/Apps/Psalmody/Examples/fishermen.CPP index f237407..7f4a173 100644 Binary files a/Apps/Psalmody/Examples/fishermen.CPP and b/Apps/Psalmody/Examples/fishermen.CPP differ diff --git a/Apps/Psalmody/Examples/forasmuch.CPP b/Apps/Psalmody/Examples/forasmuch.CPP index 3d32112..82dda0a 100644 Binary files a/Apps/Psalmody/Examples/forasmuch.CPP and b/Apps/Psalmody/Examples/forasmuch.CPP differ diff --git a/Apps/Psalmody/Examples/free.CPP b/Apps/Psalmody/Examples/free.CPP index 583125a..3233b66 100644 --- a/Apps/Psalmody/Examples/free.CPP +++ b/Apps/Psalmody/Examples/free.CPP @@ -144,8 +144,8 @@ U0 Song() try { task=PopUpViewPrint("$LK,"Romans,8:28",A="BF:Romans,8:28"$\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("3qEEBeBDsBBBBqDsBFBFD2G3D2G", "Free \0will... \0 \0 \0 \0 \0 \0 \0 \0 \0I \0 \0 \0 \0fail.\n\0 \0 \0 \0"); diff --git a/Apps/Psalmody/Examples/furnishing.CPP b/Apps/Psalmody/Examples/furnishing.CPP index a387880..e06bb4b 100644 Binary files a/Apps/Psalmody/Examples/furnishing.CPP and b/Apps/Psalmody/Examples/furnishing.CPP differ diff --git a/Apps/Psalmody/Examples/good.CPP b/Apps/Psalmody/Examples/good.CPP index 95472af..f80a076 100644 Binary files a/Apps/Psalmody/Examples/good.CPP and b/Apps/Psalmody/Examples/good.CPP differ diff --git a/Apps/Psalmody/Examples/gutenberg.CPP b/Apps/Psalmody/Examples/gutenberg.CPP index 6fe56f9..cd9dd51 100644 Binary files a/Apps/Psalmody/Examples/gutenberg.CPP and b/Apps/Psalmody/Examples/gutenberg.CPP differ diff --git a/Apps/Psalmody/Examples/happy.CPP b/Apps/Psalmody/Examples/happy.CPP index 467cca1..1390fff 100644 Binary files a/Apps/Psalmody/Examples/happy.CPP and b/Apps/Psalmody/Examples/happy.CPP differ diff --git a/Apps/Psalmody/Examples/hope.CPP b/Apps/Psalmody/Examples/hope.CPP index 537049c..6b0d214 100644 Binary files a/Apps/Psalmody/Examples/hope.CPP and b/Apps/Psalmody/Examples/hope.CPP differ diff --git a/Apps/Psalmody/Examples/image.CPP b/Apps/Psalmody/Examples/image.CPP index 182ae3e..12ec034 100644 --- a/Apps/Psalmody/Examples/image.CPP +++ b/Apps/Psalmody/Examples/image.CPP @@ -3,6 +3,7 @@ U0 Song() { CTask *task; Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { task=PopUpViewPrint( @@ -12,8 +13,8 @@ U0 Song() "$LK,"BF:Luke,11:5"$\n" ); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("3qBBE2GG3FFC", "We \0are \0in \0the \0image \0of \0God.\n\0 \0"); diff --git a/Apps/Psalmody/Examples/josh.CPP b/Apps/Psalmody/Examples/josh.CPP index b4f86e7..73f6690 100644 Binary files a/Apps/Psalmody/Examples/josh.CPP and b/Apps/Psalmody/Examples/josh.CPP differ diff --git a/Apps/Psalmody/Examples/keeping.CPP b/Apps/Psalmody/Examples/keeping.CPP index 9c8767a..2a76371 100644 Binary files a/Apps/Psalmody/Examples/keeping.CPP and b/Apps/Psalmody/Examples/keeping.CPP differ diff --git a/Apps/Psalmody/Examples/kept.CPP b/Apps/Psalmody/Examples/kept.CPP index 064b134..8a18630 100644 --- a/Apps/Psalmody/Examples/kept.CPP +++ b/Apps/Psalmody/Examples/kept.CPP @@ -3,11 +3,12 @@ U0 Song() { CTask *task; Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; try { task=PopUpViewPrint("$LK,"BF:Matthew,19:16"$\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); "$$WW+H,1$$"; while (!ScanKey) { Play("3eGAetCCCFFDqAeAAFAAFqG", diff --git a/Apps/Psalmody/Examples/killed.CPP b/Apps/Psalmody/Examples/killed.CPP index 236afb8..6d93cd4 100644 --- a/Apps/Psalmody/Examples/killed.CPP +++ b/Apps/Psalmody/Examples/killed.CPP @@ -13,7 +13,7 @@ U0 Song() Play("qBsEGeBDe.AsCeA2qF3sBBeACBBsBB", "I'm \0not \0 \0 \0spry.\n\0 \0 \0 \0 \0 \0 \0 \0I \0best \0chill.\n\0 \0 \0"); Play("eDDsGFGFeEBqGM5/4", - "If \0 \0God \0 \0 \0 \0 \0 \0ask,\n\0"); + "If \0 \0God \0 \0 \0 \0 \0 \0asked,\n\0"); Play("eBGF4A3e.FsEqAAM4/4", " \0\"$$RED$$Can \0 \0 \0you \0 \0Kill?$$FG$$\"\n\0 \0"); Play("eDDsGFGFeEBqGM5/4", diff --git a/Apps/Psalmody/Examples/mightest.CPP b/Apps/Psalmody/Examples/mightest.CPP index 57c8083..ab8f9b7 100644 --- a/Apps/Psalmody/Examples/mightest.CPP +++ b/Apps/Psalmody/Examples/mightest.CPP @@ -28,6 +28,7 @@ U0 DrawIt(CTask *task,CDC *dc) U0 Song() { SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + MusicSettingsRst; Fs->draw_it=&DrawIt; Fs->task_end_cb=&SndTaskEndCB; diff --git a/Apps/Psalmody/Examples/mildly.CPP b/Apps/Psalmody/Examples/mildly.CPP index 114ce31..d6aab0d 100644 Binary files a/Apps/Psalmody/Examples/mildly.CPP and b/Apps/Psalmody/Examples/mildly.CPP differ diff --git a/Apps/Psalmody/Examples/nay.CPP b/Apps/Psalmody/Examples/nay.CPP index dcf9655..81b5692 100644 --- a/Apps/Psalmody/Examples/nay.CPP +++ b/Apps/Psalmody/Examples/nay.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { "$$WW+H,1$$"; diff --git a/Apps/Psalmody/Examples/night.CPP b/Apps/Psalmody/Examples/night.CPP index a3c0f59..ac0bf3b 100644 Binary files a/Apps/Psalmody/Examples/night.CPP and b/Apps/Psalmody/Examples/night.CPP differ diff --git a/Apps/Psalmody/Examples/partake.CPP b/Apps/Psalmody/Examples/partake.CPP index 86340d7..7d43b8b 100644 Binary files a/Apps/Psalmody/Examples/partake.CPP and b/Apps/Psalmody/Examples/partake.CPP differ diff --git a/Apps/Psalmody/Examples/permitted.CPP b/Apps/Psalmody/Examples/permitted.CPP index 5793e4f..794e135 100644 --- a/Apps/Psalmody/Examples/permitted.CPP +++ b/Apps/Psalmody/Examples/permitted.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { while (!ScanKey) { diff --git a/Apps/Psalmody/Examples/personal.CPP b/Apps/Psalmody/Examples/personal.CPP index 66dd810..7c97475 100644 --- a/Apps/Psalmody/Examples/personal.CPP +++ b/Apps/Psalmody/Examples/personal.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { while (!ScanKey) { diff --git a/Apps/Psalmody/Examples/proponent.CPP b/Apps/Psalmody/Examples/proponent.CPP index 7e434ff..2da7a88 100644 --- a/Apps/Psalmody/Examples/proponent.CPP +++ b/Apps/Psalmody/Examples/proponent.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; while (TRUE) { Play("qCqAqAsEDEDqBqBetGGEs2G3C2G3C"); diff --git a/Apps/Psalmody/Examples/prosper.CPP b/Apps/Psalmody/Examples/prosper.CPP index 9833125..7e4d17c 100644 Binary files a/Apps/Psalmody/Examples/prosper.CPP and b/Apps/Psalmody/Examples/prosper.CPP differ diff --git a/Apps/Psalmody/Examples/purpose.CPP b/Apps/Psalmody/Examples/purpose.CPP index fbe20ec..c7a1c56 100644 Binary files a/Apps/Psalmody/Examples/purpose.CPP and b/Apps/Psalmody/Examples/purpose.CPP differ diff --git a/Apps/Psalmody/Examples/reasoning.CPP b/Apps/Psalmody/Examples/reasoning.CPP index ea45560..7be0042 100644 --- a/Apps/Psalmody/Examples/reasoning.CPP +++ b/Apps/Psalmody/Examples/reasoning.CPP @@ -2,6 +2,7 @@ U0 Song() { Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { while (!ScanKey) { diff --git a/Apps/Psalmody/Examples/reliance.CPP b/Apps/Psalmody/Examples/reliance.CPP index b217f4d..16abaec 100644 --- a/Apps/Psalmody/Examples/reliance.CPP +++ b/Apps/Psalmody/Examples/reliance.CPP @@ -3,6 +3,7 @@ U0 Song() { CTask *task; Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { task=PopUpViewPrint( @@ -16,8 +17,8 @@ U0 Song() "am I worth?\n" ); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); DocRecalc(DocPut(task)); //Reformat word-wrap with new window size. while (!ScanKey) { Play("3qGsB2G3B2G3eF2G3sGGGGeRFC2G3qFC", diff --git a/Apps/Psalmody/Examples/restless.CPP b/Apps/Psalmody/Examples/restless.CPP index f3abb24..8940786 100644 --- a/Apps/Psalmody/Examples/restless.CPP +++ b/Apps/Psalmody/Examples/restless.CPP @@ -9,8 +9,8 @@ U0 Song() try { task=PopUpViewPrint("$LK,"Ecclesiastes,5:12",A="BF:Ecclesiastes,5:12"$\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("3sDDDACCADDACCAe.DsCCC2G3FD2G3FD2G3CCAe.D", "I \0 \0 \0 \0got \0 \0 \0paid, \0 \0 \0to\0 \0 \0day.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); diff --git a/Apps/Psalmody/Examples/rifled.CPP b/Apps/Psalmody/Examples/rifled.CPP deleted file mode 100644 index b85e977..0000000 Binary files a/Apps/Psalmody/Examples/rifled.CPP and /dev/null differ diff --git a/Apps/Psalmody/Examples/satisfaction.CPP b/Apps/Psalmody/Examples/satisfaction.CPP index 7d29058..af7a9fd 100644 Binary files a/Apps/Psalmody/Examples/satisfaction.CPP and b/Apps/Psalmody/Examples/satisfaction.CPP differ diff --git a/Apps/Psalmody/Examples/savour.CPP b/Apps/Psalmody/Examples/savour.CPP new file mode 100644 index 0000000..6e5873e --- /dev/null +++ b/Apps/Psalmody/Examples/savour.CPP @@ -0,0 +1,30 @@ +//7 has words +U0 Song() +{ + Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; + music.tempo= 2.480; + music.stacatto_factor= 0.902; + try { + while (!ScanKey) { + Play("3qFCeEAEAqDeCEqBA", + "This \0 \0 \0 \0 \0 \0sand\0wich \0is \0bland.\n\0 \0"); + Play("eCCqDeDDqEeAECECEqA", + "God \0 \0damn, \0my \0 \0tastes \0 \0 \0 \0sure \0 \0are \0grand.\n\0"); + Play("M6/8"); + Play("FEB2G3sAGeCqE", + "Ho \0hum. \0 \0 \0 \0How \0 \0rude!\n\0"); + Play("FEB2G3sAGeCqE", + "That \0bum \0 \0 \0 \0likes \0his \0food.\n\0"); + Play("2G3sAGeDqGFEB", + " \0 \0Likes \0his \0food!\n\0 \0 \0 \0"); + Play("2G3sAAeEqD2G3sDBDB2eGG"); + Play("3AsEDqAeAsBGEBEB2qG3sDBDB"); + Play("2eGG3AsEDqAeAsBGEBEB"); + } + } catch + PutExcept; + Snd(0); +} + +Song; diff --git a/Apps/Psalmody/Examples/scriptures.CPP b/Apps/Psalmody/Examples/scriptures.CPP index f21d9f3..9408e76 100644 Binary files a/Apps/Psalmody/Examples/scriptures.CPP and b/Apps/Psalmody/Examples/scriptures.CPP differ diff --git a/Apps/Psalmody/Examples/service.CPP b/Apps/Psalmody/Examples/service.CPP index 3c8fc88..f6d6d82 100644 --- a/Apps/Psalmody/Examples/service.CPP +++ b/Apps/Psalmody/Examples/service.CPP @@ -13,8 +13,8 @@ U0 Song() "$LK,"John,13:14",A="BF:John,13:14"$\n" ); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { "$$GREEN$$Jesus talking...\n$$FG$$"; Play("M6/8"); diff --git a/Apps/Psalmody/Examples/shield.CPP b/Apps/Psalmody/Examples/shield.CPP index 2ba35f2..82cd4e1 100644 Binary files a/Apps/Psalmody/Examples/shield.CPP and b/Apps/Psalmody/Examples/shield.CPP differ diff --git a/Apps/Psalmody/Examples/signifies.CPP b/Apps/Psalmody/Examples/signifies.CPP index e995db8..0119c55 100644 --- a/Apps/Psalmody/Examples/signifies.CPP +++ b/Apps/Psalmody/Examples/signifies.CPP @@ -9,8 +9,8 @@ U0 Song() try { task=PopUpViewPrint("$LK,"Luke,12:12",A="BF:Luke,12:12"$\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("3hDeDA2qG3hDeD2GqF", "It \0sig\0ni\0fies\n\0a \0big \0sur\0prise.\n\0"); diff --git a/Apps/Psalmody/Examples/small.CPP b/Apps/Psalmody/Examples/small.CPP index 859aeef..034a2f5 100644 Binary files a/Apps/Psalmody/Examples/small.CPP and b/Apps/Psalmody/Examples/small.CPP differ diff --git a/Apps/Psalmody/Examples/struggles.CPP b/Apps/Psalmody/Examples/struggles.CPP index e8c075e..2c6b49c 100644 Binary files a/Apps/Psalmody/Examples/struggles.CPP and b/Apps/Psalmody/Examples/struggles.CPP differ diff --git a/Apps/Psalmody/Examples/sustain.CPP b/Apps/Psalmody/Examples/sustain.CPP index 2f21863..2bd7d11 100644 Binary files a/Apps/Psalmody/Examples/sustain.CPP and b/Apps/Psalmody/Examples/sustain.CPP differ diff --git a/Apps/Psalmody/Examples/teachings.CPP b/Apps/Psalmody/Examples/teachings.CPP index 3150108..41a709d 100644 --- a/Apps/Psalmody/Examples/teachings.CPP +++ b/Apps/Psalmody/Examples/teachings.CPP @@ -9,8 +9,8 @@ U0 Song() try { task=PopUpViewPrint("$LK,"Proverbs,11:25",A="BF:Proverbs,11:25"$\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("2eG3CDAqEsACACGEGEqDsAAAAetCDD", "Ple\0ase \0te\0ach \0me.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); diff --git a/Apps/Psalmody/Examples/thereupon.CPP b/Apps/Psalmody/Examples/thereupon.CPP index 68e900a..e6f8007 100644 --- a/Apps/Psalmody/Examples/thereupon.CPP +++ b/Apps/Psalmody/Examples/thereupon.CPP @@ -50,8 +50,8 @@ U0 Song() "$LK,"Daniel,9:17",A="BF:Daniel,9:17"$\n" ); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); "$$BG+H,LTCYAN$$$$FG+H,BLACK$$"; while (!ScanKey) { Play("2qG3eCB2hGqG3eCB2qG3A", diff --git a/Apps/Psalmody/Examples/tookest.CPP b/Apps/Psalmody/Examples/tookest.CPP index 38a2e66..8c2078d 100644 --- a/Apps/Psalmody/Examples/tookest.CPP +++ b/Apps/Psalmody/Examples/tookest.CPP @@ -9,8 +9,8 @@ U0 Song() try { task=PopUpViewPrint("$LK,"Luke,17:36",A="BF:Luke,17:36"$\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("3qABeCq.AqCDeEq.A", "Pile \0of \0clo\0ths.\n\0Pile \0of \0clo\0ths.\n\0"); diff --git a/Apps/Psalmody/Examples/valued.CPP b/Apps/Psalmody/Examples/valued.CPP index 2d1dc52..8ea231c 100644 Binary files a/Apps/Psalmody/Examples/valued.CPP and b/Apps/Psalmody/Examples/valued.CPP differ diff --git a/Apps/Psalmody/Examples/vengeance.CPP b/Apps/Psalmody/Examples/vengeance.CPP index 1036fb7..48dba21 100644 Binary files a/Apps/Psalmody/Examples/vengeance.CPP and b/Apps/Psalmody/Examples/vengeance.CPP differ diff --git a/Apps/Psalmody/Examples/verses.CPP b/Apps/Psalmody/Examples/verses.CPP index 52c1278..a69889c 100644 --- a/Apps/Psalmody/Examples/verses.CPP +++ b/Apps/Psalmody/Examples/verses.CPP @@ -3,6 +3,7 @@ U0 Song() { CTask *task; Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { task=PopUpViewPrint( @@ -12,8 +13,8 @@ U0 Song() "want God to talk some more. The $LK+PU,"Holy Spirit",A="FI:::/Adam/God/HSNotes.TXT"$ can " "puppet you.\n"); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); "$$WW+H,1$$"; DocRecalc(DocPut(task)); //Reformat word-wrap with new window size. while (!ScanKey) { diff --git a/Apps/Psalmody/Examples/wisdom.CPP b/Apps/Psalmody/Examples/wisdom.CPP index fdb54c5..f215842 100644 Binary files a/Apps/Psalmody/Examples/wisdom.CPP and b/Apps/Psalmody/Examples/wisdom.CPP differ diff --git a/Apps/Psalmody/Examples/witherto.CPP b/Apps/Psalmody/Examples/witherto.CPP index f96a209..26f925b 100644 --- a/Apps/Psalmody/Examples/witherto.CPP +++ b/Apps/Psalmody/Examples/witherto.CPP @@ -3,6 +3,7 @@ U0 Song() { CTask *task; Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; music.tempo=2.5; try { task=PopUpViewPrint( @@ -11,8 +12,8 @@ U0 Song() "$LK,"Matthew,25:18",A="BF:Matthew,25:18"$\n" ); TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("2qG3sFEFEqDBEetCB2G3qFsBDBD", " \0Damn \0 \0 \0 \0 \0 \0fig \0 \0 \0 \0tree.\n\0 \0 \0 \0 \0"); diff --git a/Apps/Psalmody/Examples/zip.CPP b/Apps/Psalmody/Examples/zip.CPP index 71a19fa..1056a7f 100644 Binary files a/Apps/Psalmody/Examples/zip.CPP and b/Apps/Psalmody/Examples/zip.CPP differ diff --git a/Apps/Psalmody/Help.TXT b/Apps/Psalmody/Help.TXT index ff1818c..06e032d 100644 --- a/Apps/Psalmody/Help.TXT +++ b/Apps/Psalmody/Help.TXT @@ -10,15 +10,15 @@ $WW,1$$PURPLE$$TX+CX,"Psalmody Help"$$FG$ * You can take the $LK,"Play",A="MN:Play"$() statements out of a song file and place them in your programs. You can also add a song to a document with $GREEN$$FG$, but you should do it after pressing $GREEN$$FG$ because the clipboard-insert in $GREEN$$FG$ is screwy. See this $SO,"",A="2qG3ECB2eGG3qCeFDsBGBG2qG3ECB2eGG3qCeFDsBGBGqEeEFqEB2eG3FetCAGqFCEeEFqEB2eG3FetCAGqFC"$ after pressing $GREEN$$FG$, now. -* You can call $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$("HOME/Psalmody"); to play your songs. +* You can call $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$("::/Home/Psalmody"); to play your songs. -* To create a $GREEN$.SND$FG$ file which can be exported and played under Windows, set the $GREEN$Bool$FG$ $LK,"snd.record",A="MN:CSndGlbls"$ to $GREEN$TRUE$FG$, play music, and set it to $GREEN$FALSE$FG$. Then, call $LK,"SndFileCreate",A="MN:SndFileCreate"$(). You might wish to make a $GREEN$$FG$ to toggle this system level recording feat. See $LK,"Snd",A="MN:Snd"$(). Add this code to your $LK,"HOME/Adam3cKeyPlugIns.CPP"$ file. +* To create a $GREEN$.SND$FG$ file which can be exported and played under Windows, set the $GREEN$Bool$FG$ $LK,"snd.record",A="MN:CSndGlbls"$ to $GREEN$TRUE$FG$, play music, and set it to $GREEN$FALSE$FG$. Then, call $LK,"SndFileCreate",A="MN:SndFileCreate"$(). You might wish to make a $GREEN$$FG$ to toggle this system level recording feat. See $LK,"Snd",A="MN:Snd"$(). Add this code to your $LK,"::/Home/AdamKeyPlugIns.CPP"$ file. $PURPLE$U0 CtrlAltR(I64) { snd.record=!snd.record; } -SetCtrlAltLetCB('R',&CtrlAltR,"Toggle snd.record");$FG$ +CtrlAltLetCBSet('R',&CtrlAltR,"Toggle snd.record");$FG$ * When calling $LK,"SndFileCreate",A="MN:SndFileCreate"$() you can set a waveform. The PC speaker is $LK,"WF_SQUARE",A="MN:WF_SQUARE"$. You can select reverb and averaging, also. diff --git a/Apps/Psalmody/Install.CPP b/Apps/Psalmody/Install.CPP index 125c19b..0a42817 100644 --- a/Apps/Psalmody/Install.CPP +++ b/Apps/Psalmody/Install.CPP @@ -1,3 +1,2 @@ -if (!FileFind("HOME/Psalmody",,FUF_JUST_DIRS)) { - MkDir("HOME/Psalmody"); -} +if (!FileFind("::/Home/Psalmody",,FUF_JUST_DIRS)) + MkDir("::/Home/Psalmody"); diff --git a/Apps/Psalmody/JukeBox.CPP b/Apps/Psalmody/JukeBox.CPP index 6eb8a91..a2e36fd 100644 --- a/Apps/Psalmody/JukeBox.CPP +++ b/Apps/Psalmody/JukeBox.CPP @@ -1,12 +1,12 @@ CTask *SingleSong(U8 *msg,U8 *name) { Bool old_preempt=Preempt(OFF); - CTask *task=Spawn(&SrvUserCmdLine,NULL,name,,Fs); + CTask *task=Spawn(&SrvCmdLine,NULL,name,,Fs); StrCpy(task->task_title,name); task->title_src=TTS_LOCKED_CONST; TaskExe(task,Fs,";",1<win_left,task->win_left+50,task); - SetWinVert(2,2+8,task); + WinHorz(task->win_left,task->win_left+50,task); + WinVert(2,2+8,task); Preempt(old_preempt); TaskExe(task,NULL,msg,1<max_entries=100; @@ -27,7 +27,7 @@ Bool JBPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) tempde=doc_ce->left_exp; if (sc.u8[0]==SC_DELETE ) { Beep; - Silent(ON); + Silent; Del(tempde->full_name); Silent(OFF); } else if ('0'<=ch<='9') { @@ -62,7 +62,7 @@ public U0 JukeBox(U8 *dirname=NULL,U8 **_filename=NULL) if (_filename) *_filename=NULL; if (!dirname) - dirname=StrNew("HOME/Psalmody"); + dirname=StrNew("::/Home/Psalmody"); else dirname=StrNew(dirname); st=MStrPrint("%s/*.CPP.Z",dirname); diff --git a/Apps/Psalmody/JukePuppet.CPP b/Apps/Psalmody/JukePuppet.CPP index dbaf3f9..81de261 100644 --- a/Apps/Psalmody/JukePuppet.CPP +++ b/Apps/Psalmody/JukePuppet.CPP @@ -72,12 +72,12 @@ U0 JukeSongPuppet(CTask *juke_task,I64 passes,I64 song_num,U8 *name) Kill(task); } -public U0 JukeSongsPuppet(U8 *dir="HOME/Psalmody",I64 passes=2, +public U0 JukeSongsPuppet(U8 *dir="::/Home/Psalmody",I64 passes=2, I64 start_song=0,I64 end_song=MAX_I64) {//Help make music video by puppeting JukeBox task. I64 i; CDirEntry *tempde,*tempde1; - CTask *juke_task=SpawnUser("JukeBox(0x%X);\n",dir); + CTask *juke_task=User("JukeBox(0x%X);\n",dir); Cd(dir); tempde1=FilesFind("*",FUF_RECURSE|FUF_JUST_TXT|FUF_JUST_FILES); for (tempde=tempde1,i=0;tempde && i",BI=1$ - -$SP,"<2>",BI=2$ - -$SP,"<3>",BI=3$ - -$SP,"<4>",BI=4$ - -$SP,"<5>",BI=5$ - -$SP,"<6>",BI=6$ - - -$SP,"<7>",BI=7$ - - -$SP,"<8>",BI=8$ - - -$SP,"<9>",BI=9$ - - -$SP,"<10>",BI=10$ - - -$SP,"<11>",BI=11$ - - - - - - - -$SP,"<12>",BI=12$ - - - - -$SP,"<13>",BI=13$ - -$SP,"<14>",BI=14$ - -$SP,"<15>",BI=15$ - - -$SP,"<16>",BI=16$ -$ID,-8$ -#define PSM_NOTE_SPACING 9 -#define PSM_NUM_DURATIONS 12 - -F64 psm_durations[PSM_NUM_DURATIONS+1]={ -2*.25/3,.25,2*.5/3,.5,2.0/3.0,0.5*1.5,1.0,1.5,2.0,3.0,4.0,6.0,1000000.0}; -U8 *psm_duration_lst="st\0s\0et\0e\0qt\0e.\0q\0q.\0h\0h.\0w\0w.\0"; -CSprite *psm_duration_imgs[PSM_NUM_DURATIONS]={$IB,"<1>",BI=1$,$IB,"<1>",BI=1$,$IB,"<2>",BI=2$, - $IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<3>",BI=3$, - $IB,"<4>",BI=4$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<5>",BI=5$}; -Bool psm_triplet_durations[PSM_NUM_DURATIONS]={TRUE,FALSE,TRUE, - FALSE,TRUE,FALSE,FALSE,FALSE, - FALSE,FALSE,FALSE,FALSE}; - -Bool PsmHasWords(U8 *st) -{ - if (st && *st && (StrLen(st)>1 || *st!=CH_SPACE && *st!=CH_SHIFT_SPACE)) - return TRUE; - else - return FALSE; -} - -Bool PsmIsDotted(I64 duration) -{ - U8 *st=LstSub(duration,psm_duration_lst); - if (st[1]=='.') - return TRUE; - else - return FALSE; -} - -U0 PsmSetWidth(PsmNote *tempo) -{ - if (tempo->type==OT_METER) - tempo->width=12; - else { - tempo->width=PSM_NOTE_SPACING; - if (PsmIsDotted(tempo->duration)) - tempo->width+=PSM_NOTE_SPACING/2; - if (Bt(&tempo->flags,Of_SHARP) || Bt(&tempo->flags,Of_FLAT)) - tempo->width+=PSM_NOTE_SPACING; - } -} - -U0 PsmRecalcNoteXY() -{ - F64 measure_len=4,measure_left=measure_len; - PsmNote *tempo=oc.root.next; - I64 x=8-oc.screen_x,note,octave; - while (TRUE) { - tempo->x=x; - tempo->y=50; - if (tempo==&oc.root) - break; - else { - if (tempo->type!=OT_METER) { - octave=tempo->octave; - if (octave!=OCTAVE_REST) { - note=tempo->note; - if (Bt(&tempo->flags,Of_SHARP)) - note--; - if (Bt(&tempo->flags,Of_FLAT)) - note++; - if (note<0) { - note=11; - octave--; - } else if (note>11) { - note=0; - octave++; - } - note=music.note_map[*LstSub(note,psm_note_lst)-'A']; - tempo->y=(15+(psm_note_map[note]-7*(octave-2)))*4; - } - } - x+=tempo->width; - if (tempo->type==OT_METER) { - measure_len=tempo->meter_top*4.0/tempo->meter_bottom; - measure_left=0; - } else - measure_left-=psm_durations[tempo->duration]; - if (measure_left<0.001) { - x+=PSM_NOTE_SPACING; - measure_left=measure_len; - } - } - tempo=tempo->next; - } -} - -U0 PsmMarkSelected(I64 x1,I64 x2,Bool sel) -{ - PsmNote *tempo=oc.root.next; - while (tempo!=&oc.root) { - if (sel) { - if (x1<=tempo->x<=x2) - tempo->flags|=OF_SELECTED; - } else - tempo->flags&=~OF_SELECTED; - tempo=tempo->next; - } -} - -PsmNote *PsmNoteCopy(PsmNote *tempo) -{ - PsmNote *tempo1=MAllocIdentical(tempo); - if (tempo->word) - tempo1->word=StrNew(tempo->word); - else - tempo1->word=NULL; - return tempo1; -} - -U0 PsmNoteDel(PsmNote *tempo) -{ - Free(tempo->word); - Free(tempo); -} - -U0 PsmSongDel(PsmNote *root) -{ - PsmNote *tempo,*tempo1; - tempo=root->next; - while (tempo!=root) { - tempo1=tempo->next; - PsmNoteDel(tempo); - tempo=tempo1; - } - root->next=root->last=root; -} - -U0 PsmCutToClipboard() -{ - PsmNote *tempo,*tempo1; - PsmSongDel(&oc.clipboard); - tempo=oc.root.next; - while (tempo!=&oc.root) { - tempo1=tempo->next; - if (tempo->flags&OF_SELECTED) { - if (oc.cur_note==tempo) - oc.cur_note=tempo->next; - QueRem(tempo); - tempo->flags&=~OF_SELECTED; - QueIns(tempo,oc.clipboard.last); - } - tempo=tempo1; - } -} - -U0 PsmPasteClipboard() -{ - PsmNote *tempo,*tempo1; - tempo=oc.clipboard.next; - while (tempo!=&oc.clipboard) { - tempo1=PsmNoteCopy(tempo); - QueIns(tempo1,oc.cur_note->last); - tempo=tempo->next; - } -} - -U0 PsmCopyToClipboard() -{ - PsmNote *tempo,*tempo1; - PsmSongDel(&oc.clipboard); - tempo=oc.root.next; - while (tempo!=&oc.root) { - if (tempo->flags&OF_SELECTED) { - tempo->flags&=~OF_SELECTED; - tempo1=PsmNoteCopy(tempo); - QueIns(tempo1,oc.clipboard.last); - } - tempo=tempo->next; - } -} - -PsmNote *PsmFindNote(I64 x,I64) -{ - PsmNote *tempo=oc.root.next; - PsmRecalcNoteXY; - x+=PSM_NOTE_SPACING/2; - while (x>tempo->next->x && tempo!=&oc.root) - tempo=tempo->next; - return tempo; -} - -Bool PsmBlink() -{ - if (Blink || oc.playing) - return TRUE; - else - return FALSE; -} - -U0 DrawNote(CDC *dc,I64 x,I64 y,I64 duration) -{ - if (0<=duration<=PSM_NUM_DURATIONS) { - Sprite3(dc,x,y,0,psm_duration_imgs[duration]); - if (psm_triplet_durations[duration]) - Sprite3(dc,x,y,0,$IB,"<16>",BI=16$); - if (PsmIsDotted(duration)) - Sprite3(dc,x,y,0,$IB,"<15>",BI=15$); - } -} - -U0 DrawTimeSignature(CDC *dc,I64 x,I64 y,I64 top,I64 bottom) -{ - GrPrint(dc,x,y,"%d",top); - GrPrint(dc,x,y+FONT_HEIGHT,"%d",bottom); -} - -U0 DrawIt(CTask *task,CDC *dc) -{ - PsmNote *tempo; - I64 i,x,y, - w=task->pix_width; - F64 measure_len=4,measure_left=measure_len; - Bool old_preempt=Preempt(OFF); - - dc->color=BLACK; - for (i=1;i<6;i++) - GrLine(dc,0,i*8,w,i*8); - for (i=7;i<12;i++) - GrLine(dc,0,i*8,w,i*8); - - PsmRecalcNoteXY; - if (oc.cur_note->x<64) { - oc.screen_x-=128; - PsmRecalcNoteXY; - } - if (oc.cur_note->x>=GR_WIDTH-64) { - oc.screen_x+=128; - PsmRecalcNoteXY; - } - - tempo=oc.root.next; - while (tempo!=&oc.root) { - x=tempo->x; - y=tempo->y; - if (measure_left<0.001) { - dc->color=BLACK; - GrLine(dc,x-PSM_NOTE_SPACING,8,x-PSM_NOTE_SPACING,11*8); - measure_left=measure_len; - } - if (tempo->type==OT_METER) { - if (tempo==oc.cur_note && PsmBlink) - dc->color=BROWN; - else - dc->color=BLACK; - DrawTimeSignature(dc,x,5*8,tempo->meter_top,tempo->meter_bottom); - measure_len=tempo->meter_top*4.0/tempo->meter_bottom; - measure_left=0; - } else { - if (tempo==oc.cur_note && PsmBlink) { - dc->color=BROWN; - GrPrint(dc,x+8,y,"%s",tempo->word); - } else if (tempo->flags&OF_SELECTED) - dc->color=RED; - else { - if (tempo->note!=NOTE_REST) - dc->color=BLACK; - else - dc->color=LTGRAY; - if (PsmHasWords(tempo->word)) - dc->color=GREEN; - } - DrawNote(dc,x,y,tempo->duration); - if (PsmIsDotted(tempo->duration)) - x+=PSM_NOTE_SPACING/2; - if (Bt(&tempo->flags,Of_SHARP)) - Sprite3(dc,x,y,0,$IB,"<13>",BI=13$); - else if (Bt(&tempo->flags,Of_FLAT)) - Sprite3(dc,x,y,0,$IB,"<14>",BI=14$); - measure_left-=psm_durations[tempo->duration]; - } - tempo=tempo->next; - } - - if (oc.cur_note==&oc.root && PsmBlink) - dc->color=BROWN; - else - dc->color=BLACK; - Sprite3(dc,oc.root.x,50,0,$IB,"<12>",BI=12$); - Preempt(old_preempt); -} - -#define PSMR_FLAT -8 -#define PSMR_SHARP -7 -#define PSMR_TIE -6 -#define PSMR_REST -5 -#define PSMR_INS_NOTE -4 -#define PSMR_DELETE_NOTE -3 -#define PSMR_SET_WORD -2 - -F64 PopUpDuration() -{ - I64 i; - CDoc *doc=DocNew; - DocPrint(doc,"$$GREEN$$$$MU,\"Set Word\",LE=PSMR_SET_WORD$$\n" - "$$MU,\"Toggle Sharp\",LE=PSMR_SHARP$$\n" - "$$MU,\"Toggle Flat\",LE=PSMR_FLAT$$\n" - "$$MU,\"Toggle Tie\",LE=PSMR_TIE$$\n" - "$$MU,\"Make Rest\",LE=PSMR_REST$$\n" - "$$MU,\"Insert Note\",LE=PSMR_INS_NOTE$$\n" - "$$MU,\"Delete Note\",LE=PSMR_DELETE_NOTE$$\n\n"); - for (i=0;iflags; - oc.cur_note=tempo=PsmFindNote(x,y); - if (tempo!=&oc.root) { - Fs->win_inhibit=WIG_USER_TASK_DFT; - i=PopUpDuration; - if (0<=itype==OT_NOTE) - tempo->duration=i; - } else { - switch (i) { - case PSMR_REST: - if (tempo->type==OT_NOTE) { - tempo->octave=OCTAVE_REST; - tempo->note=NOTE_REST; - } - break; - case PSMR_SHARP: - if (tempo->type==OT_NOTE && tempo->octave!=OCTAVE_REST) { - if (Btr(&tempo->flags,Of_FLAT)) - tempo->note++; - if (Btc(&tempo->flags,Of_SHARP)) - tempo->note--; - else - tempo->note++; - if (tempo->note<0) { - tempo->note=11; - tempo->octave--; - } else if (tempo->note>11) { - tempo->note=0; - tempo->octave++; - } - } - break; - case PSMR_FLAT: - if (tempo->type==OT_NOTE && tempo->octave!=OCTAVE_REST) { - if (Btr(&tempo->flags,Of_SHARP)) - tempo->note--; - if (Btc(&tempo->flags,Of_FLAT)) - tempo->note++; - else - tempo->note--; - if (tempo->note<0) { - tempo->note=11; - tempo->octave--; - } else if (tempo->note>11) { - tempo->note=0; - tempo->octave++; - } - } - break; - case PSMR_TIE: - if (tempo->type==OT_NOTE) - Btc(&tempo->flags,Of_TIE); - break; - case PSMR_SET_WORD: - if (tempo->type==OT_NOTE) { - if (DocPut) DocPut->flags&=~DOCF_FORM; - if (PsmHasWords(tempo->word)) - st2=MStrPrint("\nWord(\"%Q\"):",tempo->word); - else - st2=MStrPrint("\nWord(\"\"):"); - DocBottom; - st=GetStr(st2); - Free(st2); - Free(tempo->word); - if (*st) { - tempo->word=MStrPrint("%q",st); - Free(st); - } else - tempo->word=StrNew(" "); - if (DocPut) DocPut->flags=DocPut->flags&~DOCF_FORM|old_doc_flags&DOCF_FORM; - } - break; - case PSMR_INS_NOTE: - tempo1=PsmNoteCopy(tempo); - QueIns(tempo1,tempo); - break; - case PSMR_DELETE_NOTE: - oc.cur_note=tempo->next; - QueRem(tempo); - PsmNoteDel(tempo); - break; - } - } - PsmSetWidth(oc.cur_note); - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; - } -} - -#define PSM_NOTE_BOX_X 220 -#define PSM_NOTE_BOX_Y (13*FONT_HEIGHT+14) - -U0 PsmSetPickNoteBoxX(I64 duration,I64 *x) -{ - I64 i; - *x=PSM_NOTE_BOX_X; - for (i=0;icolor=RED; - else if (psm_triplet_durations[i]) - oc.dc2->color=LTRED; - else - oc.dc2->color=BLACK; - DrawNote(oc.dc2,x,PSM_NOTE_BOX_Y,i); - } -} - -#define PSM_TOOLS_X 450 -#define PSM_TOOLS_Y 13*FONT_HEIGHT - -U0 DrawPickTools() -{ - if (oc.tool==OTT_BOX_TOOL) - oc.dc2->color=ROPF_DITHER+WHITE<<16+RED; - else - oc.dc2->color=ROPF_DITHER+WHITE<<16+BLACK; - GrBorder(oc.dc2,PSM_TOOLS_X,PSM_TOOLS_Y, - PSM_TOOLS_X+10,PSM_TOOLS_Y+10); - - if (oc.tool==OTT_PTR_TOOL) - oc.dc2->color=RED; - else - oc.dc2->color=BLACK; - (*gr.fp_draw_input_ptr)(oc.dc2,PSM_TOOLS_X+15,PSM_TOOLS_Y); - oc.dc2->color=BLACK; -} - -Bool PsmGetPickToolBox(I64 xx,I64 yy) -{ - if (PSM_TOOLS_X<=xxcolor=BLACK; - for (i=0;ioc.root.last->x) - tempo1=oc.root.last; - else if (a1x) - tempo1=&oc.root; - else - tempo1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); - tempo=CAlloc(sizeof(PsmNote)); - tempo->type=OT_NOTE; - a2=a2/4-15; - n=-a2%7; - o=2+a2/-7; - n=-n; - if (n<0) { - n+=7; - o++; - } - n=psm_note_inverse_map[n]; - tempo->note=n; - tempo->octave=o; - tempo->duration=duration; - PsmSetWidth(tempo); - QueIns(tempo,tempo1); - oc.cur_note=tempo->next; - } - DrawDC2; -} - -U0 PsmLeftClickPickMeterBox(I64 top,I64 bottom) -{ - I64 msg_code,a1,a2; - PsmNote *tempo,*tempo1; - do { - msg_code=GetMsg(&a1,&a2,1<=oc.root.x) - tempo1=oc.root.last; - else if (a1x) - tempo1=&oc.root; - else - tempo1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); - tempo=CAlloc(sizeof(PsmNote)); - tempo->type=OT_METER; - tempo->meter_top=top; - tempo->meter_bottom=bottom; - PsmSetWidth(tempo); - QueIns(tempo,tempo1); - oc.cur_note=tempo->next; - } - DrawDC2; -} - -U0 PsmLeftClickStaffPtr(I64 x,I64 y) -{ - PsmNote *tempo,*tempo1; - I64 o,n,msg_code,a1,a2,n_original,o_original; - oc.cur_note=tempo=PsmFindNote(x,y); - if (tempo!=&oc.root) { - if (tempo->type==OT_NOTE) { - n_original=tempo->note; - o_original=tempo->octave; - do { - msg_code=GetMsg(&a1,&a2,1<word); - tempo1->word=tempo->word; - tempo->word=NULL; - tempo->note=n_original; - tempo->octave=o_original; - } - } else { -move_note: - a2=a2/4-15; - n=-a2%7; - o=2+a2/-7; - n=-n; - if (n<0) { - n+=7; - o++; - } - n=psm_note_inverse_map[n]; - tempo->note=n; - tempo->octave=o; - } - } while (msg_code!=MSG_IP_L_UP); - PsmSetWidth(tempo); - } - } -} - -U0 PsmLeftClickStaffBox(I64 x,I64 y) -{ - I64 msg_code,a1,a2; - do { - msg_code=GetMsg(&a1,&a2,1<color=ROPF_DITHER+WHITE<<16+BLACK; - GrBorder(oc.dc2,x,y,a1,a2); - if (msg_code==MSG_IP_L_UP) { - if (x>a1) SwapI64(&x,&a1); - PsmMarkSelected(x,a1,TRUE); - } - } while (msg_code!=MSG_IP_L_UP); - DrawDC2; -} - -U0 PsmLeftClick(I64 x,I64 y) -{ - I64 duration,top,bottom; - if (y<13*FONT_HEIGHT) { - if (oc.tool==OTT_PTR_TOOL) - PsmLeftClickStaffPtr(x,y); - else - PsmLeftClickStaffBox(x,y); - } else { - duration=PsmGetPickNoteBoxDuration(x,y); - if (0<=durationtask_end_cb=&SndTaskEndCB; - while (TRUE) { - i++; - switch (psm_play_mode) { - case PSMPM_NORMAL: - if (psm_play_f!=f) { - f=psm_play_f; - Snd(f); - } - break; - case PSMPM_REVERB1: - if (psm_play_f!=f) { - if (f>0) - f2=f; - f=psm_play_f; - } - if (!(i&15)) { - if (i&16) - Snd(f); - else - Snd(f2); - } - break; - } - Sleep(1); - } -} - -U8 PsmCvtDuration(F64 d) -{ - F64 d1,d2; - I64 j; - for (j=0;jtype=OT_METER; - st++; - if ('1'<=*st<='9') - tempo1->meter_top=*st++-'0'; - else - tempo1->meter_top=4; - if (*st=='/') - st++; - if ('1'<=*st<='9') - tempo1->meter_bottom=*st++-'0'; - else - tempo1->meter_bottom=4; - PsmSetWidth(tempo1); - QueIns(tempo1,oc.root.last); - } - while (*st=='(') { - Bts(&tempo->flags,Of_TIE); - st++; - } - st=PsmMusicSetOctave(st,psm_octave); - st=PsmMusicSetNoteLen(st,psm_duration); - } - if (!*st) { - PsmNoteDel(tempo); - break; - } - note=*st++-'A'; - if (note<7) { - note=music.note_map[note]; - if (*st=='b') { - Bts(&tempo->flags,Of_FLAT); - note--; - st++; - } else if (*st=='#') { - Bts(&tempo->flags,Of_SHARP); - note++; - st++; - } - if (note<0) { - note=11; - *psm_octave-=1; - } else if (note>11) { - note=0; - *psm_octave+=1; - } - tempo->note=note; - tempo->octave=*psm_octave; - } else { - tempo->note=NOTE_REST; - tempo->octave=OCTAVE_REST; - } - if (*psm_duration<=2*.25/3) - i=0; - else if (*psm_duration<=.25) - i=1; - else if (*psm_duration<=2*.5/3) - i=2; - else if (*psm_duration<=.5) - i=3; - else if (*psm_duration<=2.0/3) - i=4; - else if (*psm_duration<=.5*1.5) - i=5; - else if (*psm_duration<=1.0) - i=6; - else if (*psm_duration<=1.5) - i=7; - else if (*psm_duration<=2.0) - i=8; - else if (*psm_duration<=3.0) - i=9; - else if (*psm_duration<=4.0) - i=10; - else - i=11; - tempo->duration=i; - tempo->type=OT_NOTE; - PsmSetWidth(tempo); - QueIns(tempo,oc.cur_note->last); - } -} - -U0 PsmLoadSong(U8 *filename,I64 *psm_octave,F64 *psm_duration) -{ - U8 *st; - PsmNote *tempo; - CLex *lx=LexNew(MStrPrint("#include \"%s\"",filename)); - if (FileOcc("incomplete",filename,"")) - oc.incomplete_entry->checked=TRUE; - else - oc.incomplete_entry->checked=FALSE; - while (Lex(lx)) { - if (lx->token==TK_IDENT) - if (!StrCmp(lx->cur_str,"Play")) { - if (Lex(lx)=='(') - if (Lex(lx)==TK_STR) { - tempo=oc.root.last; - st=LexExtStr(lx); - PsmLoadSongStr(st,psm_octave,psm_duration); - if (lx->token==',') { - if (Lex(lx)==TK_STR) { - st=LexExtStr(lx); - do { - do tempo=tempo->next; - while (tempo!=&oc.root && tempo->type==OT_METER); - if (tempo!=&oc.root) - tempo->word=StrNew(st); - st+=StrLen(st)+1; - } while (*st); - } - } - } - } else if (!StrCmp(lx->cur_str,"music.tempo")) { - if (Lex(lx)=='=' && Lex(lx)==TK_F64) { - music.tempo=lx->cur_f64-0.0005; - tempo_state.tempo=Round(TEMPO_RANGE*(music.tempo-0.5)/4.4); - } - } else if (!StrCmp(lx->cur_str,"music.stacatto_factor")) { - if (Lex(lx)=='=' && Lex(lx)==TK_F64) { - music.stacatto_factor=lx->cur_f64-0.0005; - tempo_state.stacatto=Round(TEMPO_RANGE*(music.stacatto_factor-0.12)/0.88); - } - } - } - LexDel(lx); -} - -U8 *PsmCvtSong() -{ - PsmNote *tempo; - U8 *st,*src,*dst; - I64 i,note,octave,last_octave,last_duration; - - i=0; - tempo=oc.root.next; - last_octave=OCTAVE_REST; - last_duration=-1; - while (tempo!=&oc.root) { - dst=&tempo->ascii; - if (tempo->type==OT_METER) { - *dst++='M'; - *dst++=tempo->meter_top+'0'; - *dst++='/'; - *dst++=tempo->meter_bottom+'0'; - } else { - octave=tempo->octave; - note=tempo->note; - if (note!=NOTE_REST) { - if (Bt(&tempo->flags,Of_SHARP)) - note--; - if (Bt(&tempo->flags,Of_FLAT)) - note++; - if (note<0) { - note=11; - octave--; - } else if (note>11) { - note=0; - octave++; - } - note=music.note_map[*LstSub(note,psm_note_lst)-'A']; - } - if (Bt(&tempo->flags,Of_TIE)) - *dst++='('; - if (octave!=last_octave && note!=NOTE_REST) { - *dst++=octave+'0'; - last_octave=octave; - } - if (tempo->duration!=last_duration) { - src=LstSub(tempo->duration,psm_duration_lst); - *dst++=src[0]; - if (src[1]) - *dst++=src[1]; - last_duration=tempo->duration; - } - if (note!=NOTE_REST) { - src=LstSub(note,psm_note_lst); - *dst++=src[0]; - if (src[1]) - *dst++=src[1]; - else if (Bt(&tempo->flags,Of_FLAT)) - *dst++='b'; - else if (Bt(&tempo->flags,Of_SHARP)) - *dst++='#'; - } else - *dst++='R'; - } - *dst++=0; - i+=StrLen(tempo->ascii); - tempo=tempo->next; - } - - st=MAlloc(i+1); - dst=st; - tempo=oc.root.next; - while (tempo!=&oc.root) { - StrCpy(dst,tempo->ascii); - dst+=StrLen(tempo->ascii); - tempo=tempo->next; - } - *dst++=0; - return st; -} - -U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) -{ - CDoc *doc=DocNew(full_filename); - Bool has_words; - PsmNote *tempo,*tempo1; - F64 measure_len=4,two_measure_left=2*measure_len; - I64 ch; - U8 *ptr; - - Free(PsmCvtSong); //set tempo->ascii; - - music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; - music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; - - has_words=FALSE; - tempo=oc.root.next; - while (tempo!=&oc.root) { - if (PsmHasWords(tempo->word)) has_words=TRUE; - tempo=tempo->next; - } - if (oc.incomplete_entry->checked) - DocPrint(doc,"//0 incomplete\n"); - else if (has_words) - DocPrint(doc,"//0 has words\n"); - else - DocPrint(doc,"//0 no nothing\n"); - - DocPrint(doc, -"U0 Song()\n" -"{\n" -" Fs->task_end_cb=&SndTaskEndCB;\n" -" MusicSettingsRst;\n" -" music.tempo=%6.3f;\n" -" music.stacatto_factor=%6.3f;\n" -" try {\n" -" while (!ScanKey) {\n" -"\tPlay(\"",music.tempo+0.0005,music.stacatto_factor+0.0005); - - tempo=oc.root.next; - tempo1=tempo; - has_words=FALSE; - while (tempo!=&oc.root) { - DocPrint(doc,"%s",tempo->ascii); - if (PsmHasWords(tempo->word)) has_words=TRUE; - if (tempo->type==OT_METER) { - measure_len=tempo->meter_top*4.0/tempo->meter_bottom; - two_measure_left=0; - } else - two_measure_left-=psm_durations[tempo->duration]; - tempo=tempo->next; - if (two_measure_left<0.001 && tempo!=&oc.root) { - if (has_words) { - DocPrint(doc,"\",\n\t\t\""); - while (tempo1!=tempo) { - if (tempo1->type!=OT_METER) { - if (ptr=tempo1->word) { - while (ch=*ptr) { - if (ch==CH_SPACE) - *ptr=CH_SHIFT_SPACE; - ptr++; - } - DocPrint(doc,"%Q\\0",tempo1->word); - } else - DocPrint(doc,"%c\\0",CH_SHIFT_SPACE); - } - tempo1=tempo1->next; - } - } - DocPrint(doc,"\");\n" - "\tPlay(\""); - two_measure_left=2*measure_len; - tempo1=tempo; - has_words=FALSE; - } - } - if (has_words) { - DocPrint(doc,"\",\n\t\t\""); - while (tempo1!=tempo) { - if (tempo1->type!=OT_METER) { - if (ptr=tempo1->word) { - while (ch=*ptr) { - if (ch==CH_SPACE) - *ptr=CH_SHIFT_SPACE; - ptr++; - } - DocPrint(doc,"%Q\\0",tempo1->word); - } else - DocPrint(doc,"%c\\0",CH_SHIFT_SPACE); - } - tempo1=tempo1->next; - } - } - DocPrint(doc,"\");\n" -" }\n" -" } catch\n" -" PutExcept;\n" -" Snd(0);\n" -"}\n" -"\n" -"Song;\n"); - DocRecalc(doc); - if (full_filename) - Free(full_filename); - else - StrPrint(doc->filename.name,"%s/Temp.CPP.Z",dirname); - DocWrite(doc,TRUE); - full_filename=StrNew(doc->filename.name); - DocDel(doc); - return full_filename; -} - -U0 PsmSetOctave(I64 octave) -{ - I64 i; - U8 buf[136]; - CMenuEntry *tempse; - for (i=0;i<=6;i++) { - StrPrint(buf,"Snd/Octave%d",i); - if (tempse=MenuEntryFind(Fs->cur_menu,buf)) { - if (i==octave) - tempse->checked=TRUE; - else - tempse->checked=FALSE; - } - } - if (tempse=MenuEntryFind(Fs->cur_menu,"Snd/Reverb")) - tempse->checked=psm_play_mode==1; -} - -$SP,"<17>",BI=17$ - - - - -#define PSM_NUM_KEYS 20 -class PsmKey -{ - U8 x,w,h,ascii; -}; - -#define PSM_W_W 16 -#define PSM_W_H 36 -#define PSM_B_W 8 -#define PSM_B_H 20 - -PsmKey psm_kbd[PSM_NUM_KEYS]= -{ - -{ 2*PSM_W_W-4,PSM_B_W,PSM_B_H,'e' }, -{ 3*PSM_W_W-4,PSM_B_W,PSM_B_H,'r' }, -{ 4*PSM_W_W-4,PSM_B_W,PSM_B_H,'t' }, -{ 6*PSM_W_W-4,PSM_B_W,PSM_B_H,'u' }, -{ 7*PSM_W_W-4,PSM_B_W,PSM_B_H,'i' }, -{ 9*PSM_W_W-4,PSM_B_W,PSM_B_H,'p' }, -{10*PSM_W_W-4,PSM_B_W,PSM_B_H,'[' }, -{11*PSM_W_W-4,PSM_B_W,PSM_B_H,']' }, - -{ 0*PSM_W_W,PSM_W_W,PSM_W_H,'a' }, -{ 1*PSM_W_W,PSM_W_W,PSM_W_H,'s' }, -{ 2*PSM_W_W,PSM_W_W,PSM_W_H,'d' }, -{ 3*PSM_W_W,PSM_W_W,PSM_W_H,'f' }, -{ 4*PSM_W_W,PSM_W_W,PSM_W_H,'g' }, -{ 5*PSM_W_W,PSM_W_W,PSM_W_H,'h' }, -{ 6*PSM_W_W,PSM_W_W,PSM_W_H,'j' }, -{ 7*PSM_W_W,PSM_W_W,PSM_W_H,'k' }, -{ 8*PSM_W_W,PSM_W_W,PSM_W_H,'l' }, -{ 9*PSM_W_W,PSM_W_W,PSM_W_H,';' }, -{10*PSM_W_W,PSM_W_W,PSM_W_H,'\'' }, -{11*PSM_W_W,PSM_W_W,PSM_W_H,'\n'}, - -}; - -U0 PsmDownKey(I64 x,I64 y) -{ - I64 i; - PsmKey *o; - y-=FONT_HEIGHT*13; - if (0<=yx<=xx+o->w && yh) { - Msg(MSG_KEY_DOWN,o->ascii,0); - return; - } - } - } -} - -U0 PsmUpKey(I64 x,I64 y) -{ - I64 i; - PsmKey *o; - y-=FONT_HEIGHT*13; - if (0<=yx<=xx+o->w && yh) { - Msg(MSG_KEY_UP,o->ascii,0); - return; - } - } - } -} - -U0 PsmMenu(I64 psm_octave) -{ - DocClear; - "$$BD,WHITE$$$$FD,GREEN$$$$CM,0,12$$\n"; - Sprite($IB,"<17>",BI=17$); - '\n\n\n\n\n'; - - DrawDC2; - - "$$LTGREEN$$$$FG$$\t\tRest\n" - "$$LTGREEN$$$$FG$$\tDeletes Last Note\n" - "$$LTGREEN$$Left Mouse$$FG$$\tDrag note or shift word\n" - "$$LTGREEN$$Right Mouse$$FG$$\tChange duration or set word\n"; - Sprite($IB,"<6>",BI=6$,"$$SP+LA,\"\",LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_LEFT);\",BI=%d$$"); - " "; - if (oc.playing) - Sprite($IB,"<9>",BI=9$,"$$SP,\"\",LM=\"x\",BI=%d$$"); - else - Sprite($IB,"<8>",BI=8$,"$$SP,\"\",LM=\"x\",BI=%d$$"); - " "; - if (oc.record_entry->checked) { - oc.record_entry->checked=TRUE; - Sprite($IB,"<10>",BI=10$,"$$SP,\"\",LM=\"z\",BI=%d$$"); - } else - Sprite($IB,"<11>",BI=11$,"$$SP,\"\",LM=\"z\",BI=%d$$"); - " "; - Sprite($IB,"<7>",BI=7$,"$$SP+LA,\"\",LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_RIGHT);\",BI=%d$$"); - "$$CM+LX,0,6$$"; - PsmSetOctave(psm_octave); - WinMgrSync(2); -} - -U0 PsmPushMode(I64 psm_octave) -{ - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; - PsmMenu(psm_octave); -} - -U0 PsmPopMode() -{ - Fs->win_inhibit=WIG_USER_TASK_DFT; - DCFill; -} - -#define PSMF_CD 1 -#define PSMF_INCOMPLETE 2 - -U0 Psalmody(U8 *dirname=NULL) -{ - Bool was_playing; - I64 a1,a2,msg_code=0,col, - note=NOTE_REST,octave=OCTAVE_REST,psm_octave=3,timeout_val,timeout_val2, - old_doc_flags; - U8 *filename=NULL,*st,*st2; - CTask *play_task=Spawn(&PsmPlayTask,NULL,"Psalmody Play",,Fs); - PsmNote *tempo; - F64 f=0,last_f=0,psm_duration=1.0, - d,evt_time=tS,note_down_time=tS; - CCtrl *c=TempoNew; - - if (DocPut) old_doc_flags=DocPut->flags; - SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - WinBorder; - WordStat; - Preempt(OFF); - - MkDir("HOME/Psalmody"); - MusicSettingsRst; - tempo_state.tempo=Round(TEMPO_RANGE*(music.tempo-0.5)/4.4); - tempo_state.stacatto=Round(TEMPO_RANGE*(music.stacatto_factor-0.12)/0.88); - - if (DocPut) DocPut->flags|=DOCF_FORM; - - MemSet(&oc,0,sizeof(PsmCtrl)); - oc.screen_x=0; - oc.root.next=oc.root.last=&oc.root; - oc.clipboard.next=oc.clipboard.last=&oc.clipboard; - oc.cur_note=&oc.root; - oc.dc2=DCAlias; - - MenuPush( - "File {" - " New(,'.');" - " ChgDir(MSG_CMD,PSMF_CD);" - " Open(,CH_CTRLO);" - " SaveAs(,CH_CTRLA);" - " Abort(,CH_SHIFT_ESC);" - " Exit(,CH_ESC);" - "}" - "Edit {" - " Cut(,CH_CTRLX);" - " Copy(,CH_CTRLC);" - " Paste(,CH_CTRLV);" - " RightMenu(,'\n');" - " BackSpace(,CH_BACKSPACE);" - " DeleteNote(,,SC_DELETE);" - " ClearSong(,'.');" - " Left(,,SC_CURSOR_LEFT);" - " Right(,,SC_CURSOR_RIGHT);" - " GoBegin(,,0x4CB0000044B);" - " GoEnd(,,0x4CD0000044D);" - "}" - "Song {" - " Play(,'x');" - " Record(,'z');" - " Random(,',');" - " MarkIncomplete(MSG_CMD,PSMF_INCOMPLETE);" - "}" - "Snd {" - " Reverb(,'c');" - " Octave0(,'0');" - " Octave1(,'1');" - " Octave2(,'2');" - " Octave3(,'3');" - " Octave4(,'4');" - " Octave5(,'5');" - " Octave6(,'6');" - "}" - "Help {" - " Help(,,SC_F1);" - "}" - ); - oc.incomplete_entry=MenuEntryFind(Fs->cur_menu,"Song/MarkIncomplete"); - oc.record_entry=MenuEntryFind(Fs->cur_menu,"Song/Record"); - - WinMax; - - if (!dirname) - dirname=StrNew("HOME/Psalmody"); - else - dirname=StrNew(dirname); - PsmPushMode(psm_octave); - col=0; - Fs->draw_it=&DrawIt; - - try { - while (TRUE) { - was_playing=FALSE; -mo_start: - if (ip.pos_text.y-Fs->win_top<18) - msg_code=GetMsg(&a1,&a2,1< when the Doc Buttons are clicked. - //This is so that kbd and mouse are the same for Doc's. - //We must now pass the onto the Doc handler. - PutKey(a1,a2); - goto mo_start; - } - if (msg_code!=MSG_IP_MOVE) { - DocBottom; - if (was_playing || DocPut->cur_entry->y>=Fs->win_height-2) { - PsmMenu(psm_octave); - col=0; - } - } - - octave=psm_octave; - switch (msg_code) { - case MSG_CMD: - PsmPopMode; - switch (a1) { - case PSMF_CD: - st2=dirname; - if (dirname=PopUpPickDir) { - Free(st2); - Free(filename); - filename=NULL; - } else - dirname=st2; - break; - case PSMF_INCOMPLETE: - oc.incomplete_entry->checked=!oc.incomplete_entry->checked; - break; - } - PsmPushMode(psm_octave); - col=0; - break; - case MSG_KEY_DOWN: - evt_time=tS; - if ('0'<=a1<='9') { - psm_octave=a1-'0'; - PsmMenu(psm_octave); - col=0; - } else { - switch (a1) { - sub_switch_start: - case 'a': note=7; octave--; break; - case 's': note=8; octave--; break; - case 'e': note=9; octave--; break; - case 'd': note=10; octave--; break; - case 'r': note=11; octave--; break; - case 'f': note=0; break; - case 't': note=1; break; - case 'g': note=2; break; - case 'h': note=3; break; - case 'u': note=4; break; - case 'j': note=5; break; - case 'i': note=6; break; - case 'k': note=7; break; - case 'l': note=8; break; - case 'p': note=9; break; - case ';': note=10; break; - case '[': note=11; break; - case '\'': note=0; octave++; break; - case ']': note=1; octave++; break; - sub_switch_end: - f=Note2Freq(note,octave); - break; - case CH_SPACE: - note=NOTE_REST; - octave=OCTAVE_REST; - f=-1; //rest - break; - - case 0: - switch (a2.u8[0]) { - case SC_CURSOR_LEFT: - if (a2&SCF_CTRL) { - while (oc.cur_note->last!=&oc.root) { - oc.cur_note=oc.cur_note->last; - if (oc.cur_note!=&oc.root) - LBEqu(&oc.cur_note->flags,Of_SELECTED,a2&SCF_SHIFT); - } - } else { - if (oc.cur_note->last!=&oc.root) { - oc.cur_note=oc.cur_note->last; - if (oc.cur_note!=&oc.root) - LBEqu(&oc.cur_note->flags,Of_SELECTED,a2&SCF_SHIFT); - } - } - break; - case SC_CURSOR_RIGHT: - if (a2&SCF_CTRL) { - while (oc.cur_note!=&oc.root) { - if (oc.cur_note!=&oc.root) - LBEqu(&oc.cur_note->flags,Of_SELECTED,a2&SCF_SHIFT); - oc.cur_note=oc.cur_note->next; - } - } else { - if (oc.cur_note!=&oc.root) { - if (oc.cur_note!=&oc.root) - LBEqu(&oc.cur_note->flags,Of_SELECTED,a2&SCF_SHIFT); - oc.cur_note=oc.cur_note->next; - } - } - break; - case SC_DELETE: - if (a2&SCF_SHIFT) - PsmCutToClipboard; - else { - tempo=oc.cur_note; - oc.cur_note=tempo->next; - if (tempo!=&oc.root) { - QueRem(tempo); - PsmNoteDel(tempo); - } - } - break; - case SC_INS: - if (a2&SCF_SHIFT) - PsmPasteClipboard; - else if (a2&SCF_CTRL) - PsmCopyToClipboard; - break; - case SC_F1: - PsmPopMode; - PopUpEd("::/Apps/Psalmody/Help.TXT.Z",Fs); - PsmPushMode(psm_octave); - col=0; - break; - } - break; - case ',': - Free(filename); - filename=NULL; - PsmPopMode; - music.octave=psm_octave; - if (st2=GodSongStr) { - PsmLoadSongStr(st2,&psm_octave,&psm_duration); - Free(st2); - } - PsmPushMode(psm_octave); - col=0; - break; - case CH_CTRLO: - PsmPopMode; - AcctOneTimePopUp(ARf_PSALMODY_JUKEBOX, - "Select a song and preview it.\n" - "$$GREEN$$$$FG$$ to load it into Psalmody.\n\n" - ST_WARN_ST " Graphics and other embelishments\n" - "will be lost because Psalmody can't\n" - "parse HolyC programs completely.\n"); - Free(filename); - filename=NULL; - JukeBox(dirname,&filename); - if (filename) { - oc.screen_x=0; - psm_duration=1.0; - psm_octave=3; - PsmSongDel(&oc.root); - oc.cur_note=&oc.root; - PsmLoadSong(filename,&psm_octave,&psm_duration); - oc.record_entry->checked=FALSE; - oc.cur_note=oc.root.next; - } - PsmPushMode(psm_octave); - col=0; - break; - case CH_CTRLA: - PsmPopMode; - filename=PsmSaveSong(dirname,filename); - PsmPushMode(psm_octave); - break; - case CH_CTRLC: - PsmCopyToClipboard; - break; - case CH_CTRLV: - PsmPasteClipboard; - break; - case CH_CTRLX: - PsmCutToClipboard; - break; - case '.': - PsmMenu(psm_octave); - col=0; - Free(filename); - filename=NULL; - psm_duration=1.0; - psm_octave=3; - PsmSongDel(&oc.root); - oc.cur_note=&oc.root; - oc.screen_x=0; - break; - case '\n': - if (oc.cur_note!=&oc.root) - PsmRightClick(oc.cur_note->x,oc.cur_note->y); - break; - case 'x': - if (was_playing) - break; - col=0; - oc.playing=TRUE; - PsmMenu(psm_octave); - tempo=oc.cur_note; - while (tempo!=&oc.root) { - if (tempo->type!=OT_METER) { - timeout_val=cnts.jiffies; - if (ip.pos_text.y-Fs->win_top<18) - msg_code=ScanMsg(&a1,&a2,1<win_top>=18 && msg_code==MSG_IP_L_DOWN) - goto mo_start; - else - goto mo_got_msg; - } - oc.cur_note=tempo; - oc.screen_x+=tempo->x-0.33*GR_WIDTH; - if (PsmHasWords(tempo->word)) - "%s",tempo->word; - note=tempo->note; - octave=tempo->octave; - if (note!=NOTE_REST) - f=Note2Freq(note,octave); - else - f=-1; //rest - if (f>0) - psm_play_f=f; - else - psm_play_f=0; - - music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; - music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; - d=JIFFY_FREQ*psm_durations[tempo->duration]/music.tempo; - if (Bt(&tempo->flags,Of_TIE)) { - timeout_val+=d; - timeout_val2=timeout_val; - } else { - timeout_val+=d*music.stacatto_factor; - timeout_val2=timeout_val+ - d*(1.0-music.stacatto_factor); - } - SleepUntil(timeout_val); - psm_play_f=0; - SleepUntil(timeout_val2); - } - tempo=tempo->next; - } - oc.cur_note=&oc.root; - oc.screen_x+=oc.cur_note->x-GR_WIDTH/2; - oc.playing=FALSE; - PsmMenu(psm_octave); - col=0; - f=0; - psm_play_f=0; - break; - case CH_BACKSPACE: - tempo=oc.cur_note->last; - if (tempo!=&oc.root) { - QueRem(tempo); - PsmNoteDel(tempo); - } - if (col) { - '' CH_BACKSPACE; - col--; - } - break; - case 'c': - psm_play_mode++; - if (psm_play_mode>=PSMPM_NUM_PLAY_MODES) psm_play_mode=0; - PsmMenu(psm_octave); - col=0; - break; - case 'z': - if (oc.record_entry->checked) - oc.record_entry->checked=FALSE; - else { - oc.record_entry->checked=TRUE; - psm_duration=1.0; - psm_octave=3; - oc.screen_x=0; - } - PsmMenu(psm_octave); - col=0; - break; - case CH_ESC: - PsmPopMode; - filename=PsmSaveSong(dirname,filename); - PsmPushMode(psm_octave); - case CH_SHIFT_ESC: - goto mo_done; - } - } - break; - case MSG_KEY_UP: - evt_time=tS; - f=0; - break; - case MSG_IP_MOVE: - if (a2>18*FONT_HEIGHT) - Fs->win_inhibit=WIG_USER_TASK_DFT; - else - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; - break; - case MSG_IP_L_DOWN: - PsmDownKey(a1,a2); - PsmLeftClick(a1,a2); - break; - case MSG_IP_L_UP: - PsmUpKey(a1,a2); - break; - default: - PsmRightClick(a1,a2); - } - if (f!=last_f) { - if (f>0) { - st=LstSub(note,psm_note_lst); - psm_play_f=f; - } else { - if (f<0) - st="R"; - else - st=""; - psm_play_f=0; - } - if (oc.record_entry->checked) { - if (last_f) { - music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; - music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; - - tempo->duration=PsmCvtDuration(music.tempo*(evt_time-note_down_time)); - PsmSetWidth(tempo); - QueIns(tempo,oc.cur_note->last); - } - if (f) { - note_down_time=tS; - tempo=CAlloc(sizeof(PsmNote)); - tempo->type=OT_NOTE; - tempo->note=note; - tempo->octave=octave; - if (st[1]=='#') - Bts(&tempo->flags,Of_SHARP); - } - } - last_f=f; - "%s",st; - col+=StrLen(st); - if (col>=Fs->win_width-1) { - '\n'; - col=0; - } - } - } -mo_done: - GetMsg(,,1<flags=DocPut->flags&~DOCF_FORM|old_doc_flags&DOCF_FORM; - Free(dirname); - MenuPop; -} -" -òÿÿÿñÿÿÿ -ñÿÿÿ -ñÿÿÿ -õÿÿÿ -õÿÿÿ -óÿÿÿ òÿÿÿ -öÿÿÿ -÷ÿÿÿ -ÿÿÿÿýÿÿÿüÿÿÿ -üÿÿÿ -ÿÿÿÿ -ÿÿÿÿýÿÿÿ -òÿÿÿ -þÿÿÿÿÿÿÿÿÿÿÿ -ýÿÿÿ -ÿÿÿÿ -ýÿÿÿ -ýÿÿÿÿÿÿÿ - -þÿÿÿÿÿÿÿÿÿÿÿ -óÿÿÿ -óÿÿÿ -óÿÿÿóÿÿÿ -òÿÿÿ òÿÿÿ -ÿÿÿÿýÿÿÿüÿÿÿ -üÿÿÿ -ÿÿÿÿ -ÿÿÿÿýÿÿÿ -òÿÿÿ -þÿÿÿÿÿÿÿÿÿÿÿ -ýÿÿÿ -ÿÿÿÿ -ýÿÿÿ -ýÿÿÿÿÿÿÿ - -þÿÿÿÿÿÿÿÿÿÿÿÍ -ÿÿÿÿýÿÿÿüÿÿÿ -üÿÿÿ -ÿÿÿÿ -ÿÿÿÿýÿÿÿ -òÿÿÿ -þÿÿÿÿÿÿÿÿÿÿÿ -ýÿÿÿ -ÿÿÿÿ -ýÿÿÿ -ýÿÿÿÿÿÿÿ - -þÿÿÿÿÿÿÿÿÿÿÿV -ÿÿÿÿýÿÿÿüÿÿÿ -üÿÿÿ -ÿÿÿÿ -ÿÿÿÿýÿÿÿ -òÿÿÿE -ÿÿÿÿýÿÿÿüÿÿÿ -üÿÿÿ -ÿÿÿÿ -ÿÿÿÿýÿÿÿa -   - - - a -   - -  - Õ -   - - - - - - - - - -     - -       - -    - - -  - - - -  -  - - - - - - - - -   - - - - - - - - - - - - ? -   - - # -þÿÿÿÖÿÿÿþÿÿÿ& -Öÿÿÿ& E -úÿÿÿ - úÿÿÿ - - ýÿÿÿ - V - ýÿÿÿ - - - -  -  - - -E -þÿÿÿöÿÿÿöÿÿÿ -öÿÿÿòÿÿÿ -òÿÿÿþÿÿÿòÿÿÿ -ôÿÿÿÿÿÿÿôÿÿÿò -$ - $ -0$0 -,4 -44 -,, -@$@ -<D -DD -<< -|„ -„„ -|| -lt -tt -ll -$À$ - - -ÄA$S4DDFTGdHtJ„K”L¤;´',E<RLTlU|IœP¬[¼] -PP -LT -TT -LL -`$` -p$p -€$€ -�$� - $  -°$° -À$À -œ¤ -¤¤ -œœ -¬´ -´´ -¬¬ -¼Ä -ÄÄ -¼¼ -P$P0@Pp€ °À@ -~   - P -   - -  -  \ No newline at end of file diff --git a/Apps/Psalmody/PsalmodyDraw.CPP b/Apps/Psalmody/PsalmodyDraw.CPP new file mode 100644 index 0000000..e371392 --- /dev/null +++ b/Apps/Psalmody/PsalmodyDraw.CPP @@ -0,0 +1,599 @@ + +$ID,8$ +$SP,"<1>",BI=1$ + +$SP,"<2>",BI=2$ + +$SP,"<3>",BI=3$ + +$SP,"<4>",BI=4$ + +$SP,"<5>",BI=5$ + +$SP,"<6>",BI=6$ + + +$SP,"<7>",BI=7$ + + +$SP,"<8>",BI=8$ + + +$SP,"<9>",BI=9$ + + +$SP,"<10>",BI=10$ + + +$SP,"<11>",BI=11$ + + + + + + + +$SP,"<12>",BI=12$ + + + + +$SP,"<13>",BI=13$ + +$SP,"<14>",BI=14$ + +$SP,"<15>",BI=15$ + + +$SP,"<16>",BI=16$ +$ID,-8$ +#define PSM_NOTE_SPACING 9 +#define PSM_NUM_DURATIONS 12 + +F64 psm_durations[PSM_NUM_DURATIONS+1]={ +2*.25/3,.25,2*.5/3,.5,2.0/3.0,0.5*1.5,1.0,1.5,2.0,3.0,4.0,6.0,1000000.0}; +U8 *psm_duration_lst="st\0s\0et\0e\0qt\0e.\0q\0q.\0h\0h.\0w\0w.\0"; +CSprite *psm_duration_imgs[PSM_NUM_DURATIONS]={$IB,"<1>",BI=1$,$IB,"<1>",BI=1$,$IB,"<2>",BI=2$, + $IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<3>",BI=3$, + $IB,"<4>",BI=4$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<5>",BI=5$}; +Bool psm_triplet_durations[PSM_NUM_DURATIONS]={TRUE,FALSE,TRUE, + FALSE,TRUE,FALSE,FALSE,FALSE, + FALSE,FALSE,FALSE,FALSE}; + + +Bool PsmBlink() +{ + if (Blink || oc.playing) + return TRUE; + else + return FALSE; +} + +Bool PsmHasWords(U8 *st) +{ + if (st && *st && (StrLen(st)>1 || *st!=CH_SPACE && *st!=CH_SHIFT_SPACE)) + return TRUE; + else + return FALSE; +} + +Bool PsmIsDotted(I64 duration) +{ + U8 *st=LstSub(duration,psm_duration_lst); + if (st[1]=='.') + return TRUE; + else + return FALSE; +} + +U0 PsmMarkSelected(I64 x1,I64 x2,Bool sel) +{ + PsmNote *tempo=oc.root.next; + while (tempo!=&oc.root) { + if (sel) { + if (x1<=tempo->x<=x2) + tempo->flags|=PSMF_SELECTED; + } else + tempo->flags&=~PSMF_SELECTED; + tempo=tempo->next; + } +} + +U0 PsmSetWidth(PsmNote *tempo) +{ + if (tempo->type==PSMT_METER) + tempo->width=12; + else { + tempo->width=PSM_NOTE_SPACING; + if (PsmIsDotted(tempo->duration)) + tempo->width+=PSM_NOTE_SPACING/2; + if (Bt(&tempo->flags,PSMf_SHARP) || Bt(&tempo->flags,PSMf_FLAT)) + tempo->width+=PSM_NOTE_SPACING; + } +} + +U0 PsmSetOctave(I64 octave) +{ + I64 i; + U8 buf[136]; + CMenuEntry *tempse; + for (i=0;i<=6;i++) { + StrPrint(buf,"Snd/Octave%d",i); + if (tempse=MenuEntryFind(Fs->cur_menu,buf)) { + if (i==octave) + tempse->checked=TRUE; + else + tempse->checked=FALSE; + } + } + if (tempse=MenuEntryFind(Fs->cur_menu,"Snd/Reverb")) + tempse->checked=psm_play_mode==1; +} + +U0 DrawNote(CDC *dc,I64 x,I64 y,I64 duration) +{ + if (0<=duration<=PSM_NUM_DURATIONS) { + Sprite3(dc,x,y,0,psm_duration_imgs[duration]); + if (psm_triplet_durations[duration]) + Sprite3(dc,x,y,0,$IB,"<16>",BI=16$); + if (PsmIsDotted(duration)) + Sprite3(dc,x,y,0,$IB,"<15>",BI=15$); + } +} + +U0 DrawTimeSignature(CDC *dc,I64 x,I64 y,I64 top,I64 bottom) +{ + GrPrint(dc,x,y,"%d",top); + GrPrint(dc,x,y+FONT_HEIGHT,"%d",bottom); +} + +U0 PsmRecalcNoteXY() +{ + F64 measure_len=4,measure_left=measure_len; + PsmNote *tempo=oc.root.next; + I64 x=8-oc.screen_x,note,octave; + while (TRUE) { + tempo->x=x; + tempo->y=50; + if (tempo==&oc.root) + break; + else { + if (tempo->type!=PSMT_METER) { + octave=tempo->octave; + if (octave!=OCTAVE_REST) { + note=tempo->note; + if (Bt(&tempo->flags,PSMf_SHARP)) + note--; + if (Bt(&tempo->flags,PSMf_FLAT)) + note++; + if (note<0) { + note=11; + octave--; + } else if (note>11) { + note=0; + octave++; + } + note=music.note_map[*LstSub(note,psm_note_lst)-'A']; + tempo->y=(15+(psm_note_map[note]-7*(octave-2)))*4; + } + } + x+=tempo->width; + if (tempo->type==PSMT_METER) { + measure_len=tempo->meter_top*4.0/tempo->meter_bottom; + measure_left=0; + } else + measure_left-=psm_durations[tempo->duration]; + if (measure_left<0.001) { + x+=PSM_NOTE_SPACING; + measure_left=measure_len; + } + } + tempo=tempo->next; + } +} + +U0 DrawIt(CTask *task,CDC *dc) +{ + PsmNote *tempo; + I64 i,x,y, + w=task->pix_width; + F64 measure_len=4,measure_left=measure_len; + Bool old_preempt=Preempt(OFF); + + dc->color=BLACK; + for (i=1;i<6;i++) + GrLine(dc,0,i*8,w,i*8); + for (i=7;i<12;i++) + GrLine(dc,0,i*8,w,i*8); + + PsmRecalcNoteXY; + if (oc.cur_note->x<64) { + oc.screen_x-=128; + PsmRecalcNoteXY; + } + if (oc.cur_note->x>=GR_WIDTH-64) { + oc.screen_x+=128; + PsmRecalcNoteXY; + } + + tempo=oc.root.next; + while (tempo!=&oc.root) { + x=tempo->x; + y=tempo->y; + if (measure_left<0.001) { + dc->color=BLACK; + GrLine(dc,x-PSM_NOTE_SPACING,8,x-PSM_NOTE_SPACING,11*8); + measure_left=measure_len; + } + if (tempo->type==PSMT_METER) { + if (tempo==oc.cur_note && PsmBlink) + dc->color=BROWN; + else + dc->color=BLACK; + DrawTimeSignature(dc,x,5*8,tempo->meter_top,tempo->meter_bottom); + measure_len=tempo->meter_top*4.0/tempo->meter_bottom; + measure_left=0; + } else { + if (tempo==oc.cur_note && PsmBlink) { + dc->color=BROWN; + GrPrint(dc,x+8,y,"%s",tempo->word); + } else if (tempo->flags&PSMF_SELECTED) + dc->color=RED; + else { + if (tempo->note!=NOTE_REST) + dc->color=BLACK; + else + dc->color=LTGRAY; + if (PsmHasWords(tempo->word)) + dc->color=GREEN; + } + DrawNote(dc,x,y,tempo->duration); + if (PsmIsDotted(tempo->duration)) + x+=PSM_NOTE_SPACING/2; + if (Bt(&tempo->flags,PSMf_SHARP)) + Sprite3(dc,x,y,0,$IB,"<13>",BI=13$); + else if (Bt(&tempo->flags,PSMf_FLAT)) + Sprite3(dc,x,y,0,$IB,"<14>",BI=14$); + measure_left-=psm_durations[tempo->duration]; + } + tempo=tempo->next; + } + + if (oc.cur_note==&oc.root && PsmBlink) + dc->color=BROWN; + else + dc->color=BLACK; + Sprite3(dc,oc.root.x,50,0,$IB,"<12>",BI=12$); + Preempt(old_preempt); +} + +#define PSM_NOTE_BOX_X 220 +#define PSM_NOTE_BOX_Y (13*FONT_HEIGHT+14) +U0 PsmSetPickNoteBoxX(I64 duration,I64 *x) +{ + I64 i; + *x=PSM_NOTE_BOX_X; + for (i=0;icolor=RED; + else if (psm_triplet_durations[i]) + oc.dc2->color=LTRED; + else + oc.dc2->color=BLACK; + DrawNote(oc.dc2,x,PSM_NOTE_BOX_Y,i); + } +} + +#define PSM_TOOLS_X 450 +#define PSM_TOOLS_Y 13*FONT_HEIGHT + +U0 DrawPickTools() +{ + if (oc.tool==PSMTT_BOX_TOOL) + oc.dc2->color=ROPF_DITHER+WHITE<<16+RED; + else + oc.dc2->color=ROPF_DITHER+WHITE<<16+BLACK; + GrBorder(oc.dc2,PSM_TOOLS_X,PSM_TOOLS_Y, + PSM_TOOLS_X+10,PSM_TOOLS_Y+10); + + if (oc.tool==PSMTT_PTR_TOOL) + oc.dc2->color=RED; + else + oc.dc2->color=BLACK; + (*gr.fp_draw_input_ptr)(oc.dc2,PSM_TOOLS_X+15,PSM_TOOLS_Y); + oc.dc2->color=BLACK; +} + +Bool PsmGetPickToolBox(I64 xx,I64 yy) +{ + if (PSM_TOOLS_X<=xxcolor=BLACK; + for (i=0;i",BI=17$ + + + + + +U0 PsmMenu(I64 psm_octave) +{ + DocClear; + "$$BD,WHITE$$$$FD,GREEN$$$$CM,0,12$$\n"; + Sprite($IB,"<17>",BI=17$); + '\n\n\n\n\n'; + + DrawDC2; + + "$$LTGREEN$$$$FG$$\t\tRest\n" + "$$LTGREEN$$$$FG$$\tDeletes Last Note\n" + "$$LTGREEN$$Left Mouse$$FG$$\tDrag note or shift word\n" + "$$LTGREEN$$Right Mouse$$FG$$\tChange duration or set word\n"; + Sprite($IB,"<6>",BI=6$,"$$SP+LA,\"\",LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_LEFT);\",BI=%d$$"); + " "; + if (oc.playing) + Sprite($IB,"<9>",BI=9$,"$$SP,\"\",LM=\"x\",BI=%d$$"); + else + Sprite($IB,"<8>",BI=8$,"$$SP,\"\",LM=\"x\",BI=%d$$"); + " "; + if (oc.record_entry->checked) { + oc.record_entry->checked=TRUE; + Sprite($IB,"<10>",BI=10$,"$$SP,\"\",LM=\"z\",BI=%d$$"); + } else + Sprite($IB,"<11>",BI=11$,"$$SP,\"\",LM=\"z\",BI=%d$$"); + " "; + Sprite($IB,"<7>",BI=7$,"$$SP+LA,\"\",LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_RIGHT);\",BI=%d$$"); + "$$CM+LX,0,6$$"; + PsmSetOctave(psm_octave); + WinMgrSync(2); +} +" +òÿÿÿñÿÿÿ +ñÿÿÿ +ñÿÿÿ +õÿÿÿ +õÿÿÿ +óÿÿÿ òÿÿÿ +öÿÿÿ +÷ÿÿÿ +ÿÿÿÿýÿÿÿüÿÿÿ +üÿÿÿ +ÿÿÿÿ +ÿÿÿÿýÿÿÿ +òÿÿÿ +þÿÿÿÿÿÿÿÿÿÿÿ +ýÿÿÿ +ÿÿÿÿ +ýÿÿÿ +ýÿÿÿÿÿÿÿ + +þÿÿÿÿÿÿÿÿÿÿÿ +óÿÿÿ +óÿÿÿ +óÿÿÿóÿÿÿ +òÿÿÿ òÿÿÿ +ÿÿÿÿýÿÿÿüÿÿÿ +üÿÿÿ +ÿÿÿÿ +ÿÿÿÿýÿÿÿ +òÿÿÿ +þÿÿÿÿÿÿÿÿÿÿÿ +ýÿÿÿ +ÿÿÿÿ +ýÿÿÿ +ýÿÿÿÿÿÿÿ + +þÿÿÿÿÿÿÿÿÿÿÿÍ +ÿÿÿÿýÿÿÿüÿÿÿ +üÿÿÿ +ÿÿÿÿ +ÿÿÿÿýÿÿÿ +òÿÿÿ +þÿÿÿÿÿÿÿÿÿÿÿ +ýÿÿÿ +ÿÿÿÿ +ýÿÿÿ +ýÿÿÿÿÿÿÿ + +þÿÿÿÿÿÿÿÿÿÿÿV +ÿÿÿÿýÿÿÿüÿÿÿ +üÿÿÿ +ÿÿÿÿ +ÿÿÿÿýÿÿÿ +òÿÿÿE +ÿÿÿÿýÿÿÿüÿÿÿ +üÿÿÿ +ÿÿÿÿ +ÿÿÿÿýÿÿÿa +   + + + a +   + +  + Õ +   + + + + + + + + + +     + +       + +    + + +  + + + +  +  + + + + + + + + +   + + + + + + + + + + + + ? +   + + # +þÿÿÿÖÿÿÿþÿÿÿ& +Öÿÿÿ& E +úÿÿÿ + úÿÿÿ + + ýÿÿÿ + V + ýÿÿÿ + + + +  +  + + +E +þÿÿÿöÿÿÿöÿÿÿ +öÿÿÿòÿÿÿ +òÿÿÿþÿÿÿòÿÿÿ +ôÿÿÿÿÿÿÿôÿÿÿò +$ + $ +0$0 +,4 +44 +,, +@$@ +<D +DD +<< +|„ +„„ +|| +lt +tt +ll +$À$ + + +ÄA$S4DDFTGdHtJ„K”L¤;´',E<RLTlU|IœP¬[¼] +PP +LT +TT +LL +`$` +p$p +€$€ +�$� + $  +°$° +À$À +œ¤ +¤¤ +œœ +¬´ +´´ +¬¬ +¼Ä +ÄÄ +¼¼ +P$P0@Pp€ °À@ +~   + P +   + +  +  \ No newline at end of file diff --git a/Apps/Psalmody/PsalmodyFile.CPP b/Apps/Psalmody/PsalmodyFile.CPP new file mode 100644 index 0000000..2fa97a8 --- /dev/null +++ b/Apps/Psalmody/PsalmodyFile.CPP @@ -0,0 +1,431 @@ +U0 PsmNoteDel(PsmNote *tempo) +{ + Free(tempo->word); + Free(tempo); +} + +PsmNote *PsmNoteCopy(PsmNote *tempo) +{ + PsmNote *tempo1=MAllocIdentical(tempo); + if (tempo->word) + tempo1->word=StrNew(tempo->word); + else + tempo1->word=NULL; + return tempo1; +} + +U0 PsmSongDel(PsmNote *root) +{ + PsmNote *tempo,*tempo1; + tempo=root->next; + while (tempo!=root) { + tempo1=tempo->next; + PsmNoteDel(tempo); + tempo=tempo1; + } + root->next=root->last=root; +} + +U0 PsmCutToClipboard() +{ + PsmNote *tempo,*tempo1; + PsmSongDel(&oc.clipboard); + tempo=oc.root.next; + while (tempo!=&oc.root) { + tempo1=tempo->next; + if (tempo->flags&PSMF_SELECTED) { + if (oc.cur_note==tempo) + oc.cur_note=tempo->next; + QueRem(tempo); + tempo->flags&=~PSMF_SELECTED; + QueIns(tempo,oc.clipboard.last); + } + tempo=tempo1; + } +} + +U0 PsmPasteClipboard() +{ + PsmNote *tempo,*tempo1; + tempo=oc.clipboard.next; + while (tempo!=&oc.clipboard) { + tempo1=PsmNoteCopy(tempo); + QueIns(tempo1,oc.cur_note->last); + tempo=tempo->next; + } +} + +U0 PsmCopyToClipboard() +{ + PsmNote *tempo,*tempo1; + PsmSongDel(&oc.clipboard); + tempo=oc.root.next; + while (tempo!=&oc.root) { + if (tempo->flags&PSMF_SELECTED) { + tempo->flags&=~PSMF_SELECTED; + tempo1=PsmNoteCopy(tempo); + QueIns(tempo1,oc.clipboard.last); + } + tempo=tempo->next; + } +} + +PsmNote *PsmFindNote(I64 x,I64) +{ + PsmNote *tempo=oc.root.next; + PsmRecalcNoteXY; + x+=PSM_NOTE_SPACING/2; + while (x>tempo->next->x && tempo!=&oc.root) + tempo=tempo->next; + return tempo; +} + +U8 *PsmMusicSetOctave(U8 *st,I64 *psm_octave) +{ + while ('0'<=*st<='9') + *psm_octave=*st++ -'0'; + return st; +} + +U8 *PsmMusicSetNoteLen(U8 *st,F64 *psm_duration) +{ + Bool cont=TRUE; + do { + switch (*st++) { + case 'w': *psm_duration=4.0; break; + case 'h': *psm_duration=2.0; break; + case 'q': *psm_duration=1.0; break; + case 'e': *psm_duration=0.5; break; + case 's': *psm_duration=0.25; break; + case 't': *psm_duration=2.0* *psm_duration/3.0; break; + case '.': *psm_duration=1.5* *psm_duration; break; + default: + st--; + cont=FALSE; + } + } while (cont); + return st; +} + +U0 PsmLoadSongStr(U8 *st,I64 *psm_octave,F64 *psm_duration) +{ + PsmNote *tempo,*tempo1; + I64 note,i=0; + while (*st) { + tempo=CAlloc(sizeof(PsmNote)); + while (*st && !('A'<=*st<='G') && *st!='R') { + if (*st=='M') { + tempo1=CAlloc(sizeof(PsmNote)); + tempo1->type=PSMT_METER; + st++; + if ('1'<=*st<='9') + tempo1->meter_top=*st++-'0'; + else + tempo1->meter_top=4; + if (*st=='/') + st++; + if ('1'<=*st<='9') + tempo1->meter_bottom=*st++-'0'; + else + tempo1->meter_bottom=4; + PsmSetWidth(tempo1); + QueIns(tempo1,oc.root.last); + } + while (*st=='(') { + Bts(&tempo->flags,PSMf_TIE); + st++; + } + st=PsmMusicSetOctave(st,psm_octave); + st=PsmMusicSetNoteLen(st,psm_duration); + } + if (!*st) { + PsmNoteDel(tempo); + break; + } + note=*st++-'A'; + if (note<7) { + note=music.note_map[note]; + if (*st=='b') { + Bts(&tempo->flags,PSMf_FLAT); + note--; + st++; + } else if (*st=='#') { + Bts(&tempo->flags,PSMf_SHARP); + note++; + st++; + } + if (note<0) { + note=11; + *psm_octave-=1; + } else if (note>11) { + note=0; + *psm_octave+=1; + } + tempo->note=note; + tempo->octave=*psm_octave; + } else { + tempo->note=NOTE_REST; + tempo->octave=OCTAVE_REST; + } + if (*psm_duration<=2*.25/3) + i=0; + else if (*psm_duration<=.25) + i=1; + else if (*psm_duration<=2*.5/3) + i=2; + else if (*psm_duration<=.5) + i=3; + else if (*psm_duration<=2.0/3) + i=4; + else if (*psm_duration<=.5*1.5) + i=5; + else if (*psm_duration<=1.0) + i=6; + else if (*psm_duration<=1.5) + i=7; + else if (*psm_duration<=2.0) + i=8; + else if (*psm_duration<=3.0) + i=9; + else if (*psm_duration<=4.0) + i=10; + else + i=11; + tempo->duration=i; + tempo->type=PSMT_NOTE; + PsmSetWidth(tempo); + QueIns(tempo,oc.cur_note->last); + } +} + +U0 PsmLoadSong(U8 *filename,I64 *psm_octave,F64 *psm_duration) +{ + U8 *st; + PsmNote *tempo; + CLex *lx=LexNew(MStrPrint("#include \"%s\"",filename)); + if (FileOcc("incomplete",filename,"")) + oc.incomplete_entry->checked=TRUE; + else + oc.incomplete_entry->checked=FALSE; + while (Lex(lx)) { + if (lx->token==TK_IDENT) + if (!StrCmp(lx->cur_str,"Play")) { + if (Lex(lx)=='(') + if (Lex(lx)==TK_STR) { + tempo=oc.root.last; + st=LexExtStr(lx); + PsmLoadSongStr(st,psm_octave,psm_duration); + if (lx->token==',') { + if (Lex(lx)==TK_STR) { + st=LexExtStr(lx); + do { + do tempo=tempo->next; + while (tempo!=&oc.root && tempo->type==PSMT_METER); + if (tempo!=&oc.root) + tempo->word=StrNew(st); + st+=StrLen(st)+1; + } while (*st); + } + } + } + } else if (!StrCmp(lx->cur_str,"music.tempo")) { + if (Lex(lx)=='=' && Lex(lx)==TK_F64) { + music.tempo=lx->cur_f64-0.0005; + tempo_state.tempo=Round(TEMPO_RANGE*(music.tempo-0.5)/4.4); + } + } else if (!StrCmp(lx->cur_str,"music.stacatto_factor")) { + if (Lex(lx)=='=' && Lex(lx)==TK_F64) { + music.stacatto_factor=lx->cur_f64-0.0005; + tempo_state.stacatto=Round(TEMPO_RANGE*(music.stacatto_factor-0.12)/0.88); + } + } + } + LexDel(lx); +} + +U8 *PsmCvtSong() +{ + PsmNote *tempo; + U8 *st,*src,*dst; + I64 i,note,octave,last_octave,last_duration; + + i=0; + tempo=oc.root.next; + last_octave=OCTAVE_REST; + last_duration=-1; + while (tempo!=&oc.root) { + dst=&tempo->ascii; + if (tempo->type==PSMT_METER) { + *dst++='M'; + *dst++=tempo->meter_top+'0'; + *dst++='/'; + *dst++=tempo->meter_bottom+'0'; + } else { + octave=tempo->octave; + note=tempo->note; + if (note!=NOTE_REST) { + if (Bt(&tempo->flags,PSMf_SHARP)) + note--; + if (Bt(&tempo->flags,PSMf_FLAT)) + note++; + if (note<0) { + note=11; + octave--; + } else if (note>11) { + note=0; + octave++; + } + note=music.note_map[*LstSub(note,psm_note_lst)-'A']; + } + if (Bt(&tempo->flags,PSMf_TIE)) + *dst++='('; + if (octave!=last_octave && note!=NOTE_REST) { + *dst++=octave+'0'; + last_octave=octave; + } + if (tempo->duration!=last_duration) { + src=LstSub(tempo->duration,psm_duration_lst); + *dst++=src[0]; + if (src[1]) + *dst++=src[1]; + last_duration=tempo->duration; + } + if (note!=NOTE_REST) { + src=LstSub(note,psm_note_lst); + *dst++=src[0]; + if (src[1]) + *dst++=src[1]; + else if (Bt(&tempo->flags,PSMf_FLAT)) + *dst++='b'; + else if (Bt(&tempo->flags,PSMf_SHARP)) + *dst++='#'; + } else + *dst++='R'; + } + *dst++=0; + i+=StrLen(tempo->ascii); + tempo=tempo->next; + } + + st=MAlloc(i+1); + dst=st; + tempo=oc.root.next; + while (tempo!=&oc.root) { + StrCpy(dst,tempo->ascii); + dst+=StrLen(tempo->ascii); + tempo=tempo->next; + } + *dst++=0; + return st; +} + +U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) +{ + CDoc *doc=DocNew(full_filename); + Bool has_words; + PsmNote *tempo,*tempo1; + F64 measure_len=4,two_measure_left=2*measure_len; + I64 ch; + U8 *ptr; + + Free(PsmCvtSong); //set tempo->ascii; + + music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; + music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; + + has_words=FALSE; + tempo=oc.root.next; + while (tempo!=&oc.root) { + if (PsmHasWords(tempo->word)) has_words=TRUE; + tempo=tempo->next; + } + if (oc.incomplete_entry->checked) + DocPrint(doc,"//0 incomplete\n"); + else if (has_words) + DocPrint(doc,"//0 has words\n"); + else + DocPrint(doc,"//0 no nothing\n"); + + DocPrint(doc, +"U0 Song()\n" +"{\n" +" Fs->task_end_cb=&SndTaskEndCB;\n" +" MusicSettingsRst;\n" +" music.tempo=%6.3f;\n" +" music.stacatto_factor=%6.3f;\n" +" try {\n" +" while (!ScanKey) {\n" +"\tPlay(\"",music.tempo+0.0005,music.stacatto_factor+0.0005); + + tempo=oc.root.next; + tempo1=tempo; + has_words=FALSE; + while (tempo!=&oc.root) { + DocPrint(doc,"%s",tempo->ascii); + if (PsmHasWords(tempo->word)) has_words=TRUE; + if (tempo->type==PSMT_METER) { + measure_len=tempo->meter_top*4.0/tempo->meter_bottom; + two_measure_left=0; + } else + two_measure_left-=psm_durations[tempo->duration]; + tempo=tempo->next; + if (two_measure_left<0.001 && tempo!=&oc.root) { + if (has_words) { + DocPrint(doc,"\",\n\t\t\""); + while (tempo1!=tempo) { + if (tempo1->type!=PSMT_METER) { + if (ptr=tempo1->word) { + while (ch=*ptr) { + if (ch==CH_SPACE) + *ptr=CH_SHIFT_SPACE; + ptr++; + } + DocPrint(doc,"%Q\\0",tempo1->word); + } else + DocPrint(doc,"%c\\0",CH_SHIFT_SPACE); + } + tempo1=tempo1->next; + } + } + DocPrint(doc,"\");\n" + "\tPlay(\""); + two_measure_left=2*measure_len; + tempo1=tempo; + has_words=FALSE; + } + } + if (has_words) { + DocPrint(doc,"\",\n\t\t\""); + while (tempo1!=tempo) { + if (tempo1->type!=PSMT_METER) { + if (ptr=tempo1->word) { + while (ch=*ptr) { + if (ch==CH_SPACE) + *ptr=CH_SHIFT_SPACE; + ptr++; + } + DocPrint(doc,"%Q\\0",tempo1->word); + } else + DocPrint(doc,"%c\\0",CH_SHIFT_SPACE); + } + tempo1=tempo1->next; + } + } + DocPrint(doc,"\");\n" +" }\n" +" } catch\n" +" PutExcept;\n" +" Snd(0);\n" +"}\n" +"\n" +"Song;\n"); + DocRecalc(doc); + if (full_filename) + Free(full_filename); + else + StrPrint(doc->filename.name,"%s/Temp.CPP.Z",dirname); + DocWrite(doc,TRUE); + full_filename=StrNew(doc->filename.name); + DocDel(doc); + return full_filename; +} diff --git a/Apps/Psalmody/PsalmodyMain.CPP b/Apps/Psalmody/PsalmodyMain.CPP new file mode 100644 index 0000000..ad79d2b --- /dev/null +++ b/Apps/Psalmody/PsalmodyMain.CPP @@ -0,0 +1,871 @@ +#define PSMR_FLAT -8 +#define PSMR_SHARP -7 +#define PSMR_TIE -6 +#define PSMR_REST -5 +#define PSMR_INS_NOTE -4 +#define PSMR_DELETE_NOTE -3 +#define PSMR_SET_WORD -2 + +F64 PopUpDuration() +{ + I64 i; + CDoc *doc=DocNew; + DocPrint(doc,"$$GREEN$$$$MU,\"Set Word\",LE=PSMR_SET_WORD$$\n" + "$$MU,\"Toggle Sharp\",LE=PSMR_SHARP$$\n" + "$$MU,\"Toggle Flat\",LE=PSMR_FLAT$$\n" + "$$MU,\"Toggle Tie\",LE=PSMR_TIE$$\n" + "$$MU,\"Make Rest\",LE=PSMR_REST$$\n" + "$$MU,\"Insert Note\",LE=PSMR_INS_NOTE$$\n" + "$$MU,\"Delete Note\",LE=PSMR_DELETE_NOTE$$\n\n"); + for (i=0;iflags; + oc.cur_note=tempo=PsmFindNote(x,y); + if (tempo!=&oc.root) { + Fs->win_inhibit=WIG_USER_TASK_DFT; + i=PopUpDuration; + if (0<=itype==PSMT_NOTE) + tempo->duration=i; + } else { + switch (i) { + case PSMR_REST: + if (tempo->type==PSMT_NOTE) { + tempo->octave=OCTAVE_REST; + tempo->note=NOTE_REST; + } + break; + case PSMR_SHARP: + if (tempo->type==PSMT_NOTE && tempo->octave!=OCTAVE_REST) { + if (Btr(&tempo->flags,PSMf_FLAT)) + tempo->note++; + if (Btc(&tempo->flags,PSMf_SHARP)) + tempo->note--; + else + tempo->note++; + if (tempo->note<0) { + tempo->note=11; + tempo->octave--; + } else if (tempo->note>11) { + tempo->note=0; + tempo->octave++; + } + } + break; + case PSMR_FLAT: + if (tempo->type==PSMT_NOTE && tempo->octave!=OCTAVE_REST) { + if (Btr(&tempo->flags,PSMf_SHARP)) + tempo->note--; + if (Btc(&tempo->flags,PSMf_FLAT)) + tempo->note++; + else + tempo->note--; + if (tempo->note<0) { + tempo->note=11; + tempo->octave--; + } else if (tempo->note>11) { + tempo->note=0; + tempo->octave++; + } + } + break; + case PSMR_TIE: + if (tempo->type==PSMT_NOTE) + Btc(&tempo->flags,PSMf_TIE); + break; + case PSMR_SET_WORD: + if (tempo->type==PSMT_NOTE) { + if (DocPut) DocPut->flags&=~DOCF_FORM; + if (PsmHasWords(tempo->word)) + st2=MStrPrint("\nWord(\"%Q\"):",tempo->word); + else + st2=MStrPrint("\nWord(\"\"):"); + DocBottom; + st=GetStr(st2); + Free(st2); + Free(tempo->word); + if (*st) { + tempo->word=MStrPrint("%q",st); + Free(st); + } else + tempo->word=StrNew(" "); + if (DocPut) DocPut->flags=DocPut->flags&~DOCF_FORM|old_doc_flags&DOCF_FORM; + } + break; + case PSMR_INS_NOTE: + tempo1=PsmNoteCopy(tempo); + QueIns(tempo1,tempo); + break; + case PSMR_DELETE_NOTE: + oc.cur_note=tempo->next; + QueRem(tempo); + PsmNoteDel(tempo); + break; + } + } + PsmSetWidth(oc.cur_note); + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; + } +} + +U0 PsmLeftClickPickNoteBox(I64 duration) +{ + I64 o,n,msg_code,a1,a2; + PsmNote *tempo,*tempo1; + do { + msg_code=GetMsg(&a1,&a2,1<oc.root.last->x) + tempo1=oc.root.last; + else if (a1x) + tempo1=&oc.root; + else + tempo1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); + tempo=CAlloc(sizeof(PsmNote)); + tempo->type=PSMT_NOTE; + a2=a2/4-15; + n=-a2%7; + o=2+a2/-7; + n=-n; + if (n<0) { + n+=7; + o++; + } + n=psm_note_inverse_map[n]; + tempo->note=n; + tempo->octave=o; + tempo->duration=duration; + PsmSetWidth(tempo); + QueIns(tempo,tempo1); + oc.cur_note=tempo->next; + } + DrawDC2; +} + +U0 PsmLeftClickPickMeterBox(I64 top,I64 bottom) +{ + I64 msg_code,a1,a2; + PsmNote *tempo,*tempo1; + do { + msg_code=GetMsg(&a1,&a2,1<=oc.root.x) + tempo1=oc.root.last; + else if (a1x) + tempo1=&oc.root; + else + tempo1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); + tempo=CAlloc(sizeof(PsmNote)); + tempo->type=PSMT_METER; + tempo->meter_top=top; + tempo->meter_bottom=bottom; + PsmSetWidth(tempo); + QueIns(tempo,tempo1); + oc.cur_note=tempo->next; + } + DrawDC2; +} + +U0 PsmLeftClickStaffPtr(I64 x,I64 y) +{ + PsmNote *tempo,*tempo1; + I64 o,n,msg_code,a1,a2,n_original,o_original; + oc.cur_note=tempo=PsmFindNote(x,y); + if (tempo!=&oc.root) { + if (tempo->type==PSMT_NOTE) { + n_original=tempo->note; + o_original=tempo->octave; + do { + msg_code=GetMsg(&a1,&a2,1<word); + tempo1->word=tempo->word; + tempo->word=NULL; + tempo->note=n_original; + tempo->octave=o_original; + } + } else { +move_note: + a2=a2/4-15; + n=-a2%7; + o=2+a2/-7; + n=-n; + if (n<0) { + n+=7; + o++; + } + n=psm_note_inverse_map[n]; + tempo->note=n; + tempo->octave=o; + } + } while (msg_code!=MSG_IP_L_UP); + PsmSetWidth(tempo); + } + } +} + +U0 PsmLeftClickStaffBox(I64 x,I64 y) +{ + I64 msg_code,a1,a2; + do { + msg_code=GetMsg(&a1,&a2,1<color=ROPF_DITHER+WHITE<<16+BLACK; + GrBorder(oc.dc2,x,y,a1,a2); + if (msg_code==MSG_IP_L_UP) { + if (x>a1) SwapI64(&x,&a1); + PsmMarkSelected(x,a1,TRUE); + } + } while (msg_code!=MSG_IP_L_UP); + DrawDC2; +} + +U0 PsmLeftClick(I64 x,I64 y) +{ + I64 duration,top,bottom; + if (y<13*FONT_HEIGHT) { + if (oc.tool==PSMTT_PTR_TOOL) + PsmLeftClickStaffPtr(x,y); + else + PsmLeftClickStaffBox(x,y); + } else { + duration=PsmGetPickNoteBoxDuration(x,y); + if (0<=durationtask_end_cb=&SndTaskEndCB; + while (TRUE) { + i++; + switch (psm_play_mode) { + case PSMPM_NORMAL: + if (psm_play_f!=f) { + f=psm_play_f; + Snd(f); + } + break; + case PSMPM_REVERB1: + if (psm_play_f!=f) { + if (f>0) + f2=f; + f=psm_play_f; + } + if (!(i&15)) { + if (i&16) + Snd(f); + else + Snd(f2); + } + break; + } + Sleep(1); + } +} + +U8 PsmCvtDuration(F64 d) +{ + F64 d1,d2; + I64 j; + for (j=0;jx<=xx+o->w && yh) { + Msg(MSG_KEY_DOWN,o->ascii,0); + return; + } + } + } +} + +U0 PsmUpKey(I64 x,I64 y) +{ + I64 i; + PsmKey *o; + y-=FONT_HEIGHT*13; + if (0<=yx<=xx+o->w && yh) { + Msg(MSG_KEY_UP,o->ascii,0); + return; + } + } + } +} + +U0 PsmPushMode(I64 psm_octave) +{ + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; + PsmMenu(psm_octave); +} + +U0 PsmPopMode() +{ + Fs->win_inhibit=WIG_USER_TASK_DFT; + DCFill; +} + +#define PSMF_CD 1 +#define PSMF_INCOMPLETE 2 + +U0 Psalmody(U8 *dirname=NULL) +{ + Bool was_playing; + I64 a1,a2,msg_code=0,col, + note=NOTE_REST,octave=OCTAVE_REST,psm_octave=3,timeout_val,timeout_val2, + old_doc_flags; + U8 *filename=NULL,*st,*st2; + CTask *play_task=Spawn(&PsmPlayTask,NULL,"Psalmody Play",,Fs); + PsmNote *tempo; + F64 f=0,last_f=0,psm_duration=1.0, + d,evt_time=tS,note_down_time=tS; + CCtrl *c=TempoNew; + + if (DocPut) old_doc_flags=DocPut->flags; + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + WinBorder; + AutoComplete; + Preempt(OFF); + + MkDir("::/Home/Psalmody"); + MusicSettingsRst; + tempo_state.tempo=Round(TEMPO_RANGE*(music.tempo-0.5)/4.4); + tempo_state.stacatto=Round(TEMPO_RANGE*(music.stacatto_factor-0.12)/0.88); + + if (DocPut) DocPut->flags|=DOCF_FORM; + + MemSet(&oc,0,sizeof(PsmCtrl)); + oc.screen_x=0; + oc.root.next=oc.root.last=&oc.root; + oc.clipboard.next=oc.clipboard.last=&oc.clipboard; + oc.cur_note=&oc.root; + oc.dc2=DCAlias; + + MenuPush( + "File {" + " New(,'.');" + " ChgDir(MSG_CMD,PSMF_CD);" + " Open(,CH_CTRLO);" + " SaveAs(,CH_CTRLA);" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Edit {" + " Cut(,CH_CTRLX);" + " Copy(,CH_CTRLC);" + " Paste(,CH_CTRLV);" + " RightMenu(,'\n');" + " BackSpace(,CH_BACKSPACE);" + " DeleteNote(,,SC_DELETE);" + " ClearSong(,'.');" + " Left(,,SC_CURSOR_LEFT);" + " Right(,,SC_CURSOR_RIGHT);" + " GoBegin(,,0x4CB0000044B);" + " GoEnd(,,0x4CD0000044D);" + "}" + "Song {" + " Play(,'x');" + " Record(,'z');" + " Random(,',');" + " MarkIncomplete(MSG_CMD,PSMF_INCOMPLETE);" + "}" + "Snd {" + " Reverb(,'c');" + " Octave0(,'0');" + " Octave1(,'1');" + " Octave2(,'2');" + " Octave3(,'3');" + " Octave4(,'4');" + " Octave5(,'5');" + " Octave6(,'6');" + "}" + "Help {" + " Help(,,SC_F1);" + "}" + ); + oc.incomplete_entry=MenuEntryFind(Fs->cur_menu,"Song/MarkIncomplete"); + oc.record_entry=MenuEntryFind(Fs->cur_menu,"Song/Record"); + + WinMax; + + if (!dirname) + dirname=StrNew("::/Home/Psalmody"); + else + dirname=StrNew(dirname); + PsmPushMode(psm_octave); + col=0; + Fs->draw_it=&DrawIt; + + try { + while (TRUE) { + was_playing=FALSE; +mo_start: + if (ip.pos_text.y-Fs->win_top<18) + msg_code=GetMsg(&a1,&a2,1< when the Doc Buttons are clicked. + //This is so that kbd and mouse are the same for Doc's. + //We must now pass the onto the Doc handler. + PutKey(a1,a2); + goto mo_start; + } + if (msg_code!=MSG_IP_MOVE) { + DocBottom; + if (was_playing || DocPut->cur_entry->y>=Fs->win_height-2) { + PsmMenu(psm_octave); + col=0; + } + } + + octave=psm_octave; + switch (msg_code) { + case MSG_CMD: + PsmPopMode; + switch (a1) { + case PSMF_CD: + st2=dirname; + if (dirname=PopUpPickDir) { + Free(st2); + Free(filename); + filename=NULL; + } else + dirname=st2; + break; + case PSMF_INCOMPLETE: + oc.incomplete_entry->checked=!oc.incomplete_entry->checked; + break; + } + PsmPushMode(psm_octave); + col=0; + break; + case MSG_KEY_DOWN: + evt_time=tS; + if ('0'<=a1<='9') { + psm_octave=a1-'0'; + PsmMenu(psm_octave); + col=0; + } else { + switch (a1) { + sub_switch_start: + case 'a': note=7; octave--; break; + case 's': note=8; octave--; break; + case 'e': note=9; octave--; break; + case 'd': note=10; octave--; break; + case 'r': note=11; octave--; break; + case 'f': note=0; break; + case 't': note=1; break; + case 'g': note=2; break; + case 'h': note=3; break; + case 'u': note=4; break; + case 'j': note=5; break; + case 'i': note=6; break; + case 'k': note=7; break; + case 'l': note=8; break; + case 'p': note=9; break; + case ';': note=10; break; + case '[': note=11; break; + case '\'': note=0; octave++; break; + case ']': note=1; octave++; break; + sub_switch_end: + f=Note2Freq(note,octave); + break; + case CH_SPACE: + note=NOTE_REST; + octave=OCTAVE_REST; + f=-1; //rest + break; + + case 0: + switch (a2.u8[0]) { + case SC_CURSOR_LEFT: + if (a2&SCF_CTRL) { + while (oc.cur_note->last!=&oc.root) { + oc.cur_note=oc.cur_note->last; + if (oc.cur_note!=&oc.root) + LBEqu(&oc.cur_note->flags,PSMf_SELECTED,a2&SCF_SHIFT); + } + } else { + if (oc.cur_note->last!=&oc.root) { + oc.cur_note=oc.cur_note->last; + if (oc.cur_note!=&oc.root) + LBEqu(&oc.cur_note->flags,PSMf_SELECTED,a2&SCF_SHIFT); + } + } + break; + case SC_CURSOR_RIGHT: + if (a2&SCF_CTRL) { + while (oc.cur_note!=&oc.root) { + if (oc.cur_note!=&oc.root) + LBEqu(&oc.cur_note->flags,PSMf_SELECTED,a2&SCF_SHIFT); + oc.cur_note=oc.cur_note->next; + } + } else { + if (oc.cur_note!=&oc.root) { + if (oc.cur_note!=&oc.root) + LBEqu(&oc.cur_note->flags,PSMf_SELECTED,a2&SCF_SHIFT); + oc.cur_note=oc.cur_note->next; + } + } + break; + case SC_DELETE: + if (a2&SCF_SHIFT) + PsmCutToClipboard; + else { + tempo=oc.cur_note; + oc.cur_note=tempo->next; + if (tempo!=&oc.root) { + QueRem(tempo); + PsmNoteDel(tempo); + } + } + break; + case SC_INS: + if (a2&SCF_SHIFT) + PsmPasteClipboard; + else if (a2&SCF_CTRL) + PsmCopyToClipboard; + break; + case SC_F1: + PsmPopMode; + PopUpEd("::/Apps/Psalmody/Help.TXT.Z",Fs); + PsmPushMode(psm_octave); + col=0; + break; + } + break; + case ',': + Free(filename); + filename=NULL; + PsmPopMode; + music.octave=psm_octave; + if (st2=GodSongStr) { + PsmLoadSongStr(st2,&psm_octave,&psm_duration); + Free(st2); + } + PsmPushMode(psm_octave); + col=0; + break; + case CH_CTRLO: + PsmPopMode; + AcctOneTimePopUp(ARf_PSALMODY_JUKEBOX, + "Select a song and preview it.\n" + "$$GREEN$$$$FG$$ to load it into Psalmody.\n\n" + ST_WARN_ST " Graphics and other embelishments\n" + "will be lost because Psalmody can't\n" + "parse HolyC programs completely.\n"); + Free(filename); + filename=NULL; + JukeBox(dirname,&filename); + if (filename) { + oc.screen_x=0; + psm_duration=1.0; + psm_octave=3; + PsmSongDel(&oc.root); + oc.cur_note=&oc.root; + PsmLoadSong(filename,&psm_octave,&psm_duration); + oc.record_entry->checked=FALSE; + oc.cur_note=oc.root.next; + } + PsmPushMode(psm_octave); + col=0; + break; + case CH_CTRLA: + PsmPopMode; + filename=PsmSaveSong(dirname,filename); + PsmPushMode(psm_octave); + break; + case CH_CTRLC: + PsmCopyToClipboard; + break; + case CH_CTRLV: + PsmPasteClipboard; + break; + case CH_CTRLX: + PsmCutToClipboard; + break; + case '.': + PsmMenu(psm_octave); + col=0; + Free(filename); + filename=NULL; + psm_duration=1.0; + psm_octave=3; + PsmSongDel(&oc.root); + oc.cur_note=&oc.root; + oc.screen_x=0; + break; + case '\n': + if (oc.cur_note!=&oc.root) + PsmRightClick(oc.cur_note->x,oc.cur_note->y); + break; + case 'x': + if (was_playing) + break; + col=0; + oc.playing=TRUE; + PsmMenu(psm_octave); + tempo=oc.cur_note; + while (tempo!=&oc.root) { + if (tempo->type!=PSMT_METER) { + timeout_val=cnts.jiffies; + if (ip.pos_text.y-Fs->win_top<18) + msg_code=ScanMsg(&a1,&a2,1<win_top>=18 && msg_code==MSG_IP_L_DOWN) + goto mo_start; + else + goto mo_got_msg; + } + oc.cur_note=tempo; + oc.screen_x+=tempo->x-0.33*GR_WIDTH; + if (PsmHasWords(tempo->word)) + "%s",tempo->word; + note=tempo->note; + octave=tempo->octave; + if (note!=NOTE_REST) + f=Note2Freq(note,octave); + else + f=-1; //rest + if (f>0) + psm_play_f=f; + else + psm_play_f=0; + + music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; + music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; + d=JIFFY_FREQ*psm_durations[tempo->duration]/music.tempo; + if (Bt(&tempo->flags,PSMf_TIE)) { + timeout_val+=d; + timeout_val2=timeout_val; + } else { + timeout_val+=d*music.stacatto_factor; + timeout_val2=timeout_val+ + d*(1.0-music.stacatto_factor); + } + SleepUntil(timeout_val); + psm_play_f=0; + SleepUntil(timeout_val2); + } + tempo=tempo->next; + } + oc.cur_note=&oc.root; + oc.screen_x+=oc.cur_note->x-GR_WIDTH/2; + oc.playing=FALSE; + PsmMenu(psm_octave); + col=0; + f=0; + psm_play_f=0; + break; + case CH_BACKSPACE: + tempo=oc.cur_note->last; + if (tempo!=&oc.root) { + QueRem(tempo); + PsmNoteDel(tempo); + } + if (col) { + '' CH_BACKSPACE; + col--; + } + break; + case 'c': + psm_play_mode++; + if (psm_play_mode>=PSMPM_NUM_PLAY_MODES) psm_play_mode=0; + PsmMenu(psm_octave); + col=0; + break; + case 'z': + if (oc.record_entry->checked) + oc.record_entry->checked=FALSE; + else { + oc.record_entry->checked=TRUE; + psm_duration=1.0; + psm_octave=3; + oc.screen_x=0; + } + PsmMenu(psm_octave); + col=0; + break; + case CH_ESC: + PsmPopMode; + filename=PsmSaveSong(dirname,filename); + PsmPushMode(psm_octave); + case CH_SHIFT_ESC: + goto mo_done; + } + } + break; + case MSG_KEY_UP: + evt_time=tS; + f=0; + break; + case MSG_IP_MOVE: + if (a2>18*FONT_HEIGHT) + Fs->win_inhibit=WIG_USER_TASK_DFT; + else + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; + break; + case MSG_IP_L_DOWN: + PsmDownKey(a1,a2); + PsmLeftClick(a1,a2); + break; + case MSG_IP_L_UP: + PsmUpKey(a1,a2); + break; + default: + PsmRightClick(a1,a2); + } + if (f!=last_f) { + if (f>0) { + st=LstSub(note,psm_note_lst); + psm_play_f=f; + } else { + if (f<0) + st="R"; + else + st=""; + psm_play_f=0; + } + if (oc.record_entry->checked) { + if (last_f) { + music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; + music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; + + tempo->duration=PsmCvtDuration(music.tempo*(evt_time-note_down_time)); + PsmSetWidth(tempo); + QueIns(tempo,oc.cur_note->last); + } + if (f) { + note_down_time=tS; + tempo=CAlloc(sizeof(PsmNote)); + tempo->type=PSMT_NOTE; + tempo->note=note; + tempo->octave=octave; + if (st[1]=='#') + Bts(&tempo->flags,PSMf_SHARP); + } + } + last_f=f; + "%s",st; + col+=StrLen(st); + if (col>=Fs->win_width-1) { + '\n'; + col=0; + } + } + } +mo_done: + GetMsg(,,1<flags=DocPut->flags&~DOCF_FORM|old_doc_flags&DOCF_FORM; + Free(dirname); + MenuPop; +} diff --git a/Apps/Psalmody/Run.CPP b/Apps/Psalmody/Run.CPP index 9784fe0..a05ede1 100644 --- a/Apps/Psalmody/Run.CPP +++ b/Apps/Psalmody/Run.CPP @@ -1,3 +1,4 @@ -#include "/Apps/Psalmody/Load" -#include "/Apps/Psalmody/Install" //Might as well always install +Cd(__DIR__);; +#include "Load" +#include "Install" //Might as well always install Psalmody; diff --git a/Apps/Span/Install.CPP b/Apps/Span/Install.CPP index 659fce7..fc5f95f 100644 --- a/Apps/Span/Install.CPP +++ b/Apps/Span/Install.CPP @@ -1 +1 @@ -MkDir("HOME/Span"); +MkDir("::/Home/Span"); diff --git a/Apps/Span/Load.CPP b/Apps/Span/Load.CPP index 5dc30b7..4d1c09a 100644 --- a/Apps/Span/Load.CPP +++ b/Apps/Span/Load.CPP @@ -1,9 +1,9 @@ #help_index "Games" -Cd("/Apps/Span");; +Cd(__DIR__);; #include "Span.HPP" #include "SpanDerive" -#include "SpanBridge1" +#include "SpanBridge" #include "SpanNew" #include "SpanMain" diff --git a/Apps/Span/Run.CPP b/Apps/Span/Run.CPP index 95cc333..a20a566 100644 --- a/Apps/Span/Run.CPP +++ b/Apps/Span/Run.CPP @@ -1,3 +1,3 @@ -Cd("/Apps/Span");; +Cd(__DIR__);; #include "Load" Span; diff --git a/Apps/Span/SpanBridge1.CPP b/Apps/Span/SpanBridge.CPP similarity index 100% rename from Apps/Span/SpanBridge1.CPP rename to Apps/Span/SpanBridge.CPP diff --git a/Apps/Span/SpanMain.CPP b/Apps/Span/SpanMain.CPP index a46317c..05cbca3 100644 --- a/Apps/Span/SpanMain.CPP +++ b/Apps/Span/SpanMain.CPP @@ -290,7 +290,7 @@ U0 Span() DocCursor; WinBorder; - WordStat; + AutoComplete; Fs->win_inhibit|=WIG_DBL_CLICK; MenuPush( diff --git a/Apps/Span/SpanNew.CPP b/Apps/Span/SpanNew.CPP index 165f902..f216d8e 100644 --- a/Apps/Span/SpanNew.CPP +++ b/Apps/Span/SpanNew.CPP @@ -19,8 +19,8 @@ U0 SpanDel(CMathODE *ode) } } -#define M_SIZE (sizeof(MyMass) -offset(CMass.start_saved_area)) -#define S_SIZE (sizeof(MySpring)-offset(CSpring.start_saved_area)) +#define M_SIZE (sizeof(MyMass) -offset(CMass.start)) +#define S_SIZE (sizeof(MySpring)-offset(CSpring.start)) U8 *SpanSave(CMathODE *ode,I64 *_size=NULL) { @@ -49,14 +49,14 @@ U8 *SpanSave(CMathODE *ode,I64 *_size=NULL) tempm=ode->next_mass; while (tempm!=&ode->next_mass) { - MemCpy(ptr,&tempm->start_saved_area,M_SIZE); + MemCpy(ptr,&tempm->start,M_SIZE); ptr+=M_SIZE; tempm=tempm->next; } temps=ode->next_spring; while (temps!=&ode->next_spring) { - MemCpy(ptr,&temps->start_saved_area,S_SIZE); + MemCpy(ptr,&temps->start,S_SIZE); ptr+=S_SIZE; temps=temps->next; } @@ -68,10 +68,10 @@ Bool SpanWrite(CMathODE *ode) { U8 *name,*buf; I64 size; - Bool result=FALSE,old_silent=Silent(ON); - MkDir("HOME/Span"); + Bool result=FALSE,old_silent=Silent; + MkDir("::/Home/Span"); Silent(old_silent); - if (name=PopUpFileName("HOME/Span/Game.DAT")) { + if (name=PopUpFileName("::/Home/Span/Game.DAT")) { if (buf=SpanSave(ode,&size)) { FileWrite(name,buf,size); Free(buf); @@ -96,14 +96,14 @@ U0 SpanLoad(CMathODE *ode,U8 *src) for (i=0;istart_saved_area,src,M_SIZE); + MemCpy(&tempm->start,src,M_SIZE); src+=M_SIZE; QueIns(tempm,ode->last_mass); } for (i=0;istart_saved_area,src,S_SIZE); + MemCpy(&temps->start,src,S_SIZE); src+=S_SIZE; QueIns(temps,ode->last_spring); temps->end1=MassFindNum(ode,temps->end1_num); @@ -114,10 +114,10 @@ U0 SpanLoad(CMathODE *ode,U8 *src) U8 *SpanRead() { U8 *src=NULL,*name; - Bool old_silent=Silent(ON); - MkDir("HOME/Span"); + Bool old_silent=Silent; + MkDir("::/Home/Span"); Silent(old_silent); - if (name=PopUpPickFile("HOME/Span")) { + if (name=PopUpPickFile("::/Home/Span")) { src=FileRead(name); Free(name); } diff --git a/Apps/Strut/Load.CPP b/Apps/Strut/Load.CPP index e0bc52b..5fca01e 100644 --- a/Apps/Strut/Load.CPP +++ b/Apps/Strut/Load.CPP @@ -1,6 +1,6 @@ #help_index "Games" -Cd("/Apps/Strut");; +Cd(__DIR__);; #include "Strut" #help_index "" diff --git a/Apps/Strut/Run.CPP b/Apps/Strut/Run.CPP index c361905..f076168 100644 --- a/Apps/Strut/Run.CPP +++ b/Apps/Strut/Run.CPP @@ -1,3 +1,3 @@ -Cd("/Apps/Strut");; +Cd(__DIR__);; #include "Load" Strut; diff --git a/Apps/Strut/Strut.CPP b/Apps/Strut/Strut.CPP index e87103b..af8d3b9 100644 --- a/Apps/Strut/Strut.CPP +++ b/Apps/Strut/Strut.CPP @@ -617,7 +617,7 @@ U0 Strut() Define("ST_MAIN_MODES"),main_mode_colors,&main_mode_button); WinBorder; Preempt(OFF); - WordStat; + AutoComplete; DocCursor; DocClear; Init; @@ -634,4 +634,4 @@ U0 Strut() SettingsPop; CtrlButtonDel(bt_main_mode); } -øÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ùÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +øÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ùÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Apps/TimeClock/Install.CPP b/Apps/TimeClock/Install.CPP index 66c842a..e2e1c55 100644 --- a/Apps/TimeClock/Install.CPP +++ b/Apps/TimeClock/Install.CPP @@ -1,5 +1,5 @@ -if (!FileFind("HOME/TimeClock",,FUF_JUST_DIRS)) { - MkDir("HOME/TimeClock"); +if (!FileFind("::/Home/TimeClock",,FUF_JUST_DIRS)) { + MkDir("::/Home/TimeClock"); DocClear; "After Loading, type $$GREEN$$PunchIn;$$FG$$, " "$$GREEN$$PunchOut;$$FG$$ or $$GREEN$$TimeRep;$$FG$$\n" diff --git a/Apps/TimeClock/Load.CPP b/Apps/TimeClock/Load.CPP index 0be5caf..4d448ad 100644 --- a/Apps/TimeClock/Load.CPP +++ b/Apps/TimeClock/Load.CPP @@ -1,6 +1,7 @@ #help_index "Misc" -#include "/Apps/TimeClock/TimeClk" -#include "/Apps/TimeClock/Install" //Might as well always install +Cd(__DIR__);; +#include "TimeClk" +#include "Install" //Might as well always install #help_index "" diff --git a/Apps/TimeClock/TimeClk.CPP b/Apps/TimeClock/TimeClk.CPP index 2d56c75..766ef6f 100644 --- a/Apps/TimeClock/TimeClk.CPP +++ b/Apps/TimeClock/TimeClk.CPP @@ -1,4 +1,4 @@ -#define TIME_FILENAME "HOME/TimeClock/TimeFile.DAT.Z" +#define TIME_FILENAME "::/Home/TimeClock/TimeFile.DAT.Z" #define TET_EOF 0 #define TET_PUNCH_IN 1 @@ -20,7 +20,7 @@ U0 TimeFileRead(TimeEntry *header) buf=FileRead(TIME_FILENAME); if (!buf) buf=CAlloc(1); - header->next=header->last=header; + QueInit(header); ptr=buf; while (type=*ptr++) { tempt=CAlloc(sizeof(TimeEntry)); @@ -116,10 +116,8 @@ public Bool TimeRep(TimeEntry **_header=NULL) public U0 PunchOut() { - Bool is_in; TimeEntry *tempt,*header; - is_in=TimeRep(&header); - if (!is_in) + if (!TimeRep(&header)) "$$BK,1$$Already Punched-Out$$BK,0$$\n"; else { tempt=MAlloc(sizeof(TimeEntry)); @@ -136,10 +134,8 @@ public U0 PunchOut() public U0 PunchIn() { - Bool is_in; TimeEntry *tempt,*header; - is_in=TimeRep(&header); - if (is_in) + if (TimeRep(&header)) "$$BK,1$$Already Punched-In$$BK,0$$\n"; else { tempt=MAlloc(sizeof(TimeEntry)); diff --git a/Apps/TimeOut/Load.CPP b/Apps/TimeOut/Load.CPP index a7f7a45..28cd615 100644 --- a/Apps/TimeOut/Load.CPP +++ b/Apps/TimeOut/Load.CPP @@ -1,5 +1,6 @@ #help_index "Games" -#include "/Apps/TimeOut/TimeOut" +Cd(__DIR__);; +#include "TimeOut" #help_index "" diff --git a/Apps/TimeOut/Run.CPP b/Apps/TimeOut/Run.CPP index db4087d..fd210c6 100644 --- a/Apps/TimeOut/Run.CPP +++ b/Apps/TimeOut/Run.CPP @@ -1,2 +1,3 @@ -#include "/Apps/TimeOut/Load" +Cd(__DIR__);; +#include "Load" TimeOut; \ No newline at end of file diff --git a/Apps/TimeOut/TimeOut.CPP b/Apps/TimeOut/TimeOut.CPP index 42c1016..4c1b4f0 100644 --- a/Apps/TimeOut/TimeOut.CPP +++ b/Apps/TimeOut/TimeOut.CPP @@ -24,7 +24,7 @@ F64 t0,tf,snd_bullet_timeout,snd_death_timeout; #define HACK_DIST 5 class Man { - I64 x,y,closest_d; + I64 x,y,best_dd; F64 é,hack_phase,corpse_timeout; Bool friendly,dead,pad[6]; } m[MAX_MAN]; @@ -157,7 +157,7 @@ U0 DrawIt(CTask *task,CDC *dc) _temps=friendly_imgs; else _temps=enemy_imgs; - if (tempm->closest_dbest_ddhack_phase+20*tS,0)/(2*ã)]; else temps=_temps[0]; @@ -276,7 +276,7 @@ U0 Init() tempm->y=yy+64*RandU32/MAX_I32-64+100; tempm->corpse_timeout=0; tempm->hack_phase=2*ã*Rand; - tempm->closest_d=MAX_I64; + tempm->best_dd=MAX_I64; } for (i=0;itext_attr=YELLOW<<4+CYAN; @@ -594,7 +595,7 @@ to_done: AcctRegWriteBranch("TempleOS/TimeOut","I64 best_score=%d;\n",best_score); } -0ôÿÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ôÿÿÿÐÿÿÿ0ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @@ -816,8 +817,8 @@ to_done: -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Ê8ryÍÿÿÿ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ 66æÿÿÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz ûÿÿÿøÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿ ‚$íÿÿÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ’y=ÃÿÿÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ò÷ÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ - þÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ² -þÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz ûÿÿÿøÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÒ - þÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ² -þÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò÷ÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ  ÿÿÿ ÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Ê8Íÿÿÿ‡ÿÿÿryÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ æÿÿÿêÿÿÿ66ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzûÿÿÿøÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿ ‚íÿÿÿëÿÿÿ$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ’ÃÿÿÿÄÿÿÿy=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ò÷ÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒþÿÿÿùÿÿÿ + ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²þÿÿÿûÿÿÿ +ÿÿÿÿÿÿÿÿÿÿ ÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzûÿÿÿøÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÒþÿÿÿùÿÿÿ + ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²þÿÿÿûÿÿÿ +ÿÿÿÿÿÿÿÿÿ ÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò÷ÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ  ÿÿÿ ÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Apps/ToTheFront/AIs/SimpleAI.CPP b/Apps/ToTheFront/AIs/SimpleAI.CPP index 2e5a227..45c0adb 100644 --- a/Apps/ToTheFront/AIs/SimpleAI.CPP +++ b/Apps/ToTheFront/AIs/SimpleAI.CPP @@ -1,7 +1,7 @@ Unit *FindNearestUnit(I64 row,I64 col,I64 player,Bool in_LOS,F64 range=-1) { I64 i; - F64 d,best_d=MAX_F64,x1,y1,x2,y2; + F64 dd,best_dd=MAX_F64,x1,y1,x2,y2; Unit *best=NULL; //$LK,"Sqrt",A="MN:Sqrt"$() is slow, so work with squared distances. if (range<0) @@ -13,10 +13,10 @@ Unit *FindNearestUnit(I64 row,I64 col,I64 player,Bool in_LOS,F64 range=-1) if (units[player][i].life>0) { if (!in_LOS || LOS(row,col,units[player][i].row,units[player][i].col)) { RowCol2XY(&x2,&y2,units[player][i].row,units[player][i].col); - d=Sqr(x2-x1)+Sqr(y2-y1); - if (d<=range && d compile chk feature. DefinePrint("HEX_RADIUS","%12.9f",DSIN+0.01); //slop d=PopUpRangeF64(0,100,25,"%3f% %%","Animation Delay\n"); DefinePrint("ANIMATION_DELAY","%5.3f",d/100.0); - Randomize; - Randomize(PopUpGetI64("Seed(0x%X):",Fs->rnd_seed)); + Seed(PopUpGetI64("Seed(0x%X):",Seed)); XTalk(rotate_tank_task," "); TaskWait(rotate_tank_task); Kill(rotate_tank_task); @@ -72,7 +71,7 @@ I64 map_cols=(MAP_WIDTH-DCOS)/(2*HEX_SIDE+2*DCOS), map_width=map_cols*(2*HEX_SIDE+2*DCOS)+DCOS, map_height=map_rows*DSIN+DSIN+1; -CDC *map; +CDC *map_dc; U8 terrain[map_rows][map_cols]; //Centers of hexes @@ -331,7 +330,7 @@ Bool MPRecalcVisible(MPCtrl1 *job) { Bool result=FALSE,seen; I64 i,j,row,col; - F64 x1,y1,x2,y2,d,range; + F64 x1,y1,x2,y2,dd,range; Unit *ut0,*ut1; ut0=&units[cur_player][job->lo]; ut1=&units[enemy_player][job->lo]; @@ -352,8 +351,8 @@ Bool MPRecalcVisible(MPCtrl1 *job) if (ut1->life>0 && LOS(row,col,ut1->row,ut1->col)) { RowCol2XY(&x2,&y2,ut1->row,ut1->col); - d=Sqr(x2-x1)+Sqr(y2-y1); - if (dvisible[cur_player],0); } @@ -531,18 +530,18 @@ I64 MoveCost(Unit *tempu,I64 r,I64 c,I64 facing) I64 MoveOneHex(I64 *_row,I64 *_col,F64 x,F64 y) { I64 direction,best_direction=-1,r,c; - F64 d,best_d,x1,y1; + F64 dd,best_dd,x1,y1; RowCol2XY(&x1,&y1,*_row,*_col); - best_d=Sqr(x1-x)+Sqr(y1-y); + best_dd=Sqr(x1-x)+Sqr(y1-y); for (direction=0;direction<6;direction++) { r=*_row; c=*_col; Toward(&r,&c,direction); RowCol2XY(&x1,&y1,r,c); - d=Sqr(x1-x)+Sqr(y1-y); + dd=Sqr(x1-x)+Sqr(y1-y); if (0<=r=0) { "+%5.2f Hit\n",d; hit=TRUE; @@ -873,7 +872,7 @@ U0 IndirectFireResolve() if (dammage>0) { "Life:%3d - Dammage:%3f =",target->life,dammage; if (dammage>=target->life) { - "Killed\n"; + 'Killed\n'; target->life=0; RecalcVisible(RV_FRIENDLY_UNIT_DIED,target); alive_cnt[target->player]--; @@ -909,30 +908,30 @@ U0 DrawHexes() F64 dx=2*HEX_SIDE+2*DCOS,dy=2*DSIN, x,y,x1,y1,x2,y2; I64 i,j; - map->color=WHITE; - GrRect(map,0,0,map->width,map->height); - map->color=BLACK; + map_dc->color=WHITE; + GrRect(map_dc,0,0,map_dc->width,map_dc->height); + map_dc->color=BLACK; y=0; for (j=0;jcolor=terrain[j][i]; + map_dc->color=terrain[j][i]; RowCol2XY(&x,&y,j,i); - GrFloodFill(map,x,y); + GrFloodFill(map_dc,x,y); } } @@ -1033,12 +1032,12 @@ U0 DrawRivers() if (0<=rcolor=LTBLUE; - map->pen_width=4; - GrLine3(map,x1,y1,0,x2,y2,0); - map->color=BLUE; - map->pen_width=2; - GrLine3(map,x1,y1,0,x2,y2,0); + map_dc->color=LTBLUE; + map_dc->pen_width=4; + GrLine3(map_dc,x1,y1,0,x2,y2,0); + map_dc->color=BLUE; + map_dc->pen_width=2; + GrLine3(map_dc,x1,y1,0,x2,y2,0); } } } @@ -1049,8 +1048,8 @@ U0 DrawRoads() { I64 i,j,k,r,c; F64 x1,y1,x2,y2; - map->color=RED; - map->pen_width=3; + map_dc->color=RED; + map_dc->pen_width=3; for (j=0;jcolor=BLACK; + map_dc->color=BLACK; for (j=0;jplayer=j; tempu->num=i; tempu->life=100; - tempu->facing=Rand2U16%6; + tempu->facing=RandU16%6; if (!j) { if (i>=Round(MAX_UNITS*P1_TO_P2_ODDS*PLAYER_1_ARMOR_PERCENT/100.0)) { if (Round(i-MAX_UNITS*P1_TO_P2_ODDS*PLAYER_1_ARMOR_PERCENT/100.0)>=Round(0.85*(MAX_UNITS-MAX_UNITS*P1_TO_P2_ODDS*PLAYER_1_ARMOR_PERCENT/100.0))) @@ -1200,8 +1199,8 @@ U0 InitUnits() break; } do { - row=Rand2U32%map_rows; - col=Rand2U32%(map_cols/3); + row=RandU32%map_rows; + col=RandU32%(map_cols/3); if (j) col+=2*map_cols/3; } while (FindUnit(row,col)); @@ -1352,11 +1351,11 @@ U0 PickAI(U8 *dirname,I64 player) U8 *st; CDirEntry *tempde,*tempde1,*tempde2; CDoc *doc=DocNew; - Bool *old_silent=Silent(ON); + Bool *old_silent=Silent; st=MStrPrint("%s/*.CPP*",dirname); tempde=FilesFind(st); Free(st); - tempde2=FilesFind("HOME/ToTheFront/*.CPP*"); + tempde2=FilesFind("::/Home/ToTheFront/*.CPP*"); tempde1=tempde; Silent(old_silent); @@ -1380,7 +1379,7 @@ U0 PickAI(U8 *dirname,I64 player) Free(st); tempde1=tempde1->next; } - DocPrint(doc,"\n\n\n$$FG$$Create your own AI in HOME/ToTheFront."); + DocPrint(doc,"\n\n\n$$FG$$Create your own AI in /Home/ToTheFront."); while ((tempde1=PopUpMenu(doc))<=0); ExeFile(tempde1->full_name); DocDel(doc); @@ -1456,8 +1455,8 @@ U0 DrawIt(CTask *task,CDC *dc) h=task->horz_scroll.pos; v=task->vert_scroll.pos; - map->flags|=DCF_NO_TRANSPARENTS; - GrBlot(dc,-h,-v,map); + map_dc->flags|=DCF_NO_TRANSPARENTS; + GrBlot(dc,-h,-v,map_dc); i=ip.pos.x-task->pix_left-task->scroll_x; j=ip.pos.y-task->pix_top -task->scroll_y; @@ -1631,9 +1630,10 @@ I64 DoPhase() U0 ToTheFront() { I64 result,ch; - map=DCNew(MAP_WIDTH,MAP_HEIGHT); + map_dc=DCNew(MAP_WIDTH,MAP_HEIGHT); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + Cd(__DIR__); Fs->win_inhibit|=WIF_SELF_IP_L|WIF_SELF_IP_R|WIG_DBL_CLICK; MenuPush( @@ -1654,12 +1654,12 @@ U0 ToTheFront() ); WinMax; - WordStat; + AutoComplete; WinBorder(ON); Preempt(OFF); Init; - PickAI("/Apps/ToTheFront/AIs",0); - PickAI("/Apps/ToTheFront/AIs",1); + PickAI("AIs",0); + PickAI("AIs",1); PopUpOk("Left-click to move or fire units.\n" "$$GREEN$$$$FG$$ or right-click to end phase.\n" @@ -1706,8 +1706,9 @@ U0 ToTheFront() SettingsPop; MenuPop; - DCDel(map); + DCDel(map_dc); CleanUp; + Seed; } L ÿÿÿÿüÿÿÿ úÿÿÿ üÿÿÿúÿÿÿþÿÿÿ øÿÿÿ üÿÿÿüÿÿÿ diff --git a/Apps/Vocabulary/Load.CPP b/Apps/Vocabulary/Load.CPP index 815b6df..1149075 100644 --- a/Apps/Vocabulary/Load.CPP +++ b/Apps/Vocabulary/Load.CPP @@ -1,5 +1,6 @@ #help_index "Games" -#include "/Apps/Vocabulary/VocabQuiz" +Cd(__DIR__);; +#include "VocabQuiz" #help_index "" diff --git a/Apps/Vocabulary/Run.CPP b/Apps/Vocabulary/Run.CPP index 1db68d9..509b9cf 100644 --- a/Apps/Vocabulary/Run.CPP +++ b/Apps/Vocabulary/Run.CPP @@ -1,2 +1,3 @@ -#include "/Apps/Vocabulary/Load" +Cd(__DIR__);; +#include "Load" VocabQuiz; \ No newline at end of file diff --git a/Apps/Vocabulary/VocabQuiz.CPP b/Apps/Vocabulary/VocabQuiz.CPP index ce251e2..681bf3b 100644 --- a/Apps/Vocabulary/VocabQuiz.CPP +++ b/Apps/Vocabulary/VocabQuiz.CPP @@ -2,13 +2,13 @@ U8 *RandVocabWord() { I64 i; U8 *ptr; - if (!wsd.num_words) + if (!acd.num_words) return NULL; - i=RandU32%wsd.num_words; - ptr=wsd.word_lst; - while (i-- && *ptr==WSD_WORD_CHAR) + i=RandU32%acd.num_words; + ptr=acd.word_lst; + while (i-- && *ptr==ACD_WORD_CHAR) ptr+=StrLen(ptr)+3; - if (*ptr++!=WSD_WORD_CHAR) + if (*ptr++!=ACD_WORD_CHAR) return NULL; else return ptr; @@ -18,7 +18,7 @@ U0 VocabQuiz() { I64 ch,i,num; U8 *right_word,*words[4]; - if (!FileFind(WSD_DEF_FILENAME)) { + if (!FileFind(ACD_DEF_FILENAME)) { "Uncompressed dictionary not present.\n"; return; } @@ -32,7 +32,7 @@ U0 VocabQuiz() "$$WW,1$$$$CM-LE,5$$$$RED$$$$BK,1$$%s$$BK,0$$:$$FG$$$$LM,4$$\n",right_word; for (i=0;i<4;i++) "\n\n$$GREEN$$$$BT-X,\"%d\",LM=\"%d\"$$$$FG$$" - "$$LM,7$$%s\n$$LM,4$$",i+1,i+1,WSDDefGet(words[i]); + "$$LM,7$$%s\n$$LM,4$$",i+1,i+1,ACDDefGet(words[i]); "\n\n$$LTBLUE$$Answer:$$FG$$"; do { ch=GetKey(,TRUE); @@ -48,7 +48,7 @@ U0 VocabQuiz() } Sleep(500); Snd(0); - WSDPopUpDef(right_word); + ACDPopUpDef(right_word); break; } } while (ch!=CH_SHIFT_ESC && ch!=CH_ESC); diff --git a/Apps/X-Caliber/Load.CPP b/Apps/X-Caliber/Load.CPP index d797ce4..8377903 100644 --- a/Apps/X-Caliber/Load.CPP +++ b/Apps/X-Caliber/Load.CPP @@ -1,7 +1,6 @@ #help_index "Games" -Cd("/Apps/X-Caliber");; - +Cd(__DIR__);; #include "XCCtrls" #include "X-Caliber" diff --git a/Apps/X-Caliber/Run.CPP b/Apps/X-Caliber/Run.CPP index 76eeb3d..1f963fd 100644 --- a/Apps/X-Caliber/Run.CPP +++ b/Apps/X-Caliber/Run.CPP @@ -1,2 +1,3 @@ -#include "/Apps/X-Caliber/Load" +Cd(__DIR__);; +#include "Load" XCaliber; \ No newline at end of file diff --git a/Apps/X-Caliber/X-Caliber.CPP b/Apps/X-Caliber/X-Caliber.CPP index 23417c9..39a37d2 100644 --- a/Apps/X-Caliber/X-Caliber.CPP +++ b/Apps/X-Caliber/X-Caliber.CPP @@ -1008,7 +1008,7 @@ U0 XCaliber() "}" ); WinMax; - WordStat; + AutoComplete; WinBorder(ON); Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; DocCursor; @@ -1136,7 +1136,7 @@ U0 XCaliber()  ÿÿÿÿ þÿÿÿþÿÿÿ -‚ øÿÿÿýÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ +‚øÿÿÿýÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿ @@ -1146,7 +1146,7 @@ U0 XCaliber()  ÿÿÿÿÿÿÿÿÿÿ - ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿ‚ øÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ + ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿ‚øÿÿÿýÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ ýÿÿÿüÿÿÿýÿÿÿ þÿÿÿÿÿÿÿüÿÿÿ þÿÿÿýÿÿÿ diff --git a/Compiler/Assembler.CPP b/Compiler/Asm.CPP similarity index 92% rename from Compiler/Assembler.CPP rename to Compiler/Asm.CPP index d3b3aa3..68bd64c 100644 --- a/Compiler/Assembler.CPP +++ b/Compiler/Asm.CPP @@ -224,7 +224,7 @@ U0 AsmResolve(CLex *lx,CAsmUnresolvedRef *tempu,U8 *label,Bool undefined) } templu=templu->next; //Technically, more than one won't work. } - } else if (!(tempu->type & 1)) {//Rel? + } else if (!(tempu->type&1)) {//Rel? r-=tempu->rel_ip; if (tempu->type==EIT_REL_I8 && !(MIN_I8<=r<=MAX_I8) || tempu->type==EIT_REL_I16 && !(MIN_I16<=r<=MAX_I16)) { @@ -286,7 +286,7 @@ U0 AsmGlblsResolve(CLex *lx,CExe *tempx) CAOTCtrl *a=lx->a; CHashFun *tempf; CAsmUnresolvedRef *tempu=a->glbl_unresolved,*tempu1; - I64 j; + I64 i,j; CExeImportExport *tempe,*tempe1; CLexUndef *templu; CHashExport *tempex; @@ -317,12 +317,12 @@ U0 AsmGlblsResolve(CLex *lx,CExe *tempx) tempex->use_cnt++; } else { PrintErr("undefined sym at line:%04d %s\n", - tempu->line_num,tempex->str); + tempu->line_num,tempex->str); LexExcept(lx); } } else if (undefined) { PrintErr("Two imports in same expression not allowed at line:%04d %s\n", - tempu->line_num,tempex->str); + tempu->line_num,tempex->str); LexExcept(lx); } undefined=TRUE; @@ -338,56 +338,58 @@ U0 AsmGlblsResolve(CLex *lx,CExe *tempx) tempu=tempu1; } - tempex=lx->htc.glbl_hash_table->next_added; - while (tempex!=lx->htc.glbl_hash_table) { - if (tempex->type & (HTF_IMPORT|HTF_GOTO_LABEL)) { - if (tempex->use_cnt && (tempe=tempex->ie_lst)) { - if (tempex->type&HTF_GOTO_LABEL) - tempe->flags|=EIF_GOTO_LABEL; - if (tempex->import_name) - tempe->str=StrNew(tempex->import_name); - else + for (i=0;i<=lx->htc.glbl_hash_table->mask;i++) { + tempex=lx->htc.glbl_hash_table->body[i]; + while (tempex) { + if (tempex->type & (HTF_IMPORT|HTF_GOTO_LABEL)) { + if (tempex->use_cnt && (tempe=tempex->ie_lst)) { + if (tempex->type&HTF_GOTO_LABEL) + tempe->flags|=EIF_GOTO_LABEL; + if (tempex->import_name) + tempe->str=StrNew(tempex->import_name); + else + tempe->str=StrNew(tempex->str); + do { + tempe1=tempe->next; + QueIns(tempe,tempx->last_ie); + } while (tempe=tempe1); + tempex->ie_lst=NULL; + } + } else if (tempex->type & (HTF_EXPORT|HTF_RESOLVE)) { + if (tempex->type & HTF_UNRESOLVED) { + PrintErr("undefined sym at %s\n",tempex->str); + LexExcept(lx); + } + if (tempex->type & HTF_RESOLVE) { + tempf=tempex; + tempeu=tempf->ext_lst; + while (tempeu) { + tempeu8=tempeu->next; + j=tempf->executable_addr-(tempeu->ip+4); + AsmStoreCodeU8At(lx,tempeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]); + Free(tempeu); + tempeu=tempeu8; + } + } + if (tempex->type & HTF_EXPORT) { + tempe=CAlloc(sizeof(CExeImportExport)); + tempe->type=EIT_REL32_EXPORT; + if (tempex->type & HTT_FUN) + tempe->ip=tempf->executable_addr; + else if (tempex->type & HTT_GLBL_VAR) + tempe->ip=tempex(CHashGlblVar *)->data_addr_ip; + else + tempe->ip=tempex->val; + tempe->exe=lx->exe; + if (tempex->type & HTF_IMM) + tempe->type++; tempe->str=StrNew(tempex->str); - do { - tempe1=tempe->next; + tempe->src_link=StrNew(tempex->src_link); QueIns(tempe,tempx->last_ie); - } while (tempe=tempe1); - tempex->ie_lst=NULL; - } - } else if (tempex->type & (HTF_EXPORT|HTF_RESOLVE)) { - if (tempex->type & HTF_UNRESOLVED) { - PrintErr("undefined sym at %s\n",tempex->str); - LexExcept(lx); - } - if (tempex->type & HTF_RESOLVE) { - tempf=tempex; - tempeu=tempf->ext_lst; - while (tempeu) { - tempeu8=tempeu->next; - j=tempf->executable_addr-(tempeu->ip+4); - AsmStoreCodeU8At(lx,tempeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]); - Free(tempeu); - tempeu=tempeu8; } } - if (tempex->type & HTF_EXPORT) { - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_REL32_EXPORT; - if (tempex->type & HTT_FUN) - tempe->ip=tempf->executable_addr; - else if (tempex->type & HTT_GLBL_VAR) - tempe->ip=tempex(CHashGlblVar *)->data_addr_ip; - else - tempe->ip=tempex->val; - tempe->exe=lx->exe; - if (tempex->type & HTF_IMM) - tempe->type++; - tempe->str=StrNew(tempex->str); - tempe->src_link=StrNew(tempex->src_link); - QueIns(tempe,tempx->last_ie); - } + tempex=tempex->next; } - tempex=tempex->next_added; } } @@ -425,7 +427,7 @@ Bool PrsAsmImm(CLex *lx,CAsmArg *arg) return TRUE; } -U0 PrsAsmArg(CLex *lx,CAsmArg *arg) +U0 PrsAsmArg(CLex *lx,CAsmArg *arg,Bool rel) { CHashGeneric *temph,*temph1; CHashReg *tempr; @@ -499,16 +501,19 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg) LexExcept(lx,"syntax error at "); } Lex(lx); //skip keyword - } else { - PrsAsmImm(lx,arg); - arg->num.abs_cnts=lx->abs_cnts; - if (lx->token!='[') - return; - } + } else + goto pa_asm_direct_imm; } } else { +pa_asm_direct_imm: PrsAsmImm(lx,arg); arg->num.abs_cnts=lx->abs_cnts; + if (arg->size<=1 && !rel && arg->num.abs_cnts&1) { + if (lx->a->seg_size==16) + arg->size=2; + else + arg->size=4; + } if (lx->token!='[') return; } @@ -530,14 +535,10 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg) } else arg->reg2=tempr->reg_num; Lex(lx); - } else { - PrsAsmImm(lx,arg); - arg->num.abs_cnts=lx->abs_cnts; - } - } else { - PrsAsmImm(lx,arg); - arg->num.abs_cnts=lx->abs_cnts; - } + } else + goto pa_asm_indirect_imm; + } else + goto pa_asm_indirect_imm; } else if (lx->token=='*') { Lex(lx); if (lx->token!=TK_INTEGER) @@ -549,6 +550,7 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg) } else if (lx->token=='+') { Lex(lx); //skip '+' } else { +pa_asm_indirect_imm: PrsAsmImm(lx,arg); arg->num.abs_cnts=lx->abs_cnts; } @@ -557,12 +559,8 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg) LexExcept(lx,"missing ']' at "); Lex(lx); //skip ] return; - } else { - PrsAsmImm(lx,arg); - arg->num.abs_cnts=lx->abs_cnts; - if (lx->token!='[') - return; - } + } else + goto pa_asm_direct_imm; } } @@ -676,7 +674,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) else if (!num2->imm_flag && !(MIN_I8<=num2->num.i<=MAX_I8)) LexExcept(lx,"branch out of range at "); if (num2->imm_flag) { - if (num2->num.abs_cnts.abs_addres & 1) { + if (num2->num.abs_cnts.abs_addres&1) { tempa=CAlloc(sizeof(CExeAbsAddr)); tempa->next=a->abss; a->abss=tempa; @@ -684,7 +682,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tempa->type=EAT_ADD_U8; } } else { - if (num2->num.abs_cnts.c_addres & 1) { + if (num2->num.abs_cnts.c_addres&1) { tempa=CAlloc(sizeof(CExeAbsAddr)); tempa->next=a->abss; a->abss=tempa; @@ -701,7 +699,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) else if (!num2->imm_flag && !(MIN_I16<=num2->num.i<=MAX_I16)) LexExcept(lx,"branch out of range at "); if (num2->imm_flag) { - if (num2->num.abs_cnts.abs_addres & 1) { + if (num2->num.abs_cnts.abs_addres&1) { tempa=CAlloc(sizeof(CExeAbsAddr)); tempa->next=a->abss; a->abss=tempa; @@ -709,7 +707,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tempa->type=EAT_ADD_U16; } } else { - if (num2->num.abs_cnts.c_addres & 1) { + if (num2->num.abs_cnts.c_addres&1) { tempa=CAlloc(sizeof(CExeAbsAddr)); tempa->next=a->abss; a->abss=tempa; @@ -726,7 +724,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) else if (!num2->imm_flag && !(MIN_I32<=num2->num.i<=MAX_I32)) LexExcept(lx,"branch out of range at "); if (num2->imm_flag) { - if (num2->num.abs_cnts.abs_addres & 1) { + if (num2->num.abs_cnts.abs_addres&1) { tempa=CAlloc(sizeof(CExeAbsAddr)); tempa->next=a->abss; a->abss=tempa; @@ -734,7 +732,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tempa->type=EAT_ADD_U32; } } else { - if (num2->num.abs_cnts.c_addres & 1) { + if (num2->num.abs_cnts.c_addres&1) { tempa=CAlloc(sizeof(CExeAbsAddr)); tempa->next=a->abss; a->abss=tempa; @@ -748,7 +746,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) AsmUnresolvedAdd(lx,num2->num.ex,EIT_REL_I64+num2->imm_flag,a->ip,num2->rel, num2->num.undef_local,num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail); if (num2->imm_flag) { - if (num2->num.abs_cnts.abs_addres & 1) { + if (num2->num.abs_cnts.abs_addres&1) { tempa=CAlloc(sizeof(CExeAbsAddr)); tempa->next=a->abss; a->abss=tempa; @@ -756,7 +754,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tempa->type=EAT_ADD_U64; } } else { - if (num2->num.abs_cnts.c_addres & 1) { + if (num2->num.abs_cnts.c_addres&1) { tempa=CAlloc(sizeof(CExeAbsAddr)); tempa->next=a->abss; a->abss=tempa; @@ -850,7 +848,7 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) found_second_possible=TRUE; if (!a->arg1.size) PrintWarn("no size specified at %s,%04d\n", - lx->cur_lfn->name,lx->cur_lfn->line_num-1); + lx->cur_lfn->full_name,lx->cur_lfn->line_num-1); } if (tempi->flags & IEF_PLUS_OPCODE) { if (tempi->slash_val==SV_R_REG) { @@ -957,7 +955,7 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) found_second_possible=TRUE; if (!a->arg1.size && !a->arg2.size) PrintWarn("no size specified at %s,%04d\n", - lx->cur_lfn->name,lx->cur_lfn->line_num-1); + lx->cur_lfn->full_name,lx->cur_lfn->line_num-1); } if (tempi->flags & IEF_PLUS_OPCODE) { if (tempi->slash_val==SV_R_REG) { @@ -1119,8 +1117,11 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) MemCpy(&cur.imm.num,&tempa2->num,sizeof(CAsmNum)); if (a2==ARGT_IMM8 || a2==ARGT_UIMM8) cur.imm.U8_cnt=1; else if (a2==ARGT_IMM16 || a2==ARGT_UIMM16) cur.imm.U8_cnt=2; - else if (a2==ARGT_IMM32 || a2==ARGT_UIMM32) cur.imm.U8_cnt=4; - else { + else if (a2==ARGT_IMM32 || a2==ARGT_UIMM32) { + cur.imm.U8_cnt=4; + if (tempi->flags&IEF_REX_ONLY_R8_R15 && a2==ARGT_UIMM32) + cur.REX&=~8; + } else { cur.imm.U8_cnt=8; cur.REX|=8; } @@ -1384,14 +1385,20 @@ U0 PrsAsmBlk(CLex *lx,I64 cmp_flags) argcnt=0; if (tempo->ins[0].arg1) { argcnt++; - PrsAsmArg(lx,&a->arg1); + if (ARGT_REL8<=tempo->ins[0].arg1<=ARGT_REL32) + PrsAsmArg(lx,&a->arg1,TRUE); + else + PrsAsmArg(lx,&a->arg1,FALSE); if (tempo->ins[0].arg2) { argcnt++; if (lx->token!=',') LexExcept(lx,"expecting ',' at "); else { Lex(lx); //skip ',' - PrsAsmArg(lx,&a->arg2); + if (ARGT_REL8<=tempo->ins[0].arg2<=ARGT_REL32) + PrsAsmArg(lx,&a->arg2,TRUE); + else + PrsAsmArg(lx,&a->arg2,FALSE); } } } @@ -1413,7 +1420,7 @@ U0 PrsAsmBlk(CLex *lx,I64 cmp_flags) LexExcept(lx,"expecting ':' at "); if (lx->token==TK_DBL_COLON) { lx->hash_entry->type|=HTF_EXPORT; - SetSrcFileInfo(lx,lx->hash_entry); + HashSrcFileSet(lx,lx->hash_entry); AsmLocalsResolve(lx); a->last_label=next_last_label; @@ -1459,7 +1466,7 @@ U0 PrsAsmBlk(CLex *lx,I64 cmp_flags) } if (lx->token==TK_DBL_COLON) { tempex->type|=HTF_EXPORT; - SetSrcFileInfo(lx,tempex); + HashSrcFileSet(lx,tempex); AsmLocalsResolve(lx); a->last_label=tempex->str; diff --git a/Compiler/Back1a.CPP b/Compiler/BackA.CPP similarity index 98% rename from Compiler/Back1a.CPP rename to Compiler/BackA.CPP index c517f00..371fb2d 100644 --- a/Compiler/Back1a.CPP +++ b/Compiler/BackA.CPP @@ -75,8 +75,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, else i=0x48; if (!d && - (op.u8[0]==0x03||op.u8[0]==0x2B|| - op.u8[0]==0x33||op.u8[0]==0x0B)) + (op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B)) return; else if (d==1 && op.u8[0]==0x03) { ICU24(tempi,0xC0FF00+op.u8[1]<<19+i+(r1&7)<<16); @@ -116,8 +115,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, } if (!d && - (op.u8[0]==0x03||op.u8[0]==0x2B|| - op.u8[0]==0x33||op.u8[0]==0x0B)) + (op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B)) return; r=op.u8[1]; //not a reg but a slash val if (op.u8[0]==0x03 && d==-1) //add -1 @@ -145,8 +143,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, ICModr2(tempi,i,d1,ip+4); return; } - if (MIN_I8<=d<=MAX_I8 || - t1&(RT_MASK-1)==RT_I8) { + if (MIN_I8<=d<=MAX_I8 || t1&(RT_MASK-1)==RT_I8) { i=ICModr1(r,t1,r1,d1); if (tempi->ic_flags&ICF_LOCK) ICU8(tempi,OC_LOCK_PREFIX); @@ -169,8 +166,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, ICU8(tempi,d); return; } - if (MIN_I32<=d<=MAX_I32 || - t1&RT_MASKic_flags&ICF_LOCK) ICU8(tempi,OC_LOCK_PREFIX); diff --git a/Compiler/Back1b.CPP b/Compiler/BackB.CPP similarity index 98% rename from Compiler/Back1b.CPP rename to Compiler/BackB.CPP index ce1db12..9094f63 100644 --- a/Compiler/Back1b.CPP +++ b/Compiler/BackB.CPP @@ -417,7 +417,7 @@ U0 ICPreIncDec(CIntermediateCode *tempi,I64 op,I64 ip) I64 r; CHashClass *tempc=tempi->ic_class,*tempc1=tempc-1; if (tempi->ic_flags & ICF_NOT_ADDR) { - if (tempc->ptr_cnt && tempc1->size!=1) { + if (tempc->ptr_stars_cnt && tempc1->size!=1) { ICAddSubEctImm(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, tempc1->size,op.u16[3],ip); @@ -434,7 +434,7 @@ U0 ICPreIncDec(CIntermediateCode *tempi,I64 op,I64 ip) ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r=REG_RCX; } - if (tempc->ptr_cnt && + if (tempc->ptr_stars_cnt && tempc1->size!=1) { ICAddSubEctImm(tempi,TY_DISP+tempi->a1.type_pointed,r,0, TY_DISP+tempi->a1.type_pointed,r,0, @@ -457,7 +457,7 @@ U0 ICPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); } - if (tempc->ptr_cnt && + if (tempc->ptr_stars_cnt && tempc1->size!=1) { ICAddSubEctImm(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, @@ -477,7 +477,7 @@ U0 ICPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, TY_DISP+tempi->a1.type_pointed,r,0,ip); } - if (tempc->ptr_cnt && + if (tempc->ptr_stars_cnt && tempc1->size!=1) { ICAddSubEctImm(tempi,TY_DISP+tempi->a1.type_pointed,r,0, TY_DISP+tempi->a1.type_pointed,r,0, @@ -577,25 +577,26 @@ U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip, U8 *buf,I64 ip2) { I64 r1,r2,i=0x48,j,t1,t2,result_reg; - Bool short_jmp,done; + Bool short_jmp,swap,done; CLexCodeMisc *lb; - CICArg *a1=&tempi->a1,*a2=&tempi->a2,*swap; + CICArg *a1=&tempi->a1,*a2=&tempi->a2; j=a1->disp; if (a1->type&TY_MASK==TY_IMM && MIN_I32<=j<=MAX_I32) { - swap=a1; a1=a2; a2=swap; + SwapI64(&a1,&a2); + swap=TRUE; us=not_us; is=not_is; - } + } else + swap=FALSE; if (tempi->ic_class->raw_type&1 || tempi->ic_flags & ICF_USE_UNSIGNED) is=us; j=a2->disp; if (a2->type&TY_MASK==TY_IMM && MIN_I32<=j<=MAX_I32) { if (!has_result && TY_REG<=a1->type&TY_MASK<=TY_RIP_DISP32) - ICAddSubEctImm(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - j,0x073B,ip2); + ICAddSubEctImm(tempi,a1->type,a1->reg,a1->disp, + a1->type,a1->reg,a1->disp,j,0x073B,ip2); else { if (a1->type&TY_MASK==TY_REG) r1=a1->reg; diff --git a/Compiler/Back1c.CPP b/Compiler/BackC.CPP similarity index 100% rename from Compiler/Back1c.CPP rename to Compiler/BackC.CPP diff --git a/Compiler/BackF1a.CPP b/Compiler/BackFA.CPP similarity index 99% rename from Compiler/BackF1a.CPP rename to Compiler/BackFA.CPP index e58fca2..bbfd2d1 100644 --- a/Compiler/BackF1a.CPP +++ b/Compiler/BackFA.CPP @@ -298,7 +298,7 @@ U0 ICFPow(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip) ICU64(tempi,0); if (buf) { tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_IMM_U64; + tempe->type=EIT_IMM_I64; tempe->ip=ip+tempi->ic_cnt-8; tempe->next=tempex->ie_lst; tempex->ie_lst=tempe; diff --git a/Compiler/BackF1b.CPP b/Compiler/BackFB.CPP similarity index 100% rename from Compiler/BackF1b.CPP rename to Compiler/BackFB.CPP diff --git a/Compiler/CmpExts.CPP b/Compiler/CExts.CPP similarity index 95% rename from Compiler/CmpExts.CPP rename to Compiler/CExts.CPP index d22bc17..fd3b645 100644 --- a/Compiler/CmpExts.CPP +++ b/Compiler/CExts.CPP @@ -20,7 +20,7 @@ extern U0 OptPass3(CLex *lx,COptReg *reg_offsets); extern U0 OptPass4(CLex *lx,COptReg *reg_offsets,I64 *_type); extern U0 OptPass5(CLex *lx); extern U0 OptPass6(CLex *lx); -extern I64 OptPass789(CLex *lx,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg); +extern I64 OptPass789A(CLex *lx,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg); extern CHashClass *PrsClass(CLex *lx,I64 keyword,I64 fsp_flags,Bool is_extern); extern CHashFun *PrsFunJoin(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags); extern I64 PrsKeyWord(CLex *lx); @@ -34,6 +34,7 @@ extern I64 PrsUnaryModifier(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayD extern I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempad, I64 *max_prec,I64 *unary_pre_prec,I64 *paren_prec); extern U0 PrsVarInit2(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass); +extern U0 StreamPrint(U8 *fmt,...); _extern CMP_TEMPLATES U32 cmp_templates[1]; _extern CMP_TEMPLATES_DONT_POP U32 cmp_templates_dont_pop[1]; _extern CMP_TEMPLATES_DONT_PUSH2 U32 cmp_templates_dont_push2[1]; diff --git a/Compiler/Hash1b.CPP b/Compiler/CHash.CPP similarity index 92% rename from Compiler/Hash1b.CPP rename to Compiler/CHash.CPP index 996d74f..d2ee4f8 100644 --- a/Compiler/Hash1b.CPP +++ b/Compiler/CHash.CPP @@ -56,7 +56,7 @@ I64 HashEntrySize2(CHashSrcSym *temph) if (!(temph(CHashGlblVar *)->flags&GVF_ALIAS)) result+=MSize2(temph(CHashGlblVar *)->data_addr); if (temph(CHashGlblVar *)->fun_ptr) - result+=HashEntrySize2(temph(CHashGlblVar *)->fun_ptr-temph(CHashGlblVar *)->fun_ptr->ptr_cnt); + result+=HashEntrySize2(temph(CHashGlblVar *)->fun_ptr-temph(CHashGlblVar *)->fun_ptr->ptr_stars_cnt); } } else if (temph->type & HTT_FILE) result+=MSize2(temph(CHashGeneric *)->user_data0); @@ -68,14 +68,16 @@ I64 HashEntrySize2(CHashSrcSym *temph) I64 HashTableSize2(CHashTable *table) {//Memory size of std system hash table and all entries. - I64 result=0; + I64 i,result=0; CHashSrcSym *temph; if (!table) return 0; - temph=table->next_added; - while (temph!=table) { - result+=HashEntrySize2(temph); - temph=temph->next_added; + for (i=0;i<=table->mask;i++) { + temph=table->body[i]; + while (temph) { + result+=HashEntrySize2(temph); + temph=temph->next; + } } result+=MSize2(table->body); result+=MSize2(table); diff --git a/Compiler/CmpInit.CPP b/Compiler/CInit.CPP similarity index 63% rename from Compiler/CmpInit.CPP rename to Compiler/CInit.CPP index 3d28298..808a857 100644 --- a/Compiler/CmpInit.CPP +++ b/Compiler/CInit.CPP @@ -50,14 +50,14 @@ U0 AsmPrsInsFlags(CLex *lx,CInstruction *tempi) return; break; case '!': tempi->flags|=IEF_DONT_SWITCH_MODES; break; - case '&': tempi->flags|=IEF_DFT; break; - case ':': tempi->flags|=IEF_STI; break; - case '-': tempi->flags|=IEF_NO_REX; break; - case '~': tempi->flags|=IEF_40_REX; break; - case '=': tempi->flags|=IEF_48_REX; break; + case '&': tempi->flags|=IEF_DFT; break; + case ':': tempi->flags|=IEF_STI; break; + case '-': tempi->flags|=IEF_NO_REX; break; + case '~': tempi->flags|=IEF_40_REX; break; + case '=': tempi->flags|=IEF_48_REX; break; case '`': tempi->flags|=IEF_REX_ONLY_R8_R15; break; - case '^': tempi->flags|=IEF_REX_XOR_LIKE; break; - case '$$': tempi->flags|=IEF_ENDING_ZERO; break; + case '^': tempi->flags|=IEF_REX_XOR_LIKE; break; + case '$$': tempi->flags|=IEF_ENDING_ZERO; break; default: return; } @@ -76,7 +76,7 @@ U0 AsmHashLoad() CInstruction *tempi; CHashClass *tempc; - cmp.asm_hash=HashTableNew(2048); + cmp.asm_hash=HashTableNew(1024); size1=offset(CHashOpcode.ins)+sizeof(CInstruction)<<5; tempo=MAlloc(size1); @@ -230,248 +230,13 @@ U0 CmpLoadDefines() "MM\0MM32\0MM64\0XMM\0XMM32\0XMM64\0XMM128\0XMM0\0"); DefineLstLoad("ST_SEG_REGS","ES\0CS\0SS\0DS\0FS\0GS\0"); DefineLstLoad("ST_FSTK_REGS","ST0\0ST1\0ST2\0ST3\0ST4\0ST5\0ST6\0ST7\0"); - - DefineLstLoad("ST_INTERMEDIATE_CODE", -/* -[arg_cnt][result_cnt][deref/assign/cmp][fpop][nonconst] - -'9' arg_cnt means var - -'*' means it is a dereference instruction -'=' means it is an assignment instruction -'^' means it is a compare instruction - -'N' means not const. Sets LF_NOT_CONST - which means an expression contains mem - accesses or things which might change. -*/ -"00...END\0" -"00...NOP1\0" -"10...END_EXP\0" -"00...NOP2\0" -"00...LABEL\0" -"00...CALL_START\0" -"01...CALL_END\0" -"00...CALL_END2\0" -"10...RETURN_VAL\0" -"00...RETURN_VAL2\0" -"01...IMM_U64\0" -"01...IMM_F64\0" -"01..NSTR_CONST\0" -"01..NABS_ADDR\0" -"01..NADDR_IMPORT\0" -"01..NHEAP_GLBL\0" -"01...SIZEOF\0" -"01...TYPE\0" -"01..NGET_LABEL\0" -"01..NRBP\0" -"01..NREG\0" -"00..NFS\0" -"01..NMOV_FS\0" -"00..NGS\0" -"01..NMOV_GS\0" -"01..NLEA\0" -"01..NMOV\0" -"10...TO_I64\0" -"10...TO_F64\0" -"10...TO_BOOL\0" -"10...TOUPPER\0" -"11...HOLYC_TYPECAST\0" -"11..NADDR\0" -"11...COM\0" -"11...NOT\0" -"11...UNARY_MINUS\0" -"11*.NDEREF\0" -"11*.NDEREF_PP\0" -"11*.NDEREF_MM\0" -"11*PN_PP\0" -"11*PN_MM\0" -"11*PNPP_\0" -"11*PNMM_\0" -"21...SHL\0" -"21...SHR\0" -"11=..SHL_CONST\0" -"11=..SHR_CONST\0" -"21...POWER\0" -"21.P.MUL\0" -"21.P.DIV\0" -"21...MOD\0" -"21...AND\0" -"21...OR\0" -"21...XOR\0" -"21.P.ADD\0" -"21.P.SUB\0" -"11=..ADD_CONST\0" -"11=..SUB_CONST\0" -"21^..EQUAL_EQUAL\0" -"21^..NOT_EQUAL\0" -"21^..LESS\0" -"21^..GREATER\0" -"21^..LESS_EQUAL\0" -"21^..GREATER_EQUAL\0" -"01...PUSH_CMP\0" -"21...AND_AND\0" -"21...OR_OR\0" -"21...XOR_XOR\0" -"21=.NASSIGN\0" -"21=.NASSIGN_PP\0" -"21=.NASSIGN_MM\0" -"21=.NSHL_EQUAL\0" -"21=.NSHR_EQUAL\0" -"21=.NMUL_EQUAL\0" -"21=.NDIV_EQUAL\0" -"21=.NMOD_EQUAL\0" -"21=.NAND_EQUAL\0" -"21=.NOR_EQUAL\0" -"21=.NXOR_EQUAL\0" -"21=.NADD_EQUAL\0" -"21=.NSUB_EQUAL\0" -"00...JMP\0" -"00...SUB_CALL\0" -"20...SWITCH\0" -"20...NOBOUND_SWITCH\0" -"90...ADD_RSP\0" -"90...ADD_RSP1\0" -"00...ENTER\0" -"00=..PUSH_REGS\0" -"00=..POP_REGS\0" -"00...LEAVE\0" -"00...RET\0" -"00..NCALL\0" -"00..NCALL_INDIRECT\0" -"00..NCALL_INDIRECT2\0" -"00..NCALL_IMPORT\0" -"00..NCALL_EXTERN\0" -"00..NASM\0" -"10..NPREEMPT\0" -"10..NPUSH\0" -"00..NPOP\0" -"10..NCLFLUSH\0" -"10..NINVLPG\0" -"10..NIN_U8\0" -"10..NIN_U16\0" -"10..NIN_U32\0" -"20..NOUT_U8\0" -"20..NOUT_U16\0" -"20..NOUT_U32\0" -"00..NGET_RFLAGS\0" -"00..NCARRY\0" -"10..NSET_RFLAGS\0" -"00..NGET_RAX\0" -"10..NSET_RAX\0" -"00..NGET_RBP\0" -"10..NSET_RBP\0" -"00..NGET_RSP\0" -"10..NSET_RSP\0" -"01..NRIP\0" -"00..NRDTSC\0" -"00..NHPET\0" -"20..NBT\0" -"20..NBTS\0" -"20..NBTR\0" -"20..NBTC\0" -"20..NLBTS\0" -"20..NLBTR\0" -"20..NLBTC\0" -"10..NBSF\0" -"10..NBSR\0" -"10..NQUE_INIT\0" -"20..NQUE_INS\0" -"20..NQUE_INS_REV\0" -"10..NQUE_REM\0" -"10..NSTRLEN\0" -"10...BR_ZERO\0" -"10...BR_NOT_ZERO\0" -"00...BR_CARRY\0" -"00...BR_NOT_CARRY\0" -"20...BR_NOT_EQUAL\0" -"20...BR_EQUAL_EQUAL\0" -"20...BR_GREATER_EQUAL\0" -"20...BR_LESS_EQUAL\0" -"20...BR_GREATER\0" -"20...BR_LESS\0" -"21...BR_2NOT_EQUAL\0" -"21...BR_2EQUAL_EQUAL\0" -"21...BR_2GREATER_EQUAL\0" -"21...BR_2LESS_EQUAL\0" -"21...BR_2GREATER\0" -"21...BR_2LESS\0" -"20...BR_AND_ZERO\0" -"20...BR_AND_NOT_ZERO\0" -"10..NBR_MM_ZERO\0" -"10..NBR_MM_NOT_ZERO\0" -"20...BR_AND_AND_ZERO\0" -"20...BR_AND_AND_NOT_ZERO\0" -"20...BR_OR_OR_ZERO\0" -"20...BR_OR_OR_NOT_ZERO\0" -"20..NBR_BT\0" -"20..NBR_BTS\0" -"20..NBR_BTR\0" -"20..NBR_BTC\0" -"20..NBR_LBTS\0" -"20..NBR_LBTR\0" -"20..NBR_LBTC\0" -"20..NBR_NOT_BT\0" -"20..NBR_NOT_BTS\0" -"20..NBR_NOT_BTR\0" -"20..NBR_NOT_BTC\0" -"20..NBR_NOT_LBTS\0" -"20..NBR_NOT_LBTR\0" -"20..NBR_NOT_LBTC\0" -"20..NSWAP_U8\0" -"20..NSWAP_U16\0" -"20..NSWAP_U32\0" -"20..NSWAP_U64\0" -"10...ABS_I64\0" -"10...SIGN_I64\0" -"20...MIN_I64\0" -"20...MIN_U64\0" -"20...MAX_I64\0" -"20...MAX_U64\0" -"20...MOD_U64\0" -"10...SQRI64\0" -"10...SQRU64\0" -"11.P.SQR\0" -"11.P.ABS\0" -"11.P.SQRT\0" -"11.P.SIN\0" -"11.P.COS\0" -"11.P.TAN\0" -"11.P.ATAN\0" -);$AN,"Anchor for adding intermediate codes",A="IC_INIT_TABLE"$ } U0 CmpFillTables() { - U8 *st; I64 i,k; U32 *d; - cmp.ic_bitmap_assign =CAlloc((IC_NUM_ENTRIES+7)>>3); - cmp.ic_bitmap_deref =CAlloc((IC_NUM_ENTRIES+7)>>3); - cmp.ic_bitmap_cmp =CAlloc((IC_NUM_ENTRIES+7)>>3); - cmp.ic_bitmap_not_const=CAlloc((IC_NUM_ENTRIES+7)>>3); - cmp.ic_bitmap_fpop =CAlloc((IC_NUM_ENTRIES+7)>>3); - cmp.arg_cnt =CAlloc(IC_NUM_ENTRIES); - cmp.result_cnt =CAlloc(IC_NUM_ENTRIES); - st=Define("ST_INTERMEDIATE_CODE"); - for (i=0;i'] =PREC_CMP<<16+IC_GREATER; @@ -589,11 +354,11 @@ STK[0]: d[TK_AND_AND] =PREC_AND_AND<<16+IC_AND_AND; - d[TK_XOR_XOR]=PREC_XOR_XOR<<16+IC_XOR_XOR; + d[TK_XOR_XOR] =PREC_XOR_XOR<<16+IC_XOR_XOR; d[TK_OR_OR] =PREC_OR_OR<<16+IC_OR_OR; - d['='] =(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_ASSIGN; + d['='] =(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_ASSIGN; d[TK_SHL_EQUAL]=(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_SHL_EQUAL; d[TK_SHR_EQUAL]=(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_SHR_EQUAL; d[TK_MUL_EQUAL]=(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_MUL_EQUAL; diff --git a/Compiler/CmpMain.CPP b/Compiler/CMain.CPP similarity index 94% rename from Compiler/CmpMain.CPP rename to Compiler/CMain.CPP index 4db5886..cfcec75 100644 --- a/Compiler/CmpMain.CPP +++ b/Compiler/CMain.CPP @@ -23,7 +23,8 @@ U8 *LexStatement2Bin(CLex *lx,I64 *_type,I64 cmp_flags=0) LCCInit(lx); if (!PrsStatement(lx,,,cmp_flags)) { if (lx->lcc.lcc_root.next!=&lx->lcc.lcc_root) { - LCCAdd(lx,IC_RETURN_VAL2,0,NULL); + lx->lcc.lcc_root.last->ic_flags&=~ICF_NO_DEPEND_RESULT; + LCCAdd(lx,IC_RETURN_VAL2,0,0); LCCAdd(lx,IC_RET,0,0); if (result=LCCCompile(lx,&size,NULL,_type)) { if (lx->flags&LF_AOT_COMPILE) { @@ -74,7 +75,7 @@ CExe *CmpJoin(CLex *lx,I64 cmp_flags,U8 *map_name=NULL,U8 mapfile_drv=0) if (lx->htc.fun) lx->htc.glbl_hash_table=HashTableNew(128); else - lx->htc.glbl_hash_table=HashTableNew(2048); + lx->htc.glbl_hash_table=HashTableNew(1024); if (lx->flags&LF_AOT_COMPILE) { lx->htc.define_hash_table=lx->htc.glbl_hash_table; if (lx->a_depth<=1) @@ -235,7 +236,7 @@ U0 CmpFixUpJITAsm(CLex *lx,CExe *tempx) HashAdd(tempex,Fs->hash_table); SysSymImportsResolve(tempex->str); break; - case EIT_REL_I0...EIT_IMM_U64: + case EIT_REL_I0...EIT_IMM_I64: if (tempe->str) { if (tempe->flags&EIF_GOTO_LABEL) { if(!(g_lb=LCCGoToLabelFind(lx,str))) @@ -293,7 +294,7 @@ U0 CmpFixUpJITAsm(CLex *lx,CExe *tempx) case EIT_REL_I64: *ptr(I64 *)=i-ptr-8; break; - case EIT_IMM_U64: + case EIT_IMM_I64: *ptr(I64 *)=i; break; } @@ -326,30 +327,14 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx) tempa->next=a->abss; ptr=tempx->buf+tempx->ip+tempa->ip; nobound_switch (tempa->type) { - case EAT_ADD_U8: - *ptr(U8 *)+=ip2; - break; - case EAT_SUB_U8: - *ptr(U8 *)-=ip2; - break; - case EAT_ADD_U16: - *ptr(U16 *)+=ip2; - break; - case EAT_SUB_U16: - *ptr(U16 *)-=ip2; - break; - case EAT_ADD_U32: - *ptr(U32 *)+=ip2; - break; - case EAT_SUB_U32: - *ptr(U32 *)-=ip2; - break; - case EAT_ADD_U64: - *ptr(I64 *)+=ip2; - break; - case EAT_SUB_U64: - *ptr(I64 *)-=ip2; - break; + case EAT_ADD_U8: *ptr(U8 *)+=ip2; break; + case EAT_SUB_U8: *ptr(U8 *)-=ip2; break; + case EAT_ADD_U16: *ptr(U16 *)+=ip2; break; + case EAT_SUB_U16: *ptr(U16 *)-=ip2; break; + case EAT_ADD_U32: *ptr(U32 *)+=ip2; break; + case EAT_SUB_U32: *ptr(U32 *)-=ip2; break; + case EAT_ADD_U64: *ptr(I64 *)+=ip2; break; + case EAT_SUB_U64: *ptr(I64 *)-=ip2; break; } a->abss=tempa; tempa->ip+=ip2; @@ -360,7 +345,7 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx) while (tempe!=&tempx->next_ie) { tempe1=tempe->next; QueRem(tempe); - if (EIT_REL_I0<=tempe->type<=EIT_IMM_U64) { + if (EIT_REL_I0<=tempe->type<=EIT_IMM_I64) { if (tempe->str) { if (tempe->flags&EIF_GOTO_LABEL) { if(!(g_lb=LCCGoToLabelFind(lx,tempe->str))) @@ -409,7 +394,7 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx) case EIT_REL_I64: *ptr(I64 *)=i-ptr-8; break; - case EIT_IMM_U64: + case EIT_IMM_I64: *ptr(I64 *)=i; break; } @@ -426,21 +411,13 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx) case EIT_IMM_U8: case EIT_IMM_U16: case EIT_IMM_U32: - case EIT_IMM_U64: + case EIT_IMM_I64: case EIT_REL_I0: break; - case EIT_REL_I8: - *ptr(U8 *) -=ip2; - break; - case EIT_REL_I16: - *ptr(U16 *)-=ip2; - break; - case EIT_REL_I32: - *ptr(U32 *)-=ip2; - break; - case EIT_REL_I64: - *ptr(I64 *)-=ip2; - break; + case EIT_REL_I8: *ptr(U8 *) -=ip2; break; + case EIT_REL_I16: *ptr(U16 *)-=ip2; break; + case EIT_REL_I32: *ptr(U32 *)-=ip2; break; + case EIT_REL_I64: *ptr(I64 *)-=ip2; break; sub_switch_end: tempe->ip+=ip2; break; @@ -715,11 +692,9 @@ I64 StreamExePrint(U8 *fmt,...) return result; } -U0 CmpInit() +U0 CInit() { cmp.compiled_lines=0; - cmp.compiled_funs=0; - cmp.compiled_bytes=0; cmp.dont_write_to_dsk=FALSE; CmpLoadDefines; CmpFillTables; @@ -733,4 +708,4 @@ U0 CmpInit() UasmHashLoad; } -CmpInit; +CInit; diff --git a/Compiler/CMisc.CPP b/Compiler/CMisc.CPP new file mode 100644 index 0000000..773faae --- /dev/null +++ b/Compiler/CMisc.CPP @@ -0,0 +1,622 @@ +Bool OptEqu(I64 num,Bool val) +{//Set compiler option to value. + return BEqu(&Fs->last_lex->opts,num,val); +} + +Bool OptOn(I64 num) +{//Turn on compiler option. + return OptEqu(num,ON); +} + +Bool OptOff(I64 num) +{//Turn off compiler option. + return OptEqu(num,OFF); +} + +Bool GetOpt(I64 num) +{//Get state of compiler option. + return Bt(&Fs->last_lex->opts,num); +} + +Bool OTrace(Bool val) +{//Displays intermediate code after passes through optimization. + return OptEqu(OPTf_OPT_TRACE,val); +} + +I64 OTraceMask(I64 i=0b10001111101) +{//Ctrls which optimizer passes are displayed. + I64 old=Fs->last_lex->otrace_mask; + Fs->last_lex->otrace_mask=i; + return old; +} + +Bool CTrace(Bool val) +{//Displays assembly code output from compiler. + return OptEqu(OPTf_COMPILE_TRACE,val); +} + +Bool Echo(Bool val) +{//Displays text as it is being compiled. + return OptEqu(OPTf_ECHO,val); +} + +U0 StreamDir() +{ + U8 *dirname; + if (dirname=DirFile(Fs->last_lex->cur_lfn->full_name)) { + StreamPrint("\"%s\"",dirname); + Free(dirname); + } +} + +CIntermediateStruct intermediate_code_table[IC_NUM_ENTRIES]= +{ +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"END"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOP1"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"END_EXP"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOP2"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"LABEL"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"CALL_START"}, +{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"CALL_END"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"CALL_END2"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RETURN_VAL"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RETURN_VAL2"}, +{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"IMM_I64"}, +{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"IMM_F64"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"STR_CONST"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ABS_ADDR"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ADDR_IMPORT"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"HEAP_GLBL"}, +{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SIZEOF"}, +{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"TYPE"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"GET_LABEL"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"RBP"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"REG"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"FS"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV_FS"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GS"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV_GS"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"LEA"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_I64"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_F64"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_BOOL"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TOUPPER"}, +{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"HOLYC_TYPECAST"}, +{IS_1_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ADDR"}, +{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"COM"}, +{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"NOT"}, +{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"UNARY_MINUS"}, +{IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF"}, +{IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF_PP"}, +{IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF_MM"}, +{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"_PP"}, +{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"_MM"}, +{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"PP_"}, +{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"MM_"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SHL"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SHR"}, +{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SHL_CONST"}, +{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SHR_CONST"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"POWER"}, +{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"MUL"}, +{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"DIV"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"MOD"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"AND"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"OR"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"XOR"}, +{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ADD"}, +{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SUB"}, +{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"ADD_CONST"}, +{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SUB_CONST"}, +{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"EQUAL_EQUAL"}, +{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"NOT_EQUAL"}, +{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"LESS"}, +{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"GREATER_EQUAL"}, +{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"GREATER"}, +{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"LESS_EQUAL"}, +{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"PUSH_CMP"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"AND_AND"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"OR_OR"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"XOR_XOR"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN_PP"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN_MM"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SHL_EQUAL"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SHR_EQUAL"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"MUL_EQUAL"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"DIV_EQUAL"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"MOD_EQUAL"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"AND_EQUAL"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"OR_EQUAL"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"XOR_EQUAL"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ADD_EQUAL"}, +{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SUB_EQUAL"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"JMP"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SUB_CALL"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SWITCH"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOBOUND_SWITCH"}, +{IS_V_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ADD_RSP"}, +{IS_V_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ADD_RSP1"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ENTER"}, +{IS_0_ARG,0,IST_ASSIGN,FALSE,FALSE,0,0,0,"PUSH_REGS"}, +{IS_0_ARG,0,IST_ASSIGN,FALSE,FALSE,0,0,0,"POP_REGS"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"LEAVE"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RET"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_INDIRECT"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_INDIRECT2"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_IMPORT"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_EXTERN"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"ASM"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"PREEMPT"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"PUSH"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"POP"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CLFLUSH"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"INVLPG"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U8"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U16"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U32"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U8"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U16"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U32"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RFLAGS"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CARRY"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RFLAGS"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RAX"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RAX"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RBP"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RBP"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RSP"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RSP"}, +{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"RIP"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"RDTSC"}, +{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"HPET"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BT"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTS"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTR"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTC"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTS"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTR"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTC"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BSF"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BSR"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INIT"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INS"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INS_REV"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_REM"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"STRLEN"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_ZERO"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_ZERO"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_CARRY"}, +{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_CARRY"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_EQUAL_EQUAL"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_EQUAL"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_LESS"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_GREATER_EQUAL"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_GREATER"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_LESS_EQUAL"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2EQUAL_EQUAL"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2NOT_EQUAL"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2LESS"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2GREATER_EQUAL"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2GREATER"}, +{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2LESS_EQUAL"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_ZERO"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_NOT_ZERO"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_MM_ZERO"}, +{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_MM_NOT_ZERO"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_AND_ZERO"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_AND_NOT_ZERO"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_OR_OR_ZERO"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_OR_OR_NOT_ZERO"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BT"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTS"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTR"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTC"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BT"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTS"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTR"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTC"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U8"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U16"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U32"}, +{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U64"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ABS_I64"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SIGN_I64"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MIN_I64"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MIN_U64"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MAX_I64"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MAX_U64"}, +{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MOD_U64"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SQRI64"}, +{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SQRU64"}, +{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SQR"}, +{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ABS"}, +{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SQRT"}, +{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SIN"}, +{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"COS"}, +{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"TAN"}, +{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ATAN"}, +}; + +U0 ICClassPut(CHashClass *c) +{ + I64 i; + if (!c) return; + if (c->ptr_stars_cnt>4) { + PrintErr("put_class ptrcnt=%d\n",c->ptr_stars_cnt); + while (TRUE) +//TODO: + Yield; + } + for (i=0;iptr_stars_cnt;i++) + '*'; + c-=c->ptr_stars_cnt; + if (c->str) + "%s",c->str; + else { + PrintErr("put_class str=NULL\n"); + while (TRUE) +//TODO: + Yield; + } + '' CH_SPACE; +} + +U0 ICArgPut(CICArg *a) +{ + if (a->type_pointed) + "%Z %Z %Z ", + a->type&RT_MASK,"ST_RAW_TYPES", + a->type_pointed&RT_MASK,"ST_RAW_TYPES", + a->type>>4,"ST_TY_TYPES"; + else + "%Z %Z ", + a->type&RT_MASK,"ST_RAW_TYPES", + a->type>>4,"ST_TY_TYPES"; + switch (a->type>>4) { + case TY_STK>>4: + "STK"; + break; + case TY_IMM>>4: + "#%X",a->disp; + break; + case TY_REG>>4: + "%Z",a->reg,"ST_U64_REGS"; + break; + case TY_DISP>>4: + "%X[%Z]",a->disp,a->reg,"ST_U64_REGS"; + break; + case TY_RIP_DISP32>>4: + "[%X]",a->disp; + break; + case TY_SIB>>4: + if (a->disp) + "%X",a->disp; + if (a->reg==REG_RIP) + '['; + else + "[%Z+",a->reg&15,"ST_U64_REGS"; + "%Z",a->reg>>8&15,"ST_U64_REGS"; + switch (a->reg>>14) { + case 0: "]"; break; + case 1: "*2]"; break; + case 2: "*4]"; break; + case 3: "*8]"; break; + } + break; + } +} + +U0 ICPut(CLex *lx,CIntermediateCode *tempi) +{ + I64 opcode=tempi->ic_code,i; + if (opcode>=IC_END_EXP && opcode!=IC_NOP2) { + "%15ts %016X ",intermediate_code_table[opcode].name,tempi->ic_data; + if (lx->pass) { + if (tempi->r.type&TY_MASK) { + ICArgPut(&tempi->r); + "<-"; + } + if (tempi->a1.type&TY_MASK) + ICArgPut(&tempi->a1); + ','; + if (tempi->a2.type&TY_MASK) + ICArgPut(&tempi->a2); + '' CH_SPACE; + } + ICClassPut(tempi->ic_class); + if (tempi->ic_flags & ICF_LOCK) + "$$BROWN$$lock$$FG$$ "; + if (tempi->ic_flags & ICF_A2_TO_F64) + "$$LTBLUE$$a2d$$FG$$ "; + if (tempi->ic_flags & ICF_A2_TO_INT) + "$$GREEN$$a2i$$FG$$ "; + if (tempi->ic_flags & ICF_A1_TO_F64) + "$$LTBLUE$$a1d$$FG$$ "; + if (tempi->ic_flags & ICF_A1_TO_INT) + "$$GREEN$$a1i$$FG$$ "; + if (tempi->ic_flags & ICF_R_TO_F64) + "$$LTBLUE$$rd$$FG$$ "; + if (tempi->ic_flags & ICF_R_TO_INT) + "$$GREEN$$ri$$FG$$ "; + if (tempi->ic_flags & ICF_USE_F64) + "[F64] "; + if (tempi->ic_flags & ICF_USE_UNSIGNED) + "[unsigned] "; + if (tempi->ic_flags & ICF_USE_INT) + "[int] "; + if (tempi->ic_flags & ICF_NO_DEPEND_RESULT) + "-DEP "; + if (tempi->ic_flags & ICF_DEPEND_RESULT) + "+DEP "; + if (tempi->ic_flags & ICF_NOT_ADDR) + "NOT_ADDR "; + if (tempi->ic_flags & ICF_PUSH_RESULT) + "PUSH "; + if (tempi->ic_flags & ICF_PUSH_CMP) + "PUSH_CMP "; + if (tempi->ic_flags & ICF_POP_CMP) + "POP_CMP "; + if (tempi->ic_flags & ICF_DEL_PREVIOUS_INS) + "DELPREV "; + if (tempi->ic_flags & ICF_PREVIOUS_DELETED) + "PREVDEL "; + for (i=0;i<3;i++) { + if (Bt(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0+i)) + "DONT_PUSH#%d ",i; + if (Bt(&tempi->ic_flags,ICf_DONT_POP_FLOAT0+i)) + "DONT_POP#%d ",i; + } + if (tempi->ic_flags & ICF_ALTERNATE_TEMPLATE) + "ALT_TEMP "; + '\n'; + } +} + +U0 LCCQuePut(CLex *lx) +{ + CIntermediateCode *tempi=lx->lcc.lcc_root.next; + while (tempi->ic_code) { + if (tempi->ic_flags&ICF_TRACE) + ICPut(lx,tempi); + tempi=tempi->next; + } +} + +U0 LCCInit(CLex *lx) +{ + CLexCodeCtrl *tempcbh=&lx->lcc; + QueInit(&tempcbh->lcc_root.next); + QueInit(&tempcbh->lcc_next_misc); + tempcbh->lcc_root.ic_code=IC_END; +} + +CIntermediateCode *LCCAdd(CLex *lx, + I64 opcode_and_precedence,I64 arg, CHashClass *c,I64 flags=0) +{ + CIntermediateCode *tempi=MAlloc(sizeof(CIntermediateCode)); + tempi->ic_code=opcode_and_precedence.u16[0]; + tempi->ic_precedence=opcode_and_precedence.u16[1]; + tempi->ic_data=arg; + tempi->ic_class=c; + if (Bt(&lx->opts,OPTf_OPT_TRACE)) { + Bts(&lx->flags,Lf_OPT_TRACE_PRESENT); + flags|=ICF_TRACE; + } + if (lx->lock_cnt) + flags|=ICF_LOCK; + tempi->ic_flags=flags; + tempi->ic_line=lx->last_line_num; + QueIns(tempi,lx->lcc.lcc_root.last); + return tempi; +} + +U0 LCCPush(CLex *lx) +{ + CLexCodeCtrl *tempcbh=MAlloc(sizeof(CLexCodeCtrl)); + MemCpy(tempcbh,&lx->lcc,sizeof(CLexCodeCtrl)); + lx->lcc.lcc_next=tempcbh; +} + +CLex *LCCPopNoFree(CLex *lx) +{ + CLexCodeCtrl *tempcbh=lx->lcc.lcc_next; + MemCpy(&lx->lcc,tempcbh,sizeof(CLexCodeCtrl)); + return tempcbh; +} + +U0 LCCPop(CLex *lx) +{ + Free(LCCPopNoFree(lx)); +} + +U0 LCCAppend(CLex *lx, CLexCodeCtrl *tempcbh) +{ + if (tempcbh->lcc_root.next!=&lx->lcc.lcc_root.next) { + lx->lcc.lcc_root.last->next=tempcbh->lcc_root.next; + tempcbh->lcc_root.next->last=lx->lcc.lcc_root.last; + lx->lcc.lcc_root.last=tempcbh->lcc_root.last; + tempcbh->lcc_root.last->next=&lx->lcc.lcc_root.next; + } + if (tempcbh->lcc_next_misc!=&lx->lcc.lcc_next_misc) { + lx->lcc.lcc_last_misc->next=tempcbh->lcc_next_misc; + tempcbh->lcc_next_misc->last=lx->lcc.lcc_last_misc; + lx->lcc.lcc_last_misc=tempcbh->lcc_last_misc; + tempcbh->lcc_last_misc->next=&lx->lcc.lcc_next_misc; + } + Free(tempcbh); +} + +CLexCodeMisc *LCCMiscNew(CLex *lx,I64 ty) +{ + CLexCodeMisc *result=CAlloc(sizeof(CLexCodeMisc)); + result->addr=INVALID_PTR; + result->type=ty; + QueIns(result,lx->lcc.lcc_last_misc); + return result; +} + +CLexCodeMisc *LCCGoToLabelFind(CLex *lx,U8 *name) +{ + CLexCodeMisc *mc=lx->lcc.lcc_next_misc; + while (mc!=&lx->lcc.lcc_next_misc) { + if ((mc->type==CMT_GOTO_LABEL||mc->type==CMT_ASM_LABEL) && + !StrCmp(mc->str,name)) + return mc; + mc=mc->next; + } + return NULL; +} + +I64 LCCFloatConstFind(CLex *lx,F64 d) +{ + I64 i; + CLexCodeMisc *mc=lx->lcc.lcc_next_misc; + while (mc!=&lx->lcc.lcc_next_misc) { + if (mc->type==CMT_FLOAT_CONSTS) { + for (i=0;inum_consts;i++) + if (mc->float_consts[i]==d) + return mc->addr+i*sizeof(F64); + if (mc->num_constsfloat_consts[mc->num_consts++]=d; + return mc->addr+i*sizeof(F64); + } + } + mc=mc->next; + } + mc=LCCMiscNew(lx,CMT_FLOAT_CONSTS); + mc->float_consts=MAlloc(CM_MAX_CONSTS*sizeof(F64)); + mc->float_consts[mc->num_consts++]=d; + return mc->addr; +} + +U0 LCCDel(CLex *lx,CLexCodeCtrl *lcc) +{ + CLexCodeMisc *mc,*mc1; + U8 *undef=NULL; + QueDel(&lcc->lcc_root.next); + mc=lcc->lcc_next_misc; + while (mc!=&lcc->lcc_next_misc) { + mc1=mc->next; + switch (mc->type) { + case CMT_GOTO_LABEL: + case CMT_ASM_LABEL: + if (!(mc->flags&CMF_DEFINED)) { + undef=mc->str; + mc->str=NULL; + } else if (!mc->use_cnt) { + PrintWarn("Unused label %s\n",mc->str); + LexWarn(lx,"Unused label at "); + } + break; + case CMT_JMP_TABLE: + Free(mc->jmp_table); + break; + case CMT_FLOAT_CONSTS: + Free(mc->float_consts); + break; + case CMT_ARRAY_DIM: + LinkedLstDel(mc->dim); + break; + case CMT_HASH_ENTRY: + HashDel(mc->h); + break; + } + Free(mc->str); + Free(mc); + mc=mc1; + } + if (undef) { + PrintErr("Undefined goto label %s\n",undef); + Free(undef); + LexExcept(lx,"Undefined goto label at "); + } +} + +U0 LCCHeaderPut(CLex *lx,I64 pass,Bool put) +{ + if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) { + if (put) { + if (Bt(&lx->otrace_mask,pass-1)) { + "$$IV,1$$Pass %d:$$IV,0$$\n",pass-1; + LCCQuePut(lx); + } + } else if (Bt(&lx->otrace_mask,pass)) + "$$IV,1$$Pass %d:$$IV,0$$\n",pass; + } + lx->pass=pass; +} + +U8 *LCCCompile(CLex *lx,I64 *_code_size,CDbgInfo **_dbg,I64 *_type) +{ + U8 *result; + CLexCodeMisc *lb; + I64 i,code_size,last_code_size; + + COptReg reg_offsets[NUM_REGS]; + if (_dbg) *_dbg=NULL; + lx->pass=0; + LCCHeaderPut(lx,1,TRUE); + OptPass012(lx); + LCCHeaderPut(lx,2,TRUE); + OptPass012(lx); + LCCHeaderPut(lx,3,TRUE); + OptPass3(lx,reg_offsets); + LCCHeaderPut(lx,4,TRUE); + OptPass4(lx,reg_offsets,_type); + LCCHeaderPut(lx,5,TRUE); + OptPass5(lx); + LCCHeaderPut(lx,6,TRUE); + OptPass6(lx); + LCCHeaderPut(lx,7,TRUE); + + lb=lx->lcc.lcc_next_misc; + while (lb!=&lx->lcc.lcc_next_misc) { + if (lb->type==CMT_JMP_TABLE) { + for (i=0;irange;i++) + lb->jmp_table[i]=OptLabelFwd(lb->jmp_table[i]); + lb->dft=OptLabelFwd(lb->dft); + } + lb=lb->next; + } + + LCCHeaderPut(lx,7,FALSE); + OptPass789A(lx,reg_offsets,NULL,NULL); + LCCHeaderPut(lx,8,FALSE); + OptPass789A(lx,reg_offsets,NULL,NULL); + LCCHeaderPut(lx,9,FALSE); + code_size=OptPass789A(lx,reg_offsets,NULL,NULL); + do { + last_code_size=code_size; + LCCHeaderPut(lx,9,FALSE); + code_size=OptPass789A(lx,reg_offsets,NULL,NULL); + if (code_size>last_code_size) { + "Pass:9 Code Size\n"; + LexExcept(lx,"Compiler Optimization Error at "); + } + } while (code_sizeflags&LF_AOT_COMPILE) + result=MAlloc(code_size); + else + result=MAlloc(code_size,Fs->code_heap); + LCCHeaderPut(lx,10,FALSE); + code_size=OptPass789A(lx,reg_offsets,result,_dbg); + + LCCDel(lx,&lx->lcc); + if (Bt(&lx->opts,OPTf_COMPILE_TRACE)) { + if (lx->flags&LF_AOT_COMPILE) { + if (lx->a->seg_size==16) + Un(result,code_size,16); + else if (lx->a->seg_size==64) + Un(result,code_size,64); + else + Un(result,code_size,32); + } else + Un(result,code_size,64); + } + if (_code_size) *_code_size=code_size; + return result; +} diff --git a/Compiler/Compiler.BIN b/Compiler/Compiler.BIN index ac541ce..51d4aa9 100644 Binary files a/Compiler/Compiler.BIN and b/Compiler/Compiler.BIN differ diff --git a/Compiler/Compiler.MAP b/Compiler/Compiler.MAP index 89885a9..90c6936 100644 --- a/Compiler/Compiler.MAP +++ b/Compiler/Compiler.MAP @@ -1,460 +1,451 @@ -$LK,"AsmGlblsResolve ",A="FL:D:/Compiler/Assembler.CPP.Z,284",BI=1$0000007F30 0001 0000000404 Funct Export Res -$LK,"AsmHashLoad ",A="FL:D:/Compiler/CmpInit.CPP.Z,68",BI=2$000002939A 0001 00000005BF Funct Export Res -$LK,"AsmLexExpression ",A="FL:D:/Compiler/Assembler.CPP.Z,189",BI=3$0000007B08 0004 00000000B7 Funct Export Res -$LK,"AsmLineLst ",A="FL:D:/Compiler/Assembler.CPP.Z,31",BI=4$0000007570 0001 0000000148 Funct Export Res -$LK,"AsmLocalsResolve ",A="FL:D:/Compiler/Assembler.CPP.Z,250",BI=5$0000007E08 0003 0000000127 Funct Export Res -$LK,"AsmMakeArgMask ",A="FL:D:/Compiler/Assembler.CPP.Z,569",BI=6$0000008898 0002 0000000444 Funct Export Res -$LK,"AsmPrsInsFlags ",A="FL:D:/Compiler/CmpInit.CPP.Z,18",BI=7$000002915A 0001 000000023B Funct Export Res -$LK,"AsmResolve ",A="FL:D:/Compiler/Assembler.CPP.Z,209",BI=8$0000007BC0 0002 0000000245 Funct Export Res -$LK,"AsmStoreCodeU32 ",A="FL:D:/Compiler/Assembler.CPP.Z,90",BI=9$00000077C0 0001 0000000145 Funct Export Res -$LK,"AsmStoreCodeU64 ",A="FL:D:/Compiler/Assembler.CPP.Z,129",BI=10$0000007908 0005 0000000146 Funct Export Res -$LK,"AsmStoreCodeU8 ",A="FL:D:/Compiler/Assembler.CPP.Z,61",BI=11$00000076B8 001D 0000000103 Funct Export Res -$LK,"AsmStoreCodeU8At ",A="FL:D:/Compiler/Assembler.CPP.Z,168",BI=12$0000007A50 0007 00000000B7 Funct Export Res -$LK,"AsmStoreNum ",A="FL:D:/Compiler/Assembler.CPP.Z,663",BI=13$0000008CE0 0004 00000004A6 Funct Export Res -$LK,"AsmUnresolvedAdd ",A="FL:D:/Compiler/Assembler.CPP.Z,1",BI=14$0000007460 0004 000000010C Funct Export Res -$LK,"CInternalType ",A="FL:D:/Compiler/CmpInit.CPP.Z,3"$003FD4FE40 0002 000000000A Class -$LK,"CMP_TEMPLATES ",A="FL:D:/Compiler/CmpAsm.CPP.Z,5"$0000000000 0001 ExportSysSym Export -$LK,"CMP_TEMPLATES_DONT_POP",A="FL:D:/Compiler/CmpAsm.CPP.Z,179"$000000018B 0001 ExportSysSym Export -$LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:D:/Compiler/CmpAsm.CPP.Z,268"$0000000257 0001 ExportSysSym Export -$LK,"CMP_TEMPLATES_DONT_PUSH2",A="FL:D:/Compiler/CmpAsm.CPP.Z,459"$0000000421 0001 ExportSysSym Export -$LK,"CMP_TEMPLATES_DONT_PUSH_POP",A="FL:D:/Compiler/CmpAsm.CPP.Z,395"$0000000391 0001 ExportSysSym Export -$LK,"CN_A1 ",A="FL:D:/Compiler/BackF1a.CPP.Z,2"$1 0006 0000000008 DefineStr -$LK,"CN_A2 ",A="FL:D:/Compiler/BackF1a.CPP.Z,1"$0 0005 0000000008 DefineStr -$LK,"CN_MAIN ",A="FL:D:/Compiler/BackF1a.CPP.Z,3"$2 0022 0000000008 DefineStr -$LK,"CN_R ",A="FL:D:/Compiler/BackF1a.CPP.Z,4"$3 0003 0000000008 DefineStr -$LK,"COptMemberVar ",A="FL:D:/Compiler/OptLib.CPP.Z,570"$003FC79988 0005 0000000028 Class -$LK,"CSubSwitch ",A="FL:D:/Compiler/StmtParser.CPP.Z,1342"$003FC769B0 0004 0000000020 Class -$LK,"CSwitchCase ",A="FL:D:/Compiler/StmtParser.CPP.Z,1347"$003FD576B8 0004 0000000020 Class -$LK,"CTrace ",A="FL:D:/Compiler/ICLCC.CPP.Z,33",BI=15$0000002898 0000 0000000017 Funct Export Res -$LK,"CVI2 ",A="FL:D:/Compiler/StmtParser.CPP.Z,175"$003FC76C90 0003 0000000010 Class -$LK,"Cmp ",A="FL:D:/Compiler/CmpMain.CPP.Z,455",BI=16$000002BF32 0000 000000059C Funct Export Res -$LK,"CmpBuf ",A="FL:D:/Compiler/CmpMain.CPP.Z,170",BI=17$000002B5FA 0001 00000000B6 Funct Export Res -$LK,"CmpF1PushPop ",A="FL:D:/Compiler/OptLib.CPP.Z,553",BI=18$000000BCE6 0002 0000000031 Funct Export Res -$LK,"CmpF2PushPop ",A="FL:D:/Compiler/OptLib.CPP.Z,559",BI=19$000000BD1E 0005 0000000074 Funct Export Res -$LK,"CmpFillTables ",A="FL:D:/Compiler/CmpInit.CPP.Z,444",BI=20$000002A872 0001 000000051A Funct Export Res -$LK,"CmpFixUpAOTAsm ",A="FL:D:/Compiler/CmpMain.CPP.Z,314",BI=21$000002BB42 0000 00000003EA Funct Export Res -$LK,"CmpFixUpJITAsm ",A="FL:D:/Compiler/CmpMain.CPP.Z,187",BI=22$000002B6B2 0000 000000048F Funct Export Res -$LK,"CmpInit ",A="FL:D:/Compiler/CmpMain.CPP.Z,718",BI=23$000002C9DA 0001 0000000081 Funct Export Res -$LK,"CmpJoin ",A="FL:D:/Compiler/CmpMain.CPP.Z,48",BI=24$000002AF72 0001 0000000682 Funct Export Res -$LK,"CmpLoadDefines ",A="FL:D:/Compiler/CmpInit.CPP.Z,204",BI=25$000002995A 0001 0000000F18 Funct Export Res -$LK,"CmpNoteFloatOp ",A="FL:D:/Compiler/BackF1a.CPP.Z,6",BI=26$000001B3EE 000E 000000020D Funct Export Res -$LK,"CmpOffset2Reg ",A="FL:D:/Compiler/OptLib.CPP.Z,83",BI=27$000000B09E 0005 0000000046 Funct Export Res -$LK,"CmpPrompt ",A="FL:D:/Compiler/Lex.CPP.Z,1",BI=28$00000038D8 0001 00000001B5 Funct Export Res -$LK,"CmpRawType ",A="FL:D:/Compiler/OptLib.CPP.Z,533",BI=29$000000BC86 0006 0000000025 Funct Export Res -$LK,"CmpRawTypePointed ",A="FL:D:/Compiler/OptLib.CPP.Z,542",BI=30$000000BCAE 0005 0000000033 Funct Export Res -$LK,"CmpSetFloatOpPushPop",A="FL:D:/Compiler/BackF1a.CPP.Z,57",BI=31$000001B5FE 000C 0000000075 Funct Export Res -$LK,"Echo ",A="FL:D:/Compiler/ICLCC.CPP.Z,38",BI=32$00000028B0 0000 0000000017 Funct Export Res -$LK,"ExeFile ",A="FL:D:/Compiler/CmpMain.CPP.Z,650",BI=33$000002C6D2 0000 000000007B Funct Export Res -$LK,"ExeFile2 ",A="FL:D:/Compiler/CmpMain.CPP.Z,689",BI=34$000002C86A 0000 0000000079 Funct Export Res -$LK,"ExePrint ",A="FL:D:/Compiler/CmpMain.CPP.Z,641",BI=35$000002C682 0000 0000000049 Funct Export Res -$LK,"ExePrint2 ",A="FL:D:/Compiler/CmpMain.CPP.Z,680",BI=36$000002C822 0000 0000000047 Funct Export Res -$LK,"ExePutS ",A="FL:D:/Compiler/CmpMain.CPP.Z,606",BI=37$000002C4D2 0003 00000001A9 Funct Export Res -$LK,"ExePutS2 ",A="FL:D:/Compiler/CmpMain.CPP.Z,661",BI=38$000002C752 0002 00000000CC Funct Export Res -$LK,"FBO1_F64 ",A="FL:D:/Compiler/OptLib.CPP.Z,94"$2 0002 0000000008 DefineStr -$LK,"FBO1_INT ",A="FL:D:/Compiler/OptLib.CPP.Z,93"$1 0013 0000000008 DefineStr -$LK,"FBO1_NOT_CONST ",A="FL:D:/Compiler/OptLib.CPP.Z,92"$0 0004 0000000008 DefineStr -$LK,"GetOpt ",A="FL:D:/Compiler/ICLCC.CPP.Z,16",BI=39$0000002810 0004 000000002C Funct Export Res -$LK,"HashEntrySize ",A="FL:D:/Compiler/Hash1b.CPP.Z,1",BI=40$0000007158 0000 0000000103 Funct Export Res -$LK,"HashEntrySize2 ",A="FL:D:/Compiler/Hash1b.CPP.Z,32",BI=41$0000007260 0002 00000001A4 Funct Export Res -$LK,"HashTableSize2 ",A="FL:D:/Compiler/Hash1b.CPP.Z,69",BI=42$0000007408 0000 0000000054 Funct Export Res -$LK,"ICAddEct ",A="FL:D:/Compiler/Back1a.CPP.Z,1",BI=43$000001F056 0005 00000002F3 Funct Export Res -$LK,"ICAddRSP ",A="FL:D:/Compiler/BackLib.CPP.Z,69",BI=44$0000019D86 0017 00000002A7 Funct Export Res -$LK,"ICAddSubEctEqual ",A="FL:D:/Compiler/Back1a.CPP.Z,505",BI=45$000002095E 0005 0000000673 Funct Export Res -$LK,"ICAddSubEctImm ",A="FL:D:/Compiler/Back1a.CPP.Z,57",BI=46$000001F34E 000D 0000000685 Funct Export Res -$LK,"ICAndAnd ",A="FL:D:/Compiler/Back1b.CPP.Z,30",BI=47$00000215FE 0001 000000014B Funct Export Res -$LK,"ICAndBranch ",A="FL:D:/Compiler/Back1c.CPP.Z,1",BI=48$0000023896 0002 00000006E6 Funct Export Res -$LK,"ICAndEqual ",A="FL:D:/Compiler/Back1c.CPP.Z,675",BI=49$0000025776 0001 000000010D Funct Export Res -$LK,"ICArgPut ",A="FL:D:/Compiler/ICLCC.CPP.Z,73",BI=50$00000029D0 0003 00000002D6 Funct Export Res -$LK,"ICAssign ",A="FL:D:/Compiler/Back1c.CPP.Z,159",BI=51$0000023F7E 0001 0000000301 Funct Export Res -$LK,"ICAssignPostIncDec ",A="FL:D:/Compiler/Back1b.CPP.Z,534",BI=52$0000022C56 0002 0000000210 Funct Export Res -$LK,"ICBitOps ",A="FL:D:/Compiler/Back1b.CPP.Z,244",BI=53$0000021EF6 0007 00000004F1 Funct Export Res -$LK,"ICBrBitOps ",A="FL:D:/Compiler/Back1c.CPP.Z,207",BI=54$0000024286 0008 00000009FB Funct Export Res -$LK,"ICBuiltInFloatConst ",A="FL:D:/Compiler/BackLib.CPP.Z,420",BI=55$000001A8C6 000F 00000000BD Funct Export Res -$LK,"ICClassPut ",A="FL:D:/Compiler/ICLCC.CPP.Z,49",BI=56$00000028F8 0001 00000000D3 Funct Export Res -$LK,"ICCmp ",A="FL:D:/Compiler/Back1b.CPP.Z,124",BI=57$0000021A0E 0006 00000004E6 Funct Export Res -$LK,"ICCmpAndBranch ",A="FL:D:/Compiler/Back1b.CPP.Z,575",BI=58$0000022E66 000C 0000000737 Funct Export Res -$LK,"ICCopyTemplate ",A="FL:D:/Compiler/BackF1a.CPP.Z,69",BI=59$000001B676 0013 000000021D Funct Export Res -$LK,"ICDeref ",A="FL:D:/Compiler/BackLib.CPP.Z,656",BI=60$000001B32E 0001 00000000B9 Funct Export Res -$LK,"ICDerefPostIncDec ",A="FL:D:/Compiler/Back1b.CPP.Z,491",BI=61$0000022A5E 0002 00000001F1 Funct Export Res -$LK,"ICDiv ",A="FL:D:/Compiler/Back1a.CPP.Z,413",BI=62$000002048E 0001 00000000F1 Funct Export Res -$LK,"ICDivEqual ",A="FL:D:/Compiler/Back1a.CPP.Z,432",BI=63$0000020586 0002 00000002DE Funct Export Res -$LK,"ICFAdd ",A="FL:D:/Compiler/BackF1b.CPP.Z,633",BI=64$000001EA16 0001 00000001FF Funct Export Res -$LK,"ICFCmp ",A="FL:D:/Compiler/BackF1a.CPP.Z,549",BI=65$000001C9EE 0004 000000018B Funct Export Res -$LK,"ICFCmpAndBranch ",A="FL:D:/Compiler/BackF1b.CPP.Z,325",BI=66$000001DE4E 0004 00000009F7 Funct Export Res -$LK,"ICFCvt ",A="FL:D:/Compiler/BackF1a.CPP.Z,115",BI=67$000001B896 000C 000000017F Funct Export Res -$LK,"ICFCvt2 ",A="FL:D:/Compiler/BackF1a.CPP.Z,163",BI=68$000001BA16 0010 0000000116 Funct Export Res -$LK,"ICFDiv ",A="FL:D:/Compiler/BackF1b.CPP.Z,621",BI=69$000001E966 0001 00000000A9 Funct Export Res -$LK,"ICFMod ",A="FL:D:/Compiler/BackF1a.CPP.Z,241",BI=70$000001BD0E 0001 0000000145 Funct Export Res -$LK,"ICFModEqual ",A="FL:D:/Compiler/BackF1a.CPP.Z,589",BI=71$000001CB7E 0001 00000003D7 Funct Export Res -$LK,"ICFMul ",A="FL:D:/Compiler/BackF1b.CPP.Z,603",BI=72$000001E846 0001 000000011B Funct Export Res -$LK,"ICFOp ",A="FL:D:/Compiler/BackF1a.CPP.Z,350",BI=73$000001C14E 0004 000000089D Funct Export Res -$LK,"ICFOpEqual ",A="FL:D:/Compiler/BackF1b.CPP.Z,1",BI=74$000001CF56 0004 0000000EF7 Funct Export Res -$LK,"ICFPostIncDec ",A="FL:D:/Compiler/BackF1b.CPP.Z,716",BI=75$000001EE4E 0002 0000000151 Funct Export Res -$LK,"ICFPow ",A="FL:D:/Compiler/BackF1a.CPP.Z,271",BI=76$000001BE56 0001 00000002F7 Funct Export Res -$LK,"ICFPreIncDec ",A="FL:D:/Compiler/BackF1b.CPP.Z,694",BI=77$000001ED3E 0002 000000010A Funct Export Res -$LK,"ICFSub ",A="FL:D:/Compiler/BackF1b.CPP.Z,671",BI=78$000001EC16 0001 0000000124 Funct Export Res -$LK,"ICFTemplateFun ",A="FL:D:/Compiler/BackF1b.CPP.Z,744",BI=79$000001EFA6 0007 00000000AA Funct Export Res -$LK,"ICFUnaryMinus ",A="FL:D:/Compiler/BackF1a.CPP.Z,190",BI=80$000001BB2E 0001 00000001E0 Funct Export Res -$LK,"ICFlagBranch ",A="FL:D:/Compiler/Back1b.CPP.Z,803",BI=81$000002378E 0004 0000000106 Funct Export Res -$LK,"ICLastIns ",A="FL:D:/Compiler/BackLib.CPP.Z,59",BI=82$0000019D46 0002 0000000040 Funct Export Res -$LK,"ICLea ",A="FL:D:/Compiler/BackLib.CPP.Z,622",BI=83$000001B17E 0004 00000001AA Funct Export Res -$LK,"ICLocalVarInit ",A="FL:D:/Compiler/Back1c.CPP.Z,908",BI=84$0000026196 0001 0000000078 Funct Export Res -$LK,"ICMinMax ",A="FL:D:/Compiler/Back1c.CPP.Z,496",BI=85$000002504E 0004 00000002AB Funct Export Res -$LK,"ICMod ",A="FL:D:/Compiler/Back1a.CPP.Z,486",BI=86$0000020866 0001 00000000F1 Funct Export Res -$LK,"ICModU64 ",A="FL:D:/Compiler/Back1c.CPP.Z,575",BI=87$000002534E 0001 00000001B7 Funct Export Res -$LK,"ICModr1 ",A="FL:D:/Compiler/BackLib.CPP.Z,140",BI=88$000001A02E 0017 00000002FE Funct Export Res -$LK,"ICModr2 ",A="FL:D:/Compiler/BackLib.CPP.Z,230",BI=89$000001A32E 0016 00000000A6 Funct Export Res -$LK,"ICMov ",A="FL:D:/Compiler/BackLib.CPP.Z,442",BI=90$000001A986 019A 00000007F4 Funct Export Res -$LK,"ICMul ",A="FL:D:/Compiler/Back1a.CPP.Z,289",BI=91$000001FDCE 0001 00000002B8 Funct Export Res -$LK,"ICMulEqual ",A="FL:D:/Compiler/Back1a.CPP.Z,346",BI=92$0000020086 0001 0000000406 Funct Export Res -$LK,"ICNot ",A="FL:D:/Compiler/Back1b.CPP.Z,10",BI=93$00000214FE 0001 00000000FF Funct Export Res -$LK,"ICOpSizeRex ",A="FL:D:/Compiler/BackLib.CPP.Z,28",BI=94$0000019C5E 0006 0000000040 Funct Export Res -$LK,"ICOrEqual ",A="FL:D:/Compiler/Back1c.CPP.Z,698",BI=95$0000025886 0001 000000010D Funct Export Res -$LK,"ICOrOr ",A="FL:D:/Compiler/Back1b.CPP.Z,59",BI=96$000002174E 0001 0000000162 Funct Export Res -$LK,"ICPop ",A="FL:D:/Compiler/BackLib.CPP.Z,361",BI=97$000001A6CE 0009 00000000EA Funct Export Res -$LK,"ICPopRegs ",A="FL:D:/Compiler/BackLib.CPP.Z,388",BI=98$000001A7BE 000C 0000000057 Funct Export Res -$LK,"ICPostIncDec ",A="FL:D:/Compiler/Back1b.CPP.Z,451",BI=99$000002285E 0002 00000001FF Funct Export Res -$LK,"ICPreIncDec ",A="FL:D:/Compiler/Back1b.CPP.Z,415",BI=100$000002267E 0004 00000001DB Funct Export Res -$LK,"ICPreempt ",A="FL:D:/Compiler/Back1b.CPP.Z,348",BI=101$00000223EE 0001 0000000122 Funct Export Res -$LK,"ICPush ",A="FL:D:/Compiler/BackLib.CPP.Z,310",BI=102$000001A51E 001F 0000000152 Funct Export Res -$LK,"ICPushRegs ",A="FL:D:/Compiler/BackLib.CPP.Z,348",BI=103$000001A676 0006 0000000054 Funct Export Res -$LK,"ICPut ",A="FL:D:/Compiler/ICLCC.CPP.Z,118",BI=104$0000002CA8 0008 00000003B2 Funct Export Res -$LK,"ICQueInit ",A="FL:D:/Compiler/Back1c.CPP.Z,384",BI=105$0000024C86 0001 0000000070 Funct Export Res -$LK,"ICQueIns ",A="FL:D:/Compiler/Back1c.CPP.Z,398",BI=106$0000024CF6 0001 0000000162 Funct Export Res -$LK,"ICQueInsRev ",A="FL:D:/Compiler/Back1c.CPP.Z,439",BI=107$0000024E5E 0001 0000000162 Funct Export Res -$LK,"ICQueRem ",A="FL:D:/Compiler/Back1c.CPP.Z,480",BI=108$0000024FC6 0001 0000000088 Funct Export Res -$LK,"ICRex ",A="FL:D:/Compiler/BackLib.CPP.Z,22",BI=109$0000019C2E 0016 000000002D Funct Export Res -$LK,"ICShift ",A="FL:D:/Compiler/Back1a.CPP.Z,643",BI=110$0000020FD6 0004 00000001A3 Funct Export Res -$LK,"ICShiftEqual ",A="FL:D:/Compiler/Back1a.CPP.Z,676",BI=111$000002117E 0002 000000030E Funct Export Res -$LK,"ICSlashOp ",A="FL:D:/Compiler/BackLib.CPP.Z,282",BI=112$000001A3D6 0027 0000000145 Funct Export Res -$LK,"ICSqr ",A="FL:D:/Compiler/Back1c.CPP.Z,568",BI=113$00000252FE 0002 000000004A Funct Export Res -$LK,"ICSub ",A="FL:D:/Compiler/Back1a.CPP.Z,211",BI=114$000001F9D6 0001 00000003F5 Funct Export Res -$LK,"ICSwap ",A="FL:D:/Compiler/Back1c.CPP.Z,617",BI=115$0000025506 0001 000000026E Funct Export Res -$LK,"ICSwitch ",A="FL:D:/Compiler/Back1c.CPP.Z,744",BI=116$0000025A9E 0002 00000006F2 Funct Export Res -$LK,"ICTest ",A="FL:D:/Compiler/BackLib.CPP.Z,410",BI=117$000001A876 000C 000000004E Funct Export Res -$LK,"ICTestAndBranch ",A="FL:D:/Compiler/Back1b.CPP.Z,755",BI=118$000002359E 0002 00000001EC Funct Export Res -$LK,"ICToBool ",A="FL:D:/Compiler/Back1b.CPP.Z,400",BI=119$0000022606 0001 0000000075 Funct Export Res -$LK,"ICToF64 ",A="FL:D:/Compiler/Back1b.CPP.Z,395",BI=120$00000225C6 0001 000000003D Funct Export Res -$LK,"ICToI64 ",A="FL:D:/Compiler/Back1b.CPP.Z,390",BI=121$0000022586 0001 000000003D Funct Export Res -$LK,"ICToUpper ",A="FL:D:/Compiler/Back1b.CPP.Z,379",BI=122$0000022516 0001 000000006B Funct Export Res -$LK,"ICU16 ",A="FL:D:/Compiler/BackLib.CPP.Z,35",BI=123$0000019C9E 0092 0000000029 Funct Export Res -$LK,"ICU24 ",A="FL:D:/Compiler/BackLib.CPP.Z,41",BI=124$0000019CCE 0063 0000000026 Funct Export Res -$LK,"ICU32 ",A="FL:D:/Compiler/BackLib.CPP.Z,47",BI=125$0000019CF6 0054 0000000026 Funct Export Res -$LK,"ICU64 ",A="FL:D:/Compiler/BackLib.CPP.Z,53",BI=126$0000019D1E 0009 0000000028 Funct Export Res -$LK,"ICU8 ",A="FL:D:/Compiler/BackLib.CPP.Z,17",BI=127$0000019C06 0063 0000000028 Funct Export Res -$LK,"ICUnaries ",A="FL:D:/Compiler/Back1b.CPP.Z,1",BI=128$000002148E 0002 0000000069 Funct Export Res -$LK,"ICXorEqual ",A="FL:D:/Compiler/Back1c.CPP.Z,721",BI=129$0000025996 0001 0000000107 Funct Export Res -$LK,"ICXorXor ",A="FL:D:/Compiler/Back1b.CPP.Z,91",BI=130$00000218B6 0001 0000000155 Funct Export Res -$LK,"ICZero ",A="FL:D:/Compiler/BackLib.CPP.Z,401",BI=131$000001A816 0017 000000005E Funct Export Res -$LK,"IncludeDepth ",A="FL:D:/Compiler/ICLCC.CPP.Z,43",BI=132$00000028C8 0000 0000000030 Funct Export Res -$LK,"InstEntriesCompare ",A="FL:D:/Compiler/Unassembler.CPP.Z,1",BI=133$0000000738 0001 00000002A9 Funct Export Res -$LK,"InstEntryFind ",A="FL:D:/Compiler/Unassembler.CPP.Z,72",BI=134$00000009E8 0002 00000003C9 Funct Export Res -$LK,"IsLexExpression2Bin ",A="FL:D:/Compiler/ExpParser.CPP.Z,1153",BI=135$000000ECAE 0000 0000000029 Funct Export Res -$LK,"LCCAdd ",A="FL:D:/Compiler/ICLCC.CPP.Z,200",BI=136$00000030D8 00A9 000000009F Funct Export Res -$LK,"LCCAppend ",A="FL:D:/Compiler/ICLCC.CPP.Z,239",BI=137$0000003200 0003 00000000A6 Funct Export Res -$LK,"LCCCompile ",A="FL:D:/Compiler/ICLCC.CPP.Z,356",BI=138$0000003630 0006 00000002A7 Funct Export Res -$LK,"LCCDel ",A="FL:D:/Compiler/ICLCC.CPP.Z,299",BI=139$0000003420 0001 0000000164 Funct Export Res -$LK,"LCCFloatConstFind ",A="FL:D:/Compiler/ICLCC.CPP.Z,277",BI=140$0000003358 000F 00000000C6 Funct Export Res -$LK,"LCCGoToLabelFind ",A="FL:D:/Compiler/ICLCC.CPP.Z,265",BI=141$0000003300 0005 0000000057 Funct Export Res -$LK,"LCCHeaderPut ",A="FL:D:/Compiler/ICLCC.CPP.Z,342",BI=142$0000003588 000B 00000000A2 Funct Export Res -$LK,"LCCInit ",A="FL:D:/Compiler/ICLCC.CPP.Z,192",BI=143$0000003098 000A 000000003A Funct Export Res -$LK,"LCCMiscNew ",A="FL:D:/Compiler/ICLCC.CPP.Z,256",BI=144$00000032A8 0021 0000000055 Funct Export Res -$LK,"LCCPop ",A="FL:D:/Compiler/ICLCC.CPP.Z,234",BI=145$00000031E0 0008 000000001A Funct Export Res -$LK,"LCCPopNoFree ",A="FL:D:/Compiler/ICLCC.CPP.Z,227",BI=146$00000031B0 0003 000000002E Funct Export Res -$LK,"LCCPush ",A="FL:D:/Compiler/ICLCC.CPP.Z,220",BI=147$0000003178 000E 0000000037 Funct Export Res -$LK,"LCCQuePut ",A="FL:D:/Compiler/ICLCC.CPP.Z,182",BI=148$0000003060 0001 0000000037 Funct Export Res -$LK,"Lex ",A="FL:D:/Compiler/Lex.CPP.Z,725",BI=149$00000054C8 00ED 0000001881 Funct Export Res -$LK,"LexAttachDoc ",A="FL:D:/Compiler/Lex.CPP.Z,393",BI=150$0000004A70 0001 0000000163 Funct Export Res -$LK,"LexBackupLastChar ",A="FL:D:/Compiler/Lex.CPP.Z,131",BI=151$0000003E4C 0003 0000000041 Funct Export Res -$LK,"LexD2I32 ",A="FL:D:/Compiler/ExpParser.CPP.Z,1198",BI=152$000000EDCE 0000 00000000A6 Funct Export Res -$LK,"LexD3I32 ",A="FL:D:/Compiler/ExpParser.CPP.Z,1214",BI=153$000000EE76 0000 00000000D9 Funct Export Res -$LK,"LexDel ",A="FL:D:/Compiler/Lex.CPP.Z,66",BI=154$0000003BD0 0004 00000000A5 Funct Export Res -$LK,"LexDocRead ",A="FL:D:/Compiler/Lex.CPP.Z,372",BI=155$00000049DC 0001 0000000087 Funct Export Res -$LK,"LexDollar ",A="FL:D:/Compiler/Lex.CPP.Z,142",BI=156$0000003E94 0003 0000000070 Funct Export Res -$LK,"LexExcept ",A="FL:D:/Compiler/Lex.CPP.Z,1601",BI=157$0000007068 00B8 00000000ED Funct Export Res -$LK,"LexExpression ",A="FL:D:/Compiler/ExpParser.CPP.Z,1186",BI=158$000000ED8E 0002 000000003F Funct Export Res -$LK,"LexExpression2Bin ",A="FL:D:/Compiler/ExpParser.CPP.Z,1135",BI=159$000000EC16 0006 0000000094 Funct Export Res -$LK,"LexExpressionF64 ",A="FL:D:/Compiler/ExpParser.CPP.Z,1172",BI=160$000000ED36 0000 0000000054 Funct Export Res -$LK,"LexExpressionI64 ",A="FL:D:/Compiler/ExpParser.CPP.Z,1158",BI=161$000000ECDE 000A 0000000054 Funct Export Res -$LK,"LexExtStr ",A="FL:D:/Compiler/Lex.CPP.Z,1518",BI=162$0000006D50 0004 00000000C5 Funct Export Res -$LK,"LexFirstRem ",A="FL:D:/Compiler/Lex.CPP.Z,332",BI=163$0000004884 0000 00000000BC Funct Export Res -$LK,"LexGetChar ",A="FL:D:/Compiler/Lex.CPP.Z,156",BI=164$0000003F04 0031 000000094F Funct Export Res -$LK,"LexInStr ",A="FL:D:/Compiler/Lex.CPP.Z,628",BI=165$0000005198 0001 000000032A Funct Export Res -$LK,"LexIncludeStr ",A="FL:D:/Compiler/Lex.CPP.Z,354",BI=166$0000004944 0003 0000000098 Funct Export Res -$LK,"LexNew ",A="FL:D:/Compiler/Lex.CPP.Z,35",BI=167$0000003A90 0004 000000013D Funct Export Res -$LK,"LexPop ",A="FL:D:/Compiler/Lex.CPP.Z,450",BI=168$0000004C60 0004 0000000074 Funct Export Res -$LK,"LexPush ",A="FL:D:/Compiler/Lex.CPP.Z,438",BI=169$0000004BD8 000F 0000000081 Funct Export Res -$LK,"LexPutLine ",A="FL:D:/Compiler/Lex.CPP.Z,1543",BI=170$0000006E18 0003 000000009B Funct Export Res -$LK,"LexPutPos ",A="FL:D:/Compiler/Lex.CPP.Z,1571",BI=171$0000006EB8 0003 00000000CA Funct Export Res -$LK,"LexPutToken ",A="FL:D:/Compiler/Lex.CPP.Z,108",BI=172$0000003D18 0001 000000012B Funct Export Res -$LK,"LexSize ",A="FL:D:/Compiler/Lex.CPP.Z,88",BI=173$0000003C78 0000 000000009B Funct Export Res -$LK,"LexSkipEol ",A="FL:D:/Compiler/Lex.CPP.Z,325",BI=174$0000004854 0004 000000002B Funct Export Res -$LK,"LexStatement2Bin ",A="FL:D:/Compiler/CmpMain.CPP.Z,15",BI=175$000002AE3A 0001 0000000131 Funct Export Res -$LK,"LexWarn ",A="FL:D:/Compiler/Lex.CPP.Z,1585",BI=176$0000006F88 0009 00000000D9 Funct Export Res -$LK,"MDR_D32_INDIRECT_REG",A="FL:D:/Compiler/BackLib.CPP.Z,134"$3 0002 0000000008 DefineStr -$LK,"MDR_D8_INDIRECT_REG ",A="FL:D:/Compiler/BackLib.CPP.Z,133"$2 0002 0000000008 DefineStr -$LK,"MDR_INDIRECT_REG ",A="FL:D:/Compiler/BackLib.CPP.Z,132"$1 0002 0000000008 DefineStr -$LK,"MDR_REG ",A="FL:D:/Compiler/BackLib.CPP.Z,131"$0 0002 0000000008 DefineStr -$LK,"MDR_RIP_REL ",A="FL:D:/Compiler/BackLib.CPP.Z,138"$7 0004 0000000008 DefineStr -$LK,"MDR_SIB_D32_INDIRECT_REG",A="FL:D:/Compiler/BackLib.CPP.Z,137"$6 0003 0000000008 DefineStr -$LK,"MDR_SIB_D8_INDIRECT_REG",A="FL:D:/Compiler/BackLib.CPP.Z,136"$5 0002 0000000008 DefineStr -$LK,"MDR_SIB_INDIRECT_REG",A="FL:D:/Compiler/BackLib.CPP.Z,135"$4 0002 0000000008 DefineStr -$LK,"MemberAdd ",A="FL:D:/Compiler/Lex.CPP.Z,519",BI=177$0000004E10 0004 00000001BA Funct Export Res -$LK,"MemberFind ",A="FL:D:/Compiler/Lex.CPP.Z,484",BI=178$0000004D60 0005 0000000067 Funct Export Res -$LK,"MemberFind2 ",A="FL:D:/Compiler/Lex.CPP.Z,504",BI=179$0000004DC8 0001 0000000044 Funct Export Res -$LK,"MemberLstDel ",A="FL:D:/Compiler/Lex.CPP.Z,567",BI=180$0000004FD0 0001 00000000F3 Funct Export Res -$LK,"MemberLstNew ",A="FL:D:/Compiler/StmtParser.CPP.Z,38",BI=181$000000F026 0003 000000002A Funct Export Res -$LK,"MemberLstSize ",A="FL:D:/Compiler/Lex.CPP.Z,601",BI=182$00000050C8 0002 00000000CF Funct Export Res -$LK,"MemberMetaData ",A="FL:D:/Compiler/Lex.CPP.Z,462",BI=183$0000004CD8 0000 0000000041 Funct Export Res -$LK,"MemberMetaFind ",A="FL:D:/Compiler/Lex.CPP.Z,473",BI=184$0000004D20 0000 0000000040 Funct Export Res -$LK,"NUM_INTERNAL_TYPES ",A="FL:D:/Compiler/CmpInit.CPP.Z,1"$17 0002 0000000008 DefineStr -$LK,"OTrace ",A="FL:D:/Compiler/ICLCC.CPP.Z,21",BI=185$0000002840 0000 0000000017 Funct Export Res -$LK,"OTraceMask ",A="FL:D:/Compiler/ICLCC.CPP.Z,26",BI=186$0000002858 0000 0000000039 Funct Export Res -$LK,"OptBrNotZero ",A="FL:D:/Compiler/OptLib.CPP.Z,361",BI=187$000000B7DE 0004 0000000403 Funct Export Res -$LK,"OptBrZero ",A="FL:D:/Compiler/OptLib.CPP.Z,213",BI=188$000000B3D6 0006 0000000403 Funct Export Res -$LK,"OptClassFwd ",A="FL:D:/Compiler/OptLib.CPP.Z,9",BI=189$000000AEFE 0013 000000002B Funct Export Res -$LK,"OptEqu ",A="FL:D:/Compiler/ICLCC.CPP.Z,1",BI=190$00000027B0 0005 000000002E Funct Export Res -$LK,"OptFixSizeOf ",A="FL:D:/Compiler/OptLib.CPP.Z,509",BI=191$000000BBE6 0003 000000009B Funct Export Res -$LK,"OptFixupBinaryOp1 ",A="FL:D:/Compiler/OptLib.CPP.Z,96",BI=192$000000B0E6 0013 00000001CB Funct Export Res -$LK,"OptFixupBinaryOp2 ",A="FL:D:/Compiler/OptLib.CPP.Z,162",BI=193$000000B2B6 0001 0000000054 Funct Export Res -$LK,"OptFixupUnaryOp ",A="FL:D:/Compiler/OptLib.CPP.Z,178",BI=194$000000B30E 0003 00000000C8 Funct Export Res -$LK,"OptFree ",A="FL:D:/Compiler/OptLib.CPP.Z,33",BI=195$000000AFAE 0023 0000000024 Funct Export Res -$LK,"OptIC4 ",A="FL:D:/Compiler/OptPass4.CPP.Z,1",BI=196$00000179AE 0001 00000005CD Funct Export Res -$LK,"OptIC6 ",A="FL:D:/Compiler/OptPass6.CPP.Z,1",BI=197$00000192C6 0001 0000000128 Funct Export Res -$LK,"OptLabelFwd ",A="FL:D:/Compiler/OptLib.CPP.Z,1",BI=198$000000AED6 0010 0000000028 Funct Export Res -$LK,"OptLag ",A="FL:D:/Compiler/OptLib.CPP.Z,40",BI=199$000000AFD6 000E 000000002A Funct Export Res -$LK,"OptLag1 ",A="FL:D:/Compiler/OptLib.CPP.Z,51",BI=200$000000B006 0006 0000000031 Funct Export Res -$LK,"OptLag2 ",A="FL:D:/Compiler/OptLib.CPP.Z,62",BI=201$000000B03E 0003 000000002A Funct Export Res -$LK,"OptLead1 ",A="FL:D:/Compiler/OptLib.CPP.Z,73",BI=202$000000B06E 0004 0000000030 Funct Export Res -$LK,"OptMVCompare ",A="FL:D:/Compiler/OptLib.CPP.Z,576",BI=203$000000BD96 0001 000000001A Funct Export Res -$LK,"OptOff ",A="FL:D:/Compiler/ICLCC.CPP.Z,11",BI=204$00000027F8 0000 0000000016 Funct Export Res -$LK,"OptOn ",A="FL:D:/Compiler/ICLCC.CPP.Z,6",BI=205$00000027E0 0000 0000000016 Funct Export Res -$LK,"OptPass012 ",A="FL:D:/Compiler/OptPass012.CPP.Z,23",BI=206$0000013B76 0000 00000027CC Funct Export Res -$LK,"OptPass3 ",A="FL:D:/Compiler/OptPass3.CPP.Z,1",BI=207$0000016346 0000 0000001663 Funct Export Res -$LK,"OptPass4 ",A="FL:D:/Compiler/OptPass4.CPP.Z,171",BI=208$0000017F7E 0000 0000000F05 Funct Export Res -$LK,"OptPass5 ",A="FL:D:/Compiler/OptPass5.CPP.Z,1",BI=209$0000018E86 0000 000000043F Funct Export Res -$LK,"OptPass6 ",A="FL:D:/Compiler/OptPass6.CPP.Z,112",BI=210$0000019716 0000 00000004EA Funct Export Res -$LK,"OptPass6Lag ",A="FL:D:/Compiler/OptPass6.CPP.Z,28",BI=211$00000193EE 0001 0000000327 Funct Export Res -$LK,"OptPass789 ",A="FL:D:/Compiler/OptPass789.CPP.Z,1",BI=212$000002620E 0000 0000002E9E Funct Export Res -$LK,"OptSetNOP1 ",A="FL:D:/Compiler/OptLib.CPP.Z,17",BI=213$000000AF2E 0079 000000003A Funct Export Res -$LK,"OptSetNOP2 ",A="FL:D:/Compiler/OptLib.CPP.Z,25",BI=214$000000AF6E 000D 000000003C Funct Export Res -$LK,"PE_CHECK_BINARY_OPS1",A="FL:D:/Compiler/ExpParser.CPP.Z,43"$5 0001 0000000008 DefineStr -$LK,"PE_CHECK_BINARY_OPS2",A="FL:D:/Compiler/ExpParser.CPP.Z,44"$6 0001 0000000008 DefineStr -$LK,"PE_DEREFERENCE ",A="FL:D:/Compiler/ExpParser.CPP.Z,42"$4 0003 0000000008 DefineStr -$LK,"PE_DO_BINARY_OP ",A="FL:D:/Compiler/ExpParser.CPP.Z,46"$8 0001 0000000008 DefineStr -$LK,"PE_DO_UNARY_OP ",A="FL:D:/Compiler/ExpParser.CPP.Z,45"$7 0001 0000000008 DefineStr -$LK,"PE_MAYBE_MODIFIERS ",A="FL:D:/Compiler/ExpParser.CPP.Z,40"$2 000A 0000000008 DefineStr -$LK,"PE_POP_ALL1 ",A="FL:D:/Compiler/ExpParser.CPP.Z,49"$11 0001 0000000008 DefineStr -$LK,"PE_POP_ALL2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,50"$12 0001 0000000008 DefineStr -$LK,"PE_POP_HIGHER ",A="FL:D:/Compiler/ExpParser.CPP.Z,47"$9 0001 0000000008 DefineStr -$LK,"PE_PUSH_LOWER ",A="FL:D:/Compiler/ExpParser.CPP.Z,48"$10 0001 0000000008 DefineStr -$LK,"PE_UNARY_MODIFIERS ",A="FL:D:/Compiler/ExpParser.CPP.Z,41"$3 0009 0000000008 DefineStr -$LK,"PE_UNARY_TERM1 ",A="FL:D:/Compiler/ExpParser.CPP.Z,38"$0 0001 0000000008 DefineStr -$LK,"PE_UNARY_TERM2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,39"$1 0003 0000000008 DefineStr -$LK,"ParenWarning ",A="FL:D:/Compiler/ExpParser.CPP.Z,1",BI=215$000000BDB6 0004 000000004C Funct Export Res -$LK,"PrsAddOp ",A="FL:D:/Compiler/ExpParser.CPP.Z,52",BI=216$000000BEFE 0002 00000001EE Funct Export Res -$LK,"PrsArrayDims ",A="FL:D:/Compiler/StmtParser.CPP.Z,303",BI=217$000000FAAE 0001 000000012D Funct Export Res -$LK,"PrsAsmArg ",A="FL:D:/Compiler/Assembler.CPP.Z,428",BI=218$0000008470 0002 0000000424 Funct Export Res -$LK,"PrsAsmBlk ",A="FL:D:/Compiler/Assembler.CPP.Z,1277",BI=219$000000A5E6 0002 00000008ED Funct Export Res -$LK,"PrsAsmDefine ",A="FL:D:/Compiler/Assembler.CPP.Z,1188",BI=220$000000A286 0004 000000029D Funct Export Res -$LK,"PrsAsmImm ",A="FL:D:/Compiler/Assembler.CPP.Z,394",BI=221$0000008338 0006 0000000131 Funct Export Res -$LK,"PrsAsmInstruction ",A="FL:D:/Compiler/Assembler.CPP.Z,781",BI=222$000000918E 0001 00000010F3 Funct Export Res -$LK,"PrsBinFile ",A="FL:D:/Compiler/Assembler.CPP.Z,1261",BI=223$000000A526 0001 00000000BB Funct Export Res -$LK,"PrsClass ",A="FL:D:/Compiler/StmtParser.CPP.Z,785",BI=224$0000010B76 0002 0000000264 Funct Export Res -$LK,"PrsClassNew ",A="FL:D:/Compiler/StmtParser.CPP.Z,1",BI=225$000000EF56 0003 0000000068 Funct Export Res -$LK,"PrsDoWhile ",A="FL:D:/Compiler/StmtParser.CPP.Z,1281",BI=226$0000011F36 0001 0000000137 Funct Export Res -$LK,"PrsDotDotDot ",A="FL:D:/Compiler/StmtParser.CPP.Z,340",BI=227$000000FBDE 0001 0000000111 Funct Export Res -$LK,"PrsExpression ",A="FL:D:/Compiler/ExpParser.CPP.Z,298",BI=228$000000C756 0010 0000000149 Funct Export Res -$LK,"PrsExpression2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,102",BI=229$000000C0EE 0001 0000000667 Funct Export Res -$LK,"PrsFor ",A="FL:D:/Compiler/StmtParser.CPP.Z,1305",BI=230$000001206E 0001 0000000162 Funct Export Res -$LK,"PrsFun ",A="FL:D:/Compiler/StmtParser.CPP.Z,914",BI=231$0000010FC6 0001 00000003B7 Funct Export Res -$LK,"PrsFunCall ",A="FL:D:/Compiler/ExpParser.CPP.Z,409",BI=232$000000CBF6 0003 000000082D Funct Export Res -$LK,"PrsFunJoin ",A="FL:D:/Compiler/StmtParser.CPP.Z,851",BI=233$0000010DDE 0005 00000001E8 Funct Export Res -$LK,"PrsFunNew ",A="FL:D:/Compiler/StmtParser.CPP.Z,22",BI=234$000000EFBE 0001 0000000068 Funct Export Res -$LK,"PrsGlblInit ",A="FL:D:/Compiler/StmtParser.CPP.Z,263",BI=235$000000F8EE 0002 000000007C Funct Export Res -$LK,"PrsGlblVarLst ",A="FL:D:/Compiler/StmtParser.CPP.Z,976",BI=236$000001137E 0007 0000000991 Funct Export Res -$LK,"PrsIf ",A="FL:D:/Compiler/StmtParser.CPP.Z,1231",BI=237$0000011D16 0001 000000012C Funct Export Res -$LK,"PrsKeyWord ",A="FL:D:/Compiler/StmtParser.CPP.Z,45",BI=238$000000F056 000C 0000000040 Funct Export Res -$LK,"PrsNoUnusedWarn ",A="FL:D:/Compiler/StmtParser.CPP.Z,1553",BI=239$0000012A66 0001 000000008F Funct Export Res -$LK,"PrsOffsetOf ",A="FL:D:/Compiler/ExpParser.CPP.Z,379",BI=240$000000CAAE 0002 0000000148 Funct Export Res -$LK,"PrsPop ",A="FL:D:/Compiler/ExpParser.CPP.Z,13",BI=241$000000BE2E 0017 0000000022 Funct Export Res -$LK,"PrsPop2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,23",BI=242$000000BE8E 0001 000000002D Funct Export Res -$LK,"PrsPopDeref ",A="FL:D:/Compiler/ExpParser.CPP.Z,28",BI=243$000000BEBE 0004 000000003F Funct Export Res -$LK,"PrsPush ",A="FL:D:/Compiler/ExpParser.CPP.Z,8",BI=244$000000BE06 0017 0000000028 Funct Export Res -$LK,"PrsPush2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,18",BI=245$000000BE56 0004 0000000033 Funct Export Res -$LK,"PrsSizeOf ",A="FL:D:/Compiler/ExpParser.CPP.Z,331",BI=246$000000C8A6 0001 0000000207 Funct Export Res -$LK,"PrsStatement ",A="FL:D:/Compiler/StmtParser.CPP.Z,1664",BI=247$0000012F66 0004 0000000C09 Funct Export Res -$LK,"PrsStaticInit ",A="FL:D:/Compiler/StmtParser.CPP.Z,272",BI=248$000000F96E 0002 000000013E Funct Export Res -$LK,"PrsStreamBlk ",A="FL:D:/Compiler/StmtParser.CPP.Z,1567",BI=249$0000012AF6 0000 00000001B2 Funct Export Res -$LK,"PrsSwitch ",A="FL:D:/Compiler/StmtParser.CPP.Z,1354",BI=250$00000121D6 0002 000000088F Funct Export Res -$LK,"PrsTryBlk ",A="FL:D:/Compiler/StmtParser.CPP.Z,1603",BI=251$0000012CAE 0001 00000002B7 Funct Export Res -$LK,"PrsType ",A="FL:D:/Compiler/StmtParser.CPP.Z,375",BI=252$000000FCF6 0002 000000039A Funct Export Res -$LK,"PrsUnaryModifier ",A="FL:D:/Compiler/ExpParser.CPP.Z,980",BI=253$000000E3B6 0000 0000000859 Funct Export Res -$LK,"PrsUnaryTerm ",A="FL:D:/Compiler/ExpParser.CPP.Z,617",BI=254$000000D426 0000 0000000F8E Funct Export Res -$LK,"PrsVarInit ",A="FL:D:/Compiler/StmtParser.CPP.Z,66",BI=255$000000F126 0001 00000004C8 Funct Export Res -$LK,"PrsVarInit2 ",A="FL:D:/Compiler/StmtParser.CPP.Z,181",BI=256$000000F5EE 0004 00000002FE Funct Export Res -$LK,"PrsVarLst ",A="FL:D:/Compiler/StmtParser.CPP.Z,469",BI=257$0000010096 0006 0000000ADC Funct Export Res -$LK,"PrsWhile ",A="FL:D:/Compiler/StmtParser.CPP.Z,1259",BI=258$0000011E46 0001 00000000EF Funct Export Res -$LK,"SLASH_OP_DEC ",A="FL:D:/Compiler/BackLib.CPP.Z,262"$0x052B0000 0006 0000000018 DefineStr -$LK,"SLASH_OP_DIV ",A="FL:D:/Compiler/BackLib.CPP.Z,267"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_FADD ",A="FL:D:/Compiler/BackLib.CPP.Z,271"$0x0000C1DE 0002 0000000018 DefineStr -$LK,"SLASH_OP_FDIV ",A="FL:D:/Compiler/BackLib.CPP.Z,275"$0x0000F9DE 0002 0000000018 DefineStr -$LK,"SLASH_OP_FDIVR ",A="FL:D:/Compiler/BackLib.CPP.Z,276"$0x0000F1DE 0003 0000000018 DefineStr -$LK,"SLASH_OP_FILD ",A="FL:D:/Compiler/BackLib.CPP.Z,280"$0x00000000 0002 0000000018 DefineStr -$LK,"SLASH_OP_FISTTP ",A="FL:D:/Compiler/BackLib.CPP.Z,279"$0x00000000 0002 0000000018 DefineStr -$LK,"SLASH_OP_FLD ",A="FL:D:/Compiler/BackLib.CPP.Z,277"$0x00000000 0008 0000000018 DefineStr -$LK,"SLASH_OP_FMUL ",A="FL:D:/Compiler/BackLib.CPP.Z,274"$0x0000C9DE 0002 0000000018 DefineStr -$LK,"SLASH_OP_FSTP ",A="FL:D:/Compiler/BackLib.CPP.Z,278"$0x00000000 000D 0000000018 DefineStr -$LK,"SLASH_OP_FSUB ",A="FL:D:/Compiler/BackLib.CPP.Z,272"$0x0000E9DE 0002 0000000018 DefineStr -$LK,"SLASH_OP_FSUBR ",A="FL:D:/Compiler/BackLib.CPP.Z,273"$0x0000E1DE 0003 0000000018 DefineStr -$LK,"SLASH_OP_IMUL ",A="FL:D:/Compiler/BackLib.CPP.Z,266"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_INC ",A="FL:D:/Compiler/BackLib.CPP.Z,261"$0x00030000 0004 0000000018 DefineStr -$LK,"SLASH_OP_MOV ",A="FL:D:/Compiler/BackLib.CPP.Z,268"$0x00000000 0002 0000000018 DefineStr -$LK,"SLASH_OP_MUL ",A="FL:D:/Compiler/BackLib.CPP.Z,265"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_NEG ",A="FL:D:/Compiler/BackLib.CPP.Z,264"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_NOT ",A="FL:D:/Compiler/BackLib.CPP.Z,263"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_POP ",A="FL:D:/Compiler/BackLib.CPP.Z,270"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_PUSH ",A="FL:D:/Compiler/BackLib.CPP.Z,269"$0x00000000 0001 0000000018 DefineStr -$LK,"StrMatchBits ",A="FL:D:/Compiler/Unassembler.CPP.Z,225",BI=259$0000000EC8 0002 0000000073 Funct Export Res -$LK,"StreamExePrint ",A="FL:D:/Compiler/CmpMain.CPP.Z,700",BI=260$000002C8EA 0000 00000000EC Funct Export Res -$LK,"StreamPrint ",A="FL:D:/Compiler/CmpMain.CPP.Z,1",BI=261$000002AD92 0000 00000000A8 Funct Export Res -$LK,"U ",A="FL:D:/Compiler/Unassembler.CPP.Z,643",BI=262$0000002600 0000 00000000CF Funct Export Res -$LK,"UasmHashLoad ",A="FL:D:/Compiler/Unassembler.CPP.Z,187",BI=263$0000000DB8 0001 0000000110 Funct Export Res -$LK,"Ui ",A="FL:D:/Compiler/Unassembler.CPP.Z,238",BI=264$0000000F40 0002 00000016C0 Funct Export Res -$LK,"Un ",A="FL:D:/Compiler/Unassembler.CPP.Z,658",BI=265$00000026D0 0008 00000000DA Funct Export Res -$LK,"UndefinedExtern ",A="FL:D:/Compiler/StmtParser.CPP.Z,54",BI=266$000000F096 0001 0000000048 Funct Export Res -$LK,"UnusedExternWarning ",A="FL:D:/Compiler/StmtParser.CPP.Z,60",BI=267$000000F0DE 0004 0000000043 Funct Export Res -$LK,"asm_seg_prefixes ",A="FL:D:/Compiler/Assembler.CPP.Z,779"$0000009188 0001 0000000006 GlbVar Export -$LK,"cmp ",A="FL:D:/Compiler/Compiler.PRJ.Z,13"$00000004E0 00E2 0000000229 GlbVar Export -$LK,"cmp_templates ",A="FL:D:/Compiler/CmpExts.CPP.Z,37"$0000000000 0002 0000000004 GlbVar Export -$LK,"cmp_templates_dont_pop",A="FL:D:/Compiler/CmpExts.CPP.Z,38"$000000018B 0002 0000000004 GlbVar Export -$LK,"cmp_templates_dont_push",A="FL:D:/Compiler/CmpExts.CPP.Z,40"$0000000257 0002 0000000004 GlbVar Export -$LK,"cmp_templates_dont_push2",A="FL:D:/Compiler/CmpExts.CPP.Z,39"$0000000421 0002 0000000004 GlbVar Export -$LK,"cmp_templates_dont_push_pop",A="FL:D:/Compiler/CmpExts.CPP.Z,41"$0000000391 0002 0000000004 GlbVar Export -$LK,"cmp_type_flags_src_code",A="FL:D:/Compiler/Lex.CPP.Z,390"$0000004A68 0001 0000000008 GlbVar Export -$LK,"internal_types_table",A="FL:D:/Compiler/CmpInit.CPP.Z,8"$00000290B0 0001 00000000AA GlbVar Export -$LK,"lex_zeros ",A="FL:D:/Compiler/Lex.CPP.Z,129"$0000003E48 000A 0000000004 GlbVar Export -$LK,"uasm ",A="FL:D:/Compiler/Compiler.PRJ.Z,14"$0000000710 001C 0000000028 GlbVar Export -ÈŠ00HS^gory}†—›¡¯ÌÙèíùþ€€€€#€€3€<€K€C€[€d€j€j€x€{€�€˜€¡€¨€¬€±€¼€É€×€ó€ÿ€ÿ€�(�(�/�K�W�_�r�y���–���¡�¬�±�¸�Õ�‚ ‚ ‚‚‚&‚*‚?‚A‚R‚\‚g‚q‚€‚�‚«‚«‚¯‚´‚4ƒ0DÌš“š“°“Ó˓ٓù“” -””,”?”P”V”k”‰”‰”ž”£”«”³”¹”Ñ”ä”ï”ó”ý”•••'•)•;•;•B•F•J•X•k•o•x•�•‘•‘•¤•·•½•Á•Ê•ç•ë•ë•ë•ë•ð•–– –.–I–Y–i–n–n–n–z–‚–Š–�–¥–­–»–Å–Ó–Ù–Û–Û–Û–Û–Û–Û–Û–Û–Û–ç–ï–÷–ý–———&—4—:—:—:—L—R—^—d—q—Œ—œ—¨—®—»—Í—Û—ú—˜Y™`½Ñ{{{{#{+{6{A{L{N{f{f{x{„{�{�{¿{ˆ =pupu„u‹u’u–uºuÍuÔuåu -vv v"v-vRv]vhvjvqvzv|v‡vŽv˜v¸v˜ú~~ ~'~.~1~:~=~@~D~I~i~V~y~�~‰~Œ~Ž~ž~§~°~¶~¹~Ê~á~ò~ý~/ˆ9—˜ˆ˜ˆ²ˆ¹ˆÄˆãˆõˆ‰‰+‰=‰J‰J‰O‰V‰l‰~‰ƒ‰ž‰­‰¼‰Ë‰Ú‰ç‰ç‰ç‰ŠŠŠ/Š3ŠAŠPŠUŠUŠ\ŠrŠƒŠ…Š›Š³Š³Š³ŠÉŠÔŠêŠõŠ -‹‹'‹,‹D‹X‹]‹r‹w‹�‹”‹¬‹±‹É‹Î‹æ‹è‹ŒŒŒŒ*Œ1ŒGŒGŒbŒzŒ’ŒªŒÀŒÀŒÜŒØDZ‘Z‘n‘n‘”‘”‘±‘µ‘º‘º‘º‘Ƒˑۑà‘à‘à‘å‘å‘û‘’’#’,’<’E’G’G’G’G’N’U’\’c’j’q’x’’†’†’ˆ’ˆ’Ž’“’•“´ÑúÀ{À{ã{ð{õ{ù{|||&|1|9|D|L|O|[|c|}|£|�|³|¼|ñ|Ý|}}}$}@}G}k}¤}¤}¤}¤}~ ¬Z�ÀwÀwÖwÝwäwòwxxxx$x4x?xIxTxkxnxpx‚xˆx˜x¢x¬x³x¾xÓxÛxÛxñxñxñxy -¬�¨yyy%y,y:yKy]y_yfyly|y‡y‘yœy³y¶y¸yÊyÑyáyëyõyüyzz#z#z9z9z9zNz „=Z¸v¸vÑvØvßvævìvüvwww3w6w8wSw]wgwnwyw‹w“w“w©w©w»w d¨½PzPzpzwzzŠz”zŸz§z¶zÀzÃzçzézùzùz{ à— àŒàŒ� �#�/�:�L�L�}�˜�¤�«�±�½�Ç�Î�Õ�Ù�Û�á�í�÷�þ�Ž Ž ŽŽŽ#Ž5Ž5ŽfŽ‡Ž“ŽšŽ Ž¬Ž¶Ž½ŽÄŽÈŽÊŽÐŽÜŽæŽíŽôŽøŽøŽ��#�5�5�f�‡�“�š� �¬�¶�½�Ä�È�Ê�Ð�Ü�æ�í�ô�ø�ø���$�$�U�\�b�n�x��†�Š�Œ�’�ž�¨�¯�¶�º�º�Ä�Û�ô�‘‘‘‘‘†‘ˆ `t`t“tŸt§t¯t³t·tÂtÆtÊtÎtÖtÛtßtðtuuuu)u6uIuPuZuZuZuZulu$!&˜(˜(¢(ª(¯(lÇ^2¿2¿K¿c¿s¿“¿¥¿½¿Ø¿Ø¿À -ÀÀÀÀÀ$À'À.À4À;ÀAÀEÀJÀTÀeÀlÀsÀuÀyÀ‚ÀŒÀ�ÀšÀ¦À©ÀºÀÅÀËÀÒÀÛÀôÀÁÁÁ Á*Á5ÁAÁRÁcÁoÁ}ÁÁ†Á�Á’Á–Á£ÁªÁÍÁÛÁåÁïÁøÁÂ"Â+Â4Â<ÂEÂKÂOÂTÂXÂeÂlÂz„™£¬ÂÅÂÖÂßÂèÂðÂùÂÿÂÃÃÃÃ"Ã>ÃLÃRÃWÃ_ÃgÃoÃ|ÄÖõþÃÙÃíÃíà ÄÄÄ%Ä,Ä5Ä>ÄGÄPÄpÄtÄÎÄTª»úµúµ#¶%¶3¶9¶W¶f¶u¶„¶’¶�¶ ¶°¶()/æ¼æ¼ô¼ ½½½½</:½½2½@½F½^½d½~½„½Š½Š½’½ ¼`r¨r¨€¨�¨ ¨°¨À¨Шã¨ö¨©©'©=©O©Q©c©e©w©w©‰©‰©›©¹©¾©Ωä©ì©ö©ªª#ª9ªAªKªcªhªxªˆªžª¦ª°ªȪÔªܪæªöªûª««%«/«9«C«M«W«a«k«u««‰«“«©«³«½«Ç«Ñ«Û«å«ï«ù«¬¬#¬9¬C¬M¬W¬a¬k¬u¬¬‰¬“¬�¬§¬±¬»¬ŬϬÙ¬ã¬í¬÷¬­ ­­ ­)­3­=­G­Q­[­e­Œ­D:ÇB»B»`»k»|»»ƒ»Œ»“»¡»°»Æ»Æ»Õ»×»×»æ»è»è»ø»ú»ú» -¼ ¼ ¼¼¼¼(¼*¼*¼9¼;¼;¼J¼J¼X¼\¼`¼e¼i¼v¼}¼‹¼Ÿ¼¨¼®¼¼¼Õ¼×¼Û¼å¼å¼ê¼ê¼ê¼ï¼ï¼þ¼½½%½%½%½*½*½?½K½V½[½[½^½c½c½½‹½˜½š½š½ž½ ½ ½¼½ȽÔ½Ö½Ö½Ù½Û½Û½è½ê½ê½í½í½ö½ü½¾¾¾¾¾¾¾¾¾¾¾¾¾ ¾ ¾.¾0¾0¾@¾B¾B¾O¾Q¾Q¾`¾`¾d¾d¾l¾ˆ¾Œ¾‘¾,¿ »:²¶²¶̶×¶Û¶ä¶ë¶ò¶··*·<·N·]·l·}·Œ·Œ·“·—· ·­·´·½·Ä·È·è·è·è·è·è·ô·ø·û·¸¸¸&¸.¸6¸G¸R¸W¸W¸d¸j¸y¸�¸’¸�¸ª¸¹¸¼¸¾¸Ö¸í¸ï¸ý¸ÿ¸ ¹¹¹¹¹-¹4¹J¹J¹J¹O¹O¹d¹r¹}¹‚¹‚¹…¹йй¦¹´¹Á¹ùùǹɹɹå¹ó¹ÿ¹ººººººººººººº!º'º+º7ºWºdºrºyºA»XÎàÚÉÚÉÞÉéÉôÉÿÉÊ ÊÊ'Ê8ÊFÊOÊTÊYÊ[Êø0ªr¯r¯z¯‰¯�¯š¯§¯»¯ʯê¯÷¯ °+°K°Y°u°‡°Ÿ°¶°Á°â°±±*±5±P±i±i±„±­±DZâ±ô±²²²²0²A²T²d²q²|²‹²«²«²·²·²·²ȲÕ²ܲû²³³³³(³@³X³a³q³y³~³‘³µ³ųÕ³à³ô³ù³´'´)´4´g´�´�´™´¨´°´¿´È´дâ´µ µµµµ.µFµ^µvµ޵ µ·µÀµɵÛµéµíµôµÐ̼Z™Z™c™^™^™m™|™|™‹™‹™š™š™©™©™¸™¸™Ç™Ö™å™ô™ô™šš&š!š!š0šr¨Ü9î³î³´´N´_´_´z´€´…´…´ ´¦´«´«´´´´δÕ´Û´à´#µ-µ4µ:µ<µ<µOµUµUµUµZµvµ…µ—µœµœµœµ£µªµ±µƵ͵éµéµûµDS`ž°ž°²°º°Ç°Ñ°Ü°ä°˜#Ø8Ø8ë8ö8 9P9a9s9z9�9•9œ9ª9³9Ë9Ú9ç9ê9:: :":.:::>:L:S:V:�:4†¼†¼�¼”¼�¼¤¼¦¼«¼<)®¼®¼·¼¼¼Ê¼Ó¼Ú¼Ü¼á¼ @9Eþµþµ¶"¶&¶*¶/¶1¶M¶i¶i¶s¶ $&+°(°(º(Â(Ç(!<Š•ÒÆÒÆëÆúÆÇÇ#Ç)Ç,ÇMÇ"<±¼jÈjȃȒȦȳȹȿÈÂÈãÈ#4�Š‚Æ‚Æ˜Æ«ÆºÆÀÆÃÆËÆ$4¨±"È"È8ÈKÈXÈ^ÈaÈiÈ%œ^�ÒÄÒÄÚÄÞÄûÄÅ!Å>Å_ÅhÅyÅ Å·Å·ÅÙÅèÅñÅþÅÆ7ÆDÆHÆPÆPÆcÆsÆwÆ{Æ&\•¨RÇRÇoǃÇ�ǚDZÇÎÇìÇòÇûÇ ÈÈÈÈ'$(((7(<((Œ XqXqhq‰q‰q—q—q—q—q q q§qÒqÚqÚqåqåqóqrrrrr/r/r5r[r)¤ E`r`rpryrŒr™r¥r±r½rÉràràrïrúrs -ss=sBsTscsos„s„s­s­s¯sÂsÄsÞsêsíst*LETtttt#t't,t6t:tHtQt\t+ð9VðVð€ðƒð†ðŒð‘ð¨ð¿ðÖðèðñ5ñ8ñQñhñzñ‡ñšñ­ñ²ñºñÄñÌñÌñÓñÜñÜñçñò)ò/òHòaòcò}òƒòœòµò½òÈòÈòÒòÒòäò"ó7óIó,E�†�†�¥�Á�Æ�ç�žž2žFž^žežjž‹ž©ž¸žÕžæžýžŸŸŸ -ŸŸŸŸ&Ÿ,ŸIŸLŸLŸLŸQŸWŸsŸ�Ÿ�Ÿ–ŸªŸ²Ÿ»ŸןâŸîŸ÷Ÿ         - -8ùƒ^ ^ � › Î ¨ Ô  - - - - -! -< -C -Q -S +$LK,"AsmGlblsResolve ",A="FL:C:/Compiler/Asm.CPP.Z,284",BI=1$0000008E88 0001 0000000432 Funct Export Res +$LK,"AsmHashLoad ",A="FL:C:/Compiler/CInit.CPP.Z,68",BI=2$000002A482 0001 00000005BD Funct Export Res +$LK,"AsmLexExpression ",A="FL:C:/Compiler/Asm.CPP.Z,189",BI=3$0000008A60 0004 00000000B7 Funct Export Res +$LK,"AsmLineLst ",A="FL:C:/Compiler/Asm.CPP.Z,31",BI=4$00000084C8 0001 0000000148 Funct Export Res +$LK,"AsmLocalsResolve ",A="FL:C:/Compiler/Asm.CPP.Z,250",BI=5$0000008D60 0003 0000000127 Funct Export Res +$LK,"AsmMakeArgMask ",A="FL:C:/Compiler/Asm.CPP.Z,567",BI=6$00000097F8 0002 0000000444 Funct Export Res +$LK,"AsmPrsInsFlags ",A="FL:C:/Compiler/CInit.CPP.Z,18",BI=7$000002A242 0001 000000023B Funct Export Res +$LK,"AsmResolve ",A="FL:C:/Compiler/Asm.CPP.Z,209",BI=8$0000008B18 0002 0000000245 Funct Export Res +$LK,"AsmStoreCodeU32 ",A="FL:C:/Compiler/Asm.CPP.Z,90",BI=9$0000008718 0001 0000000145 Funct Export Res +$LK,"AsmStoreCodeU64 ",A="FL:C:/Compiler/Asm.CPP.Z,129",BI=10$0000008860 0005 0000000146 Funct Export Res +$LK,"AsmStoreCodeU8 ",A="FL:C:/Compiler/Asm.CPP.Z,61",BI=11$0000008610 001D 0000000103 Funct Export Res +$LK,"AsmStoreCodeU8At ",A="FL:C:/Compiler/Asm.CPP.Z,168",BI=12$00000089A8 0007 00000000B7 Funct Export Res +$LK,"AsmStoreNum ",A="FL:C:/Compiler/Asm.CPP.Z,661",BI=13$0000009C40 0004 00000004A6 Funct Export Res +$LK,"AsmUnresolvedAdd ",A="FL:C:/Compiler/Asm.CPP.Z,1",BI=14$00000083B8 0004 000000010C Funct Export Res +$LK,"CInit ",A="FL:C:/Compiler/CMain.CPP.Z,695",BI=15$000002CF52 0001 000000006B Funct Export Res +$LK,"CInternalType ",A="FL:C:/Compiler/CInit.CPP.Z,3"$007FCC2180 0002 000000000A Class +$LK,"CMP_TEMPLATES ",A="FL:C:/Compiler/Templates.CPP.Z,5"$0000000000 0001 ExportSysSym Export +$LK,"CMP_TEMPLATES_DONT_POP",A="FL:C:/Compiler/Templates.CPP.Z,179"$000000018B 0001 ExportSysSym Export +$LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:C:/Compiler/Templates.CPP.Z,268"$0000000257 0001 ExportSysSym Export +$LK,"CMP_TEMPLATES_DONT_PUSH2",A="FL:C:/Compiler/Templates.CPP.Z,459"$0000000421 0001 ExportSysSym Export +$LK,"CMP_TEMPLATES_DONT_PUSH_POP",A="FL:C:/Compiler/Templates.CPP.Z,395"$0000000391 0001 ExportSysSym Export +$LK,"CN_A1 ",A="FL:C:/Compiler/BackFA.CPP.Z,2"$1 0006 0000000008 DefineStr +$LK,"CN_A2 ",A="FL:C:/Compiler/BackFA.CPP.Z,1"$0 0005 0000000008 DefineStr +$LK,"CN_MAIN ",A="FL:C:/Compiler/BackFA.CPP.Z,3"$2 0022 0000000008 DefineStr +$LK,"CN_R ",A="FL:C:/Compiler/BackFA.CPP.Z,4"$3 0003 0000000008 DefineStr +$LK,"COptMemberVar ",A="FL:C:/Compiler/OptLib.CPP.Z,544"$007FD8D750 0005 0000000028 Class +$LK,"CSubSwitch ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1343"$007FD98150 0004 0000000020 Class +$LK,"CSwitchCase ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1348"$007FD868F0 0004 0000000020 Class +$LK,"CTrace ",A="FL:C:/Compiler/CMisc.CPP.Z,33",BI=16$0000002818 0000 0000000017 Funct Export Res +$LK,"CVI2 ",A="FL:C:/Compiler/PrsStmt.CPP.Z,177"$007FD9A0C0 0003 0000000010 Class +$LK,"Cmp ",A="FL:C:/Compiler/CMain.CPP.Z,432",BI=17$000002C4AA 0000 000000059A Funct Export Res +$LK,"CmpBuf ",A="FL:C:/Compiler/CMain.CPP.Z,171",BI=18$000002BB72 0001 00000000B6 Funct Export Res +$LK,"CmpF1PushPop ",A="FL:C:/Compiler/OptLib.CPP.Z,527",BI=19$000000CCE6 0002 0000000042 Funct Export Res +$LK,"CmpF2PushPop ",A="FL:C:/Compiler/OptLib.CPP.Z,533",BI=20$000000CD2E 0005 0000000096 Funct Export Res +$LK,"CmpFillTables ",A="FL:C:/Compiler/CInit.CPP.Z,235",BI=21$000002AF3A 0001 00000003C3 Funct Export Res +$LK,"CmpFixUpAOTAsm ",A="FL:C:/Compiler/CMain.CPP.Z,315",BI=22$000002C0BA 0000 00000003EA Funct Export Res +$LK,"CmpFixUpJITAsm ",A="FL:C:/Compiler/CMain.CPP.Z,188",BI=23$000002BC2A 0000 000000048C Funct Export Res +$LK,"CmpJoin ",A="FL:C:/Compiler/CMain.CPP.Z,49",BI=24$000002B4EA 0001 0000000682 Funct Export Res +$LK,"CmpLoadDefines ",A="FL:C:/Compiler/CInit.CPP.Z,204",BI=25$000002AA42 0001 00000004F1 Funct Export Res +$LK,"CmpNoteFloatOp ",A="FL:C:/Compiler/BackFA.CPP.Z,6",BI=26$000001C43E 000E 000000020D Funct Export Res +$LK,"CmpOffset2Reg ",A="FL:C:/Compiler/OptLib.CPP.Z,83",BI=27$000000C05E 0005 0000000046 Funct Export Res +$LK,"CmpPrompt ",A="FL:C:/Compiler/Lex.CPP.Z,1",BI=28$0000004A69 0001 00000001B5 Funct Export Res +$LK,"CmpRawType ",A="FL:C:/Compiler/OptLib.CPP.Z,507",BI=29$000000CC8E 0006 0000000025 Funct Export Res +$LK,"CmpRawTypePointed ",A="FL:C:/Compiler/OptLib.CPP.Z,516",BI=30$000000CCB6 0005 0000000030 Funct Export Res +$LK,"CmpSetFloatOpPushPop",A="FL:C:/Compiler/BackFA.CPP.Z,57",BI=31$000001C64E 000C 0000000075 Funct Export Res +$LK,"Echo ",A="FL:C:/Compiler/CMisc.CPP.Z,38",BI=32$0000002830 0000 0000000017 Funct Export Res +$LK,"ExeFile ",A="FL:C:/Compiler/CMain.CPP.Z,627",BI=33$000002CC4A 0000 000000007B Funct Export Res +$LK,"ExeFile2 ",A="FL:C:/Compiler/CMain.CPP.Z,666",BI=34$000002CDE2 0000 0000000079 Funct Export Res +$LK,"ExePrint ",A="FL:C:/Compiler/CMain.CPP.Z,618",BI=35$000002CBFA 0000 0000000049 Funct Export Res +$LK,"ExePrint2 ",A="FL:C:/Compiler/CMain.CPP.Z,657",BI=36$000002CD9A 0000 0000000047 Funct Export Res +$LK,"ExePutS ",A="FL:C:/Compiler/CMain.CPP.Z,583",BI=37$000002CA4A 0003 00000001A9 Funct Export Res +$LK,"ExePutS2 ",A="FL:C:/Compiler/CMain.CPP.Z,638",BI=38$000002CCCA 0002 00000000CC Funct Export Res +$LK,"FBO1_F64 ",A="FL:C:/Compiler/OptLib.CPP.Z,94"$2 0002 0000000008 DefineStr +$LK,"FBO1_INT ",A="FL:C:/Compiler/OptLib.CPP.Z,93"$1 0013 0000000008 DefineStr +$LK,"FBO1_NOT_CONST ",A="FL:C:/Compiler/OptLib.CPP.Z,92"$0 0005 0000000008 DefineStr +$LK,"GetOpt ",A="FL:C:/Compiler/CMisc.CPP.Z,16",BI=39$0000002790 0004 000000002C Funct Export Res +$LK,"HashEntrySize ",A="FL:C:/Compiler/CHash.CPP.Z,1",BI=40$0000008098 0000 0000000103 Funct Export Res +$LK,"HashEntrySize2 ",A="FL:C:/Compiler/CHash.CPP.Z,32",BI=41$00000081A0 0002 00000001A1 Funct Export Res +$LK,"HashTableSize2 ",A="FL:C:/Compiler/CHash.CPP.Z,69",BI=42$0000008348 0000 000000006F Funct Export Res +$LK,"ICAddEct ",A="FL:C:/Compiler/BackA.CPP.Z,1",BI=43$00000200A6 0005 00000002F3 Funct Export Res +$LK,"ICAddRSP ",A="FL:C:/Compiler/BackLib.CPP.Z,69",BI=44$000001ADD6 0017 00000002A7 Funct Export Res +$LK,"ICAddSubEctEqual ",A="FL:C:/Compiler/BackA.CPP.Z,501",BI=45$00000219AE 0005 0000000673 Funct Export Res +$LK,"ICAddSubEctImm ",A="FL:C:/Compiler/BackA.CPP.Z,57",BI=46$000002039E 000D 0000000685 Funct Export Res +$LK,"ICAndAnd ",A="FL:C:/Compiler/BackB.CPP.Z,30",BI=47$000002264E 0001 000000014B Funct Export Res +$LK,"ICAndBranch ",A="FL:C:/Compiler/BackC.CPP.Z,1",BI=48$00000249C6 0002 00000006E6 Funct Export Res +$LK,"ICAndEqual ",A="FL:C:/Compiler/BackC.CPP.Z,675",BI=49$00000268A6 0001 000000010D Funct Export Res +$LK,"ICArgPut ",A="FL:C:/Compiler/CMisc.CPP.Z,267",BI=50$0000003B19 0003 00000002D6 Funct Export Res +$LK,"ICAssign ",A="FL:C:/Compiler/BackC.CPP.Z,159",BI=51$00000250AE 0001 0000000301 Funct Export Res +$LK,"ICAssignPostIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,534",BI=52$0000023C9E 0002 000000020D Funct Export Res +$LK,"ICBitOps ",A="FL:C:/Compiler/BackB.CPP.Z,244",BI=53$0000022F46 0007 00000004F1 Funct Export Res +$LK,"ICBrBitOps ",A="FL:C:/Compiler/BackC.CPP.Z,207",BI=54$00000253B6 0008 00000009FB Funct Export Res +$LK,"ICBuiltInFloatConst ",A="FL:C:/Compiler/BackLib.CPP.Z,420",BI=55$000001B916 000F 00000000BD Funct Export Res +$LK,"ICClassPut ",A="FL:C:/Compiler/CMisc.CPP.Z,243",BI=56$0000003A49 0001 00000000D0 Funct Export Res +$LK,"ICCmp ",A="FL:C:/Compiler/BackB.CPP.Z,124",BI=57$0000022A5E 0006 00000004E6 Funct Export Res +$LK,"ICCmpAndBranch ",A="FL:C:/Compiler/BackB.CPP.Z,575",BI=58$0000023EAE 000C 000000081A Funct Export Res +$LK,"ICCopyTemplate ",A="FL:C:/Compiler/BackFA.CPP.Z,69",BI=59$000001C6C6 0013 000000021D Funct Export Res +$LK,"ICDeref ",A="FL:C:/Compiler/BackLib.CPP.Z,656",BI=60$000001C37E 0001 00000000B9 Funct Export Res +$LK,"ICDerefPostIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,491",BI=61$0000023AA6 0002 00000001F1 Funct Export Res +$LK,"ICDiv ",A="FL:C:/Compiler/BackA.CPP.Z,409",BI=62$00000214DE 0001 00000000F1 Funct Export Res +$LK,"ICDivEqual ",A="FL:C:/Compiler/BackA.CPP.Z,428",BI=63$00000215D6 0002 00000002DE Funct Export Res +$LK,"ICFAdd ",A="FL:C:/Compiler/BackFB.CPP.Z,633",BI=64$000001FA66 0001 00000001FF Funct Export Res +$LK,"ICFCmp ",A="FL:C:/Compiler/BackFA.CPP.Z,549",BI=65$000001DA3E 0004 000000018B Funct Export Res +$LK,"ICFCmpAndBranch ",A="FL:C:/Compiler/BackFB.CPP.Z,325",BI=66$000001EE9E 0004 00000009F7 Funct Export Res +$LK,"ICFCvt ",A="FL:C:/Compiler/BackFA.CPP.Z,115",BI=67$000001C8E6 000C 000000017F Funct Export Res +$LK,"ICFCvt2 ",A="FL:C:/Compiler/BackFA.CPP.Z,163",BI=68$000001CA66 0010 0000000116 Funct Export Res +$LK,"ICFDiv ",A="FL:C:/Compiler/BackFB.CPP.Z,621",BI=69$000001F9B6 0001 00000000A9 Funct Export Res +$LK,"ICFMod ",A="FL:C:/Compiler/BackFA.CPP.Z,241",BI=70$000001CD5E 0001 0000000145 Funct Export Res +$LK,"ICFModEqual ",A="FL:C:/Compiler/BackFA.CPP.Z,589",BI=71$000001DBCE 0001 00000003D7 Funct Export Res +$LK,"ICFMul ",A="FL:C:/Compiler/BackFB.CPP.Z,603",BI=72$000001F896 0001 000000011B Funct Export Res +$LK,"ICFOp ",A="FL:C:/Compiler/BackFA.CPP.Z,350",BI=73$000001D19E 0004 000000089D Funct Export Res +$LK,"ICFOpEqual ",A="FL:C:/Compiler/BackFB.CPP.Z,1",BI=74$000001DFA6 0004 0000000EF7 Funct Export Res +$LK,"ICFPostIncDec ",A="FL:C:/Compiler/BackFB.CPP.Z,716",BI=75$000001FE9E 0002 0000000151 Funct Export Res +$LK,"ICFPow ",A="FL:C:/Compiler/BackFA.CPP.Z,271",BI=76$000001CEA6 0001 00000002F7 Funct Export Res +$LK,"ICFPreIncDec ",A="FL:C:/Compiler/BackFB.CPP.Z,694",BI=77$000001FD8E 0002 000000010A Funct Export Res +$LK,"ICFSub ",A="FL:C:/Compiler/BackFB.CPP.Z,671",BI=78$000001FC66 0001 0000000124 Funct Export Res +$LK,"ICFTemplateFun ",A="FL:C:/Compiler/BackFB.CPP.Z,744",BI=79$000001FFF6 0007 00000000AA Funct Export Res +$LK,"ICFUnaryMinus ",A="FL:C:/Compiler/BackFA.CPP.Z,190",BI=80$000001CB7E 0001 00000001E0 Funct Export Res +$LK,"ICFlagBranch ",A="FL:C:/Compiler/BackB.CPP.Z,804",BI=81$00000248BE 0004 0000000106 Funct Export Res +$LK,"ICLastIns ",A="FL:C:/Compiler/BackLib.CPP.Z,59",BI=82$000001AD96 0002 0000000040 Funct Export Res +$LK,"ICLea ",A="FL:C:/Compiler/BackLib.CPP.Z,622",BI=83$000001C1CE 0004 00000001AA Funct Export Res +$LK,"ICLocalVarInit ",A="FL:C:/Compiler/BackC.CPP.Z,908",BI=84$00000272C6 0001 0000000078 Funct Export Res +$LK,"ICMinMax ",A="FL:C:/Compiler/BackC.CPP.Z,496",BI=85$000002617E 0004 00000002AB Funct Export Res +$LK,"ICMod ",A="FL:C:/Compiler/BackA.CPP.Z,482",BI=86$00000218B6 0001 00000000F1 Funct Export Res +$LK,"ICModU64 ",A="FL:C:/Compiler/BackC.CPP.Z,575",BI=87$000002647E 0001 00000001B7 Funct Export Res +$LK,"ICModr1 ",A="FL:C:/Compiler/BackLib.CPP.Z,140",BI=88$000001B07E 0017 00000002FE Funct Export Res +$LK,"ICModr2 ",A="FL:C:/Compiler/BackLib.CPP.Z,230",BI=89$000001B37E 0016 00000000A6 Funct Export Res +$LK,"ICMov ",A="FL:C:/Compiler/BackLib.CPP.Z,442",BI=90$000001B9D6 019A 00000007F4 Funct Export Res +$LK,"ICMul ",A="FL:C:/Compiler/BackA.CPP.Z,285",BI=91$0000020E1E 0001 00000002B8 Funct Export Res +$LK,"ICMulEqual ",A="FL:C:/Compiler/BackA.CPP.Z,342",BI=92$00000210D6 0001 0000000406 Funct Export Res +$LK,"ICNot ",A="FL:C:/Compiler/BackB.CPP.Z,10",BI=93$000002254E 0001 00000000FF Funct Export Res +$LK,"ICOpSizeRex ",A="FL:C:/Compiler/BackLib.CPP.Z,28",BI=94$000001ACAE 0006 0000000040 Funct Export Res +$LK,"ICOrEqual ",A="FL:C:/Compiler/BackC.CPP.Z,698",BI=95$00000269B6 0001 000000010D Funct Export Res +$LK,"ICOrOr ",A="FL:C:/Compiler/BackB.CPP.Z,59",BI=96$000002279E 0001 0000000162 Funct Export Res +$LK,"ICPop ",A="FL:C:/Compiler/BackLib.CPP.Z,361",BI=97$000001B71E 0009 00000000EA Funct Export Res +$LK,"ICPopRegs ",A="FL:C:/Compiler/BackLib.CPP.Z,388",BI=98$000001B80E 000C 0000000057 Funct Export Res +$LK,"ICPostIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,451",BI=99$00000238A6 0002 00000001FC Funct Export Res +$LK,"ICPreIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,415",BI=100$00000236CE 0004 00000001D8 Funct Export Res +$LK,"ICPreempt ",A="FL:C:/Compiler/BackB.CPP.Z,348",BI=101$000002343E 0001 0000000122 Funct Export Res +$LK,"ICPush ",A="FL:C:/Compiler/BackLib.CPP.Z,310",BI=102$000001B56E 001F 0000000152 Funct Export Res +$LK,"ICPushRegs ",A="FL:C:/Compiler/BackLib.CPP.Z,348",BI=103$000001B6C6 0006 0000000054 Funct Export Res +$LK,"ICPut ",A="FL:C:/Compiler/CMisc.CPP.Z,312",BI=104$0000003DF1 0008 00000003DD Funct Export Res +$LK,"ICQueInit ",A="FL:C:/Compiler/BackC.CPP.Z,384",BI=105$0000025DB6 0001 0000000070 Funct Export Res +$LK,"ICQueIns ",A="FL:C:/Compiler/BackC.CPP.Z,398",BI=106$0000025E26 0001 0000000162 Funct Export Res +$LK,"ICQueInsRev ",A="FL:C:/Compiler/BackC.CPP.Z,439",BI=107$0000025F8E 0001 0000000162 Funct Export Res +$LK,"ICQueRem ",A="FL:C:/Compiler/BackC.CPP.Z,480",BI=108$00000260F6 0001 0000000088 Funct Export Res +$LK,"ICRex ",A="FL:C:/Compiler/BackLib.CPP.Z,22",BI=109$000001AC7E 0016 000000002D Funct Export Res +$LK,"ICShift ",A="FL:C:/Compiler/BackA.CPP.Z,639",BI=110$0000022026 0004 00000001A3 Funct Export Res +$LK,"ICShiftEqual ",A="FL:C:/Compiler/BackA.CPP.Z,672",BI=111$00000221CE 0002 000000030E Funct Export Res +$LK,"ICSlashOp ",A="FL:C:/Compiler/BackLib.CPP.Z,282",BI=112$000001B426 0027 0000000145 Funct Export Res +$LK,"ICSqr ",A="FL:C:/Compiler/BackC.CPP.Z,568",BI=113$000002642E 0002 000000004A Funct Export Res +$LK,"ICSub ",A="FL:C:/Compiler/BackA.CPP.Z,207",BI=114$0000020A26 0001 00000003F5 Funct Export Res +$LK,"ICSwap ",A="FL:C:/Compiler/BackC.CPP.Z,617",BI=115$0000026636 0001 000000026E Funct Export Res +$LK,"ICSwitch ",A="FL:C:/Compiler/BackC.CPP.Z,744",BI=116$0000026BCE 0002 00000006F2 Funct Export Res +$LK,"ICTest ",A="FL:C:/Compiler/BackLib.CPP.Z,410",BI=117$000001B8C6 000C 000000004E Funct Export Res +$LK,"ICTestAndBranch ",A="FL:C:/Compiler/BackB.CPP.Z,756",BI=118$00000246CE 0002 00000001EC Funct Export Res +$LK,"ICToBool ",A="FL:C:/Compiler/BackB.CPP.Z,400",BI=119$0000023656 0001 0000000075 Funct Export Res +$LK,"ICToF64 ",A="FL:C:/Compiler/BackB.CPP.Z,395",BI=120$0000023616 0001 000000003D Funct Export Res +$LK,"ICToI64 ",A="FL:C:/Compiler/BackB.CPP.Z,390",BI=121$00000235D6 0001 000000003D Funct Export Res +$LK,"ICToUpper ",A="FL:C:/Compiler/BackB.CPP.Z,379",BI=122$0000023566 0001 000000006B Funct Export Res +$LK,"ICU16 ",A="FL:C:/Compiler/BackLib.CPP.Z,35",BI=123$000001ACEE 0092 0000000029 Funct Export Res +$LK,"ICU24 ",A="FL:C:/Compiler/BackLib.CPP.Z,41",BI=124$000001AD1E 0063 0000000026 Funct Export Res +$LK,"ICU32 ",A="FL:C:/Compiler/BackLib.CPP.Z,47",BI=125$000001AD46 0054 0000000026 Funct Export Res +$LK,"ICU64 ",A="FL:C:/Compiler/BackLib.CPP.Z,53",BI=126$000001AD6E 0009 0000000028 Funct Export Res +$LK,"ICU8 ",A="FL:C:/Compiler/BackLib.CPP.Z,17",BI=127$000001AC56 0063 0000000028 Funct Export Res +$LK,"ICUnaries ",A="FL:C:/Compiler/BackB.CPP.Z,1",BI=128$00000224DE 0002 0000000069 Funct Export Res +$LK,"ICXorEqual ",A="FL:C:/Compiler/BackC.CPP.Z,721",BI=129$0000026AC6 0001 0000000107 Funct Export Res +$LK,"ICXorXor ",A="FL:C:/Compiler/BackB.CPP.Z,91",BI=130$0000022906 0001 0000000155 Funct Export Res +$LK,"ICZero ",A="FL:C:/Compiler/BackLib.CPP.Z,401",BI=131$000001B866 0017 000000005E Funct Export Res +$LK,"InstEntriesCompare ",A="FL:C:/Compiler/UAsm.CPP.Z,1",BI=132$00000006F0 0001 00000002A9 Funct Export Res +$LK,"InstEntryFind ",A="FL:C:/Compiler/UAsm.CPP.Z,72",BI=133$00000009A0 0002 00000003C9 Funct Export Res +$LK,"IsLexExpression2Bin ",A="FL:C:/Compiler/PrsExp.CPP.Z,1153",BI=134$000000FCCE 0000 0000000029 Funct Export Res +$LK,"LCCAdd ",A="FL:C:/Compiler/CMisc.CPP.Z,396",BI=135$0000004249 00A9 000000009F Funct Export Res +$LK,"LCCAppend ",A="FL:C:/Compiler/CMisc.CPP.Z,435",BI=136$0000004371 0003 00000000A6 Funct Export Res +$LK,"LCCCompile ",A="FL:C:/Compiler/CMisc.CPP.Z,552",BI=137$00000047A1 0006 00000002C7 Funct Export Res +$LK,"LCCDel ",A="FL:C:/Compiler/CMisc.CPP.Z,495",BI=138$0000004591 0001 0000000164 Funct Export Res +$LK,"LCCFloatConstFind ",A="FL:C:/Compiler/CMisc.CPP.Z,473",BI=139$00000044C9 000F 00000000C6 Funct Export Res +$LK,"LCCGoToLabelFind ",A="FL:C:/Compiler/CMisc.CPP.Z,461",BI=140$0000004471 0006 0000000057 Funct Export Res +$LK,"LCCHeaderPut ",A="FL:C:/Compiler/CMisc.CPP.Z,538",BI=141$00000046F9 000C 00000000A2 Funct Export Res +$LK,"LCCInit ",A="FL:C:/Compiler/CMisc.CPP.Z,388",BI=142$0000004209 000A 000000003A Funct Export Res +$LK,"LCCMiscNew ",A="FL:C:/Compiler/CMisc.CPP.Z,452",BI=143$0000004419 0021 0000000055 Funct Export Res +$LK,"LCCPop ",A="FL:C:/Compiler/CMisc.CPP.Z,430",BI=144$0000004351 0008 000000001A Funct Export Res +$LK,"LCCPopNoFree ",A="FL:C:/Compiler/CMisc.CPP.Z,423",BI=145$0000004321 0003 000000002E Funct Export Res +$LK,"LCCPush ",A="FL:C:/Compiler/CMisc.CPP.Z,416",BI=146$00000042E9 000E 0000000037 Funct Export Res +$LK,"LCCQuePut ",A="FL:C:/Compiler/CMisc.CPP.Z,378",BI=147$00000041D1 0001 0000000038 Funct Export Res +$LK,"Lex ",A="FL:C:/Compiler/Lex.CPP.Z,694",BI=148$0000006548 00ED 0000001746 Funct Export Res +$LK,"LexAttachDoc ",A="FL:C:/Compiler/Lex.CPP.Z,389",BI=149$0000005BC8 0001 0000000163 Funct Export Res +$LK,"LexBackupLastChar ",A="FL:C:/Compiler/Lex.CPP.Z,131",BI=150$0000004FE0 0003 0000000041 Funct Export Res +$LK,"LexD2I32 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1198",BI=151$000000FDEE 0000 00000000A6 Funct Export Res +$LK,"LexD3I32 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1214",BI=152$000000FE96 0000 00000000D9 Funct Export Res +$LK,"LexDel ",A="FL:C:/Compiler/Lex.CPP.Z,66",BI=153$0000004D61 0004 00000000A5 Funct Export Res +$LK,"LexDocRead ",A="FL:C:/Compiler/Lex.CPP.Z,368",BI=154$0000005B38 0001 0000000085 Funct Export Res +$LK,"LexDollar ",A="FL:C:/Compiler/Lex.CPP.Z,142",BI=155$0000005028 0003 0000000070 Funct Export Res +$LK,"LexExcept ",A="FL:C:/Compiler/Lex.CPP.Z,1532",BI=156$0000007FA8 00B8 00000000ED Funct Export Res +$LK,"LexExpression ",A="FL:C:/Compiler/PrsExp.CPP.Z,1186",BI=157$000000FDAE 0002 000000003F Funct Export Res +$LK,"LexExpression2Bin ",A="FL:C:/Compiler/PrsExp.CPP.Z,1135",BI=158$000000FC36 0006 0000000094 Funct Export Res +$LK,"LexExpressionF64 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1172",BI=159$000000FD56 0000 0000000054 Funct Export Res +$LK,"LexExpressionI64 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1158",BI=160$000000FCFE 000A 0000000054 Funct Export Res +$LK,"LexExtStr ",A="FL:C:/Compiler/Lex.CPP.Z,1449",BI=161$0000007C90 0004 00000000C5 Funct Export Res +$LK,"LexFirstRem ",A="FL:C:/Compiler/Lex.CPP.Z,328",BI=162$00000059E0 0000 00000000BC Funct Export Res +$LK,"LexGetChar ",A="FL:C:/Compiler/Lex.CPP.Z,156",BI=163$0000005098 002C 0000000915 Funct Export Res +$LK,"LexInStr ",A="FL:C:/Compiler/Lex.CPP.Z,624",BI=164$00000062E8 0001 000000025B Funct Export Res +$LK,"LexIncludeStr ",A="FL:C:/Compiler/Lex.CPP.Z,350",BI=165$0000005AA0 0003 0000000098 Funct Export Res +$LK,"LexNew ",A="FL:C:/Compiler/Lex.CPP.Z,35",BI=166$0000004C21 0004 000000013D Funct Export Res +$LK,"LexPop ",A="FL:C:/Compiler/Lex.CPP.Z,446",BI=167$0000005DB8 0004 0000000074 Funct Export Res +$LK,"LexPush ",A="FL:C:/Compiler/Lex.CPP.Z,434",BI=168$0000005D30 000F 0000000081 Funct Export Res +$LK,"LexPutLine ",A="FL:C:/Compiler/Lex.CPP.Z,1474",BI=169$0000007D58 0003 000000009B Funct Export Res +$LK,"LexPutPos ",A="FL:C:/Compiler/Lex.CPP.Z,1502",BI=170$0000007DF8 0003 00000000CA Funct Export Res +$LK,"LexPutToken ",A="FL:C:/Compiler/Lex.CPP.Z,108",BI=171$0000004EA9 0001 000000012B Funct Export Res +$LK,"LexSize ",A="FL:C:/Compiler/Lex.CPP.Z,88",BI=172$0000004E09 0000 000000009B Funct Export Res +$LK,"LexSkipEol ",A="FL:C:/Compiler/Lex.CPP.Z,321",BI=173$00000059B0 0004 000000002B Funct Export Res +$LK,"LexStatement2Bin ",A="FL:C:/Compiler/CMain.CPP.Z,15",BI=174$000002B3AA 0001 0000000140 Funct Export Res +$LK,"LexWarn ",A="FL:C:/Compiler/Lex.CPP.Z,1516",BI=175$0000007EC8 0009 00000000D9 Funct Export Res +$LK,"MDR_D32_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,134"$3 0002 0000000008 DefineStr +$LK,"MDR_D8_INDIRECT_REG ",A="FL:C:/Compiler/BackLib.CPP.Z,133"$2 0002 0000000008 DefineStr +$LK,"MDR_INDIRECT_REG ",A="FL:C:/Compiler/BackLib.CPP.Z,132"$1 0002 0000000008 DefineStr +$LK,"MDR_REG ",A="FL:C:/Compiler/BackLib.CPP.Z,131"$0 0002 0000000008 DefineStr +$LK,"MDR_RIP_REL ",A="FL:C:/Compiler/BackLib.CPP.Z,138"$7 0004 0000000008 DefineStr +$LK,"MDR_SIB_D32_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,137"$6 0003 0000000008 DefineStr +$LK,"MDR_SIB_D8_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,136"$5 0002 0000000008 DefineStr +$LK,"MDR_SIB_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,135"$4 0002 0000000008 DefineStr +$LK,"MemberAdd ",A="FL:C:/Compiler/Lex.CPP.Z,515",BI=176$0000005F68 0004 00000001B7 Funct Export Res +$LK,"MemberFind ",A="FL:C:/Compiler/Lex.CPP.Z,480",BI=177$0000005EB8 0005 0000000064 Funct Export Res +$LK,"MemberFind2 ",A="FL:C:/Compiler/Lex.CPP.Z,500",BI=178$0000005F20 0001 0000000044 Funct Export Res +$LK,"MemberLstDel ",A="FL:C:/Compiler/Lex.CPP.Z,563",BI=179$0000006120 0001 00000000F3 Funct Export Res +$LK,"MemberLstNew ",A="FL:C:/Compiler/PrsStmt.CPP.Z,38",BI=180$0000010046 0003 000000002A Funct Export Res +$LK,"MemberLstSize ",A="FL:C:/Compiler/Lex.CPP.Z,597",BI=181$0000006218 0002 00000000CF Funct Export Res +$LK,"MemberMetaData ",A="FL:C:/Compiler/Lex.CPP.Z,458",BI=182$0000005E30 0000 0000000041 Funct Export Res +$LK,"MemberMetaFind ",A="FL:C:/Compiler/Lex.CPP.Z,469",BI=183$0000005E78 0000 0000000040 Funct Export Res +$LK,"NUM_INTERNAL_TYPES ",A="FL:C:/Compiler/CInit.CPP.Z,1"$17 0002 0000000008 DefineStr +$LK,"OTrace ",A="FL:C:/Compiler/CMisc.CPP.Z,21",BI=184$00000027C0 0000 0000000017 Funct Export Res +$LK,"OTraceMask ",A="FL:C:/Compiler/CMisc.CPP.Z,26",BI=185$00000027D8 0000 0000000039 Funct Export Res +$LK,"OptBrNotZero ",A="FL:C:/Compiler/OptLib.CPP.Z,357",BI=186$000000C83E 0004 00000003B5 Funct Export Res +$LK,"OptBrZero ",A="FL:C:/Compiler/OptLib.CPP.Z,230",BI=187$000000C476 0006 00000003C4 Funct Export Res +$LK,"OptClassFwd ",A="FL:C:/Compiler/OptLib.CPP.Z,9",BI=188$000000BEC6 0013 0000000028 Funct Export Res +$LK,"OptEqu ",A="FL:C:/Compiler/CMisc.CPP.Z,1",BI=189$0000002730 0005 000000002E Funct Export Res +$LK,"OptFixSizeOf ",A="FL:C:/Compiler/OptLib.CPP.Z,484",BI=190$000000CBF6 0003 0000000098 Funct Export Res +$LK,"OptFixupBinaryOp1 ",A="FL:C:/Compiler/OptLib.CPP.Z,96",BI=191$000000C0A6 0013 00000002B0 Funct Export Res +$LK,"OptFixupBinaryOp2 ",A="FL:C:/Compiler/OptLib.CPP.Z,181",BI=192$000000C356 0001 0000000054 Funct Export Res +$LK,"OptFixupUnaryOp ",A="FL:C:/Compiler/OptLib.CPP.Z,195",BI=193$000000C3AE 0003 00000000C8 Funct Export Res +$LK,"OptFree ",A="FL:C:/Compiler/OptLib.CPP.Z,33",BI=194$000000BF6E 0024 0000000024 Funct Export Res +$LK,"OptIC4 ",A="FL:C:/Compiler/OptPass4.CPP.Z,1",BI=195$0000018AAE 0001 00000005CD Funct Export Res +$LK,"OptIC6 ",A="FL:C:/Compiler/OptPass6.CPP.Z,1",BI=196$000001A3EE 0001 0000000128 Funct Export Res +$LK,"OptLabelFwd ",A="FL:C:/Compiler/OptLib.CPP.Z,1",BI=197$000000BE9E 0010 0000000028 Funct Export Res +$LK,"OptLag ",A="FL:C:/Compiler/OptLib.CPP.Z,40",BI=198$000000BF96 000E 000000002A Funct Export Res +$LK,"OptLag1 ",A="FL:C:/Compiler/OptLib.CPP.Z,51",BI=199$000000BFC6 0006 0000000031 Funct Export Res +$LK,"OptLag2 ",A="FL:C:/Compiler/OptLib.CPP.Z,62",BI=200$000000BFFE 0003 000000002A Funct Export Res +$LK,"OptLead1 ",A="FL:C:/Compiler/OptLib.CPP.Z,73",BI=201$000000C02E 0003 0000000030 Funct Export Res +$LK,"OptMVCompare ",A="FL:C:/Compiler/OptLib.CPP.Z,550",BI=202$000000CDC6 0001 000000001A Funct Export Res +$LK,"OptOff ",A="FL:C:/Compiler/CMisc.CPP.Z,11",BI=203$0000002778 0000 0000000016 Funct Export Res +$LK,"OptOn ",A="FL:C:/Compiler/CMisc.CPP.Z,6",BI=204$0000002760 0000 0000000016 Funct Export Res +$LK,"OptPass012 ",A="FL:C:/Compiler/OptPass012.CPP.Z,23",BI=205$0000014BAE 0000 00000027E8 Funct Export Res +$LK,"OptPass3 ",A="FL:C:/Compiler/OptPass3.CPP.Z,1",BI=206$0000017396 0000 0000001717 Funct Export Res +$LK,"OptPass4 ",A="FL:C:/Compiler/OptPass4.CPP.Z,171",BI=207$000001907E 0000 0000000F16 Funct Export Res +$LK,"OptPass5 ",A="FL:C:/Compiler/OptPass5.CPP.Z,1",BI=208$0000019F96 0000 0000000457 Funct Export Res +$LK,"OptPass6 ",A="FL:C:/Compiler/OptPass6.CPP.Z,111",BI=209$000001A84E 0000 0000000402 Funct Export Res +$LK,"OptPass6Lag ",A="FL:C:/Compiler/OptPass6.CPP.Z,28",BI=210$000001A516 0001 0000000338 Funct Export Res +$LK,"OptPass789A ",A="FL:C:/Compiler/OptPass789A.CPP.Z,1",BI=211$000002733E 0000 0000002E58 Funct Export Res +$LK,"OptSetNOP1 ",A="FL:C:/Compiler/OptLib.CPP.Z,17",BI=212$000000BEEE 0079 000000003A Funct Export Res +$LK,"OptSetNOP2 ",A="FL:C:/Compiler/OptLib.CPP.Z,25",BI=213$000000BF2E 000D 000000003C Funct Export Res +$LK,"PE_CHECK_BINARY_OPS1",A="FL:C:/Compiler/PrsExp.CPP.Z,43"$5 0001 0000000008 DefineStr +$LK,"PE_CHECK_BINARY_OPS2",A="FL:C:/Compiler/PrsExp.CPP.Z,44"$6 0001 0000000008 DefineStr +$LK,"PE_DEREFERENCE ",A="FL:C:/Compiler/PrsExp.CPP.Z,42"$4 0003 0000000008 DefineStr +$LK,"PE_DO_BINARY_OP ",A="FL:C:/Compiler/PrsExp.CPP.Z,46"$8 0001 0000000008 DefineStr +$LK,"PE_DO_UNARY_OP ",A="FL:C:/Compiler/PrsExp.CPP.Z,45"$7 0001 0000000008 DefineStr +$LK,"PE_MAYBE_MODIFIERS ",A="FL:C:/Compiler/PrsExp.CPP.Z,40"$2 000A 0000000008 DefineStr +$LK,"PE_POP_ALL1 ",A="FL:C:/Compiler/PrsExp.CPP.Z,49"$11 0001 0000000008 DefineStr +$LK,"PE_POP_ALL2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,50"$12 0001 0000000008 DefineStr +$LK,"PE_POP_HIGHER ",A="FL:C:/Compiler/PrsExp.CPP.Z,47"$9 0001 0000000008 DefineStr +$LK,"PE_PUSH_LOWER ",A="FL:C:/Compiler/PrsExp.CPP.Z,48"$10 0001 0000000008 DefineStr +$LK,"PE_UNARY_MODIFIERS ",A="FL:C:/Compiler/PrsExp.CPP.Z,41"$3 0009 0000000008 DefineStr +$LK,"PE_UNARY_TERM1 ",A="FL:C:/Compiler/PrsExp.CPP.Z,38"$0 0001 0000000008 DefineStr +$LK,"PE_UNARY_TERM2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,39"$1 0003 0000000008 DefineStr +$LK,"ParenWarning ",A="FL:C:/Compiler/PrsExp.CPP.Z,1",BI=214$000000CDE6 0004 000000004C Funct Export Res +$LK,"PrsAddOp ",A="FL:C:/Compiler/PrsExp.CPP.Z,52",BI=215$000000CF2E 0002 00000001EB Funct Export Res +$LK,"PrsArrayDims ",A="FL:C:/Compiler/PrsStmt.CPP.Z,305",BI=216$0000010ADE 0001 000000012D Funct Export Res +$LK,"PrsAsmArg ",A="FL:C:/Compiler/Asm.CPP.Z,430",BI=217$00000093F8 0004 00000003FE Funct Export Res +$LK,"PrsAsmBlk ",A="FL:C:/Compiler/Asm.CPP.Z,1278",BI=218$000000B55E 0002 000000093F Funct Export Res +$LK,"PrsAsmDefine ",A="FL:C:/Compiler/Asm.CPP.Z,1189",BI=219$000000B1FE 0004 000000029D Funct Export Res +$LK,"PrsAsmImm ",A="FL:C:/Compiler/Asm.CPP.Z,396",BI=220$00000092C0 0002 0000000131 Funct Export Res +$LK,"PrsAsmInstruction ",A="FL:C:/Compiler/Asm.CPP.Z,779",BI=221$000000A0EE 0001 0000001110 Funct Export Res +$LK,"PrsBinFile ",A="FL:C:/Compiler/Asm.CPP.Z,1262",BI=222$000000B49E 0001 00000000B9 Funct Export Res +$LK,"PrsClass ",A="FL:C:/Compiler/PrsStmt.CPP.Z,786",BI=223$0000011B9E 0002 0000000261 Funct Export Res +$LK,"PrsClassNew ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1",BI=224$000000FF76 0003 0000000068 Funct Export Res +$LK,"PrsDoWhile ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1283",BI=225$0000012F46 0001 0000000137 Funct Export Res +$LK,"PrsDotDotDot ",A="FL:C:/Compiler/PrsStmt.CPP.Z,342",BI=226$0000010C0E 0001 0000000111 Funct Export Res +$LK,"PrsExpression ",A="FL:C:/Compiler/PrsExp.CPP.Z,298",BI=227$000000D7DE 0010 000000014C Funct Export Res +$LK,"PrsExpression2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,102",BI=228$000000D11E 0001 00000006BB Funct Export Res +$LK,"PrsFor ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1306",BI=229$000001307E 0001 0000000162 Funct Export Res +$LK,"PrsFun ",A="FL:C:/Compiler/PrsStmt.CPP.Z,915",BI=230$0000011FEE 0001 00000003C9 Funct Export Res +$LK,"PrsFunCall ",A="FL:C:/Compiler/PrsExp.CPP.Z,409",BI=231$000000DC7E 0003 000000082D Funct Export Res +$LK,"PrsFunJoin ",A="FL:C:/Compiler/PrsStmt.CPP.Z,852",BI=232$0000011E06 0005 00000001E8 Funct Export Res +$LK,"PrsFunNew ",A="FL:C:/Compiler/PrsStmt.CPP.Z,22",BI=233$000000FFDE 0001 0000000068 Funct Export Res +$LK,"PrsGlblInit ",A="FL:C:/Compiler/PrsStmt.CPP.Z,265",BI=234$0000010926 0002 0000000076 Funct Export Res +$LK,"PrsGlblVarLst ",A="FL:C:/Compiler/PrsStmt.CPP.Z,981",BI=235$00000123BE 0007 0000000967 Funct Export Res +$LK,"PrsIf ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1236",BI=236$0000012D26 0001 000000012C Funct Export Res +$LK,"PrsKeyWord ",A="FL:C:/Compiler/PrsStmt.CPP.Z,45",BI=237$0000010076 000C 0000000040 Funct Export Res +$LK,"PrsNoUnusedWarn ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1554",BI=238$0000013A76 0001 000000008F Funct Export Res +$LK,"PrsOffsetOf ",A="FL:C:/Compiler/PrsExp.CPP.Z,379",BI=239$000000DB36 0002 0000000148 Funct Export Res +$LK,"PrsPop ",A="FL:C:/Compiler/PrsExp.CPP.Z,13",BI=240$000000CE5E 0016 0000000022 Funct Export Res +$LK,"PrsPop2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,23",BI=241$000000CEBE 0001 000000002D Funct Export Res +$LK,"PrsPopDeref ",A="FL:C:/Compiler/PrsExp.CPP.Z,28",BI=242$000000CEEE 0004 000000003F Funct Export Res +$LK,"PrsPush ",A="FL:C:/Compiler/PrsExp.CPP.Z,8",BI=243$000000CE36 0017 0000000028 Funct Export Res +$LK,"PrsPush2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,18",BI=244$000000CE86 0004 0000000033 Funct Export Res +$LK,"PrsSizeOf ",A="FL:C:/Compiler/PrsExp.CPP.Z,331",BI=245$000000D92E 0001 0000000207 Funct Export Res +$LK,"PrsStatement ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1665",BI=246$0000013F7E 0004 0000000C2C Funct Export Res +$LK,"PrsStaticInit ",A="FL:C:/Compiler/PrsStmt.CPP.Z,274",BI=247$000001099E 0002 000000013E Funct Export Res +$LK,"PrsStreamBlk ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1568",BI=248$0000013B06 0000 00000001B2 Funct Export Res +$LK,"PrsSwitch ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1355",BI=249$00000131E6 0002 000000088F Funct Export Res +$LK,"PrsTryBlk ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1604",BI=250$0000013CBE 0001 00000002BD Funct Export Res +$LK,"PrsType ",A="FL:C:/Compiler/PrsStmt.CPP.Z,377",BI=251$0000010D26 0002 0000000391 Funct Export Res +$LK,"PrsUnaryModifier ",A="FL:C:/Compiler/PrsExp.CPP.Z,980",BI=252$000000F3E6 0000 000000084A Funct Export Res +$LK,"PrsUnaryTerm ",A="FL:C:/Compiler/PrsExp.CPP.Z,617",BI=253$000000E4AE 0000 0000000F38 Funct Export Res +$LK,"PrsVarInit ",A="FL:C:/Compiler/PrsStmt.CPP.Z,66",BI=254$0000010146 0001 00000004DA Funct Export Res +$LK,"PrsVarInit2 ",A="FL:C:/Compiler/PrsStmt.CPP.Z,183",BI=255$0000010626 0004 00000002FE Funct Export Res +$LK,"PrsVarLst ",A="FL:C:/Compiler/PrsStmt.CPP.Z,471",BI=256$00000110BE 0006 0000000AD9 Funct Export Res +$LK,"PrsWhile ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1263",BI=257$0000012E56 0001 00000000EF Funct Export Res +$LK,"SLASH_OP_DEC ",A="FL:C:/Compiler/BackLib.CPP.Z,262"$0x052B0000 0006 0000000018 DefineStr +$LK,"SLASH_OP_DIV ",A="FL:C:/Compiler/BackLib.CPP.Z,267"$0x00000000 0001 0000000018 DefineStr +$LK,"SLASH_OP_FADD ",A="FL:C:/Compiler/BackLib.CPP.Z,271"$0x0000C1DE 0002 0000000018 DefineStr +$LK,"SLASH_OP_FDIV ",A="FL:C:/Compiler/BackLib.CPP.Z,275"$0x0000F9DE 0002 0000000018 DefineStr +$LK,"SLASH_OP_FDIVR ",A="FL:C:/Compiler/BackLib.CPP.Z,276"$0x0000F1DE 0003 0000000018 DefineStr +$LK,"SLASH_OP_FILD ",A="FL:C:/Compiler/BackLib.CPP.Z,280"$0x00000000 0002 0000000018 DefineStr +$LK,"SLASH_OP_FISTTP ",A="FL:C:/Compiler/BackLib.CPP.Z,279"$0x00000000 0002 0000000018 DefineStr +$LK,"SLASH_OP_FLD ",A="FL:C:/Compiler/BackLib.CPP.Z,277"$0x00000000 0008 0000000018 DefineStr +$LK,"SLASH_OP_FMUL ",A="FL:C:/Compiler/BackLib.CPP.Z,274"$0x0000C9DE 0002 0000000018 DefineStr +$LK,"SLASH_OP_FSTP ",A="FL:C:/Compiler/BackLib.CPP.Z,278"$0x00000000 000D 0000000018 DefineStr +$LK,"SLASH_OP_FSUB ",A="FL:C:/Compiler/BackLib.CPP.Z,272"$0x0000E9DE 0002 0000000018 DefineStr +$LK,"SLASH_OP_FSUBR ",A="FL:C:/Compiler/BackLib.CPP.Z,273"$0x0000E1DE 0003 0000000018 DefineStr +$LK,"SLASH_OP_IMUL ",A="FL:C:/Compiler/BackLib.CPP.Z,266"$0x00000000 0001 0000000018 DefineStr +$LK,"SLASH_OP_INC ",A="FL:C:/Compiler/BackLib.CPP.Z,261"$0x00030000 0004 0000000018 DefineStr +$LK,"SLASH_OP_MOV ",A="FL:C:/Compiler/BackLib.CPP.Z,268"$0x00000000 0002 0000000018 DefineStr +$LK,"SLASH_OP_MUL ",A="FL:C:/Compiler/BackLib.CPP.Z,265"$0x00000000 0001 0000000018 DefineStr +$LK,"SLASH_OP_NEG ",A="FL:C:/Compiler/BackLib.CPP.Z,264"$0x00000000 0001 0000000018 DefineStr +$LK,"SLASH_OP_NOT ",A="FL:C:/Compiler/BackLib.CPP.Z,263"$0x00000000 0001 0000000018 DefineStr +$LK,"SLASH_OP_POP ",A="FL:C:/Compiler/BackLib.CPP.Z,270"$0x00000000 0001 0000000018 DefineStr +$LK,"SLASH_OP_PUSH ",A="FL:C:/Compiler/BackLib.CPP.Z,269"$0x00000000 0001 0000000018 DefineStr +$LK,"StrMatchBits ",A="FL:C:/Compiler/UAsm.CPP.Z,229",BI=258$0000000EC8 0002 0000000073 Funct Export Res +$LK,"StreamDir ",A="FL:C:/Compiler/CMisc.CPP.Z,43",BI=259$0000002848 0000 000000004E Funct Export Res +$LK,"StreamExePrint ",A="FL:C:/Compiler/CMain.CPP.Z,677",BI=260$000002CE62 0000 00000000EC Funct Export Res +$LK,"StreamPrint ",A="FL:C:/Compiler/CMain.CPP.Z,1",BI=261$000002B302 0000 00000000A8 Funct Export Res +$LK,"U ",A="FL:C:/Compiler/UAsm.CPP.Z,640",BI=262$0000002580 0000 00000000CF Funct Export Res +$LK,"UasmHashLoad ",A="FL:C:/Compiler/UAsm.CPP.Z,187",BI=263$0000000D70 0001 0000000154 Funct Export Res +$LK,"Ui ",A="FL:C:/Compiler/UAsm.CPP.Z,242",BI=264$0000000F40 0002 000000163B Funct Export Res +$LK,"Un ",A="FL:C:/Compiler/UAsm.CPP.Z,655",BI=265$0000002650 0008 00000000DA Funct Export Res +$LK,"UndefinedExtern ",A="FL:C:/Compiler/PrsStmt.CPP.Z,54",BI=266$00000100B6 0001 0000000048 Funct Export Res +$LK,"UnusedExternWarning ",A="FL:C:/Compiler/PrsStmt.CPP.Z,60",BI=267$00000100FE 0004 0000000043 Funct Export Res +$LK,"asm_seg_prefixes ",A="FL:C:/Compiler/Asm.CPP.Z,777"$000000A0E8 0001 0000000006 GlbVar Export +$LK,"cmp ",A="FL:C:/Compiler/Compiler.PRJ.Z,16"$00000004E0 00C0 00000001E1 GlbVar Export +$LK,"cmp_templates ",A="FL:C:/Compiler/CExts.CPP.Z,38"$0000000000 0002 0000000004 GlbVar Export +$LK,"cmp_templates_dont_pop",A="FL:C:/Compiler/CExts.CPP.Z,39"$000000018B 0002 0000000004 GlbVar Export +$LK,"cmp_templates_dont_push",A="FL:C:/Compiler/CExts.CPP.Z,41"$0000000257 0002 0000000004 GlbVar Export +$LK,"cmp_templates_dont_push2",A="FL:C:/Compiler/CExts.CPP.Z,40"$0000000421 0002 0000000004 GlbVar Export +$LK,"cmp_templates_dont_push_pop",A="FL:C:/Compiler/CExts.CPP.Z,42"$0000000391 0002 0000000004 GlbVar Export +$LK,"cmp_type_flags_src_code",A="FL:C:/Compiler/Lex.CPP.Z,386"$0000005BC0 0001 0000000008 GlbVar Export +$LK,"intermediate_code_table",A="FL:C:/Compiler/CMisc.CPP.Z,52"$0000002898 0014 0000000BB0 GlbVar Export +$LK,"internal_types_table",A="FL:C:/Compiler/CInit.CPP.Z,8"$000002A198 0001 00000000AA GlbVar Export +$LK,"lex_zeros ",A="FL:C:/Compiler/Lex.CPP.Z,129"$0000004FDC 000A 0000000004 GlbVar Export +$LK,"uasm ",A="FL:C:/Compiler/Compiler.PRJ.Z,17"$00000006C8 001C 0000000028 GlbVar Export +Ì‹ˆŽˆŽ¢Ž­Ž¸ŽÁŽÉŽÌŽÓŽ×ŽàŽñŽõŽûŽ �%�,�7�<�H�M�T�`�e�h�r�j�‚�‹�š�’�ª�³�¹�¹�Ç�Ê�Þ�ç�ð�÷�û���/�8�F�b�n�n�†�—�—�ž�º�Æ�Î�á�è�ü�‘‘‘‘'‘2‘L‘}‘†‘Ž‘�‘›‘§‘«‘¼‘¾‘ϑّä‘î‘ý‘ ’(’(’+’3’8’º’,DË‚¤‚¤˜¤«¤³¤Á¤ߤê¤ð¤ý¤¥%¥6¥<¥Q¥o¥o¥„¥‰¥‘¥™¥Ÿ¥·¥Ê¥Õ¥Ù¥ã¥ø¥þ¥¦ ¦¦!¦!¦(¦,¦0¦>¦Q¦U¦^¦s¦w¦w¦Ц�¦£¦§¦°¦ͦѦѦѦѦÖ¦è¦÷¦§§/§?§O§T§T§T§`§h§p§v§‹§“§¡§«§¹§¿§Á§Á§Á§Á§Á§Á§Á§Á§Á§ͧÕ§ݧã§ø§¨¨ ¨¨ ¨ ¨ ¨2¨8¨D¨J¨W¨r¨‚¨ލ”¨¡¨³¨Á¨à¨©?ª\½Ð`Š`ŠnŠpŠ{ŠƒŠŽŠ™Š¤Š¦Š¾Š¾ŠÐŠÜŠåŠèŠ‹„ <ȄȄ܄ã„ê„î„…%…,…=…b…m…x…z………ª…µ…À…Â…É…Ò…Ô…ß…æ…ð…†”ú`�`�x��†�‰�’�•�˜�œ�¡�Á�®�Ñ�Ù�á�ä�æ�ö�ÿ�ŽŽŽ"Ž9ŽJŽUއŽ„7”ø—ø—˜˜$˜C˜U˜g˜y˜‹˜�˜ª˜ª˜¯˜¶˜Ì˜Þ˜ã˜þ˜ ™™+™:™G™G™G™g™g™}™�™“™¡™°™µ™µ™¼™Ò™ã™å™û™ššš)š4šJšUšjšoš‡šŒš¤š¸š½šÒš×šïšôš ››)›.›F›H›a›r›r›t›Š›‘›§›§›Â›Ú›ò› +œ œ œ<œÔCB¢B¢V¢V¢|¢|¢™¢�¢¢¢¢¢¢¢®¢³¢âȢȢȢ͢͢ã¢ê¢ý¢ ££$£-£/£/£/£/£6£=£D£K£R£Y£`£g£n£n£p£p£v£{£}¤°Ñù‹‹;‹H‹M‹Q‹Z‹g‹s‹~‹‰‹‘‹œ‹¤‹§‹³‹»‹Õ‹û‹õ‹ ŒŒIŒ5ŒYŒYŒqŒ|Œ˜ŒŸŒÃŒüŒüŒüŒüŒ]� ¨Z€‡‡.‡5‡<‡J‡[‡m‡o‡v‡|‡Œ‡—‡¡‡¬‡Ã‡Æ‡È‡Ú‡à‡ð‡ú‡ˆ ˆˆ+ˆ3ˆ3ˆIˆIˆIˆ]ˆ +¨�§`ˆ`ˆvˆ}ˆ„ˆ’ˆ£ˆµˆ·ˆ¾ˆÄˆÔˆßˆéˆôˆ ‰‰‰"‰)‰9‰C‰M‰T‰_‰s‰{‰{‰‘‰‘‰‘‰¦‰ €=Y††)†0†7†>†D†T†_†i†t†‹†Ž†�†«†µ†¿†Æ†Ñ†ã†ë†ë†‡‡‡ `¨¼¨‰¨‰È‰Ï‰×‰â‰ì‰÷‰ÿ‰ŠŠŠ?ŠAŠQŠQŠ_Š Ü•@œ@œeœlœƒœ�œšœ¬œ¬œÝœøœ� ���'�.�5�9�;�A�M�W�^�e�i�i�s�x�ƒ�•�•�Æ�ç�ó�ú�ž žžž$ž(ž*ž0ž<žFžMžTžXžXžežsžƒž•ž•žÆžçžóžúžŸ ŸŸŸ$Ÿ(Ÿ*Ÿ0Ÿ<ŸFŸMŸTŸXŸXŸbŸrŸ„Ÿ„ŸµŸ¼ŸÂŸÎŸØŸßŸæŸêŸìŸòŸþŸ     $ ; T ` d d g p æ „¸ƒ¸ƒëƒ÷ƒÿƒ„ „„„„"„&„.„3„7„H„Y„[„_„p„�„Ž„¡„¨„²„²„²„²„Ä„L·ÆRÏRÏVÏaÏhÏmÏrÏ‰ÏšÏ¨Ï±Ï¶Ï»Ï½Ï !%(("(*(/(h°FªÄªÄÃÄÛÄëÄ ÅÅ5ÅPÅPÅzłņʼnÅ�ŒŜşŦŬųŹŽÅÂÅÌÅÝÅäÅëÅíÅñÅúÅÆÆÆÆ!Æ2Æ=ÆCÆJÆSÆlÆ}ƆÆ�ƗƢƭƹÆÊÆÛÆçÆõÆ÷ÆþÆÇ +ÇÇÇ"ÇEÇSÇ]ÇgÇpljǚǣǬǴǽÇÃÇÇÇÌÇÐÇÝÇäÇòÇüÇÈÈ$È=ÈNÈWÈ`ÈhÈqÈwÈ{ȀȆÈ�ȚȶÈÄÈÊÈÏÈ×ÈßÈçÈôÈüÈÉ-É6ÉQÉeÉeɂɉɒɛɢɫɴɽɯɿÉêÉDÊP«»r»r»›»�»«»±»Ï»Þ»í»ü» +¼¼¼(¼$æÌæÌôÌÍ"Í"Í(Í8 .Í.ÍBÍPÍVÍͅͰͶͼͼÍÄÍ8ëu:¯:¯F¯V¯l¯t¯~¯–¯›¯«¯Á¯ɯÓ¯ë¯ð¯°°&°.°8°P°\°d°n°~°ƒ°™°£°­°·°Á°˰Õ°ß°é°ó°ý°±±±1±;±E±O±Y±c±m±w±�±—±¡±«±Á±˱ձ߱é±ó±ý±²²²%²/²9²C²M²W²a²k²u²²‰²“²�²§²±²»²ŲϲÙ²ã²í²ý²à;¯ºÀºÀØÀãÀôÀ÷ÀûÀÁ ÁÁ(Á>ÁOÁ`ÁrÁ„Á“Á¢Á³ÁÂÁÂÁÐÁÔÁØÁÝÁáÁîÁõÁ Â&Â4ÂMÂOÂSÂ]Â]ÂbÂbÂbÂgÂgÂv‡Â�Â�Â�¢¢·ÂÃÂÎÂÓÂÓÂÖÂÛÂÛÂ÷ÂÃÃÃÃÃÃÃ4Ã@ÃLÃNÃNÃQÃSÃSÃ`ÃbÃbÃeÃeÃnÃtÃyÕÕÕÕÕÕÕÕÕÕÕÕ×èúÃÉÃØÃØÃÜÃÜÃäÃÄÄ Ä¤Ä¼:*¼*¼D¼O¼S¼\¼c¼j¼€¼‘¼¢¼´¼ƼÕ¼ä¼õ¼½½ ½½½%½,½5½<½@½`½`½`½`½`½l½p½s½{½‰½‘½ž½¦½®½¿½ʽϽϽܽâ½ñ½¾ +¾¾"¾1¾4¾6¾N¾e¾g¾u¾w¾‚¾ˆ¾ˆ¾�¾�¾¢¾©¾¿¾¿¾¿¾ľľÙ¾ç¾ò¾÷¾÷¾ú¾ÿ¾ÿ¾¿)¿6¿8¿8¿<¿>¿>¿Z¿h¿t¿v¿v¿y¿{¿{¿ˆ¿Š¿Š¿�¿�¿�¿�¿�¿–¿œ¿ ¿¬¿Ì¿Ù¿ç¿î¿¶Àô1ªê´ê´ò´µµµ µ3µBµbµoµ�µ£µõѵíµÿµ¶.¶9¶Z¶x¶‡¶¢¶­¶ȶá¶á¶ü¶%·?·Z·l·{·Š·Š·•·¨·¹·Ì·Ü·é·ô·¸#¸#¸/¸/¸/¸@¸M¸T¸s¸|¸‰¸�¸•¸ ¸¸¸иÙ¸é¸ñ¸ö¸ ¹-¹=¹M¹X¹l¹q¹y¹Ÿ¹¡¹¬¹ß¹ù¹ù¹º º(º7º@ºHºZºyº�º‰º”º–º¦º¾ºÖºîº»»/»8»A»S»a»e»l»ˆÌêBªBªKªFªFªUªdªdªsªsª‚ª‚ª‘ª‘ª ª ª¯ª¾ªͪܪܪëªúª «3¯Ø8>Ä>ÄfÄiĞįįÄÊÄÐÄÕÄÕÄðÄöÄûÄûÄÅÅÅ%Å+Å0ÅsÅ}Å„ÅŠÅŒÅŒÅŸÅ¥Å¥Å¥ÅªÅÆÅÕÅçÅìÅìÅìÅóÅúÅÆÆÆ9Æ9ÆKÆ0S[^À^ÀrÀzÀ‡À‘À¤À”"iJiJ|J‡J±JáJòJK KK&K-K;KDK\KkKxK{K”K—KœK³K¿KËKÏKÝKäKçKL0ûŽÌŽÌ—̜̥̬̮̳Ì8¶Ì¶Ì¿ÌÄÌÏÌØÌßÌáÌæÌ <9DNÆNÆhÆrÆvÆzÆÆ�Æ�ƹƹÆÃÆ &*0(0(:(B(G(!8s}JÌJÌcÌr̡̛̤̆̕ÌÅÌ"8š¤âÍâÍûÍ +ÎÎ+Î1Î7Î:Î[Î#0jrúËúËÌ#Ì2Ì8Ì;ÌCÌ$0‘™šÍšÍ°ÍÃÍÐÍÖÍÙÍáÍ%˜GiJÊJÊRÊVÊsʆʙʶÊ×ÊàÊñÊË/Ë/ËQË`ËiËvË}˯˼ËÀËÈËÈËÛËëËïËóË&X~�ÊÌÊÌçÌûÌÍÍ)ÍFÍdÍjÍsÍ�͇͖͊Í' �'�'™'·'¼'(ˆ ˜€˜€¨€É€É€×€×€×€×€à€à€ç€���%�%�3�C�C�Q�W�W�o�o�u�›�)  D � �°�¹�Ì�Ù�å�ñ�ý� ‚ ‚ ‚/‚:‚C‚J‚S‚}‚‚‚”‚£‚¯‚Á‚Á‚ê‚ê‚ì‚ÿ‚ƒƒ'ƒ*ƒAƒ*TEVHƒHƒZƒ]ƒfƒoƒ}ƒ‚ƒ‹ƒŽƒ“ƒ¡ƒªƒ·ƒ+ì8¦¦ÐÓÖÜáø&8^…ˆ¡¸Ê×êý +#,,7_y˜±³ÍÓì ""4r‡™,üE€Ö­Ö­õ­®®7®U®d®‚®–®®®µ®º®Û®ù®¯%¯6¯M¯Q¯Q¯U¯Z¯_¯i¯l¯v¯|¯™¯œ¯œ¯œ¯¡¯§¯ïѯݯæ¯ú¯° °'°2°>°G°[°[°j°o°o°}°-4õ~®®àëø$RWW[eqŒ“¡£«Åàòÿ+07\clnt‡¥·ÄÜò$69;A]uw�¡¤¦¬ÈÈÈÚÚèò//48T`{˜¢¦¶Éàãõ *.DWnqƒ�¡«´ËÕ×ëõ     " 5 M O g z ‘ — © ± Ò é é é   ! .d9ΞžÔÛãìý + "%)2@JOw|‰µºÇçìû'/4Iu}‚‚•¨¸¼Ûìññ#8;>BBGot}Š’­¿Ì×õõõ(?AANeev{›­¿ÝÝÝê'))6MM^fk‘£µÓÓÓà÷ùù   2 4 ; ] { € ‡ • Ÿ ¡ ¡ ¡ ½ Å Ç Ç é # +/€:N&N&b&i&u&…&¤&ª&±&Ð&Ò&ñ&ý& ','2'9'9'A'I'T'\'g'r'‘'™'0„žÆIÆIäIöIüIJ +J JJJJJ9J=JCJCJ[JoJ€J€JˆJ¬JÌJíJòJKK$K/K4KAKDK{KŒK‘K—K™KŸK¢K³K¸K»KÃKÌKçKLL1L6L:L\LoLtL‹LžL£L§LÉLäLMMM-M2M5M7M=MCMTMYM_MgMgMqMzM‘M¤M©M­MÏMêM +NN"N=N]NtN‡NŒN�N²NÅNÅNàNàNàNîNOOOOO.O0O0O>OVOVOhOhOqO~O”O´OÎOÕOßOòOöOöOöOýOPP$P.PFPHPNPhPoPyP‡P’P’P¬P1h£¹¦h¦h¼hÈhÞhëhõhii!i'iFi:iWiYiYiŠixiYi©i³i2À 7;;";I;7;);j;z;l;›;¾;¾;Î;Ó;Ó;ç;ì;ì;< < <-<2<2<F<K<K<h<h<v<š<À<à<ò<==&=&=&=&=&=ï=3̟ήP®PÂPáPÍPQQ Q&Q`QeQ‘Q‘Q–Q¬Q¾QÔQêQR,RdRPRRŒR¸R½RäRìRSòR!S:S&SZSFSnS{S§S§S§S§S¯S4°>ž<ž<´<¼<Ç<Ó<Þ<à< ===6=C=n=™=“=‡=±=Ó=ë=Ø=þ=÷=> +>1>>>i>‚>|>p>Ž>¡>¡>¡>«>5¬ô[F/F/l/Œ/”/Ÿ/®/·/»/Æ/Ñ/æ/ë/0$0*0/0B0x0Ž0”0œ0Ÿ0¤0·0á0÷0ý0111(1-1J1i1o1w1w1|1‚1…1�1›1°1µ1Ï1î1ô1ù122"2'2F2N2S2^2s2|2~2�2¥2°2Å2Ê2ä23 333333"37373O3Z3m3z3’3¦3·3Á3Ã3×3è3í3ø3%4%4%4746Ð϶S¶SÔSäSïSúS?TfT„T®T´TºTÂTÄTÌTçTêTõTUFUmU‹UµU»UÁUÉUÎUÖUñUôUÿU VVUV|VšVÄVÊVÐVØVÚVâVýVW WW\WƒW¡WËWÑW×WßWäWìWX +XX!X!X&X,X2X:XBXMX_XnX�XÇXÍXÒXäXóX%YOYUY]YbYtYƒY²YÜYâYçYùYZ7ZaZgZlZlZlZ}ZˆZ“Z¹ZÑZÜZäZñZñZöZ [ [%[K[c[n[v[ƒ[ƒ[ˆ[›[¨[²[Æ[Ý[ö[\\@\T\k\y\{\�\¦\¦\¯\»\Ñ\ê\ý\ ]] ] ] ]'],]?]K]b]d]i]|]ˆ]•]Ÿ]Ÿ]±]7d¤¹¹¹¹-¹-¹G¹N¹Z¹Z¹q¹q¹ˆ¹ˆ¹Ÿ¹Ÿ¹¶¹¶¹͹ϹϹÓ¹8ló +I:I:W:a:h:::„:†:’:œ:ª:Ç:É:Ù:Ù:Þ:à:ç:;9ì|ó^*^*€*Š*½*Ì*â*+ +++ +/+6+?+D+Y+j+‰+‘+“+²+º+É+Ð+Ü+á+è+ð+ö+ø+,,,,;,A,A,I,R,a,€,‡,‰,¨,¯,¯,¯,Ã,×,Û,é,ü,ô,--$-+-3-9-;-G-W-\-^-~-„-„-�- -¥-ª-Ê-Ð-Õ-á-ñ-ö-ø-..%.-.3.5.A.Q.V.X.x.~.~.~.†.�.�.™.™.±.á.õ.ù.///2/2/D/:à?ó®>®>Ñ>Ù>é>ñ>?5?9?A?I?O?c?k?k?s?¬?ô?Ï?@@.@=@?@i@o@x@@‡@�@›@£@«@¾@Æ@Ë@Õ@õ@ý@ÿ@ AA8A@ABAbAjAjAjAsAzA�A•AžAžA£A§A¯A¸AÁAÍAèABBHBKBdBqB…BœB B¬BÑBíBÿB)C/C1C[C^C^CuC‚C–C­C¶CºCÅCÐCâCñCóCD D2DADFDpDvD{D�DœDžDÈDËDÝDìDîDEEEE(E(E3EdEmEmEmEmEvE‚E˜E±EÄEËE×EÞEÞEñEõEõEõEüEFFF'F.F.FEFGFLF_FfFrFyFyF†F�F�F¶F¶FÈF;ÄErÆÆÆÆòÆõÆúÆÇ ÇÇ Ç$Ç(Ç+Ç>ÇWÇyÇ‚Ç�ǔǭÇÏÇÔÇíÇÈÈÈ4ÈVÈXÈqȓȓȓȨÈÂÈÑÈãÈ<T�¡~Ã~ÒßîîúÃÀÃêÃÄìÃÄ Ä/Ä7Ä=¸ë¦:¦:¾:Â:Ð:ß:ê:ö:;;,;2;2;T;ƒ;g;[;¥;ª;Ñ;Ö;â;í;ï;<<<1<J<D<8<V<i<i<‹<‹<—<>X™«ÞÞìó13Rq‡’”ŸªÉÏ?ä¬áÖÖëöý*IKj—¥­¸ºÅÐÐÕ49@_~‰‹ªÉÉäòú=ZZg‹¬¬¬´@¤yžfúfú„ú•ú¡ú¸ú¿úØúÐúðúûüúû-û2ûSû?ûkû|û“ûšû³û«ûËûëû×û÷ûüü +ü6üCüCü[ü[üeüA¬%L>Ú>Ú\ÚnÚuÚ|Ú‹Ú�Ú¯Ú¯Ú´ÚÓÚØÚßÚîÚðÚÛÛ.ÛCÛ0ÛOÛ^Û`ÛÛÛÛÛŽÛ§Û Û¿ÛÉÛBdEZžîžî¼îÏîÖîÝîäîèîêîñîøîüîüîïï'ï'ï;ïFïTïeïiïnïyïŠï›ï²ï¶ï¿ïÃïÈïÙïöïöïððð6ðGðKðKðKðPð~ð“ðšð­ð±ð¶ðÁðÒðãðúðñ ñññ%ñ7ñGñ[ñ]ñvñ‰ñ�ñ�ñ�ñ˜ñ©ñºñÑñÕñÞñâñçñøñòò#ò7ò<òUòfòjò|ò|ò|ò�ò�ò’ò±ò±òÐòÛòáò÷òó ó"ó-ó>óOófójósówó|ó�ó¦ó¦ó´óÈóÊóãóôóøóøóÿóôô(ô-ô8ôIôZôqôyô‚ô†ô‹ôœô²ôÂôÖôÛôôôõ õõõõõ5õ"õAõPõRõqõ|õ‚õ˜õ©õ©õ©õ°õÃõÜõÜõÜõëõëõþõö ö1ö6ö<öFöHöTöTö[öfö{ö}öˆö�ö©ö«ö¶öÂöÒöÙöàöêöòöööúöüö÷ ÷ ÷ ÷!÷&÷.÷2÷4÷4÷=÷J÷`÷€÷š÷¦÷²÷¹÷¹÷Ì÷Ð÷Ð÷Ð÷×÷Ü÷ö÷øøøø,ø.ø3øMøYøeøløløyøƒøƒø•øCÌs¢æÈæÈÉÉÉ É&É(É.É4É4ÉFÉQÉXÉeÉrɅɔɨɮɰɷɽÉÇÉÇÉØÉÚÉáÉçÉñÉñÉñÉÊÊ!Ê0Ê2ÊDÊSÊSÊeÊDx£½fÊfÊ�ʓʚʠʦʨʮʴʻÊÈÊÕÊèÊõÊË +Ë ËËË+Ë=ËLËjË|ËE<mx¶ù¶ùÐùÜùîùú%úú=úUúUú_úF„ñ^Í^Ív͈Í�͖͵ͺÍÙÍÞÍøÍåÍÎÎ#Î8Î%ÎWÎDÎcÎcÎuÎ|ΛΛΣÎGM�ÎÛÎÛæÛøÛÜ+Ü +Ü7ÜUÜ‚Üa܎ܨܨÜÇÜÜÜÉÜ ÝèÜÝ/Ý/ÝAÝ[Ý[݈ݕÝÎÝÓÝÚÝÞùÝÞ2Þ>ÞpÞ]Þ‹Þ|Þ—ÞµÞÊÞ·ÞÖÞßõÞß*ß*ß<ßVßqß~ß�ß�ߥßHT[l–ø–ø°ø¼øÎøäøùòøù.ù@ùVùwùdù�ù§ù§ù±ùI(^$žÑžÑÄÑ×ÑßÑæÑíÑóÑõÑüÑÒÒÒÒÒ+Ò6ÒAÒRÒcÒzÒ‚Ò‹Ò“Ò˜Ò©Ò¿ÒÏÒáÒæÒÓÓÓÓ!ÓMÓbÓmÓ~Ó�Ó¦Ó®Ó·Ó¿ÓÄÓÕÓçÓ÷Ó Ô Ô%Ô=ÔAÔAÔLÔ]ÔnÔ…Ô�Ô–ÔžÔ£Ô´ÔÊÔÚÔìÔñÔ Õ#Õ'Õ:Õ:Õ:ÕRÕ?ÕrÕ_ÕÕ‹Õ‘Õ©ÕÁÕÆÕÛÕæÕ÷ÕÖ Ö'Ö0Ö8Ö=ÖNÖ`ÖpÖ‚Ö„ÖžÖ¶ÖºÖºÖÅÖÖÖçÖþÖ××××-×C×S×e×jׄלנ׳׳׳×Ë׸×ëר׸ר +Ø"Ø:Ø:Ø:ØFØLØWØbØt؄؛زØÉØàØàØôØÙÙÙ1Ù1Ù?ÙAÙAÙOÙOÙXÙcÙqٌٛ٢ٲٴÙÑÙÙÙöÙÚ"Ú"Ú;ÚJD¦ß¦ßÄßËßÒßÝßåßþßþßà+à+à6à:àEàmàLàyà�à�à³à·à¼àÎàßàöà áááá#áJá`ádádátá±á�á½áÚáÚáùáâ +â â1â6âHâYâpâ‡âŒâ”â˜âšâÁâ×âÛâæâ÷âã ã'ã,ã0ã5ãFã\ãjã~ãƒãœã­ã±ãÃãÃãÃãÃãÈã÷ãäã$ää0äMäXä^ätä…äŠä•ä¦ä·äÎäÖäÛäßäääõäåå)å+åDåUåYåYåYåkå|å“åªå¯å·å»å½åäåúåþå æ æ æ ææ$æ.æ5æHæ_æ_æ{æ{æ‰æ‹æ‹æ™æ™æ¯æ¿æÍæäæ÷æüæç ç<çLçSçaççwç¤çÍçÍçÍçÚçèè#è)è4èSèjèZèvèŒèšè²èÈèÌèÜèûè'éé3éPéPéoézé€é–é§é¬éÂéØéÜéçéøé ê ê(ê-ê1ê6êGê]êkêê„ê�ê®ê²êÄêÄêÄêÄêÉêøêåêë3ë#ë?ë\ëgëmëƒë”ë™ë¤ëµëÆëÝëåëêëîëóëìì$ì8ì:ìSìdìhìhì‡ì�ì³ì·ìÄìÄìÄì×ìÝìçìîìíííí4í4íBíDíDíRíRíhíxí†í¡í´í¹íÕíÝíùí îî4îPîPî]î}î}î}î�îK|Ìçžþžþ¸þàþÃþìþùþ ÿ%ÿÿ=ÿUÿBÿhÿaÿtÿ�ÿ”ÿ­ÿ¦ÿ¹ÿ¹ÿÆÿåÿåÿïÿLH]¦Î¦ÎÊÎâÎýÎéÎÏ Ï)Ï?Ï+Ï_ÏKÏkÏwÏ|ψϘϟϬϷÏÃÏÎÏÖÏÛÏçÏìÏÐÐ ÐÐÐ&Ð?ÐHÐTÐYÐmÐtÐxÐxÐ}ЖЛдÐÉÐÛÐàÐëÐóÐóÐóÐõÐÑ#Ñ.Ñ8ÑCÑEÑPÑXÑXÑeÑ]Ñ}Ñ�ÑMd¶ËŽýŽý¨ýÌý¯ýØýñýêý þþ þ1þ*þ=þVþOþbþbþoþŽþŽþ˜þNhŸµfüfü„ü�ü§ü¸ü¿üØüÐüðüýüüý-ýCý/ý[ýhýhý€ý€ýŠýOLè÷öÿöÿ&-LL^q~w– Pؾð~Ë~ˠ˧˲ËÈËÈËÚËåËðËÌÌ)Ì-Ì2Ì6Ì8ÌIÌ[ÌgÌyÌ{̧̧̧̣̺̔ÌÏÌÏÌÛÌáÌëÌöÌÍ ÍÍÍ2ÍLÍLÍ^ÍQ�$D¾H¾HÜHäHðHII)I4ICIIIIIIINISIaIlI‚I„I‰I—I¢I¯I¶IÄIR4;D–­–­Ÿ­«­Ê­Ï­Ñ­Ñ­Ö­S”n�ÎÁÎÁÂ#Â#Â6Â:ÂYÂmÂrÂr‡Â�¤°ÂÁÂÆÂ×ÂëÂðÂò Ã#Ã%Ã%Ã>ÃVÃVÃxÃT<Œ—ÆrÆrÏrÚrårðrûrs#s.s>sU,ð7~a~aša a«a¼aÁaÇaÊaÎaÎaîaóa)bb5bNb:bZbsb_bb†b‹b•b˜bœb¡bºb¦bÆbÆbÆbËbÜbábçbêbîbîbccIc5cUcncZczc�c|cœc£c¨c®c±cµc·cÐc¼cÜcÜcÜcÜcôcd)dVXâô¶¶ÄËê  *IW_jlw‚¡§W´?h~d~d–d¡dÄdÜdádædêdìdòdødeûdee9eQe>e]e€e˜e�e¢e¦e¨e®e´eÊe·eÖeÖeéeñefff)f5fXtŒå~°~°–°ž°«°˰ݰä°î°ô°ú°þ°±$±$±+±.±3±B±F±X±s±w±|±|±ƒ±†±‹±—±¥±©±º±ɱͱϱÞ±â±â±ô±²² ² ²!²$²0²:²A²g²r²v²{²±²ȲÓ²ײè²ó²÷²ù²³³³³³"³&³(³(³3³7³E³Q³U³U³U³Y³|³Yˆæ~³~³’³¨³¨³¨³ª³ª³±³³³³³º³¼³¼³ɳ˳˳سß³á³á³î³õ³÷³÷³´´´$´ZܺmÖ¹Ö¹ ºº#ºEºEºVºcº�º‰º¶º»ºäº»»#»'»J»p»u»ž»¸»Þ»õ»û»ÿ»¼ ¼%¼6¼>¼]¼c¼g¼€¼ˆ¼§¼¬¼½¼żä¼é¼ñ¼÷¼û¼ÿ¼½½%½9½>½P½U½f½k½~½‹½Ÿ½ª½³½×½ ¾4¾9¾9¾9¾I¾P¾^¾k¾�¾�¾¤¾©¾©¾À¾¾¾Ö¾ؾؾï¾ñ¾ñ¾¿ +¿ +¿!¿!¿2¿7¿7¿G¿l¿~¿ƒ¿ƒ¿ƒ¿ƒ¿Š¿¾¿Ï¿í¿í¿í¿ú¿ÀÀÀÀ À7À9À9ÀFÀ]À]ÀrÀtÀ�À«À«À«À¯À±À±À±À¶À¸À¸À½À½ÀÇÀÌÀÌÀêÀêÀêÀòÀôÀôÀôÀüÀþÀþÀÁÁÁÁ+Á-Á@ÁTÁTÁTÁTÁTÁgÁÁ‡Á‡ÁÊÁ[ðU<?QX_dfmtxмÃîó (7qv£«°¹ÄÌÓòø8CZy††Œ�“¤ÄÖ\V˜ÖÖîõ:EQ€€Œ”£Ýß AFe€†•ª¬·¿Úßèóû :Y[z§¶¯Üáè&(Gf�‰¤¤¤ÐÐÜ]\ +N%N%`%l%Š%¦%³%Ê%Ý%è%ê% &&&/&(&G&M&^("®¬®¬½¬Ьè¬è¬î¬_hºÐ¶i¶iÌiØiîiûiÿij-j1j7jVjJjgjijijšjˆjij¹jÃj`Œ;Zž'ž'´'º'Á'Í'Ý'ý'( ()(+(K(W(g(‡(Œ(“(“(“(™(œ( (¨(À(Ë(Ö(ö()axiƒ··>·`·`·j·o·o·Ž·›·�·�·�·�·ª·²·Å·Ù·Û·Û·ã·ö·ö·¸b@„�¸¸¸'¸.¸M¸Z¸Z¸]¸_¸e¸c¬Ãê¦8¦8¾8Æ8Ñ8ÿ8Þ899Q919%9w9|9§9¬9¸9ß9ä9æ9: :'::?:F:g:Y:M:{:}:–:–:–:¢:dœŸÂÎ6Î6æ6î6ù63777Y7[7†7†7“7Ì7Ñ7Ý7è7ê7 88878)88K8M8f8f8s8š8š8š8¦8eˆ\z>4>4R4U4g4o4z4‰4‰4�4ª4µ4º4Ú4é4ñ4ü4555%505;5F5F5X5X5`5f¤6[nµnµ޵°µ°µϵßµäµäµóµ¶ ¶'¶.¶0¶C¶K¶K¶K¶M¶M¶M¶M¶k¶k¶k¶k¶}¶¶¶¶¶’¶�¶À¶g@\hƶƶÔ¶ܶã¶······h8yñ=ñ=> > >O>[>h>r>‚>‚>™> >·>¾>Ç>Þ>Þ>ô>ô> +? +? ? ?6?6?L?L?b?b?x?x?Ž?Ž?¥?¥?¼?¼?Ó?Ó?ê?ê?@@@@/@/@G@G@_@g@r@ƒ@Ž@Ÿ@¢@¤@»@Â@Â@ÎAiD€�¶]¶]Ê]Ö]ì]Ø]ø]ú] ^^&^j°Ž¶&^&^<^C^T^Y^n^[^z^€^€^Œ^¤^‘^°^³^µ^Ã^È^Ý^Ê^é^ì^ì^ø^ _ú^_ _ _2_E_X_k_~_ˆ_k°·ßŽ_Ž_¤_«_¼_Á_Ö_Ã_â_è_è_ô_ `ù_```+`0`E`2`Q`T`T```u`b`�`‡`‡`š`­`À`Ó`æ`ð`lLàïö`ö` +aa,aa8a:aMa`akava~am$~¬~¬�¬¥¬¥¬«¬n�Ÿ& & T Y m u ƒ ‡ � � • ¢ ¸ â ç  !!! !5!K!M!c!y!�!·!É!o ãÎ!Î!"""'"."5">"@"C"b"i"„"†"�"¨"¯"¸"º"½"Ü"Ü"Ü"ê"ô"#!###=#E#E#a#€#…#Œ#¢#©#Ä#Æ#Í#è#þ#$$ $-$M$O$i$q$q$�$¤$¤$Ê$Ü$p|5&´&´J´^´i´~´œ´§´Å´Å´Å´Ò´ê´ì´ì´ì´ù´µµµ!µ.µFµFµWµkµq(8>.d.dUdBdadpdxdrDÏ& +& +N [ -u -� -¢ -¯ -Ç -Û -à -ç -    $ 7 U g t Œ ¢ ¾   Í Ô æ é ë ñ  % ' ? Q T V \ x x x Š Š ˜ ¢ à ß ß ä è   + H R V f y � “ ¥ ¹ à Ú Þ ô !3=Q[d{…‡›¥¼ÀÀÀËÒåýÿ*AGYa‚™™™¿¿Ñ.x9ÓNóNó„ó‹ó“óœó­óºóÏóÒóÕóÙóâóðóúóÿó -ô'ô,ô9ôeôjôwô—ôœô«ô×ôßôäôùô%õ-õ2õ2õEõXõhõlõ‹õœõ¡õ¡õÃõÃõÃõÃõÃõÓõèõëõîõòõòõ÷õö ö$ö-ö:öBö]öoö|ö‡ö¥ö¥ö¥ö²öÉöËöËöËöØöïöñöñöþö÷÷&÷+÷4÷K÷]÷o÷�÷�÷�÷š÷±÷³÷³÷³÷À÷×÷Ù÷Ù÷æ÷ý÷ý÷øøø'øAøSøeøƒøƒøƒø�ø§ø©ø©ø¶øÍøÍøâøäøëø ù+ù0ù7ùEùOùQùQùQùmùuùwùwù™ùÓù/„;þþ%5TZa€‚¡­½Üâééñù "AI0ˆŸ–8–8´8Æ8Ì8Ó8Ú8Ü8ß8æ8í8í8 9 999+9?9P9P9X9|9œ9½9Â9ã9è9ô9ÿ9:::K:\:a:g:i:o:r:ƒ:ˆ:‹:“:œ:·:×:î:;; -;,;?;D;[;n;s;w;™;´;Ô;ç;ì;ý;<<< <<$<)</<7<7<A<J<a<t<y<}<Ÿ<º<Ú<í<ò< =-=D=W=\=`=‚=•=•=°=°=°=¾=Ö=Ø=Ø=Ø=æ=þ=>>>&>&>8>8>A>N>d>„>ž>¥>¯>Â>Æ>Æ>Æ>Í>Ó>í>ô>þ>???8???I?W?b?b?|?1l£ºvWvWŒW˜W®W»WÅWÔWíWñW÷WX -X'X)X)XZXHX)XyXƒX2ÄIvÐ)Ð)Ù)*î)à)!*1*#*R*u*u*…*Š*Š*ž*£*£*¿*Ä*Ä*ä*é*é*ý*++ + +-+Q+w+—+©+»+Í+Ý+Ý+Ý+Ý+Ý+¦,3ПÏ~?~?’?±?�?×?ä?ð?ö?0@5@a@a@f@|@Ž@¤@º@í@ü@4A AOA\AˆA�A´A¼AÖAÂAñA -BöA*BB>BKBwBwBwBwBB4´?V,V,l,w,‚,Ž,™,›,Ä,Ê,Ê,ñ,þ,)-T-N-B-l-Ž-¦-“-¹-²-Ø-Å-ì-ù-$.=.7.+.I.\.\.\.f.5°ô\öö < D O ^ g k v � – › µ Ô Ú ß ò ( > D L O T g ‘ § ­ µ ¸ à Ø Ý ú ! !'!'!,!2!5!@!K!`!e!!ž!¤!©!´!É!Ò!×!ö!þ!""#","."M"U"`"u"z"”"³"¹"¾"¾"¾"¾"Ë"Ò"ç"ç"ÿ" -##*#B#V#g#q#s#‡#˜#�#¨#Õ#Õ#Õ#ç#6ÔÏ€†B†B¤B´B¿BÊBC6CTC~C„CŠC’C”CœC·CºCÅCÑCD=D[D…D‹D‘D™DžD¦DÁDÄDÏDÛDàD%ELEjE”EšE E¨EªE²EÍEÐEÛEçE,FSFqF›F¡F§F¯F´F¼F×FÚFåFñFñFöFüFG -GGG/G>GmG—G�G¢G´GÃGõG H%H-H2HDHSH‚H¬H²H·HÉHØHI1I7IJFJSJSJXJkJxJ‚J–J­JÆJØJåJK$K;KIKKK_KvKvKK‹K¡KºKÍKÙKìKðKðKðK÷KüKLL2L4L9LLLXLeLoLoL�L7h¤ºƨƨʨݨݨ÷¨þ¨ -© -©!©!©8©8©O©O©f©f©}©©©ƒ©8p1Iø(ø())).).)3)5)A)K)\)y){)‹)‹)�)’)™)Ë)9ð|ô0:m|’¶»¿ÇÐßæïô 9ACbjy€Œ‘˜ ¦¨´ÄÉËëññù079X___s‡‹™¬¤ÄÉÔÛãéë÷ .44@PUZz€…‘¡¦¨ÈÎÕÝãåñ(...6??IIa‘¥©·ÊÂââô:à?óf.f.„.Œ.š.ž.Ä.Ï.×.ß.ó.û.û.ÿ.1/j/X/O/‚/‡/’/�/Ÿ/¾/Ä/Í/Ô/Ü/ä/ð/ø/000 0*0J0R0T0^0m0�0•0—0·0¿0¿0¿0Ê0Ó0ç0ï0ø0ø0ý01 111181T1p1�1’1§1´1È1Û1ß1ì12.2A2`2f2h2‡2Š2Š2Ÿ2¬2À2Ó2Þ2â2í2ø2333/323=3H3M3l3r3w3‚3�3�3®3±3¼3Ç3É3è3î3î3î3ø3ø3444?4?4?4?4H4T4j4ƒ4–4�4©4°4°4Ã4Ç4Ç4Ç4Î4Ó4æ4í4ù4555551585D5K5K5X5b5b5‹5‹5�5;ÈEsv¶v¶¢¶¥¶ª¶·¶¼¶ζжÔ¶ضÛ¶î¶·)·2·=·D·]··„·�·¿·Ä·Ë·ä·¸¸!¸C¸C¸C¸X¸r¸�¸“¸<T�¡.³.³B³O³^³^³j³p³š³°³œ³dz¼³ß³ç³=¼ë^*^*v*z*ˆ*—*¢*®*¹*»*ä*ê*ê* +;+ ++]+b+‰+Ž+š+¥+§+Ð+Ö+Ö+é+,ü+ð+,!,!,C,C,O,>\�°ŽŽœ£Âáã!/7BDOZy?è°æ††›¦­ÚùûGU]hju€€…²·äéð.9;Zyy”¢ªµ·ÂÍÍí - -;\\\d@¨yŸêê4êEêQêhêoêˆê€ê êÀê¬êÌêÝêâêëïêë,ëCëJëcë[ë{ë›ë‡ë§ë¸ëÎëºëæëóëóë ì ììA°%MîÉîÉ ÊÊ%Ê,Ê;Ê@Ê_Ê_ÊdʃʈÊ�ʞʠʿʿÊÞÊóÊàÊÿÊËË/Ë/Ë/Ë/Ë>ËWËPËoËyËBhE[NÞNÞlÞÞ†Þ�Þ”Þ˜ÞšÞ¡Þ¨Þ¬Þ¬Þ´ÞÍÞ×Þ×ÞëÞöÞßßßß)ß:ßKßbßfßoßsßx߉ߦߦߴßÈßÍßæß÷ßûßûßûßà.àCàJà]àaàfàqà‚à“àªà²à»à¿àÄàÕàçà÷à á á&á9á=á=á=áHáYájá�á…áŽá’á—á¨áÅáÅáÓáçáìáâââ,â,â,â1â@âBâaâaâ€â‹â‘â§â¸â½âÒâÝâîâÿâãã#ã'ã,ã=ãVãVãdãxãzã“ã¤ã¨ã¨ã¯ãÂãÆãØãÝãèãùã -ä!ä)ä2ä6ä;äLäbärä†ä‹ä¤ä·ä»äÍäÍäÍäÍäåäÒäñäåå!å,å2åHåYåYåYå`åsåŒåŒåŒå›å›å®åÅåÐåáåæåìåöåøåææ ææ+æ-æ8æMæYæ[æfæræ‚æ‰æ�æšæ¢æ¦æªæ¬æ±æ¹æ½æÏæÑæÖæÞæâæäæäæíæúæç0çJçVçbçiçiç|ç€ç€ç€ç‡çŒç¦ç²ç¾çÅçÅçÜçÞçãçýç èèèè)è3è3èEèCÐs£–¸–¸À¸øʸиÖ¸ظÞ¸ä¸ä¸ö¸¹¹¹"¹5¹D¹X¹^¹`¹g¹m¹w¹w¹ˆ¹й‘¹—¹¡¹¡¹¡¹¸¹ʹѹà¹â¹ô¹ºººD|£¾ºº@ºCºJºPºVºXº^ºdºkºxº…º˜º¥º´ººº¼ºº̺Ûºíºüº»,»E@myféfé€éŒéžé´éÕéÂéíéêêêFˆñ½½&½8½?½F½e½j½‰½޽¨½•½ǽ´½Ó½è½Õ½¾ô½¾¾%¾,¾K¾K¾S¾GM�~Ë~˖˨˳ËÛ˺ËçËÌ2ÌÌ>ÌXÌXÌwÌŒÌy̹̘ÌÅÌßÌßÌñÌ Í Í8ÍEÍ~̓͊͸ͩÍÄÍâÍîÍ Î Î;Î,ÎGÎeÎzÎgΆδΥÎÀÎÚÎÚÎìÎÏ!Ï.ÏMÏMÏUÏHX[mFèFè`èlè~è”èµè¢èÍèÞèðèé'éé?éWéWéaéI,^%NÁNÁtÁ‡Á�Á–Á�Á£Á¥Á¬Á³Á¶Á¶ÁÈÁÈÁÛÁæÁñÁÂÂ*Â2Â;ÂCÂHÂYÂo‘–°ÂÈÂÌÂÌÂÑÂýÂÃÃ.Ã?ÃVÃ^ÃgÃoÃtÅ×çùûÃÕÃíÃñÃñÃüà ÄÄ5Ä=ÄFÄNÄSÄdÄzĊĜġĻÄÓÄ×ÄêÄêÄêÄÅïÄ"ÅÅ/Å;ÅAÅYÅqÅvŋŖŧŸÅÏÅ×ÅàÅèÅíÅþÅÆ Æ2Æ4ÆNÆfÆjÆjÆuƆƗƮƶƿÆÇÆÌÆÝÆóÆÇÇÇ4ÇLÇPÇcÇcÇcÇ{ÇhǛLjǨǴǺÇÒÇêÇêÇêÇöÇüÇÈÈ$È4ÈKÈbÈyÈ�È�ȤÈÀÈÀÈÀÈáÈáÈïÈñÈñÈÿÈÿÈÉÉ!É<ÉKÉRÉbÉdÉ�ɉɦɷÉÒÉÒÉëÉJ EVÏVÏtÏ{Ï‚Ï�ϕϮϮÏÂÏÛÏÛÏæÏêÏõÏÐüÏ)Ð?ÐMÐcÐgÐlÐ~Ð�ЦнÐÂÐÊÐÎÐÓÐúÐÑÑÑ$ÑaÑ@ÑmъъѩѴѺÑÐÑáÑæÑøÑ Ò Ò7Ò<ÒDÒHÒJÒqÒ‡Ò‹Ò–Ò§Ò¸ÒÏÒ×ÒÜÒàÒåÒöÒ ÓÓ.Ó3ÓLÓ]ÓaÓsÓsÓsÓsÓxÓ§Ó”ÓÔÓ³ÓàÓýÓÔÔ$Ô5Ô:ÔEÔVÔgÔ~Ô†Ô‹Ô�Ô”Ô¥Ô·ÔÅÔÙÔÛÔôÔÕ Õ Õ ÕÕ,ÕCÕZÕ_ÕgÕkÕmÕ”ÕªÕ®Õ»Õ»Õ»Õ»ÕÎÕÔÕÞÕåÕøÕÖÖ+Ö+Ö9Ö;Ö;ÖIÖIÖ_ÖoÖ}Ö”Ö§Ö¬ÖÈÖÐÖìÖüÖ××/×'×T×}×}×}׊×Ã×È×Ó×Ù×ä×ØØ -Ø&Ø<ØJØbØxØ|،ثØרÇØãØÙÙ Ù*Ù0ÙFÙWÙ\Ùrوٌٗ٨ٹÙÐÙØÙÝÙáÙæÙ÷Ù ÚÚ/Ú4ÚMÚ^ÚbÚtÚtÚtÚtÚyÚ¨Ú•Ú´ÚãÚÓÚïÚ ÛÛÛ3ÛDÛIÛTÛeÛvÛ�Û•ÛšÛžÛ£Û´ÛÆÛÔÛèÛêÛÜÜÜÜ7ÜMÜcÜgÜtÜtÜt܇Ü�ܗܞܱÜÈÜÈÜÈÜäÜäÜòÜôÜôÜÝÝÝ(Ý6ÝQÝdÝiÝ…Ý�ݩݹÝÇÝäÝÞÞ Þ-Þ-Þ-ÞMÞK€ÌèNîNîhî�îsîœî©î¼îÕîÎîíîïòîïï$ï1ïDï]ïVïiïiïvï•ï•ïŸïLL^V¾V¾z¾’¾­¾™¾;¹¾Ù¾ï¾Û¾¿û¾¿'¿,¿8¿H¿O¿\¿g¿s¿~¿†¿‹¿—¿œ¿°¿·¿»¿Æ¿Ë¿Ö¿ï¿ø¿À ÀÀ$À(À(À-ÀFÀKÀdÀyÀ‹À�À›À£À£À£À¥À¾ÀÓÀÞÀèÀóÀõÀÁÁÁÁ Á-ÁMÁMh¶Ì>í>íXí|í_íˆí¡íší¹íÎí»íáíÚíííîÿíîî î>î>îHîNlŸ¶ìì4ì@ìWìhìoìˆì€ì ìÀì¬ìÌìÝìóìßì ííí0í0í:íOLè÷¦ï¦ïÄïÖïÝïüïüïð!ð.ð'ðFðPðPܾñ.».»P»W»b»x»x»Š»•» »±»»Ù»Ý»â»æ»è»ù» ¼¼)¼+¼D¼S¼W¼W¼W¼j¼¼¼‹¼‘¼›¼¦¼´¼»¼ʼ̼â¼ü¼ü¼½Q�#CŽ7Ž7¬7´7À7Ö7ë7ù7888888#818<8R8T8Y8g8r88†8”8R8;EF�F�O�[�z������†�S˜n�~±~±°±Ó±Ó±æ±ê± ²²"²"²/²7²?²T²`²q²v²‡²›² ²¢²»²Ó²Õ²Õ²î²³³(³T<Œ—–a–aŸaªaµaÀaËaÕaóaþabU0ð8NPNPjPpP{PŒP‘P—PšPžPžP¾PÃPùPåPQQ -Q*QCQ/QOQVQ[QeQhQlQqQŠQvQ–Q–Q–Q›Q¬Q±Q·QºQ¾Q¾QÞQãQRR%R>R*RJR`RLRlRsRxR~R�R…R‡R RŒR¬R¬R¬R¬RÄRíRùRV\æùfft{š¹»Úù    ' 2 Q W W¸?iNSNSfSqS”S¬S±S¶SºS¼SÂSÈSÞSËSêSêS T!TT-TPThTmTrTvTxT~T„TšT‡T¦T¦T¹TÁTÓTíTæTùTUXxŒæ. . F N [ { � ” ž ¤ ª ® ² Ô Ô Û Þ ã ò ö ¡#¡'¡,¡,¡3¡6¡;¡G¡U¡Y¡j¡y¡}¡¡Ž¡’¡’¡¤¡´¡¸¡½¡½¡Ñ¡Ô¡à¡ê¡ñ¡¢"¢&¢+¢a¢x¢ƒ¢‡¢˜¢£¢§¢©¢´¢¸¢¸¢¸¢Æ¢Ò¢Ö¢Ø¢Ø¢ã¢ç¢õ¢££££ £,£Yàæ.£.£B£X£X£X£Z£Z£a£c£c£j£l£l£y£{£{£ˆ£�£‘£‘£ž£¥£§£§£¿£Ä£Ä£Ä£Ô£Zàºn†©†©¼©Å©Ó©õ©õ©ªª1ª9ªfªkª”ª±ªͪÓªתúª «%«N«h«Ž«¥«««¯«È«ЫÕ«æ«î« ¬¬¬0¬8¬W¬\¬m¬u¬”¬™¬¡¬§¬«¬¯¬Á¬ɬÕ¬é¬î¬­­­­.­;­O­Z­c­‡­»­ä­é­é­é­ù­®®®=®=®T®Y®Y®p®r®r®†®ˆ®ˆ®Ÿ®¡®¡®¸®º®º®Ñ®Ñ®â®ç®ç®÷®¯.¯3¯3¯3¯3¯:¯n¯¯�¯�¯�¯ª¯Á¯ïïïЯç¯é¯é¯ö¯ ° °"°$°=°[°[°[°_°a°a°a°f°h°h°m°m°w°|°|°š°š°š°¢°¤°¤°¤°¬°®°®°¶°¶°¸°¿°Û°ݰð°±±±±±±/±7±7±z±[ô!ZÎýÎýìýïýþþþþþþ$þ(þ:þlþsþžþ£þÄþÄþÐþØþçþ!ÿ&ÿSÿ[ÿ`ÿiÿtÿ|ÿƒÿ¢ÿ¨ÿÇÿÉÿèÿóÿ -)/66<?CTt†\Z�††ž¥·êõ00<DS��¼ÄÄñö06EZ\goŠ�˜£«¶½ê  *Wf_Œ‘˜·ÖØ÷19TTT€€Œ]` -þþ:Vcz�˜š¹ÁÌߨ÷ý^,#^œ^œmœ€œ˜œ˜œžœ_lºÑ†X†XœX¨X¾XËXÏXÞXýXYY&YY7Y9Y9YjYXY9Y‰Y“Y`�;[NNdjq}�­²¹ÙÛû7<CCCILPXp{†¦°a|i„ΦΦ§§ § §>§K§M§M§M§M§Z§b§u§‰§‹§‹§“§¦§¦§¸§bD„‘¾§¾§̧×§Þ§ý§ -¨ -¨ ¨¨¨c°Ãë^(^(v(�(Œ(º(™(Ò(Ù( )ì(à(2)7)b)g)s)š)Ÿ)¡)À)Æ)â)Ó)ú)*"***6*8*Q*Q*Q*]*d ŸÃ~&~&–&¡&¬&æ&Æ&º& ''9'9'F''„'�'›'�'¼'Â'É'ê'Ü'Ð'þ'(((&(M(M(M(Y(eŒ\{î#î#$$$ $*$9$9$M$Z$e$j$Š$™$¡$¬$´$¿$Ê$Õ$à$ë$ö$ö$%%%f¨6\¥¥>¥`¥`¥¥�¥”¥”¥£¥µ¥Ï¥×¥Þ¥à¥ó¥û¥û¥û¥ý¥ý¥ý¥ý¥¦¦¦¦-¦/¦/¦/¦/¦B¦M¦p¦gD\iv¦v¦„¦Œ¦“¦²¦¿¦¿¦¦Ħʦhv¶¨,¨,¸,½,æ,Õ,Ñ,ö,- ---4-;-R-Y-b-y-y-�-�-¥-¥-»-»-Ñ-Ñ-ç-ç-ý-ý-..).).@.@.W.W.n.n.….….œ.œ.³.³.Ê.Ê.â.ê.õ.//"/%/'/>/E/E/Z0iH€Ž†L†LšL¦L¼L¨LÈLÊLÜLîLöLj´Ž·öLöL MM$M)M>M+MJMPMPM\MtMaM€MƒM…M“M˜M­MšM¹M¼M¼MÈMÝMÊMéMïMïMNN(N;NNNXNk´·à^N^NtN{NŒN‘N¦N“N²N¸N¸NÄNÜNÉNèNëNíNûNOOO!O$O$O0OEO2OQOWOWOjO}O�O£O¶OÀOlPàðÆOÆOÚOæOüOèOP -PP0P;PFPNPm(.œ.œ=œUœUœ[œn”ƒ¤ÖÖ %37@@ERh’—»ÃÈÏåûý)Mgyo¤ç~~°ÄÌ×Þåîðó46=X_hjmŒŒŒš¤±ÑÓíõõ05<RYtv}˜®ÅÈÐÝýÿ!!=TTzŒp€6Ö£Ö£ú£¤¤.¤L¤W¤u¤u¤u¤‚¤š¤œ¤œ¤œ¤©¤Á¤ääѤÞ¤ö¤ö¤¥¥q,8?þRþR%SS1S@SHSrHÓ!ÖùÖùþù úúúú4úKúbú¢ú¾úØúÝúâúíúûû#û6ûLû`ûeûpû�û•û˜û²ûÌûÔûÜûáûûûüü%ü*üDüLüQüqüvüyü“ü­üµü½ü¿üÙüóüûüýý ý'ý'ý,ý1ý<ý<ýGýGýSýSýeý¥ý»ý»ýËýsøi£UUU(U3U8UDUOUTU[U`UkUpUpU�U®U°UµUÀUÅUÅUäUV*V*V=VPVcVvV{V{VŽV¡V´VÇVÌVÌVßVòVWWWW-W@WSWfWfWfWtWt èŒžZžZ¼ZàZæZíZíZôZ[[/[G[3[S[b[t[}[…[�[§[¹[Â[Ê[Ò[ë[×[÷[ \\\ \;\'\[\G\g\}\i\�\‰\©\»\Å\Í\Í\Ö\Þ\ô\ ] ].]2]2]9]>]\]^]c]n]„]„]„]ˆ]”]µ]Ã]Ñ]Þ]ÿ] ^^^^6^E^T^W^{^^¥^©^Ð^Ô^÷^û^û^û^___2_8_C_O_Q_Y___x_ƒ_‘_›_´_·_¿_Ë_Í_Õ_Ø_ñ_ó_ÿ_` ``(`@`L`a`f`x`‡` `±`±`¼`Ç`ß`ë`aaa&a?aPaPaVaaaiawa~a�au8š¤v¨v¨Ѝ�¨•¨™¨�¨¼¨ĨvÐó#ž5ž5À5Ö5â566)6@6S6^6`6€6ˆ6ˆ6—6—6Ÿ6«6Á6Ö6å6ð67 7 7 777"7-7D7F7K7Z7e7r7|7|7Š7wL�Ÿ&&&&&1&G&3&S&U&\&g&s&{&x$‹�Æ%Æ%Ú%û%&y$†‹†%†%š%»%Ã%z<{†%%7%$%C%N%Y%d%o%{%�%{(#)žœžœ­œ¼œÁœÇœ|()/ΜΜÛœéœîœôœ}(/5öœöœ����~(5;��,�;�@�F�$œœœ(œ.œ€4 -ŽŽµ¢Á×Ðï÷�lÑè–Y–Y¬Y¸YÎYÛYßYîYZ ZZ0Z$ZAZCZCZtZbZCZ“Z�Z‚”[|¶¶ÊÑã.0Oa€†��•�¨³»ÃÎÙä ƒ4‘š¨¨$¨*¨.¨M¨n¨n¨t¨„(+1È(È(Ñ(Û(õ(ø(…,H88Vfppzz„–£¦¨±¾¾Øßßù$3BXXXhhzzˆ–¬¬å 4 4 B P c c – É Ï Ï Ï á †ÜH»è è  - +^ +g +m +„ +› +² +ò + ( - 2 = T f s † œ ° µ À à å è   $ , 1 K e m u z ” œ ¡ Á Æ É ã ý    ) C K S U o w w | � Œ Œ — — £ £ µ õ   sôi¢6f6fLfXfcfhftff„f‹f�f›f f f¿fÞfàfåfðfõfõfg3gZgZgmg€g“g¦g«g«g¾gÑgäg÷gügügh"h5hHhJhJh]hphƒh–h–h–h¤htœè‹ÎkÎkìkllll$lDlIl_lwlclƒl’l¤l­lµl½l×lélòlúlmmm'm9mCmKmPmkmWm‹mwm—m­m™mÍm¹mÙmëmõmýmýmnn$n=nOn^nbnbninnnŒnŽn“nžn´n´n´n¸nÄnånónoo/o=oKoMoMofouo„o‡o«o¯oÕoÙopp'p+p+p+p1p?pIpbphpspp�p‰p�p¨p³pÁpËpäpçpïpûpýpqq!q#q/q1q9q?qXqpq|q‘q–q¨q·qÐqáqáqìq÷qrr0r5rGrVror€r€r†r‘r™r§r®rÀru4š£ƸƸÚ¸߸å¸é¸í¸ ¹¹vÌô#ÎFÎFðFGG0GLGYGpGƒGŽG�G°G¸G¸GÇGÇGÏGÛGñGHH H3H9H9H9H>HCHRH]HtHvH{HŠH•H¢H¬H¬HºHwH�žV6V6j6v6�6—6ƒ6£6¥6¬6·6Ã6Ë6x ‹�66*6K6S6y †ŠÖ5Ö5ê5 66z8{…f5f5‡5t5“5ž5©5´5¿5Ë5Ñ5{$#(î¬î¬ý¬ ­­­|$).­­+­9­>­D­}$/4F­F­S­a­f­l­~$5:n­n­|­‹­�­–­ V¬V¬e¬x¬~¬€0 Þ$Þ$%ò$%'% %?%G%�hÑçÆjÆjÜjèjþj kkk7k;kAk`kTkqksksk¤k’kskÃkÍk‚�[{)))!)3)R)X)_)~)€)Ÿ)±)Ð)Ö)Ý)Ý)å)í)ø)* ***)*4*S*[*ƒ0‘™f¸f¸t¸z¸~¸�¸¾¸¾¸ĸ„ð9ðð((22<N[^`ivv�——±¸ÎÎÜëú  22@Ndd�Öììú   N � ‡ ‡ ‡ ™ …ØHº    º ½ Ì Ì Ù ê í ð ð õ ú  +  - -! -2 -5 -8 -8 -= -B -K -V -\ -k -~ -ƒ -˜ -£ -­ -­ -Ö +# +6 +; +P +[ +e +e +Ž +™ +¤ +Í á -ì - ) G M R ] { ‚ ‡ › Õ Ú à æ í ò ò ø þ    A G L j q q q v y  … Œ ‘ ‘ — � ¢ ¢ ¸ Ò à õ û   + 2 4 N U U U U U U [ ` d f i t € ƒ … ‰ ‰ Ž Ž Ÿ ± ‡$�†®ì®ì¼ìÑì×ìˆ`ÈÜØ0Ø0ø01111!1*1/14141E1I1P1h1k1w1‰Tï2222)2;2F2T2a2o2�2Œ2š2 2¦2Š$d©0606U6a6k6q6{6�6‹6™6£6µ6¿6Å6Ï6Õ6ß6æ6ò6ø67,7;7>7@7J7\7f7{7{7~7ˆ7�7¢7²7½7Â7Ö7é7ó7888&8.8<8M8]8n8{8{8ˆ8ˆ8�8×8‹¼+V 4 484:4F4J4W4Z4t4t4t4z4~4†4‘4¥4±4³4³4¼4¾4¾4Ç4É4É4Ò4Ô4Ô4Ý4Ý4æ4ì4ï4ù4 -5555„5Œh+X3X3h3o3{3�3‰3—3ª3¶3Í3Ú3Ú3Ý3ë3û3444�@ 3333'333C3H3K3O3W3ŽHVdˆ5ˆ5�5¤5©5·5Ì5Ò5Þ5ï5ï5ö5*6�0ÀȘ0˜0¦0°0»0Æ0Ì0Ò0�4 ¨2¨2¼2È2Ö2Ú2ò2õ2ý2‘$êïà1à1é1õ1ú1’,ãê°1°1¾1Å1Õ1Ø1Þ1“,Üãx1x1†1’1¢1©1¯1”8¶À`0`0n0u00Œ0�0‘0—0•t ÕîÈTÈTåTôTôTôTUUUU#U%U%U+U-U-U3U5U5U[>[D[I[I[O[T[T[Z[_[_[e[j[j[j[r[r[‹[™[³[É[É[Ë[Ë[Ô[Ú[ß[ß[ß[ç[ç[ð[ÿ[\\\\#\(\(\(\0\2\2\;\;\;\D\S\g\i\i\r\x\z\z\€\†\†\Ž\—\�\©\©\°\Ä\Æ\É\Î\Ö\Þ\ã\ã\é\í\ò\]]]]]']N]N]T]b]s]]†]”]£]»]Á]Æ]Æ]Ë]Þ]ê]ò]^ ^^#^*^,^5^5^;^I^U^h^{^�^•^—^ª^¯^¯^Ì^Ì^Þ^ä^í^ó^ü^ -___"_(_*_5_G_Z_Z_n_z_Œ_‘_�_£_¦_½_¿_Â_Ò_Ü_ß_ß_î_```$`*`-`D`F`I`Y`]`e`s`x`}`}`ƒ`‹`�`�`–`–`¤`ª`°`º`Ä`ç`ê`ì`ö`ö`ø`aa -aaaaa"a"a'a2a7agDgRg]gbghgpgugugugugugugugugugugŽg”g�g£g«g°gµg¾gÉgÒgÚgßgßgßgågígògògögûgûghhh+h1h1h:hNhNhTh]hqhqhzh|h‚h‹hŸhŸh¨h¨h¨h­h²h²hºh¿h¿hÜhêhöhÿhiiiiii0i9i?iQi[i[icicikimimi†i�i™i›i›i›i¡i¥i§i§i§i§i¬i²i¸i¼iIm–ĉ¶pJpJ–J§J¬J³JÂJÂJÊJÝJáJæJûJýJKK K K#K/K6K:KAKIKKKSK`KnKvKxK{K‰K•K£K«K³KÁKÅKÓK—<ƒŽL>L>Z>a>l>t>{>�>‡>‡>�>˜P®¾ÎíÎíÜíîíôíüíîîî/î5î8îtî™\¾Ñvîvî„î–îœî¤î¶î¼îÅî×îÝîæîøîþîOïšhBXÐ;Ð;à;ç;ó;ú;<<<<)<2<@<L<U<^<g<m<u<›Xt†ÜIÜIòIþIJ -JJ+J1J=JEJPJVJYJcJœHŽœ”>”>®>µ>¾>Ê>ß>ç>í>ó>õ>õ>?�TARhphpvp„p�p–p¦p·p¼pÙpßpæpípûpqUqž@¢®ŽíŽíží¯í¸í¾íÂíÅíÍíŸXo�ìì,ì:ì@ìFìWìeìsì…ì‰ì�ì�ì ìªì H”¢6í6íFíZícíií{í{íí‚íŠí¡H†”ÞìÞìîìí íí#í#í'í*í2í¢tîPmPmnmrmvm~mˆm‹mŽm�m¡m¥m­m¶mÂm×mèmïmömömnnn£hLb„H„H¦H°H³H³H½HÐHÒHßHáHìHIIII#I+I.I@I¤´œE???&?&?@E@R@Y@l@t@|@�@�@™@¥@­@²@²@Ê@×@ß@ä@ä@ü@AAA!A-ACANAqAuAƒA‹A�A�A¨AÂAÌAØAàAåAåABB!B&B>BJBYB^BmBzBBBB‚B‡B‡B‡B¦B²BÃBÅBÈBÍBÍBÍB×BéBðBÿBCCC#C,C4C>C>­`Xlx<x<Š<‘<“<Ÿ<¦<µ<À<Ì<Ð<Þ<ð<ü<= ==®,ELTHTHbHkHyHH¯”0:®:®\®f®r®w®‡®�®¢®¶®Ä®Ò®é®ñ®û® -¯¯ ¯'¯*¯*¯*¯,¯;¯E¯N¯V¯Y¯k¯°P1Aˆoˆo–o§o³oÎoÓoóoõop+p+p3p:pap±Ð7NN0N4NuNƒN‰N£NÂNÐNÐNÕNÙNàNëNöNO O OOOO(O5O7ODOFOHOHOHOPOPOPOXO`OhOpOtO~OÊO²`äø`M`MvMvMzMM’M•MšMšM¤MªMªM»M½MÇM³LøÈMÈMÜMàMåMðMðMúMNNN N´˜7YÐOÐOäOèOñOôOýOPPPAPEPJPMPVPfPmPpPxP{PˆP�P˜P P§P·P·PÃPµ,&-&ð&ð4ðCðGðJðPð¶|YtÈPÈPÚPÜPàPéPõPQQQBQFQKQWQjQtQwQ‚Q…Q�Q—Q·<ÎÙØLØLìLðLõLÿL -M MMM¸<Ùä M M4M8M=MGMQMTMXM`M¹$@(@(J(R(W(º,!X(X(f(w(ˆ(‹(‘(»`iýÞ·Þ·ø·¸!¸!¸'¸/¸7¸?¸G¸M¸Z¸Z¸`¸e¸e¸k¸p¸p¸v¸{¸{¸�¸†¸†¸Œ¸‘¸‘¸—¸œ¸œ¸¢¸§¸§¸­¸²¸²¸¸¸½¸½¸Õ¸è¸î¸ó¸ó¸ü¸ ¹ ¹ ¹'¹)¹)¹0¹2¹2¹9¹;¹;¹B¹D¹D¹K¹M¹M¹T¹Z¹\¹\¹c¹i¹k¹k¹r¹x¹x¹€¹†¹Œ¹”¹”¹”¹”¹ ¹¨¹°¹¸¹À¹È¹Ð¹Ö¹î¹ý¹º -º -ººº º º$º,º3º;ºCºGºMºUº\ºdºlºpºvº�º‡º”º º¦º®º²º¹ºÁºÉºÍºÓºÛºâºêºòºöºüº» »"»3»8»;»á»¼`ÕiÖ³Ö³ð³ù³´´ ´'´/´7´?´E´R´R´X´]´]´c´h´h´n´s´s´y´~´~´„´‰´‰´�´”´”´š´Ÿ´Ÿ´¥´ª´ª´°´µ´µ´Í´à´æ´ë´ë´ô´µµµ µ!µ!µ(µ*µ*µ1µ3µ3µ:µ<µ<µCµEµEµLµRµTµTµ[µaµcµcµjµpµpµxµ~µ„µŒµŒµŒµŒµ˜µ µ¨µ°µ¸µÀµÈµÎµæµõµÿµ¶¶ ¶¶¶¶¶$¶+¶/¶7¶?¶E¶M¶T¶\¶d¶h¶n¶y¶¶Œ¶˜¶ž¶¦¶ª¶±¶¹¶Á¶Å¶Ë¶Ó¶Ú¶â¶ê¶î¶ô¶ÿ¶··+·0·3·Ù·½0 þ®þ® ¯¯¯#¯)¯¾$°'°'¿'Ø'Þ'¿pýæ»æ»ú»¼¼(¼,¼3¼:¼C¼R¼T¼T¼h¼j¼s¼y¼y¼y¼y¼�¼À`¢æ°æ°±±±±$±&±2±2±?±A±N±P±\±\±r±{±{±†±�±œ±§±­±²±´±À±Ç±Ö±á±ç±ì±î±ú±ú±²²#²)²/²5²9²9²f²m²ƒ²�²•²›²¡²£²£²±²ÁP¢²¶²¶²Ì²Ï²Ò²ß²å²å²ò²õ²ø²þ²³ -³Â”²Ó³³*³6³:³>³E³L³[³f³l³q³s³³†³Ž³”³š³ž³ž³­³´³¼³Â³È³Ê³Ê³Ö³Ã,!(®¯®¯·¯Å¯Ë¯Í¯Ò¯Ä¸«®y®yÈy×y×yÚyãyïyïyûyz1zCzUzYziz‰z›z¡z´z½zÁzÇzÐzÐzñzõz{{0{B{H{[{m{y{{{‡{�{“{™{¢{¢{¢{¢{´{Ê{Ð{Ü{ñ{ø{| |!|(|(|(|6|D|N|Q|_|i|l|~|ƒ|ˆ|˜|›| |°|³|·|À|È|Ú|â|ë|}}}(}/}7}I}O}^}o}o}v}v}v}„}’}œ}Ÿ}­}·}º}Ì}Ñ}Ö}æ}é}î}þ}~~~~(~0~9~9~D~[~s~w~ƒ~›~£~©~µ~¾~Â~Ê~Ó~Ó~Ó~ì~ô~ú~"(...5GS[aggi{Å|Æ’Æ’Ô’é’ð’û’“Q“m““““™“¥“®“¶“¾“À“Æ“Ì“Ø“à“æ“è“î“Æ0 Ö®Ö®ä®ë®ó®ø®þ®Ç<(3֯֯߯߯í¯ñ¯ø¯û¯°È<3>°°°°°!°/°2°7°É<>I>°>°G°G°U°Y°`°c°h°Ê8ISn°n°w°w°z°ˆ°–°™°ž°Ë @D–½–½¤½°½Ì$ ø'ø'( ((Í$ à'à'é'ñ'ö'ÎD$v;v;“;›;­;É;Ô;æ;í;þ;<<< <><><S<U<U<a<i<m<z<z<†<Ž<’<Ÿ<Ÿ<Ÿ<¬<²<Ã<Ã<È<à<ï<ô<ú<= -= -=='=6=;=A=L=Q=Q=_=h=t=|=„=Œ=�=•=š=£=µ=¾=Ï=ß=ß=ä=ì=ô=÷=ý=ý=>>>> >>>W>n>{>ƒ>‹>—>£>©>°>¹>½>À>Ì>Ò>Ù>Þ>Þ>ì>ü>ü> ? ???"?1?6?6?=?H?N?V?\?g?l?l?{?†?˜?ž?¦?¬?±?¼?Î?Ô?Ü?â?ç?ç?û?@ @@@$@*@*@L@s@x@x@Œ@’@¨@¹@¿@Ä@Ý@ã@ó@û@A AAA"A(A>AOAUAZAsAyA‰A‘A™AŸA¤A¤AºAÀAÖAçAíAòABBB B(B.B5B:B:BPBVBlB}BƒB…B”BšB¤B¬B´BºBÁBÁBÁBÓBÜBíBýBýBCCCC)Ceseseve{e~e~e…eœe£e°eµeÄeÑeäeäeøeüeff4f9f9fIfQfafkf{f…f•f¡f¦f¦f¶f¾fÎfØfèfòfggggg'g5g?gDgQgfgfgkgug„g‰g�g”g”g™g£g²g·g½gÂgÂgÈgÎgÓgÓgâgõghhh-h5h;hDh[hoh€h�h’hªh½hÔháhéhühi -iiii!i!i!i!i!i-i-i-i6iOidili‡i˜i¥i§i»iÀiÀiÀiËiÙiÞiÞiåióiøijj.j:j@jOjSj\jej‚jŽj”jšj­jµj½jêjûjk -kkkkk$k2k7kJkVkbkhklkukzkzkzkzkzk’k—k—k—k—k—k¨k¨k¨k¨k¨k¨k¨k¨k¨k¨k±kÊkßkçkll l"l6lBlGlGlGlPljlvl�l©l©l®l®l®l®l®l®l®l®lÃlÈlÈlÈlÙlälélélélmm.m2mJmZmbmjmŸm¨m¬mÄmÔmÔmÔmÔmÔmöm/n8n„F„[„]„h„p„…„…„¡„©„°„¶„º„¾„̈́ބô„………)….…:…E…J…J…k………Š…’…¡…©…±…Æ…Ë…Ö…Þ…ó…ø…††&†.†C†O†T†`†k†p†p†p†p†p†p†{†{†{†{†{†{†{†{†{†{†{†{†††¦†ÆÓ†Ù†á†ô†ù†‡ ‡ ‡‡&‡,‡4‡<‡>‡^‡f‡o‡w‡‡„‡‰‡�‡›‡Ç·Ö‡å‡ï‡ˆ ˆˆˆˆˆ#ˆ,ˆ/ˆ9ˆGˆYˆ[ˆmˆˆˆˆŠˆ�ˆ¬ˆ±ˆ±ˆºˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆʈֈ∉‰‰=‰B‰J‰Q‰^‰f‰o‰w‰~‰ƒ‰ƒ‰‹‰“‰¯‰·‰º‰¼‰̉Ö‰Ö‰Ö‰؉ë‰ü‰ÿ‰Š -ŠŠŠŠŠ%Š,Š9ŠRŠYŠ^ŠvЀЛдмŠÉŠâŠéŠéŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠöŠ‹ ‹‹ ‹ ‹(‹0‹=‹B‹B‹B‹F‹K‹K‹[‹`‹`‹`‹v‹‚‹”‹§‹­‹µ‹Ê‹Ñ‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Û‹Û‹ö‹ü‹ -Œ -ŒŒŒ!Œ/Œ<Œ<Œ<Œ@ŒKŒiŒwŒƒŽÑø{†Ž†ŽœŽ§Ž®Ž¹ŽÄŽÛŽæŽíŽýŽ���%�?�F�O�V�Y�e�n�u�x�}�“���¯�µ�Á�Ö�Ý�å�ñ�� � � ��)�3�6�D�N�Q�c�h�m�}�€�…�•�˜�œ�¥�­�¿�Ç�Ç�Ç�Ý�ç�ù�ÿ� ‘ ‘'‘/‘A‘G‘V‘g‘g‘n‘n‘n‘|‘Š‘”‘—‘¥‘¯‘²‘đɑΑÞ‘á‘æ‘ö‘ù‘ý‘’’ ’(’(’4’B’B’E’P’n’|’Å’Ò´pÙ——0—H—O—V—a——’—•—ž—¥—­—À—Ñ—Ý—í—û—þ—˜˜˜&˜,˜<˜A˜P˜Z˜p˜|˜‘˜™˜¤˜¯˜º˜ŘИܘè˜û˜™™/™F™N™W™_™‡™�™•™Ÿ™Ÿ™¬™¿™Å™Í™à™æ™î™î™ü™šš.š4š<šOšUš]š]š†š†šŒš­š±š´š¿šÙšåšõš›1›E›M›W›v›Š›Š›œÓ`pî“î“”&”+”B”T”Z”d”r”z”‰”Ÿ”¡”ª”À”ΔÖ”Þ”à”ë”ö”ö”þ”•••"•+•3•6•?•M•^•p•s•x•‹•£•·•¿•¿•ѕԕٕ앖– – –A–D–I–\–b–w–�–�–¤–º–––Í–ì–ó–þ–—ÔØ³bb/bAbObXbzb„b’b¯b¼b¼bÆbÆbÞbîbîbùbc ccc)c0c;cScYc\cqcvc�cŒc¦cÁcÕcöcd ddd"d/d5dVdZd`dhdmdud–dšd d¨d­d­dºdÀdÛdÇdçdëdñdùdþd e#e)e1e@e[eGegekeqeye~eŸe£e©e±e±e¶eÃeÉeêeîeôeüef%f)f/f7f7fDfJfkfofuf}f…f¦fªf°f¸f¸f¸fÍfÍfÍfÍfØfâfëf gg(g-g>gRgWgWgbgjgrg{g›g¨g·gÆgàgågågðgøghhh(hBhThfhqhvhvh�h—h¬h¸hÉhÎhßhóhóhûhóhiii'i,i,i;i@i@iQiViVigililiiŽi“i“i¦iµiºiºiÜiáiáijjj*j/j/jQjVjVjsjšjŸjŸjÁjÆjÆjãj -kkk1k6k6kSkzkkk¡k¦k¦kÃkêkïkïklll1l6l6l6lQlVlVlVlqlvlvlvl‘l–l–l±l¶l¶l¶lÑlÖlÖlÖlñlölölölmmm'm,m,m=mBmBmNmYmnmsmsmm˜m�mÀmÇmÑmÖmçmñmnnn'n2n:n?n?nCnGnNnXnbnbnunznznzn~n—n n nÃnÈnÈnÐnänínoo o*o5oGoSo\oaoaoaoro�ošo¤o¯o´o¿oÇoÌoÌo×oßoèoóopp3pGpLpLpWpjptpp p¬p½pÂpÓp×pÜpÜpìp÷pÿpqqq'qAqSqeqpquq€qˆq�q˜q¥q°qÊqÜqîqîqîqîqóqøqøqrr;rYrYrcrwr�rƒr�r—r´rÅrÏrÚrýr s0s;sSscshshsssxsxs€s‹s�s�s˜s£s¨s¨s°sÎs¸sæsësësóstûs)t.tBt.tZt_t_tltqtqtyt~t~tŠt›t­t²t²tÆt²tÞtãtãtëtðtðtuuuu u u:uJuOuOuiuyu~u~u˜u¨u­u­uÇu×uÜuóuÜu vvvv v\vJv vtvyvµv£vyvÍvÒvÒvávñvövövwwww)w7wŒIŒUŒcŒ�Œ™ŒªŒ¸ŒëŒ÷ŒüŒ�*�6�G�L�]�|�ª�Ð�Ó�ã�å�å�é�ŽŽŽŽ$ŽRŽrŽrŽrެ�Õ0.¯.¯7¯=¯E¯T¯c¯h¯Ö0!n¯n¯|¯‚¯†¯•¯¤¯ª¯×,¶½¶½¿½É½Ù½ä½ä½¾ØØ4fþ¾þ¾¿¿¿B¿B¿_¿r¿…¿˜¿�¿�¿»¿É¿Ü¿ï¿÷¿÷¿ù¿ù¿ù¿ ÀÀÀÀÀ(À;À;À;ÀMÀYÀlÀ‚À‡ÀŽÀ•ÀªÀ½ÀÄÀÄÀÇÀìÀÙ¤/T®ú®úÈúÎúÕúÝúåúèúóúûûûûû-û-û0û8ûNûQû_ûbûeûlûpûxû†û˜ûžû¦ûÛûÚD¬9p„p„ˆ„²„º„º„Ȅۄô„÷„………………%…'…'…/…1…1…9…9…B…H…M…M…V…b…f…k…q…v…v…~…‡…�…’…’…—…£…»…Ú…Ý…ò…†††††††#†%†%†%†-†/†/†/†7†9†9†D†D†J†O†V†a†q†q†q†q†x†ƒ†“†“†ž†¢†¨†À†Î†á†í† -‡ ‡‡&‡.‡7‡B‡B‡M‡S‡X‡_‡j‡o‡v‡�‡�‡“‡¨‡°‡¶‡Ø‡ä‡ê‡ï‡ö‡ˆˆˆˆˆ ˆ ˆ'ˆ2ˆ=ˆ=ˆ=ˆ=ˆ”ˆÛDýÊæ¥æ¥¦¦¦ ¦$¦*¦<¦B¦Z¦`¦~¦’¦�¦£¦Å¦Å¦Õ¦ê¦ì¦ï¦û¦§ §§!§'§-§9§9§;§M§S§X§X§o§o§�§�§ §­§²§²§É§Ò§á§÷§¨¨¨+¨8¨J¨P¨Z¨f¨s¨u¨u¨}¨‚¨‚¨Š¨�¨�¨—¨œ¨œ¨¤¨©¨©¨¯¨´¨´¨»¨À¨À¨Ç¨Ì¨Ì¨×¨Ü¨Ü¨ç¨ì¨ì¨÷¨ü¨ü¨©©©#©)©,©3©6©A©H©K©]©_©e©p©p©p©z©’©§©·©È©Î©ß©å©ê©ô©ªª%ª+ª<ªGªQª`ªoªuª€ª†ª›ª¡ª²ª½ªÃªÓªÓªãªöª« -««!«'«8«C«H«e«z«ˆ«˜«¤«¶«Á«Ð«Ò«ä«ì«ñ«ø«ü« -¬¬¬$¬*¬5¬;¬=¬J¬W¬a¬†¬†¬Œ¬“¬Ó®Ü4¤í†¢†¢ ¢¤¢¼¢Ä¢Ì¢Ö¢Ú¢á¢ç¢û¢££ ££!£)£4£?£A£Y£`£g£r£}££Š£•£—£££¬£¬£Â£ã£é£ï£¤¤¤!¤'¤'¤/¤3¤>¤C¤U¤`¤d¤r¤t¤x¤‡¤‡¤‡¤˜¤˜¤�¤¯¤µ¤#¥Ý˜Š¬8ƒ8ƒFƒXƒ\ƒdƒlƒwƒ‚ƒŠƒ•ƒ ƒ¥ƒ½ƒÄƒËƒÖƒáƒãƒîƒùƒûƒ„„„&„.„.„2„i„Þl ¤ޑޑ«‘²‘º‘őݑç‘ç‘ÿ‘ ’$’:’H’L’l’€’‡’Š’£’­’¾’À’Ñ’Ñ’Ø’ß’è’í’ò’ù’““!“1“5“5“?“U“Y“Y“k““““““𓥓¬“µ“À“ǓГۓâ“â“í“ ”””B”B”H”O”^”f”t”{””�”“”“”“”¥”­”Ó”á”á”å”ú”•••2•7•E•T•\•j•u•y•~•†•Š•™•›•ª•¬•»•½•̕ӕٕí•õ•– -–––)–.–L–T–b–i–m–u–ƒ–Š–Ž–ª–²–½–Ã–Ã–Ã–Ì–×–ç– ———+—3—>—C—K—V—b—f—q—v—ˆ—�—›—›—›—›—©—¸—Õ—á—é—ù— ˜'˜+˜Z˜@˜j˜j˜t˜{˜Š˜™˜¡˜¯˜¶˜º˜¼˜Ë˜Ó˜á˜è˜ì˜ì˜î˜™™™™™™$™6™>™V™‚™�™”™²™¹™À™Ë™á™ã™ê™ý™šššš š3š;šIšPšTšTšTšTšbšmš|š„š’š�š¡š¡š¦š®š²šÁšÃšÒšÔšãšåšôšûš›››+›2›6›F›Q›V›t›|›Š›‘›•›�›«›²›¶›Ò›Ú›å›ë›ë›ë›ô› œ#œ3œ>œSœXœcœsœ•œ�œ¨œ·œ¿œÊœÏœ×œâœîœòœýœ���'�'�'�'�;�K�`�m�q�…�–�«�¸�¼�Ê�ß�ï�ž ž8ž:žEžMžMžVžkž|ž“ž¬žÅžÇžÒžÚžÚžÚžôžŸŸ%ŸBŸQŸ}Ÿ„Ÿ„Ÿ”Ÿ¨ŸÂŸÂŸÆŸÜŸëŸ  ( 0 0 R R e € ‰ ž ¾ Í ù ¡¡6¡F¡^¡^¡v¡v¡‚¡š¡²¡»¡»¡»¡Ç¡Ø¡ð¡ù¡ù¡¢ ¢¢¢�¢ßPíý&¥&¥8¥M¥^¥q¥x¥€¥�¥˜¥©¥¯¥á¥àSv v ™ ® ³ » à Ë Ø Þ ç í ò ú     - - / K Q S U b b b g p x � ‰ ‹ “ › £ ° ¶ Á È Ø ã ï    % 6 = E E Y i q t Ú ádVïVïbïyï‰ï�ï•ï™ï£ï­ïµï¸ï¾ïâp6 6 L W b p { � ’ ˜ © ¯ » Ò Ò ä õ     m ãœTwÞûÞûúûÿûüüü!ü1ü9üAüFüQü[üaülü|ü„ü”ü›ü£ü«ü³ü»üÀüËüÙüÙüïüä”*KVÇVÇ^ÇbÇnÇÇ�ǑǜǮǹÇÄÇëÇëÇÈÈÈÈ È&È9ÈBÈPÈaÈ}ȂȟÈå f*îÀîÀÁÁÁ&Á(Á(Á9Á9Á9ÁAÁIÁ[Á[ÁÁ�Á�Á›Á�Á�Á¨Á­ÁÇÁÌÁÌÁÌÁáÁãÁðÁòÁÿÁÂÂÂÂ%Â4ÂAÂCÂWÂdÂdÂdÂmÂ’˜ ¢¯¯ÂÄÂÄÂÄÂÏÂÙÂñÂöÂöÂöÂà -ÃÃÃ"Ã4Ã?ÃDÃDÃKÃOÃ]ÃdÃmÃtÆÃ�ÔÃ�Ã¹Ã¾Ã¾Ã¾Ã¾ÃÆÃÑÃßÃßÃÿÃÿÃÿÃÄÄ#Ä6ÄIÄKÄKÄKÄ^Ä^ÄeÄlÄqÄwĉēĮÄ×ÄÝÄÝÄñÄöÄÅÅÅ-Å:ÅEÅLÅPÅPÅPÅPÅ[ÅeÅs੮ÅÇÅÇÅÕÅÿÅÆ#Æ:ÆMÆRÆRÆRÆZÆeÆwÆ‚Æ‡Æ‡Æ‡Æ™ÆÆÆÌÆÌÆÌÆ×ÆáÆíÆøÆúÆúÆúÆÿÆ Ç ÇUÇæ¤>n n † ˜ ž ª µ à Ï æ ñ !!! !%!8!>!G!M!_!e!p!x!†!“!Ð!ç’ÐÆÆäò -(.39GN]bnŒ—ª±Ëèô'CL[cpy~�½ÂÊãõ  %kF{¶‘ÆÉé}èP™iöËöËÌÌÌ&Ì0ÌHÌXÌaÌgÌkÌoÌq̴̶̙̦̬̰̺̉̾̾ÌáÌåÌëÌëÌòÌÍ)Í<ÍOÍUÍ\ÍgÍqÍuÍxÍÍ…Í‹Í�ͧͬ͡ͳÍÀÍÂÍÔÍÖÍÛÍèÍêÍüÍüÍüÍüÍüÍÎ)Î5ÎOÎOÎdÎpÎ�αÎËÎÐÎçÎìÎúÎÏÏÏ-ÏBÏHÏXÏeÏ}Ï„Ï�ϛϨϴϴϴϺϽÏÀÏÙÏßÏóÏùÏÐ Ð ÐÐÐ*Ð*Ð0Ð>ÐUÐ[Ð^ÐaÐhÐoÐvÐvÐ{ЈЕЕЛЩÐÀÐÆÐÉÐÌÐÓÐÓÐäÐéÐöÐÑÑ -ÑÑÑ!Ñ(Ñ3ÑGÑGÑaÑfÑmÑuÑ|Ñ‹Ñ�јѰѵÑÞÑéÑðÑøÑÒ%Ò%Ò@Ò@ÒZÒoÒvÒ˜Ò«ÒÏÒÑÒÛÒýÒýÒýÒÓ$Ó2ÓJÓNÓ#Ôé S’Þ Þ  09;HHJdjln{{{{Ž—Ÿ¨°·½¿Ûßñ -#00DKR[ir’˜œ¡¦©³¶ÆêP&¾ï¾ïÊïáïñïõïýïð ððð ð&ðë4îøîøùNù?ùùùbùjùì ÐÏ~~›¦¹¦Óááñú;GSYd††™¤ª±¶¶ÉÔßæîûû "''':?RX_tˆˆ���¢¢§®¶½¿ÇÎÎÝãð÷ú$3>EG[mrwwwŠ�ž¥¬ÁÕÕÚÚâøý)8JYlp�›ªÇÒ׿ý +;=KXho„‹—¨¿ÁÍØÚÚåù '<CS_€‡“´´´¼ÇËÓ×âéù#*5>FKKZgu€‹™Ÿ¥«´»ÍÚâîü)+7X^djs„®·ÁÎæíù##05GMMMMí€Ïë4FLXoo�‡’¢®·½ÃÎÜéõBî4-6VðVðdð„ðŠð�ð�ð–ðïH f*f*t*~*ˆ*˜*�*£*¯*±*Ã*Ã*Å*õ*ðˆ{™®Ê®ÊÀÊÕÊßÊèÊêÊñÊË ËËËËË/Ë2Ë2ËSË^Ë`Ëyˀ˄Ë�Ë£ËöËñ$ .¾.¾7¾K¾P¾ò$޾޾—¾¶¾»¾óp4¾¾¾¾Ì¾Ö¾ß¾æ¾í¾÷¾÷¾ý¾ô$ ¾¾¾(¾.¾õ$V¾V¾d¾ƒ¾‰¾öÐK{¦È¦ÈºÈÏÈÞÈâÈðÈöÈÉÉÉ É*É5É<ÉLÉvÉ|É�ɅɕɕɫɭɷɨÉãÉåÉþÉÊÊÊÊÊ(Ê0ÊCÊ­Ê÷ø€ºf/f/„/‡/�/¡/©/º/Ç/Í/Ò/Ò/ß/è/î/þ/ 0 0&020>0>0L0_0j0n0000„0„0�0Ÿ0²0¸0½0Ñ0×0ß0ñ0÷0ù0111!1&1,12191E1L1N1S1[1]1b1n1p1u1}11„1Œ1Ž1“1›1�1¢1¬1®1³1½1½1½1Í1Í1Í1ä1ê1ð1û122!2'22262<2G2`2k2v2|2‰2Ž2“2“2¨2°2¸2Ö2á2ì2ò23 -333)30393E3K3W3[3`3p3{3†3ˆ3Ž3›3 3¥3¾3É3Ô3Ô3Ú3ç3é3î3÷344&4,49494=4B4B4S4U4U4h4j4j4}444’4”4”4§4©4©4»4»4Á4Æ4Æ4Ý4ñ4æ4þ45 555/515J5J5d5g5i5u5‡5—5£5º5Ô5Ù5í5ý56666/6A6L6T6\6`6n6t6y6y66“6£6¨6¨6®6´6¹6¹6¹6¿6Î6á6î6ò6÷6÷6û67777767L7X7X7^7k7m7x7„7“7¦7¦7³7¿7¿7¿7¿7Ã7È7Ù7ë7ö7þ7888 8-898?8L8L8c8s8s8‡8“8•8ž8ª8Á8Á8Ç8Ô8Ö8è8è8ó8ó8ó8ó8ó8o;øŒ/nùnùŽù–ùšù¨ù®ù´ùáù÷ù úú0ú6úBúGúUútú}ú�ú�ú–ú–úœúœú¬úù  Cö*ö*+++.+F+L+Z+k+s+z+�+¶+Ð+Ý+ê+ú+,,,5,<,B,P,X,n,y,,…,¨,ú,JÖ!Ö!ó!û!""("."9"P"_"j"n"y"…"�"œ"³"Ê"Ý"ô" ###+#1#B#H#X#X#p#p#•#•#š#š# #¬#¹#Å#Ú#ñ#$ $$)$@$X$y$y$‚$‡$‡$‡$‡$—$ $¨$­$»$É$Ù$Þ$Þ$ö$ö$û$û$%%"%(%4%D%O%Y%]%f%%‚%’%Ÿ%¯%¿%Æ%Ì%Ø%à%ë%ò%ö% &&&'&-&=&M&M&z&œ&¨&°&»&Â&Í&Ï&Ú&Ú&ê&ï&ï&ù&'''*'7'D'N'R'['t'w'‡'Ž'“'“'§'§'¬'°'À'É'Û'á'ã'ã'ñ'÷'ý'(( (0(0(0(5(M(M(\(_(s(‘(œ(Å(×(â(ô(ø(ý())&)>)E)I)O)W)b)e*ûC€®,®,Ê,Ñ,é,- ----&-2-=-K-[-k-r-y-Ž-£-£-·-Ï-Ü-ë-ø-..%.3.:.A.V.k.k..Œ.š.ª.°.Á.Á.Ç.Õ.æ.ó./e/üˆwÕöüöüý#ý*ý2ý5ý5ýEýPýPýSýZýaýhýnýtý{ý�ý’ý’ý”ý�ý©ý¯ýÕýÜýßýïý÷ýüýüýþ þþ þ&þ1þBþBþKþPþZþaþhþpþvþxþ†þ�þ þ¯þ»þÈþÈþÈþÈþÎþàþæþ÷þÿ,ÿ@ÿGÿQÿYÿ`ÿ`ÿiÿpÿÿ�ÿšÿšÿšÿ®ÿÂÿÒÿÕÿ�ý|Ôo¶ã¶ãØãßãîãùã ä ä(ä*ä*ä1ä[äeäeätäƒä˜ä£ä£ä²ä¹äÉäÏäíäøäúäåå$å4åFåOåZå_åeålå‘å–å¤å­å­å´åÃåÚåÚåéåïåæ -æææ!æ'æ/æUæ^æeæjæuæ�æ�æ¤æ©æ±æ½æÏæÏæææíæõæççç&ç&ç5ç;çOçXçhçwçŒç•ç¥ç¸çÃç×çøçèè è6èRèdèjèuè�è‘è¡è¦è¯è¯èÁèÅèÑèèèééé'é3éCéSéeékéképéréréwéwé†éŒé’é’é–éìþ¼iÔ&Ô&ÔDÔOÔZÔ€Ô€Ô‚Ô–Ô¡Ô§Ô¸ÔÇÔÖÔãÔãÔéÔîÔóÔÕÕ$Õ(Õ:ÕKÕSÕZÕuÕƒÕƒÕƒÕŽÕªÕ•Õ»Õ²ÕÅÕÇÕãÕÏÕëÕùÕùÕûÕÖÖÖ$Ö-Ö4Ö7ÖNÖYÖmÖ`ÖuÖ{քքք֤֤֗֜֜֯ÖÄÖÍÖÍÖÍÖÍÖéÖ×× × × ×&×+×+×7×T×r×w×|×|׈ץ״×Ã×Ë×Ð×Ö×Û×Û×â×é× Ø)Ø+ØHØ]Ø]ØcØcØw؀؀حظؽØÑØÜØäØìØüØÙÙ#Ù#Ù5Ù;ÙcÙlÙlÙnÙuÙzÙzَٟٙ٨٨ٻÙÏÙáÙìÙúÙÚÚ/Ú8ÚCÚHÚOÚWÚjÚÚ„Ú‹Ú˜ÚŸÚ±ÚÆÚÍÚÓÚÜÚÜÚÿÚÛ ÛÛ)Û7Û7Û=ÛDÛMÛMÛ`ÛrÛuÛuÛ†ÛŽÛ–Û¢Û¿ÛÆÛÓÛÕÛÜÛðÛÿÛÿÛÿÛ&Ü&Ü&Ü:Ü:ÜOÜZÜlÜy܄ܒÜ�ܬܳÜÍÜàÜâÜñÜÝÝÝ+Ý+Ý1Ý:Ý:ÝNÝTÝfÝfÝzÝ}݈ݚݡݬݱݹÝÀÝËÝÐÝåÝêÝÞÞÞÞÞ"Þ)Þ=ÞKÞ`Þ`ÞfÞmÞvÞ{ޜޥޥޫ޴޴ÞÓÞÓÞçÞêÞðÞùÞß ßß$ß/ß/ßCßFßLßUß]ßhßz߀ߋߋߟߢߨ߱߳ßÕßèßýßàà à&à.à.à.à.à9à´ãÿÄB¯&ñ&ñHñSñZñcñsñ…ñŒñ’ñ˜ñ�ñÂñÏñÒñÛñíñóñøñò.ò2ò8òOòVòdòjòvò€ò…òŒò¥ò¯ò¸òÈòÊòÑòÖòÞòýò óó1óPóWóaópóvó|ó‚óˆóžó¿óÓóßóöóô -ôô*ô7ôEô`ômôxô�ô°ôÂôÙôâôèôôôùôõõ"õ/õ6õ6õDõSõUõcõrõ„õ„õŒõ¯õºõîõXµîõîõö#ö6öAöSöaöhöwö~ö†öœö¤ö·öÌöÜöæöèöøö÷÷÷÷#÷*÷0÷6÷A÷L÷O÷V÷p÷x÷’÷§÷´÷·÷¿÷Ã÷Õ÷ä÷ï÷÷÷ø'ø+ø4ø;øMøUø\ø`øiøkø}ø”ø¢ø¨ø¬ø®ø»ø»ø»ø½øÔøÚøÚøìøÕ––¸ÀÆÓèöüüüü   '3>DNUffq{{�“£©®µµÖÜëþ  .8==R\\py…› §º¾¾ÆÌÒÜãêó*.5;J]cgntzz|€‡�“˜˜˜˜ÃÔÔëøü99?BFLL^o„˜ ±µÆÊÐéëñþ *1<_jpv|…Œ¡²º¾ÏÓÙòôú 39?ENUeŒ•››°µµ¼ÃÕÚÚÚôö,2:>Ehnt€—ž¤°µµ¼ÀÇÕ×ßäì÷ý !&5P`m|˜š¶¶½Ò×àíòùþþ     ( , 0 : F M Q Y a i x „ ‰ • • ž ž Á Á Ï Õ Ú Þ ã ã ã ã é ë ë  - - -7 -9 -9 -9 -D -D -D -I -l -r hëFF\nt�™°°ÂÈÓãîü 5 DáîÈÈÑÜçòý)+;X¼ÎêÈêÈÉÉÉ#É0ÉEÉGÉYÉcÉxÉxÉÉ‚ÉÖÉH’­’­¬­¿­É­ЭÜ­õ­þ­®®®:®Lƒ’&&&-&=&D&[&v&ˆ&Œ&Ï&¨»á¸ ¸ È Ê Õ à ñ ü ,09<R]fovƒ—ž ¤¦¾Èdîƒ@@Ydt½ÄØßçïø -!(G_hh�ÇÐò )S_�ƒŠ‘‘·÷7w·÷77FSXXgtvv~~~�¦¿ØÚÚááïòÿ 1lsss{˜¦ÄÍÖò666Sa}›››¦©ÖØïõ -/<<`bizƒ…“•£¥³³ÓÓÓÓàó'4MUYaes�ƒ‹�“›©··ÑÜò$;FPWp|ƒœœ®³µ»ÌÝìó  -/===aa~…Œ�›ž¬°¾ÂÐÔÔíôù 5UhwyˆŠ™££±ºÐ×ü*Z_mo}† ¢¤«¼ÅÇÕ×åçõõ444?[€™žžžÀÅÅÅåêêê <Xlqqy|� ¼ÐÕÕÜßä 388S`bqz”––›–¼¾¾Áÿÿÿ   ? D D D f k k k ‹ � � � ¯ ´ ´ Ï Ý ß î ÷      9 ; ; > | | | ‡ ‡ ± ± Û ó !!,!EKEKENE\ElEƒE‡E�EŒ<ÍØqDqD…DŒD˜D¤D´D¹D¼DÀDÈD�D'ùFùFGGG(G=GCGOG`G`GgG›GŽ,„‹ B BB!B,B7B=BCB�0ÄÌDD-D9DGDKDcDfDnD� ®²QCQCZCfCkC‘(§­!C!C/C6CFCICOC’( ¦éBéB÷BCCC C“4zƒÑAÑAßAæAðAþABB B”Ø ¶¨HeHeeeteteteŽeŽe�e�e£e¥e¥e«e­e­e³eµeµe¼eÀeÅeÅeÅeÅeÅeÅeÍeâeâeìeñeúeff&f(fCfEf`fef€f…f‹f‹f f£fÊf×fÿfïfgggg;g)gAgPgUg\gegxg€gˆg�g�g�g–g¯gµgµgÎgÜgög hhhh$h)h)h/h/h8hIhKh`hbhjhphxh}h}h}h}h‹hŸh¡hµhµh½hÃhËhÐhÙháhêhðhöhøhøhøhiii"i&i(i4i6iQiWi_idimixi{i�i‡i�i“i“i¡i¯i±iÔiñi÷iÿij jjjjjjj9jKjPj\jbjej|j~j�j‘j•jœj¥j´jÂjÈjÐjÕjÝjâjâjëjøjýjkk&kNkNkTkYkYk_kdkdkjkokokukzkzk€k…k…k‹k�k�k–k›k›k¡k¦k¦k¦k®k®kÇkÕkïklllllllll$l$l,l5l;lGlGlNlbldlgllltl|l�l�l‡l‹l�lŸl¤l®l¸l¸lÅlìlìlòlmmm$m2mAmWm]mbmbmgmzm†mŽmžm¨m±m¿mÆmÈmÑmÑm×måmñmnn+n1n3nFnKnKnhnhnzn€n‰n�n˜n¦n«n«n¾nÄnÆnÑnãnönön +oo(o-o9o?oBoYo[o^onoxo{o{oŠo�o¯o´oÀoÆoÉoàoâoåoõoùoppppp p'p,p,p2p2p@pFpLpVp`pƒp†pˆp’p’p”pœp¡p¦p«p«p±p¹p¾p¾pÃpÎpÓpØpãpèpqqqq q$q)q.q3q3q8q=qYq‹q‘q™q™q§q­q³q½qÇqêqíqïqùqr r r rrr#r#r(r(r.r6r;r;r@rKrPrUrZririrzr€r€rŽr”ršr¤r®rÑrÔrÖràrïrôrôrôrürs +sssss"s"s's2s7s\S\U\X\\\c\w\{\‡\Ž\’\™\¡\£\«\¸\Æ\Î\Ð\Ó\á\í\û\] ]]]+]–8ƒ�àOàOîOõOPPPPPP!P—L®½îýîýüýþþþ.þ4þ=þOþUþXþ”þ˜\¾Ñ–þ–þ¤þ¶þ¼þÄþÖþÜþåþ÷þýþÿÿÿoÿ™dBWaMaMqMxM„M‹M—MŸM¨M¬MºMÃMÑMÝMæMïMøMþMNšPp€8[8[N[Z[b[f[w[…[‹[—[Ÿ[ª[°[³[½[›DŽ›(P(PBPIPRP^PsP{P�P‡P‰P‰P˜PœTü ¨¨¶ÄÏÖæ÷ü€ €&€-€;€G€•€�<¢­®ý®ý¾ýÏýØýÞýâýåýíýžTo€6ü6üLüZü`üfüwü…ü“ü¥ü©ü¯ü½üÀüÊüŸD”¡VýVýfýzýƒý‰ý›ý›ýŸý¢ýªý D†“þüþüý"ý+ý1ýCýCýGýJýRý¡p©Á�|�|®|²|¶|¾|È|Ë|Î|Ý|á|å|í|ö|}}(}/}6}6}@}C}U}¢dH]àYàYZ ZZZZ,Z.Z;Z=ZHZ\ZdZtZyZZ‡ZŠZœZ£ œ@˜P˜P®PºPºPÐP×PÙPõPõPõPüPQ +QQQQQQ4Q4QjQvQ‡Q—Q­Q²QµQºQºQºQÒQÙQæQíQõQúQúQRR&R+R+RCRPRXR]R]RuR�RŠR’RšR¦R¼RÇRêRîRüRS S S!S;SESQSYS^S^S}S‰SšSŸS·SÃSÒS×SæSóSøSøSøSûSTTT T+TTATFTFTFTPTbTiTxT�T‰T�TœT¥T­TµT¼TÀTËTÖTÜTêTôTôTúTUU U U3U;U;U=U=U=UBUBUIUOUSUZU^U^U^U^UmUmU’U›U›UŸU­Y¤$pµèbèb ccc c)c4c@cHcRczczc†cˆcˆc”c™c™c¥cªcªc¶c»c»cÇcÌcÌcØcÝcÝcécîcîcúcÿcÿcÿcddd)d=dMdMdOdOd[dadfdfdldxdxdƒd�dœd±d¹d¿d¿dÐdÐdÙdÜdCe¥T^o Z ZÁZÈZ×ZÚZÞZæZêZîZöZ[%[,[8[¦ˆ#A!L!L=LLLVLcLjLyL�LµLËLÜLãLñLM M M2MGMOMRM^M§<¾É¸]¸]È]Ï]î]ù]^^^$^,^¨<²½0]0]@]G]f]{]�]Ž]˜]±]©|ÂÝX}X}n}w}‚}›}›}ž}­}³}¼}¾}Ä}Í}Ï}Õ}ß}æ}é}é}ó}ªDÞëø}ø}~~"~'~R~T~q~—~ž~¯~Â~«`l€©N©N²N¹NÍNáNæNO O'O)OGOIO`OtO}OO“O£OÔO¬\Xk N NN"N$N0N7NFNQN]NaNoN�N�N—NšN¤N­(AG°Y°Y¾YÇYÕYÛY®”0ª³ª³̳Ö³â³ç³÷³ý³´&´5´C´Q´h´p´z´‰´‘´ž´¦´©´©´©´«´º´Ä´Í´Õ´Ø´ê´¯LìûÈ~È~Ö~ç~ó~35Pkksz¡°Ì2h_h_ˆ_Œ_Í_Û_á_ø_`%`%`*`.`5`@`K`X`a`a`f`k`r`}`Š`Œ`™`›`�`�`�`¥`¥`¥`­`µ`½`Å`É`Ó` a±\àó¸^¸^Î^Î^Ò^×^ê^í^ò^ò^ü^_____²Hô _ _4_8_=_H_H_R_X_X_\_d_³”3T a a4a8aAaDaMaVahaha‘a•aša�a¦a¶a½aÀaÈaËaØaàaèaða÷abbb´(&,FFTcgjpµxUobb*b,b0b9bEbQbfbfb’b–b›b§bºbÄbÇbÒbÕbÝbçb¶8ÊÔ0^0^D^H^M^W^b^e^i^q^·8Õßx^x^Œ^�^•^Ÿ^©^¬^°^¸^¸ À'À'Ê'Ò'×'¹( Ø'Ø'æ'÷'( ((ºeã>È>ÈXÈaÈ�È�ȇÈ�ȗȟȧȭȺȺÈÈÈÍÈÍÈÓÈØÈØÈÞÈãÈãÈéÈîÈîÈÉÉ É$É$É-ÉMÉMÉMÉTÉVÉVÉ]É_É_ÉeÉeÉlÉnÉnÉtÉtÉ{É}É}ɃɃɊɊɒɘɞɦɦɦɦɲɺÉÂÉÊÉÒÉÚÉâÉèÉÊÊÊÊÊ&Ê,Ê2Ê2Ê6Ê>ÊEÊMÊUÊYÊ_ÊgÊnÊvÊ~ʂʈʓʙʦʲʸÊÀÊÄÊËÊÓÊÛÊßÊåÊíÊôÊüÊËËËËË4ËEËJËMËóË»ædvÄvÄ�ęĹĹĿÄÇÄÏÄ×ÄßÄåÄòÄòÄÅÅÅÅ Å Å%Å*Å*Å0Å5Å5ÅMÅ`ÅfÅkÅkÅtŔŔŔśÅ�Å�ŤŦŦŬŬųŵŵŻŻÅÂÅÄÅÄÅÊÅÊÅÑÅÑÅÙÅßÅåÅíÅíÅíÅíÅùÅÆ ÆÆÆ!Æ)Æ/ÆGÆVÆ`ÆcÆcÆmÆsÆyÆyÆ}Æ…ÆŒÆ�ƘƠƦƮƵƽÆÅÆÉÆÏÆÚÆàÆíÆùÆÿÆÇ ÇÇÇ"Ç&Ç,Ç4Ç;ÇCÇKÇOÇUÇ`ÇeÇ{njǑǔÇ:ȼ, ƾƾԾ۾ã¾è¾î¾½ 0'0'?'X'^'¾häúöËöË +Ì Ì-Ì8Ì<ÌCÌGÌPÌ_ÌaÌaÌuÌẁ̆̆̆̆̎̿``´¦À¦ÀÄÀÈÀÕÀ×ÀäÀæÀòÀòÀÿÀÁÁÁÁÁ2Á;Á;ÁFÁMÁ\ÁgÁmÁrÁtÁ€Á‡Á–Á¡Á§Á¬Á®ÁºÁêÁ Â0Â@ÂBÂRÂbÂrÂrÂw‘˜ŸŸŸŸ¦¼ÂÈÂÎÂÔÂÚÂÞÂÞÂÞ ÃÃ(Ã4Ã:Ã@ÃFÃHÃHÃVÃÀDµÂVÃVÃlÃoÃrÃÅÒÕØÞàêÃÁ�Ãã®Ã®ÃÊÃÖÃÚÃÞÃåÃìÃûÃÄ ÄÄÄ Ä&Ä.Ä4Ä:Ä>Ä>ÄMÄTÄ\ÄbÄhÄjÄjÄvÄÂ(!'n¿n¿w¿…¿‹¿�¿’¿Ã´ª®Š®ŠÈŠ׊׊ÚŠãŠïŠïŠûŠ‹1‹C‹U‹Y‹i‹‰‹›‹¡‹´‹½‹Á‹Ç‹ЋЋñ‹õ‹ŒŒ0ŒBŒHŒ[ŒmŒyŒ{Œ‡Œ�Œ“Œ™Œ¢Œ¢Œ¢Œ¢Œ´ŒÊŒÐŒÜŒñŒøŒ� �!�(�(�(�6�D�N�Q�_�i�l�~�ƒ�ˆ�˜�›� �°�³�·�À�È�Ú�â�ë�ŽŽŽ(Ž/Ž7ŽIŽOŽ^ŽoŽoŽvŽvŽvŽ„Ž’ŽœŽŸŽ­Ž·ŽºŽÌŽÑŽÖŽæŽéŽîŽþŽ����(�0�9�9�D�[�s�w�ƒ�›�£�©�µ�¾�Â�Ê�Ó�Ó�Ó�ì�ô�ú���"�(�.�.�.�5�G�S�[�a�g�g�i�{�Äxî£î£ü£¤¤#¤E¤y¤•¤§¤»¤Á¤ͤÖ¤Þ¤æ¤è¤î¤ô¤¥¥¥¥¥Å,ž¾ž¾¬¾³¾»¾À¾Æ¾Æ8(2–¿–¿Ÿ¿Ÿ¿­¿±¿¸¿»¿À¿Ç83=ƿƿϿϿݿá¿ï¿ò¿÷¿È8>Hþ¿þ¿ÀÀÀÀ À#À(ÀÉ4IR.À.À7À7À:ÀHÀVÀYÀ^ÀÊ &*ÆÍÆÍÔÍàÍË  x'x'�'‰'Ž'Ì  +`'`'i'q'v'ÍØ ®K®KiqËKÓKåKL LL%L6L>LFLILWLƒLƒL˜LšLšL¦L®L²L¿L¿LËLÓL×LäLäLäLM MMM!M9MHMMMSM^McMcMhM€M�M”MšM¥MªMªM¸MÁMÍMÕMÝMåMèMîMóMüMNN(N8N8N=NENMNPNVNVN[N[N[NaNdNkNvN°NÇNÔNÜNäNðNüNO OOOO%O+O2O7O7OEOUOUObObOjOrO{OŠO�O�O–O¡O§O¯OµOÀOÅOÅOÔOßOñO÷OÿOP +PP'P-P5P;P@P@PTPZPePkPmP}PƒPƒP¥PÌPÑPÑPåPëPQQQQ6Q^V^^^€^œ^¤^§^­^³^³^Ä^Í^Ù^á^ä^ë^ñ^ö^__ _:_B_E_L_R_j_r_”_±_¹_¼_Ã_É_É_É_É_É_Î_Î_ä_ê_ö_ü_````,`8`A`M`U`X`_`e`j`|`‹`“`«`³`¶`½`Ã`Û`ã`aa$a'a.a4a4a4aEaNaZabaealarawa‰a˜a¤a¿aÇaÊaÑa×aïaûab:bBbEbLbRbRbRbRbRbWbWbjb…b‹b–b›b›b®bÄbÊbÕb×b×bêb cccc0c9cJcOcacqcqcvcvc‰cŸc¥c³cÂcÇcÇcÚcðcöcdddd.d4dQdidid“d™dždªd³dÂdÂdÇdÇdÝdãdeeeBeHeMeYebeqeqeveveŒe’e¯eÇeÇeñe÷eüeff f f%f%f;fAf^fvfvf f¦f¨f´f½fÈfÈfÈfÈfÍfÛfäfõf÷f gggg&g6g;g_gkglgqg†g£g³g×gçgígígígòg÷g h h]hmhshuhzh‹hšhÌhÔhÚhÜháhèhèhñhii i.i.i3i8iGiPi[i]ifiqiqi’i™iŸi§i²i¸iÈiÎiÖiáiçiçiìiñiøiÿij jj%j%j%j*j*j*jkGkJkJkUkWkikpkvk…k�k›k¡kªk®k®kºkÃkÆkÆkÑkÓkåkìkòkúklll l#l'l'l/l6l9l;lFlJlSlVlVlalcl{l‚l�l˜l›l¡l¦l¦l­l±l±l½lÆlÉlÉlÔlÖlèlïlõlmmm m)m-m-m9mBmEmEmPmRmdmkmqmym„m�m•mŸm¢m¦m¦m®mµm¸mºmÅmÉmÒmÕmÕmàmâmúmn nnn n%n%n7n;n;nGnPnSnSn^n`nrnynn‘nœn§n­n²n²n½nÂnÂnÍnÒnÒnÝnànänënðnõnúnúnooo o$o5o=oAoUo\o`o`omoyo�o‡o—o›o¬o¾oÉoÍoÍoÚoâoêoðoðoðoðoðoòoòoppp p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p0p0pGpOp[p[p|pŠp¢p¤p°p½p½pàpípøpq +qqqq&q&q)q;qYqeqeq–sÎÀ m–s–s³s»s¾sÌsÚsïsøst&t8tCtTtXtjtmtxt�t�t tÑt¬tátõtuu u>uPutu…u‡uŽuÃuÃuÆuËuÎuÎuÕuìuóuvvv!v4v4vHvLvyvyv‘v–v–v¦v®v¾vÈvØvâvòvþvwwww+w5wEwOw_wkwpwpwpw’w wªw¯w¼wÑwÑwÖwàwïwôwúwÿwÿwxxx"x(x-x-x3x9x>x>xMx`xlxyx…x˜x x¦x¯xÆxÚxëxøxýxy(y?yLyTygyoyuy~y‡y‡yŒyŒyŒyŒyŒy˜y˜y˜y¡yºyÏy×yòyzzz&z+z+z+z6zDzIzIzPz^zcz{z‡z™z¥z«zºz¾zÇzÐzízùzÿz{{ {({U{f{s{u{ƒ{ƒ{ˆ{ˆ{�{�{¢{µ{Á{Í{Ó{×{à{å{å{å{å{å{ý{||||||||||||||||5|J|R|m|~|‹|�|¡|­|²|²|²|»|Õ|á|}}}}}}}}}}}.}3}3}3}D}O}T}T}_}q}‰}›}¼}Ü}ç}ø}ý}ý}ý}(~1~B~F~^~n~v~~~³~¼~À~Ø~è~è~è~è~è~ +CLPV[dmrrrr�•³¾ÃÉÎÎáõ€&€.€4€4€9€9€H€\€z€…€Š€�€•€•€¨€¼€â€í€õ€û€û€��� �"�7�?�Z�k�x�z�‰�‹�‹�‹�‹�‹�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�®�½�È�Ê�Ê�Ó�Õ�Õ�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�ë�ë�‚ +‚‚‚‚ ‚/‚_‚n‚z‚�‚ª‚­‚·‚Âé‚ ƒ)ƒMƒOƒbƒhƒ«ƒ«ƒ®ƒ¾ƒƃáƒòƒõƒ„„)„A„A„l„o„~„’„³„Ä„à„Ì„ü„…,…_…]…G…8…m…m…m…p…u…x…’… …Î…ð…ð…††-†A†b†s†�†{†«†Ɇü†ú†ä†Õ† +‡ +‡ +‡ ‡‡‡‡)‡J‡V‡­ŠÏœ«Î~�~�”�˜�£�ª�µ�É�É�Ô�å�ì�ù�‘‘‘+‘+‘4‘9‘A‘Q‘_‘n‘y‘Œ‘Œ‘Ÿ‘Ÿ‘µ‘á‘á‘õ‘÷‘÷‘’ ’ ’’’’’,’,’,’0’8’>’C’C’G’O’S’Y’^’^’j’’�’™’¬’±’¹’¹’¾’¾’Å’Ñ’æ’ö’“““!“&“.“4“4“9“@“K“s“~“�“—“Ÿ“¥“·“½““““““““““͓ٓæ“ö“ü“”””$”)”1”6”6”6”>”F”O”W”\”d”i”p”{”£”®”¶”Å”Ï”á”æ”ì”ñ”ñ”ø” +••%•-•5•J•L•W•_•t•t•�•˜•Ÿ•¥•©•­•¼•Í•ã•ï•÷• –––)–4–9–9–Z–t–y–�–�–˜– –µ–º–Å–Í–â–ç–ó– ———2—>—C—O—Z—_—_—_—_—_—_—j—j—j—j—j—j—j—j—j—j—j—j—u—•—²——È—Зã—è—ð—ø—ú—˜˜˜#˜+˜-˜M˜U˜^˜f˜n˜s˜x˜˜Š˜²˜½˜ŘÔ˜Þ˜÷˜ü˜™ ™ ™ ™™™™(™6™H™J™\™n™n™n™y™~™›™ ™ ™©™®™®™®™®™®™®™®™®™®™®™®™®™®™®™®™®™¹™Å™Ñ™ñ™š š,š1š9š@šMšUš^šfšmšršršzš‚šžš¦š©š«š»šÅšÅšÅšÇšÚšëšîšñšùšþšþš› ›››(›A›H›M›e›o›Š›£›«›¸›Ñ›Ø›Ø›Ý›Ý›Ý›Ý›Ý›Ý›Ý›å›ð›û› +œœœœ œ,œ1œ1œ1œ5œ:œ:œJœOœOœOœ[œbœhœxœ‰œ¥œ¸œ¾œÆœÛœâœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœìœìœ�� � �$�/�6�R�_�_�_�c�n�Œ�š�”ŸÐø{–Ÿ–Ÿ¬Ÿ·Ÿ¾ŸÉŸÔŸëŸöŸýŸ    * * F ` g p w z † � – ™ ž ´ ¾ РÖ â ÷ þ ¡¡'¡.¡.¡.¡<¡J¡T¡W¡e¡o¡r¡„¡‰¡Ž¡ž¡¡¡¦¡¶¡¹¡½¡Æ¡Ρà¡è¡è¡è¡þ¡¢¢ ¢,¢A¢H¢P¢b¢h¢w¢ˆ¢ˆ¢�¢�¢�¢�¢«¢µ¢¸¢Æ¢ТÓ¢å¢ê¢ï¢ÿ¢£££££'£/£A£I£I£b£j£j£m£x£–£¤£í£Ñ\oÂN¨N¨h¨{¨‚¨‰¨”¨§¨ª¨³¨º¨½¨ͨÛ¨æ¨ñ¨ô¨ +©©+©6©A©W©b©y©…©œ©¤©­©µ©Ý©à©æ©ë©þ©ª ª ª%ª-ª-ª;ªMªZªmªsª{ªŽª”ªœªœªŪʪéªìªìªóª«««)«5«E«e«�«•«�«§«Æ«Ú«Ú«P¬ÒXn¥¥<¥N¥S¥j¥|¥†¥�¥ž¥¦¥µ¥Ë¥Í¥Ö¥ì¥ú¥¦ +¦ ¦¦"¦"¦*¦2¦<¦D¦N¦W¦_¦b¦k¦†¦—¦©¦¬¦±¦Ħܦð¦ø¦ø¦ +§ §§%§=§Q§Y§Y§z§}§‚§•§›§°§Ƨȧݧó§û§û§¨%¨,¨7¨N¨Ó¤¦>s>s_sqs|s…s§s±s¿sÙsæsæsðsðsttt#t-t3t9tzCzCzRzWzWzhzmzmz~zƒzƒz–z¥zªzªz½zÌzÑzÑzózøzøz{ { {A{F{F{h{m{m{Š{±{¶{¶{Ø{Ý{Ý{ú{!|&|&|H|M|M|j|‘|–|–|¸|½|½|Ú|}}}(}-}-}H}M}M}h}m}m}ˆ}�}�}¨}­}­}È}Í}Í}è}í}í}~ ~ ~(~-~-~>~C~C~T~Y~Y~e~p~…~Š~Š~–~¯~´~×~Þ~è~í~þ~(->IQVVZ^eoyyŒ‘‘‘•«´´×ÜÜäø€€(€3€>€I€[€g€p€u€u€u€†€£€®€¸€ÀÈ€Ó€Û€à€à€ë€ó€ü€��/�G�[�`�`�k�~�ˆ�“�´�À�Î�Ó�á�å�ê�ê�ú�‚ ‚‚‚*‚5‚O‚a‚s‚~‚ƒ‚Ž‚–‚›‚¦‚³‚¾‚Ø‚ê‚ü‚ü‚ü‚ü‚ƒƒƒƒ#ƒIƒgƒgƒqƒ…ƒ�ƒ‘ƒ�ƒ¥ƒƒÓƒ݃èƒ „-„>„I„a„q„v„v„�„†„†„Ž„™„ž„ž„¦„±„¶„¶„¾„܄Ƅô„ù„ù„… … …7…<…P…<…h…m…m…z………‡…Œ…Œ…˜…©…»…À…À…Ô…À…ì…ñ…ñ…ù…þ…þ…†††)†.†.†H†X†]†]†w†‡†Œ†Œ†¦†¶†»†»†Õ†å†ê†‡ê†‡‡‡)‡.‡j‡X‡.‡‚‡‡‡Ç±‡‡‡Û‡à‡à‡ï‡ÿ‡ˆˆˆ#ˆ(ˆ(ˆ7ˆEˆJˆrˆ`ˆJˆŠˆ�ˆ·ˆ¥ˆ�ˆψÔˆüˆêˆÔˆ‰‰‰6‰ ‰`‰p‰u‰u‰�‰|‰º‰ʉωωÛ‰à‰à‰ì‰ñ‰ñ‰ŠŠŠŠ,Š<ŠAŠAŠTŠdŠiŠiŠ|ŠŒŠ‘Š‘Š™ŠžŠžŠ¦Š«Š«Š³Š¸Š¸ŠÀŠÅŠÅŠØŠÝŠÝŠðŠõŠC‹1‹ ‹õŠP‹U‹£‹‘‹‹U‹°‹µ‹µ‹Ä‹ß‹ä‹ä‹õ‹ŒŒŒ&Œ4Œ9Œ9ŒAŒFŒFŒNŒSŒSŒ[Œ`Œ`Œ˜Œ†ŒgŒ·ŒÒŒ׌׌�ýŒÞŒ.�I�N�€�n�N�˜���Ï�½���ç�ì�Žì�Ž#Ž@Ž#ŽXŽ]Ž]ŽiނޒޣŽÉŽËŽáŽçŽ��A�ƒ�`���—�—�—�£�¨�¨�»�Æ�Ð�Õ�à�ê�ï�ï� �����/��;�F�K�_�K�k�v�{�{�†�”�™�™�¤�¯�´�´�Å�Ê�Ê�Û�à�à�ú�‘ +‘‘ +‘‘#‘7‘#‘C‘H‘P‘H‘\‘a‘u‘a‘�‘†‘†‘𑆑¦‘¦‘¦‘«‘·‘«‘ʑϑϑۑϑî‘ó‘ó‘ÿ‘ó‘’’’#’’6’;’O’;’[’g’r’}’‚’–’‚’¢’®’¹’Ä’É’Ý’É’é’ú’ÿ’ÿ’“ “ ““““"“'“'“0“5“5“>“C“C“N“S“S“^“c“c“n“s“s“~“ƒ“ƒ“Ž“““““ž“£“£“®“³“Ç“³“Ó“Þ“é“ô“ù“ù“””””””!”&”&”0”5”5”=”B”B”O”T”T”a”f”f”f”f”f”n”s”s”{”€”€”ˆ”�”�”•”š”š”¢”§”»”§”ǔؔݔݔï”ú”• •5•@•Y•E•e•p•{•€•€•’•�•½••Ø•ã•ü•è•–––#–#–5–@–`–e–{–†–Ÿ–‹–«–¶–Á–Æ–Æ–ì–Ø–ø–——3—>—C—^—J—~—j—Š— —Œ—À—¬—Ì—×—Ü—Ü—˜î—˜.˜3˜I˜T˜Y˜t˜`˜”˜€˜ ˜¶˜¢˜Ö˜˜â˜í˜ò˜ò˜™™$™D™I™_™j™o™Š™v™ª™–™¶™Ì™¸™ì™Ø™ø™šššššš+š0š0š0š6š;š;š;šEšGšGšQš^š~š€š€šŠšŠšŠšŠšŠšŒšŒš£šªšµšµššÈšÏšÚšåšðšûš›)›!›A›I›r›j›Š›Š›Š›“›››®›´››Õ›Õ›í›÷› œ%œ%œFœVœkœ}œ�œ�œµœ¼œËœÝœÝœáœæœíœýœ�� �7�>�C�C�G�R�^�l�™�¢�³�Á�ô�žžž/ž;žIžNž\žxž£žÉžÌžÜžÞžÞžâžŸ Ÿ ŸŸŸHŸhŸhŸhŸ–¡Ô,î¾î¾÷¾ý¾¿¿#¿(¿Õ, .¿.¿<¿B¿F¿U¿d¿j¿Ö(æÍæÍïÍùÍ ÎÎÎ2Î×Ô4e.Ï.ÏDÏKÏNÏrÏrÏ�ϢϵÏÈÏÍÏÍÏëÏùÏ Ð Ð'Ð'Ð)Ð)Ð)Ð<Ð>Ð>Ð>ÐEÐXÐkÐkÐkÐ}ЉМвзлÐÂÐ×ÐêÐñÐñÐôÐÑØ 1UÞ +Þ +ø +þ +    # 7 > A C L ] ] ` h ~ � � ’ • œ   ¨ ¶ È Î Ö  Ù0®6ø“ø“”A”I”I”W”j”ƒ”†”¢”¢”¢”ª”¬”¬”´”¶”¶”¾”À”À”ȔȔєהܔܔå”ñ”õ”ú”••• •••!•!•&•2•J•i•l•�• • • •¨•ª•ª•ª•²•´•´•´•¼•¾•¾•¾•ƕȕȕӕӕٕޕޕޕޕå•ð•–––(–(–(–8–8–?–C–I–a–o–‚–Ž–·–º–Á–Ó–Û–ä–ï–ï–ú–———— ——'—/—5—W—c—i—n—n—u—€—€—…———�—�—�—�—ö—ÚXþÐ^µ^µxµµŒµ—µœµ¢µ´µºµÒµØµöµ +¶¶¶=¶=¶M¶b¶d¶g¶s¶{¶ƒ¶‹¶™¶Ÿ¶¥¶±¶±¶³¶Å¶Ë¶Ð¶Ð¶ç¶ç¶···%·*·*·A·J·Y·o·z·ˆ·“·£·°·Â·È·Ò·Þ·ë·í·í·õ·ú·ú·¸¸¸¸¸¸¸!¸!¸'¸,¸,¸3¸8¸8¸?¸D¸D¸O¸T¸T¸_¸d¸d¸o¸t¸t¸¸¸˜¸Ÿ¸¥¸¨¸³¸¶¸Ê¸×¸æ¸í¸ð¸¹¹ +¹¹+¹:¹:¹:¹:¹D¹\¹q¹�¹’¹˜¹©¹¯¹´¹¾¹Ï¹à¹ï¹õ¹ººº*º9º?ºJºPºeºkº|º‡º�º�º�º­ºÀºÌºÔºäºëºñº» »»/»D»R»b»n»€»‹»š»œ»®»¶»»»Â»Æ»Ô»Þ»ä»î»ô»ÿ»¼¼¼!¼+¼P¼P¼V¼]¼�¾Û0¥íþ±þ±²²4²<²D²N²R²Y²_²s²{²€²ƒ²Ž²™²¡²¬²·²¹²Ñ²Ø²ß²ê²õ²÷²³ ³³³$³$³:³[³a³g³x³~³‡³™³Ÿ³Ÿ³§³«³¶³»³Í³Ø³Ü³ê³ì³ð³ÿ³ÿ³ÿ³´´´'´-´›´Ü”Œ­À’À’Î’à’ä’ì’ô’ÿ’ +“““(“-“E“L“S“^“i“k“v“�“ƒ“�“𓥓®“¶“¶“º“ñ“Ýt ¤î î  ¡¡¡%¡=¡G¡G¡_¡i¡„¡š¡¨¡¬¡Ì¡à¡ç¡ê¡¢ ¢¢ ¢1¢1¢8¢?¢H¢M¢R¢Y¢`¢z¢�¢‘¢•¢•¢Ÿ¢µ¢¹¢¹¢Ë¢ß¢ó¢ó¢ú¢£ ££ £'£0£;£B£B£M£k£o£x£¢£¢£¨£¯£¾£Æ£Ô£Û£ß£á£ó£ó£ó£¤ ¤3¤A¤A¤E¤Z¤b¤r¤}¤’¤—¤¥¤´¤¼¤Ê¤Õ¤Ù¤Þ¤æ¤ê¤ù¤û¤ +¥ ¥¥¥,¥3¥9¥M¥U¥c¥j¥n¥~¥‰¥Ž¥¬¥´¥Â¥É¥Í¥Õ¥ã¥ê¥î¥ +¦¦¦#¦#¦#¦,¦7¦G¦i¦q¦|¦‹¦“¦ž¦£¦«¦¶¦Â¦Æ¦Ñ¦Ö¦è¦ð¦û¦û¦û¦û¦ §§5§A§I§Y§i§‡§‹§º§ §Ê§Ê§Ô§Û§ê§ù§¨¨¨¨¨+¨3¨A¨H¨L¨L¨N¨`¨`¨r¨r¨r¨x¨„¨–¨ž¨¶¨â¨ð¨ô¨©© ©+©A©C©J©]©e©s©z©~©€©“©›©©©°©´©´©´©´©Â©Í©Ü©ä©ò©ý©ªªªªª!ª#ª2ª4ªCªEªTª[ªaªuª}ª‹ª’ª–ª¦ª±ª¶ªÔªÜªêªñªõªýª «««2«:«E«K«K«K«T«i«ƒ«“«ž«³«¸«Ã«Ó«õ«ý«¬¬ ¬*¬/¬7¬B¬N¬R¬]¬b¬t¬|¬‡¬‡¬‡¬‡¬›¬«¬À¬Í¬Ñ¬å¬ö¬ ­­­*­?­O­f­­˜­š­¥­­­­­¶­Ó­ä­û­®"®-®:®B®D®O®W®W®W®q®®�®¢®¿®Î®ú®¯¯¯%¯?¯?¯C¯Y¯h¯ƒ¯Ž¯¥¯­¯­¯Ï¯Ï¯â¯ý¯°°;°J°v°„°š°³°Ã°Û°Û°ó°ó°ÿ°±/±8±8±8±D±U±m±v±v±}±†±Œ±˜±þ±ÞLîýž´ž´°´Å´Ö´ç´î´ö´µµ µ%µWµßSžžÁÖÛãëó">DFHUUWsy{}ŠŠŠ�˜ ©±³»ÃËØÞéð 5<GM^bjj~Ž–™ÿà`vÿvÿ‚ÿ™ÿ­ÿµÿ¹ÿÃÿÍÿÕÿØÿÞÿáhF/F/\/g/r/€/‹/‘/¢/¨/¹/¿/Ë/â/â/ô/000)0/0}0â˜Vx  * / 6 @ F Q a i q v � ‹ ‘ œ ¬ ´ Ä Ë Ó Û ã ë ð û    ã�*JÞ×Þ׿×ê×öר ØØ$Ø6ØAØLØsØsØŒØ�Ø�Ø�اخØÁØÊØØØìØÙ Ù*Ùäf)ÑÑ@ÑHÑNÑVÑXÑXÑiÑiÑiÑqÑyыыѯѱѱÑËÑÍÑÍÑØÑÝÑ÷ÑüÑüÑüÑÒÒ Ò"Ò/Ò1Ò>ÒFÒNÒUÒdÒqÒsÒ„Ò‘Ò‘Ò‘ÒšÒ¬Ò¿ÒÅÒÍÒÏÒÜÒÜÒñÒñÒñÒüÒÓÓ#Ó#Ó#Ó1Ó7Ó<ÓDÓOÓaÓlÓqÓqÓxÓ|ÓŠÓŽÓ—ÓžÓ¼ÓÉÓÐÓÙÓõÓúÓúÓúÓúÓÔ ÔÔÔ;Ô;Ô;ÔBÔPÔ_ÔrÔ…Ô‡Ô‡Ô‡ÔšÔšÔ¡Ô¨Ô­Ô³ÔÅÔÏÔêÔÕÕÕ-Õ2ÕVÕ]ÕiÕ‡ÕšÕ¥Õ¬Õ°Õ°Õ°Õ°Õ»ÕÅÕÓÕõÕÖÖ'Ö'Ö5ÖƒÖ–Ö§Ö¾ÖÑÖÖÖÖÖÖÖÞÖéÖûÖ× × × ××J×P×P×P×[×e×q×|×~×~×~׃×�×�×Ù×å >~0~0–0¨0®0º0Å0Ó0ß0ö011#1)1/151H1N1W1]1o1u1€1ˆ1–1£1à1æ“Ôî î   - 2 P V [ a o v … Š – ¨ ¨ Æ Ñ ä ë !"!.!I!a!}!†!•!�!ª!³!¸!É!÷!ü!""/"?"E"P"Y"_"¥"€"µ"ð"Ë"####·#çL™h~Ü~ܜܢܥܮܸÜÐÜàÜéÜïÜóÜ÷ÜùÜÝ!Ý.Ý4Ý8Ý<Ý>ÝBÝFÝFÝiÝmÝsÝsÝzݜݱÝÄÝ×ÝÝÝäÝïÝùÝýÝÞÞ ÞÞÞ)Þ/Þ4Þ;ÞHÞJÞ\Þ^ÞcÞpÞrÞ„Þ„Þ„Þ„Þ„Þ¦Þ±Þ½ÞÔÞÔÞéÞõÞß6ßPßUßlßqßߖߛߡ߲ßÇßÍßÝßêßà àà à-à9à9à9à?àBàEà^àdàxà~à…à�à�à•à¢à¯à¯àµàÃàÚàààãàæàíàôàûàûàá ááá á.áEáKáNáQáXáXáiáná{áˆáˆá�á™á á¦á­á¸áÌáÌáæáëáòáúáââââ5â:âcânâuâ}â–âªâªâÅâÅâßâôâûâã0ãTãVã`ã‚ã‚ã‚ã›ã©ãºãÒãÖã«äèT’*16>XacpprŒ’”–££££§¶¿ÇÐØßåç   , 2 F K X X l s z ƒ ‘ š º À Ä É Î Ñ Û Þ î éL%ÞÿÞÿêÿ!+5=@Fê0 & & > € t H F ” œ ëÕÓ¾#¾#Û#æ#ù#æ#$!$!$1$:$A$E$N$N$V$Z$x$„$�$–$¡$Ã$Ã$Ö$á$ç$î$ó$ó$%%%#%+%8%8%J%O%O%_%d%d%d%w%|%�%•%œ%±%Å%Å%Ê%Ê%Ú%ß%ß%ä%ë%ó%ú%ü%& & && &-&4&7&Y&Y&a&p&{&‚&„&˜&§&¬&±&±&±&Ä&É&Ø&ß&æ&û&'''''2'7'K'R'W'W'c'r'„'“'¦'ª'¹'Ç'Õ'ä'( (( (4(;(B(R(T(b(r(t(‚(�(Ÿ(¦(»(Â(Î(ß(ö(ø()))))0)=)E)G)[)m)t)„)�)±)¸)Ä)â)â)â)ê)õ)ù)** **$*/*I*N*U*`*i*q*v*v*…*’* *«*¶*Ä*Ê*Ð*Ö*ß*æ*õ*+ +++$+;+=+F+Q+S+_+}+ƒ+‰+�+˜+©+Ð+Ù+ã+ð+,,,*,?,?,L,Q,c,i,i,i,i,%-ìxÔî&-&-D-V-\-h---‘-—-¢-²-¾-Ç-Í-Ó-Þ-ì-ù-..".".R.í0-5vv„¤ª°°¶îD v:v:„:Ž:˜:¨:­:³:¿:Á:Ó:Ó:Õ:;ï„{˜6Û6ÛHÛ]ÛgÛpÛrÛyÛ‰Û”Û–Û Û Û¦Û·ÛºÛºÛÛÛæÛèÛÜÜ ÜÜ+Ü~Üð  ^Î^ÎgÎ{΀Îñ ¾Î¾ÎÇÎæÎëÎò4%îÎîÎüÎÏÏÏÏ'Ï-Ïó  6Î6ÎDÎXÎ^Îô †Î†Î”γιÎõÌKz.Ù.ÙBÙWÙfÙjÙxÙ~Ù�Ù�ٜ٧ٲٽÙÄÙÔÙþÙÚ Ú ÚÚÚ3Ú5Ú?Ú`ÚkÚmÚ†ÚŠÚ˜Ú�Ú�Ú¤Ú°Ú¸ÚËÚ5Ûö�½~?~?œ?Ÿ?¥?¹?Á?Ò?ß?å?ê?ê?÷?@@@$@&@E@V@]@i@y@y@‡@š@¥@©@º@º@º@¿@¿@Ë@Ú@í@ó@ø@ AAA,A2A4ACAPAVA\AaAgAmAtA€A‡A‰AŽA–A˜A�A©A«A°A¸AºA¿AÇAÉAÎAÖAØAÝAçAéAîAøAøAøABBB B%B+B6B;BCB\BbBmBqBwB‚B›B¦B±B·BÄBÉBÎBÎBãBëBóBCC'C-C;V;\;j;{;ƒ;Š; ;Æ;à;í;ú; +<<<#<E<L<R<`<h<~<‰<�<•<¸<ù(Kæ1æ12 22&282>2I2`2o2z2~2‰2•2 2¬2Ã2Ú2í233)3)3;3A3R3X3h3h3€3€3¥3¥3ª3ª3°3¼3É3Õ3ê3444-494P4h4‰4‰4’4—4—4—4—4§4°4¸4½4Ë4Ù4é4î4î455 5 55 52585D5T5_5i5m5v5�5’5¢5¯5¿5Ï5Ö5Ü5è5ð5û5666 6,676=6M6]6]6Š6¬6¸6À6Ë6Ò6Ý6ß6ê6ê6ú6ÿ6ÿ6 77&7,7:7G7T7^7b7k7„7‡7—7ž7£7£7·7·7¼7À7Ð7Ù7ë7ñ7ó7ó788 88$808@8@8@8E8]8]8l8o8ƒ8¡8¬8Õ8ç8ò899 99&969N9U9Y9_9g9r9u:úD€¾<¾<Ú<á<ù<==&=&=+=6=B=M=[=k={=‚=‰=ž=³=³=Ç=ß=ì=û=>>*>8>F>M>T>i>~>~>’>Ÿ>°>À>Æ>×>×>Ý>ë>ü> ??{?û„yÖ& & H S Z b e e u € € ƒ Š ‘ ˜ ž ¤ « ±   Ä Í Ù ß   $))06GMS^oox}‡Ž•�£¥³ÊÍÜèõõõõû $EVjq{ƒŠŠ“š¦¶ÁÁÁÕéùü·üxÔnæóæóôôô)ôOôOôXôZôZôaôˆô�ô�ôžô­ôÂôÍôÍôÙôàôðôöôõ õ!õ:õ@õKõ[õmõvõ�õ†õŒõ“õ¸õ½õËõÔõÔõÛõêõöööö*ö1ö8ö=öHöNöVö|ö…öŒö‘öœö¨ö·öËöÐöØöäööööö ÷÷÷,÷>÷D÷M÷M÷\÷b÷v÷÷�÷ž÷°÷¹÷É÷Ü÷ä÷ø÷ø0ø4ø@øWøsø…ø‹ø–ø¢ø²øÂøÇøÐøÐøâøæøòø ù%ù7ù=ùHùTùdùtù†ùŒùŒù‘ù“ù“ù˜ù˜ù§ù­ù³ù³ù·ù0üý¸iÓ®ä®äÌä×äâäåå +åå"å(å9åHåWådådåjåoåtå‡åšå¥å©å»åÌåÔåÛåöåææææ+ææ<æ3æFæHædæPælæzæzæ|æ˜æ˜æŸæ¥æ®æµæ¸æÏæÚæîæáæöæüæçççççç%ç%ç0çEçNçNçNçNçjç�ç‡çŒçŒç¡ç§ç¬ç¬ç¸çÕçóçøçýçýç è&è5èDèLèQèWè\è\ècèjè�èªè¬èÉèÞèÞèäèäèñèúèúè'é2é7éDéOéWé_éoé†é†é–é–é¨é®éÖéßéßéáéèéíéíéúéê êêê'ê4êFêQê_êhêmê”ê�ê¨ê­ê´ê¼êÏêäêéêðêýêëë+ë2ë8ëAëAëdëkëpë~ëŽëœëœë¢ë©ë²ë²ëÅë×ëÚëÚëëëóëûëì$ì+ì8ì:ìAìUìdìdìdì‹ì‹ì‹ì˜ì˜ì­ì¸ìÊì×ìâìðìûì +íí+í>í@íOídífítí‰í‰í�í˜í˜í¥í«í½í½íÊíÍíØíêíñíüíî îîî î5î7îQîfîfîfîhîoîvî‡î•î§î§î­î´î½îÂîãîìîìîòîûîûîïï'ï*ï0ï9ïAïLï^ïdïoïoï|ïï…ïŽï–ï¡ï³ï¹ïÄïÄïÑïÔïÚïãïåïðð/ð5ð@ðRðXð`ð`ð`ð`ðkðæóþÈB°FFhszƒ“¥¬²¸½âïòû ;NRXov„Š– ¥¬ÅÏØèêñöþ+7Qpw��–œ¢¨¾ßóÿ!0=LYiw’Ÿª¿âô &+2ITahhv…‡•¤¶¶¾áì ÿT·&&Q[ny‹™ ¯¶¾ÔÜï 0@IOT[bhny„‡Ž¨°Êßìï÷û '/F_cls…�”˜¡£µÌÚàäæóóóõ   $ ø×¾¾àèîû$$$13>HO[flv}ŽŽ™££µ»ËÑÖÝÝþ&,/557=CEEEV`eez„„˜¡§­ÃÈÏâææîôú --RV]cr…‹�–œ¢¢¤¨¯µ»ÀÀÀÀëüü $,Aaagjntt†—¬ÀÈÙÝîòø&(4RYd‡’˜ž¤­´É×ßãôøþ ,.:X^djszбºÀÀÕÚÚáèúÿÿÿ57QW_cj�“™¥¼ÃÉÕÚÚáåìúü ".39>FKZu…’¡½¿ÛÛâ÷ü##*.5CEMQU_krv~†Ž�©®ººÃÃææôúÿ39?\^^^iiin‘—\ïV.V.l.~.„.�.�.©.À.À.Ò.Ø.ã.ó.þ. //E/@åñÈÈÑÜçòý)+;0+3H(H(Q(w(ˆ(Ž(Ž(–(T¥¶bÎbÎ|Î�ΑΛΨνοÎÑÎÛÎðÎðÎ÷ÎúÎNÏD³³³/³9³@³L³e³n³r³„³‹³ª³H€Ž€%€%—%­%½%Ä%Û%ö%& &O&´»äp p ‚ … � › ¬ · Â Ô ì ñ  +,>V[dkxŒ“•˜�Ÿ¸ÄDò@@Ydt½ÄØßçïø +!(G_hh�ÇÐò )S_�ƒŠ‘‘·÷7w·÷77FSXXgtvv~~~�¦¿ØÚÚááïòÿ 1lsss{˜¦ÄÍÖò666Sa}›››¦©ÖØïõ -/<<`bizƒ…“•£¥³³ÓÓÓÓàó'4MUYaes�ƒ‹�“›©··ÑÜò$;FPWp|ƒœœ®³µ»ÌÝìó  -/===aa~…Œ�›ž¬°¾ÂÐÔÔíôù 5UhwyˆŠ™££±ºÐ×ü*Z_mo}† ¢¤«¼ÅÇÕ×åçõõ444?[€™žžžÀÅÅÅåêêê  !!((+0OeЦº¿¿Úçéø"CEEH†††¥¥¥ÆËËËíòòò    6 ; ; V d f u ~ ˜ š š Ÿ š À   Š     8 8 b z ’ � ³ Ã Ø ð !! !1!K!b!i!{% L�žP&P&i&k&r&ˆ&˜&ž&µ&Í&Ð&â&*' +$6;¶¶ºÒäþ $<Aþþ  'A \ No newline at end of file diff --git a/Compiler/Compiler.PRJ b/Compiler/Compiler.PRJ index 82c3857..5dbcf64 100644 --- a/Compiler/Compiler.PRJ +++ b/Compiler/Compiler.PRJ @@ -1,36 +1,39 @@ -#exe {OptOn(OPTf_WARN_PAREN);}; -#exe {OptOn(OPTf_WARN_DUP_TYPES);}; -#exe {OptOn(OPTf_KEEP_PRIVATE);}; -#include "/Kernel/Adam1a.HPP" +#exe { + Cd(__DIR__);; + OptOn(OPTf_WARN_PAREN); + OptOn(OPTf_WARN_DUP_TYPES); + OptOn(OPTf_KEEP_PRIVATE); +} +#include "/Kernel/KernelA.HPP" #exe {OptOn(OPTf_EXTERNS_TO_IMPORTS);}; -#include "/Compiler/CmpDefs.HPP" -#include "/Kernel/Adam1b.HPP" -#include "/Kernel/Adam1c.HPP" +#include "/Compiler/CompilerA.HPP" +#include "/Kernel/KernelB.HPP" +#include "/Kernel/KernelC.HPP" #exe {OptOff(OPTf_EXTERNS_TO_IMPORTS);}; #exe {OptOff(OPTf_KEEP_PRIVATE);}; -#include "CmpAsm" -#include "CmpExts" +#include "Templates" +#include "CExts" CCmpGlbls cmp; CUasmGlbls uasm; -#include "Unassembler" -#include "ICLCC" +#include "UAsm" +#include "CMisc" #include "Lex" -#include "Hash1b" -#include "Assembler" +#include "CHash" +#include "Asm" #include "OptLib" -#include "ExpParser" -#include "StmtParser" +#include "PrsExp" +#include "PrsStmt" #include "OptPass012" #include "OptPass3" #include "OptPass4" #include "OptPass5" #include "OptPass6" #include "BackLib" -#include "BackF1a" -#include "BackF1b" -#include "Back1a" -#include "Back1b" -#include "Back1c" -#include "OptPass789" -#include "CmpInit" -#include "CmpMain" +#include "BackFA" +#include "BackFB" +#include "BackA" +#include "BackB" +#include "BackC" +#include "OptPass789A" +#include "CInit" +#include "CMain" diff --git a/Compiler/CmpDefs.HPP b/Compiler/CompilerA.HPP similarity index 85% rename from Compiler/CmpDefs.HPP rename to Compiler/CompilerA.HPP index dd984c3..93053a0 100644 --- a/Compiler/CmpDefs.HPP +++ b/Compiler/CompilerA.HPP @@ -1,4 +1,21 @@ //Intermediate compiler codes +#define IS_0_ARG 0 +#define IS_1_ARG 1 +#define IS_2_ARG 2 +#define IS_V_ARG 3 //Variable Arg Cnt + +#define IST_NULL 0 +#define IST_DEREF 1 +#define IST_ASSIGN 2 +#define IST_CMP 3 + +class CIntermediateStruct +{ + U8 arg_cnt,result_cnt,type; + Bool fpop,not_const,pad[3]; + U8 *name; +}; + #define IC_END 0x00 #define IC_NOP1 0x01 #define IC_END_EXP 0x02 @@ -9,7 +26,7 @@ #define IC_CALL_END2 0x07 #define IC_RETURN_VAL 0x08 #define IC_RETURN_VAL2 0x09 -#define IC_IMM_U64 0x0A +#define IC_IMM_I64 0x0A #define IC_IMM_F64 0x0B #define IC_STR_CONST 0x0C #define IC_ABS_ADDR 0x0D @@ -70,9 +87,9 @@ #define IC_EQUAL_EQUAL 0x3A #define IC_NOT_EQUAL 0x3B #define IC_LESS 0x3C -#define IC_GREATER 0x3D -#define IC_LESS_EQUAL 0x3E -#define IC_GREATER_EQUAL 0x3F +#define IC_GREATER_EQUAL 0x3D +#define IC_GREATER 0x3E +#define IC_LESS_EQUAL 0x3F #define IC_PUSH_CMP 0x40 #define IC_AND_AND 0x41 @@ -164,18 +181,21 @@ #define IC_BR_NOT_ZERO 0x88 #define IC_BR_CARRY 0x89 #define IC_BR_NOT_CARRY 0x8A -#define IC_BR_NOT_EQUAL 0x8B -#define IC_BR_EQUAL_EQUAL 0x8C -#define IC_BR_GREATER_EQUAL 0x8D -#define IC_BR_LESS_EQUAL 0x8E + +#define IC_BR_EQUAL_EQUAL 0x8B +#define IC_BR_NOT_EQUAL 0x8C +#define IC_BR_LESS 0x8D +#define IC_BR_GREATER_EQUAL 0x8E #define IC_BR_GREATER 0x8F -#define IC_BR_LESS 0x90 -#define IC_BR_NOT_EQUAL2 0x91 -#define IC_BR_EQUAL_EQUAL2 0x92 -#define IC_BR_GREATER_EQUAL2 0x93 -#define IC_BR_LESS_EQUAL2 0x94 +#define IC_BR_LESS_EQUAL 0x90 + +#define IC_BR_EQUAL_EQUAL2 0x91 +#define IC_BR_NOT_EQUAL2 0x92 +#define IC_BR_LESS2 0x93 +#define IC_BR_GREATER_EQUAL2 0x94 #define IC_BR_GREATER2 0x95 -#define IC_BR_LESS2 0x96 +#define IC_BR_LESS_EQUAL2 0x96 + #define IC_BR_AND_ZERO 0x97 #define IC_BR_AND_NOT_ZERO 0x98 #define IC_BR_MM_ZERO 0x99 @@ -189,40 +209,33 @@ #define IC_BR_BTS 0xA0 #define IC_BR_BTR 0xA1 #define IC_BR_BTC 0xA2 -#define IC_BR_LBTS 0xA3 -#define IC_BR_LBTR 0xA4 -#define IC_BR_LBTC 0xA5 -#define IC_BR_NOT_BT 0xA6 -#define IC_BR_NOT_BTS 0xA7 -#define IC_BR_NOT_BTR 0xA8 -#define IC_BR_NOT_BTC 0xA9 -#define IC_BR_NOT_LBTS 0xAA -#define IC_BR_NOT_LBTR 0xAB -#define IC_BR_NOT_LBTC 0xAC +#define IC_BR_NOT_BT 0xA3 +#define IC_BR_NOT_BTS 0xA4 +#define IC_BR_NOT_BTR 0xA5 +#define IC_BR_NOT_BTC 0xA6 -#define IC_SWAP_U8 0xAD -#define IC_SWAP_U16 0xAE -#define IC_SWAP_U32 0xAF -#define IC_SWAP_I64 0xB0 +#define IC_SWAP_U8 0xA7 +#define IC_SWAP_U16 0xA8 +#define IC_SWAP_U32 0xA9 +#define IC_SWAP_I64 0xAA -#define IC_ABS_I64 0xB1 -#define IC_SIGN_I64 0xB2 -#define IC_MIN_I64 0xB3 -#define IC_MIN_U64 0xB4 -#define IC_MAX_I64 0xB5 -#define IC_MAX_U64 0xB6 -#define IC_MOD_U64 0xB7 -#define IC_SQR_I64 0xB8 -#define IC_SQR_U64 0xB9 -#define IC_SQR 0xBA -#define IC_ABS 0xBB -#define IC_SQRT 0xBC -#define IC_SIN 0xBD -#define IC_COS 0xBE -#define IC_TAN 0xBF -#define IC_ATAN 0xC0 -#define IC_NUM_ENTRIES 0xC1 -//Don't forget $LK,"IC_INIT_TABLE",A="FA:::/Compiler/CmpInit.CPP,IC_INIT_TABLE"$ +#define IC_ABS_I64 0xAB +#define IC_SIGN_I64 0xAC +#define IC_MIN_I64 0xAD +#define IC_MIN_U64 0xAE +#define IC_MAX_I64 0xAF +#define IC_MAX_U64 0xB0 +#define IC_MOD_U64 0xB1 +#define IC_SQR_I64 0xB2 +#define IC_SQR_U64 0xB3 +#define IC_SQR 0xB4 +#define IC_ABS 0xB5 +#define IC_SQRT 0xB6 +#define IC_SIN 0xB7 +#define IC_COS 0xB8 +#define IC_TAN 0xB9 +#define IC_ATAN 0xBA +#define IC_NUM_ENTRIES 0xBB #define KW_INCLUDE 0 #define KW_DEFINE 1 diff --git a/Compiler/Cmp.HPP b/Compiler/CompilerB.HPP similarity index 96% rename from Compiler/Cmp.HPP rename to Compiler/CompilerB.HPP index ba3a6cf..14db81c 100644 --- a/Compiler/Cmp.HPP +++ b/Compiler/CompilerB.HPP @@ -1,5 +1,5 @@ #help_index "Compiler" -extern U0 CmpInit(Bool first); +extern U0 CInit(Bool first); public extern I64 ExeFile(U8 *name,Bool just_load=FALSE); public extern I64 ExeFile2(U8 *name,Bool just_load=FALSE); public extern I64 ExePrint(U8 *fmt,...); @@ -10,15 +10,15 @@ public extern I64 ExePutS2(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE); public extern CCmpGlbls cmp; #help_index "Compiler/Directive" +#help_file "::/Doc/Directives" public extern Bool CTrace(Bool val); public extern Bool Echo(Bool val); public extern Bool GetOpt(I64 num); -public extern I64 IncludeDepth(); public extern Bool OTrace(Bool val); public extern I64 OTraceMask(I64 i=0b1001111101); -public extern Bool OptEqu(I64 num,Bool val); public extern Bool OptOff(I64 num); public extern Bool OptOn(I64 num); +extern U0 StreamDir(); public extern I64 StreamExePrint(U8 *fmt,...); public extern U0 StreamPrint(U8 *fmt,...); diff --git a/Compiler/ICLCC.CPP b/Compiler/ICLCC.CPP deleted file mode 100644 index 70b6e9b..0000000 --- a/Compiler/ICLCC.CPP +++ /dev/null @@ -1,424 +0,0 @@ -Bool OptEqu(I64 num,Bool val) -{//Set compiler option to value. - return BEqu(&Fs->last_lex->opts,num,val); -} - -Bool OptOn(I64 num) -{//Turn on compiler option. - return OptEqu(num,ON); -} - -Bool OptOff(I64 num) -{//Turn off compiler option. - return OptEqu(num,OFF); -} - -Bool GetOpt(I64 num) -{//Get state of compiler option. - return Bt(&Fs->last_lex->opts,num); -} - -Bool OTrace(Bool val) -{//Displays intermediate code after passes through optimization. - return OptEqu(OPTf_OPT_TRACE,val); -} - -I64 OTraceMask(I64 i=0b1001111101) -{//Ctrls which optimizer passes are displayed. - I64 old=Fs->last_lex->pass_trace_mask; - Fs->last_lex->pass_trace_mask=i; - return old; -} - -Bool CTrace(Bool val) -{//Displays assembly code output from compiler. - return OptEqu(OPTf_COMPILE_TRACE,val); -} - -Bool Echo(Bool val) -{//Displays text as it is being compiled. - return OptEqu(OPTf_ECHO,val); -} - -I64 IncludeDepth() -{//Returns how many #includes we are in. See $LK,"IncludeDepth",A="FF:::/Demo/Graphics/Camp.CPP,IncludeDepth"$. - CLex *lx=Fs->last_lex; - return lx->cur_lfn-&lx->lfns; -} - -U0 ICClassPut(CHashClass *c) -{ - I64 i; - if (!c) return; - if (c->ptr_cnt>4) { - PrintErr("put_class ptrcnt=%d\n",c->ptr_cnt); - while (TRUE) -//TODO: - Yield; - } - for (i=0;iptr_cnt;i++) - '*'; - c-=c->ptr_cnt; - if (c->str) - "%s",c->str; - else { - PrintErr("put_class str=NULL\n"); - while (TRUE) -//TODO: - Yield; - } - '' CH_SPACE; -} - -U0 ICArgPut(CICArg *a) -{ - if (a->type_pointed) - "%Z %Z %Z ", - a->type&RT_MASK,"ST_RAW_TYPES", - a->type_pointed&RT_MASK,"ST_RAW_TYPES", - a->type>>4,"ST_TY_TYPES"; - else - "%Z %Z ", - a->type&RT_MASK,"ST_RAW_TYPES", - a->type>>4,"ST_TY_TYPES"; - switch (a->type>>4) { - case TY_STK>>4: - "STK"; - break; - case TY_IMM>>4: - "#%X",a->disp; - break; - case TY_REG>>4: - "%Z",a->reg,"ST_U64_REGS"; - break; - case TY_DISP>>4: - "%X[%Z]",a->disp,a->reg,"ST_U64_REGS"; - break; - case TY_RIP_DISP32>>4: - "[%X]",a->disp; - break; - case TY_SIB>>4: - if (a->disp) - "%X",a->disp; - if (a->reg==REG_RIP) - '['; - else - "[%Z+",a->reg&15,"ST_U64_REGS"; - "%Z",a->reg>>8&15,"ST_U64_REGS"; - switch (a->reg>>14) { - case 0: "]"; break; - case 1: "*2]"; break; - case 2: "*4]"; break; - case 3: "*8]"; break; - } - break; - } -} - -U0 ICPut(CIntermediateCode *tempi) -{ - I64 opcode=tempi->ic_code,i; - if (opcode>=IC_END_EXP && opcode!=IC_NOP2) { - "%15ts %016X ", - DefineSub(opcode,"ST_INTERMEDIATE_CODE")+5, - tempi->ic_data; - if (tempi->r.type&TY_MASK) { - ICArgPut(&tempi->r); - "<-"; - } - if (tempi->a1.type&TY_MASK) - ICArgPut(&tempi->a1); - ','; - if (tempi->a2.type&TY_MASK) - ICArgPut(&tempi->a2); - '' CH_SPACE; - ICClassPut(tempi->ic_class); - if (tempi->ic_flags & ICF_LOCK) - "$$BROWN$$lock$$FG$$ "; - if (tempi->ic_flags & ICF_A2_TO_F64) - "$$LTBLUE$$a2d$$FG$$ "; - if (tempi->ic_flags & ICF_A2_TO_INT) - "$$GREEN$$a2i$$FG$$ "; - if (tempi->ic_flags & ICF_A1_TO_F64) - "$$LTBLUE$$a1d$$FG$$ "; - if (tempi->ic_flags & ICF_A1_TO_INT) - "$$GREEN$$a1i$$FG$$ "; - if (tempi->ic_flags & ICF_R_TO_F64) - "$$LTBLUE$$rd$$FG$$ "; - if (tempi->ic_flags & ICF_R_TO_INT) - "$$GREEN$$ri$$FG$$ "; - if (tempi->ic_flags & ICF_USE_F64) - "[F64] "; - if (tempi->ic_flags & ICF_USE_UNSIGNED) - "[unsigned] "; - if (tempi->ic_flags & ICF_USE_INT) - "[int] "; - if (tempi->ic_flags & ICF_NO_DEPEND_RESULT) - "-DEP "; - if (tempi->ic_flags & ICF_DEPEND_RESULT) - "+DEP "; - if (tempi->ic_flags & ICF_NOT_ADDR) - "NOT_ADDR "; - if (tempi->ic_flags & ICF_PUSH_RESULT) - "PUSH "; - if (tempi->ic_flags & ICF_PUSH_CMP) - "PUSH_CMP "; - if (tempi->ic_flags & ICF_POP_CMP) - "POP_CMP "; - if (tempi->ic_flags & ICF_DEL_PREVIOUS_INS) - "DELINS "; - for (i=0;i<3;i++) { - if (Bt(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0+i)) - "DONT_PUSH#%d ",i; - if (Bt(&tempi->ic_flags,ICf_DONT_POP_FLOAT0+i)) - "DONT_POP#%d ",i; - } - if (tempi->ic_flags & ICF_ALTERNATE_TEMPLATE) - "ALT_TEMP "; - '\n'; - } -} - -U0 LCCQuePut(CLex *lx) -{ - CIntermediateCode *tempi=lx->lcc.lcc_root.next; - while (tempi->ic_code) { - if (tempi->ic_flags&ICF_TRACE) - ICPut(tempi); - tempi=tempi->next; - } -} - -U0 LCCInit(CLex *lx) -{ - CLexCodeCtrl *tempcbh=&lx->lcc; - QueInit(&tempcbh->lcc_root.next); - QueInit(&tempcbh->lcc_next_misc); - tempcbh->lcc_root.ic_code=IC_END; -} - -CIntermediateCode *LCCAdd(CLex *lx, - I64 opcode_and_precedence,I64 arg, CHashClass *c,I64 flags=0) -{ - CIntermediateCode *tempi=MAlloc(sizeof(CIntermediateCode)); - tempi->ic_code=opcode_and_precedence.u16[0]; - tempi->ic_precedence=opcode_and_precedence.u16[1]; - tempi->ic_data=arg; - tempi->ic_class=c; - if (Bt(&lx->opts,OPTf_OPT_TRACE)) { - Bts(&lx->flags,Lf_OPT_TRACE_PRESENT); - flags|=ICF_TRACE; - } - if (lx->lock_cnt) - flags|=ICF_LOCK; - tempi->ic_flags=flags; - tempi->ic_line=lx->last_line_num; - QueIns(tempi,lx->lcc.lcc_root.last); - return tempi; -} - -U0 LCCPush(CLex *lx) -{ - CLexCodeCtrl *tempcbh=MAlloc(sizeof(CLexCodeCtrl)); - MemCpy(tempcbh,&lx->lcc,sizeof(CLexCodeCtrl)); - lx->lcc.lcc_next=tempcbh; -} - -CLex *LCCPopNoFree(CLex *lx) -{ - CLexCodeCtrl *tempcbh=lx->lcc.lcc_next; - MemCpy(&lx->lcc,tempcbh,sizeof(CLexCodeCtrl)); - return tempcbh; -} - -U0 LCCPop(CLex *lx) -{ - Free(LCCPopNoFree(lx)); -} - -U0 LCCAppend(CLex *lx, CLexCodeCtrl *tempcbh) -{ - if (tempcbh->lcc_root.next!=&lx->lcc.lcc_root.next) { - lx->lcc.lcc_root.last->next=tempcbh->lcc_root.next; - tempcbh->lcc_root.next->last=lx->lcc.lcc_root.last; - lx->lcc.lcc_root.last=tempcbh->lcc_root.last; - tempcbh->lcc_root.last->next=&lx->lcc.lcc_root.next; - } - if (tempcbh->lcc_next_misc!=&lx->lcc.lcc_next_misc) { - lx->lcc.lcc_last_misc->next=tempcbh->lcc_next_misc; - tempcbh->lcc_next_misc->last=lx->lcc.lcc_last_misc; - lx->lcc.lcc_last_misc=tempcbh->lcc_last_misc; - tempcbh->lcc_last_misc->next=&lx->lcc.lcc_next_misc; - } - Free(tempcbh); -} - -CLexCodeMisc *LCCMiscNew(CLex *lx,I64 ty) -{ - CLexCodeMisc *result=CAlloc(sizeof(CLexCodeMisc)); - result->addr=INVALID_PTR; - result->type=ty; - QueIns(result,lx->lcc.lcc_last_misc); - return result; -} - -CLexCodeMisc *LCCGoToLabelFind(CLex *lx,U8 *name) -{ - CLexCodeMisc *mc=lx->lcc.lcc_next_misc; - while (mc!=&lx->lcc.lcc_next_misc) { - if ((mc->type==CMT_GOTO_LABEL||mc->type==CMT_ASM_LABEL) && - !StrCmp(mc->str,name)) - return mc; - mc=mc->next; - } - return NULL; -} - -I64 LCCFloatConstFind(CLex *lx,F64 d) -{ - I64 i; - CLexCodeMisc *mc=lx->lcc.lcc_next_misc; - while (mc!=&lx->lcc.lcc_next_misc) { - if (mc->type==CMT_FLOAT_CONSTS) { - for (i=0;inum_consts;i++) - if (mc->float_consts[i]==d) - return mc->addr+i*sizeof(F64); - if (mc->num_constsfloat_consts[mc->num_consts++]=d; - return mc->addr+i*sizeof(F64); - } - } - mc=mc->next; - } - mc=LCCMiscNew(lx,CMT_FLOAT_CONSTS); - mc->float_consts=MAlloc(CM_MAX_CONSTS*sizeof(F64)); - mc->float_consts[mc->num_consts++]=d; - return mc->addr; -} - -U0 LCCDel(CLex *lx,CLexCodeCtrl *lcc) -{ - CLexCodeMisc *mc,*mc1; - U8 *undef=NULL; - QueDel(&lcc->lcc_root.next); - mc=lcc->lcc_next_misc; - while (mc!=&lcc->lcc_next_misc) { - mc1=mc->next; - switch (mc->type) { - case CMT_GOTO_LABEL: - case CMT_ASM_LABEL: - if (!(mc->flags&CMF_DEFINED)) { - undef=mc->str; - mc->str=NULL; - } else if (!mc->use_cnt) { - PrintWarn("Unused label %s\n",mc->str); - LexWarn(lx,"Unused label at "); - } - break; - case CMT_JMP_TABLE: - Free(mc->jmp_table); - break; - case CMT_FLOAT_CONSTS: - Free(mc->float_consts); - break; - case CMT_ARRAY_DIM: - LinkedLstDel(mc->dim); - break; - case CMT_HASH_ENTRY: - HashDel(mc->h); - break; - } - Free(mc->str); - Free(mc); - mc=mc1; - } - if (undef) { - PrintErr("Undefined goto label %s\n",undef); - Free(undef); - LexExcept(lx,"Undefined goto label at "); - } -} - -U0 LCCHeaderPut(CLex *lx,I64 pass,Bool put) -{ - if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) { - if (put) { - if (Bt(&lx->pass_trace_mask,pass-1)) { - "$$IV,1$$Pass %d:$$IV,0$$\n",pass-1; - LCCQuePut(lx); - } - } else if (Bt(&lx->pass_trace_mask,pass)) - "$$IV,1$$Pass %d:$$IV,0$$\n",pass; - } - lx->pass=pass; -} - -U8 *LCCCompile(CLex *lx,I64 *_code_size,CDbgInfo **_dbg,I64 *_type) -{ - U8 *result; - CLexCodeMisc *lb; - I64 i,code_size,last_code_size; - - COptReg reg_offsets[NUM_REGS]; - if (_dbg) *_dbg=NULL; - LCCHeaderPut(lx,1,TRUE); - OptPass012(lx); - LCCHeaderPut(lx,2,TRUE); - OptPass012(lx); - LCCHeaderPut(lx,3,TRUE); - OptPass3(lx,reg_offsets); - LCCHeaderPut(lx,4,TRUE); - OptPass4(lx,reg_offsets,_type); - LCCHeaderPut(lx,5,TRUE); - OptPass5(lx); - LCCHeaderPut(lx,6,TRUE); - OptPass6(lx); - LCCHeaderPut(lx,7,TRUE); - - lb=lx->lcc.lcc_next_misc; - while (lb!=&lx->lcc.lcc_next_misc) { - if (lb->type==CMT_JMP_TABLE) { - for (i=0;irange;i++) - lb->jmp_table[i]=OptLabelFwd(lb->jmp_table[i]); - lb->dft=OptLabelFwd(lb->dft); - } - lb=lb->next; - } - - LCCHeaderPut(lx,7,FALSE); - OptPass789(lx,reg_offsets,NULL,NULL); - LCCHeaderPut(lx,8,FALSE); - code_size=OptPass789(lx,reg_offsets,NULL,NULL); - do { - last_code_size=code_size; - LCCHeaderPut(lx,8,FALSE); - code_size=OptPass789(lx,reg_offsets,NULL,NULL); - if (code_size>last_code_size) { - "Pass:8 Code Size\n"; - LexExcept(lx,"Compiler Optimization Error at "); - } - } while (code_sizeflags&LF_AOT_COMPILE) - result=MAlloc(code_size); - else - result=MAlloc(code_size,Fs->code_heap); - LCCHeaderPut(lx,9,FALSE); - code_size=OptPass789(lx,reg_offsets,result,_dbg); - - cmp.compiled_bytes+=code_size; - LCCDel(lx,&lx->lcc); - if (Bt(&lx->opts,OPTf_COMPILE_TRACE)) { - if (lx->flags&LF_AOT_COMPILE) { - if (lx->a->seg_size==16) - Un(result,code_size,16); - else if (lx->a->seg_size==64) - Un(result,code_size,64); - else - Un(result,code_size,32); - } else - Un(result,code_size,64); - } - if (_code_size) *_code_size=code_size; - return result; -} diff --git a/Compiler/Lex.CPP b/Compiler/Lex.CPP index f56b988..8a29eb0 100644 --- a/Compiler/Lex.CPP +++ b/Compiler/Lex.CPP @@ -36,14 +36,14 @@ CLex *LexNew(U8 *buf=NULL,I64 flags=0,U8 *filename=NULL) {//MAlloc new lex ctrl node. //Frees buf in $LK,"LexDel",A="MN:LexDel"$ unless $LK,"LF_DONT_FREE_BUF",A="MN:LF_DONT_FREE_BUF"$ flag is set. //FileName is for error reporting. If files are #included, new names are used. -//See $LK,"Psalmody LexNew",A="FF:::/Apps/Psalmody/Psalmody.CPP,LexNew"$. +//See $LK,"Psalmody LexNew",A="FF:::/Apps/Psalmody/PsalmodyFile.CPP,LexNew"$. CLex *lx=MAlloc(sizeof(CLex)); CLexFile *tempf=&lx->lfns[0]; - MemSet(lx,0,offset(CLex.end_of_zeroed_members)+sizeof(CLexFile)); + MemSet(lx,0,offset(CLex.end_zeroed)+sizeof(CLexFile)); QueInit(lx); lx->flags=flags; lx->opts=1<pass_trace_mask=0b1001111101; + lx->otrace_mask=0b10001111101; lx->htc.hash_mask=HTG_TYPE_MASK-HTT_IMPORT_SYS_SYM; lx->htc.define_hash_table=lx->htc.hash_table_lst=lx->htc.glbl_hash_table=lx->htc.local_hash_table=Fs->hash_table; if (flags&LF_KEEP_AT_SIGN) @@ -53,9 +53,9 @@ CLex *LexNew(U8 *buf=NULL,I64 flags=0,U8 *filename=NULL) lx->cur_lfn=tempf; QueInit(&lx->next_stream_blk); if (filename) - tempf->name=FileNameAbs(filename); + tempf->full_name=FileNameAbs(filename); else - tempf->name=StrNew(dsk.temp_filename); + tempf->full_name=StrNew(dsk.temp_filename); if (flags & LF_PMT) buf=CAlloc(4); tempf->buf=tempf->buf_ptr=tempf->line_start=lx->cur_buf_ptr=buf; @@ -71,17 +71,17 @@ U0 LexDel(CLex *lx) if (doc=tempf->doc) DocDel(doc); Free(tempf->buf); - Free(tempf->name); + Free(tempf->full_name); tempf--; } LinkedLstDel(lx->htc.next); - Free(tempf->name); + Free(tempf->full_name); if (!(lx->flags & LF_DONT_FREE_BUF)) Free(tempf->buf); Free(lx->ps); Free(lx->cur_str); Free(lx->cur_help_index); - Free(lx->dollar); + Free(lx->dollar_buf); Free(lx); } @@ -94,10 +94,10 @@ I64 LexSize(CLex *lx) if (doc=tempf->doc) result+=DocSize(doc); result+=MSize2(tempf->buf); - result+=MSize2(tempf->name); + result+=MSize2(tempf->full_name); tempf--; } - result+=MSize2(tempf->name); + result+=MSize2(tempf->full_name); if (!(lx->flags & LF_DONT_FREE_BUF)) result+=MSize2(tempf->buf); result+=MSize2(lx->cur_str); @@ -143,9 +143,9 @@ Bool LexDollar(CLex *lx,CDoc *doc,CDocEntry *doc_e) { U8 *st; if (lx->flags&LF_IN_QUOTES) { - Free(lx->dollar); + Free(lx->dollar_buf); st=Doc2PlainText(doc,doc_e); - lx->dollar=MStrPrint("$$%Q$$",st); + lx->dollar_buf=MStrPrint("$$%Q$$",st); lx->dollar_cnt=2; Free(st); return TRUE; @@ -181,7 +181,7 @@ lgc_start2: if (doc_e->de_flags & ~(DOCEF_TAG|DOCEF_DEFINE|DOCEF_TAG_CB| DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT| DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP) && - LexDollar(lx,doc,doc_e) && *(src=lx->dollar)) { + LexDollar(lx,doc,doc_e) && *(src=lx->dollar_buf)) { tempf->line_num=doc_e->y+1; tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src; } else if (*(src=doc_e->tag)) @@ -196,8 +196,6 @@ lgc_start2: tempf->line_start=doc_e->next; tempf->line_num=doc_e->y+2; //+1 because NEW_LINE is on previous line, +1 because doc y starts at zero cmp.compiled_lines++; - if (tempf==lx->fun_lfn && tempf->line_num>lx->max_line) - lx->max_line=tempf->line_num; lx->last_U16='\n'; goto lgc_done; case DOCT_TAB: @@ -235,7 +233,7 @@ lgc_start2: lx->last_U16=TK_INS_BINARY_SIZE; goto lgc_done; case DOCT_SHIFTED_Y: - if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar)) { + if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar_buf)) { tempf->line_num=doc_e->y+1; tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src; } else { @@ -255,7 +253,7 @@ lgc_start2: goto lgc_start2; case 0xFF: //nobound_switch default: - if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar)) { + if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar_buf)) { tempf->line_num=doc_e->y+1; tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src; } else { @@ -269,13 +267,13 @@ lgc_start2: if (tempf!=&lx->lfns[0] || !(lx->flags&LF_DONT_FREE_BUF)) DocDel(doc); tempf->doc=tempf->buf=NULL; - Free(tempf->name); - tempf->name=NULL; + Free(tempf->full_name); + tempf->full_name=NULL; } tempf=lx->cur_lfn; if (tempf!=&lx->lfns[0]) { - Free(tempf->name); - tempf->name=NULL; + Free(tempf->full_name); + tempf->full_name=NULL; Free(tempf->buf); tempf->buf=NULL; tempf1=tempf; @@ -306,8 +304,6 @@ lgc_start2: tempf->line_num++; cmp.compiled_lines++; tempf->line_start=src; - if (tempf==lx->fun_lfn && tempf->line_num>lx->max_line) - lx->max_line=tempf->line_num; } break; case 0xFF: //nobound_switch @@ -363,9 +359,9 @@ U0 LexIncludeStr(CLex *lx,U8 *abs_filename,U8 *src,Bool actual_file) tempf->last_U16=0; tempf->flags=0; if (actual_file) - tempf->name=StrNew(abs_filename); + tempf->full_name=StrNew(abs_filename); else - tempf->name=StrNew(dsk.temp_filename); + tempf->full_name=StrNew(dsk.temp_filename); lx->cur_buf_ptr=src; } @@ -401,7 +397,7 @@ U0 LexAttachDoc(CLex *lx,CLexFile *tempf=NULL, } if (!doc_e) doc_e=doc->root.next; - tempf->name=StrNew(doc->filename.name); + tempf->full_name=StrNew(doc->filename.name); tempf->doc=doc; while (doc_e!=doc) { if (Bt(cmp_type_flags_src_code,doc_e->type_u8)) @@ -460,7 +456,7 @@ U0 LexPop(CLex *lx) } I64 MemberMetaData(U8 *needle_str,CMemberLst *haystack_member_lst) -{//Find meta data name, return meta data val. See $LK,"::/Demo/ClassMeta.CPP.Z"$. +{//Find meta data name, return meta data val. See $LK,"::/Demo/ClassMeta.CPP"$. CMemberLstMeta *meta=haystack_member_lst->meta; while (meta) { if (!StrCmp(meta->str,needle_str)) @@ -471,7 +467,7 @@ I64 MemberMetaData(U8 *needle_str,CMemberLst *haystack_member_lst) } CMemberLstMeta *MemberMetaFind(U8 *needle_str,CMemberLst *haystack_member_lst) -{//Find meta data name, return meta data struct. See $LK,"::/Demo/ClassMeta.CPP.Z"$. +{//Find meta data name, return meta data struct. See $LK,"::/Demo/ClassMeta.CPP"$. CMemberLstMeta *meta=haystack_member_lst->meta; while (meta) { if (!StrCmp(meta->str,needle_str)) @@ -524,7 +520,7 @@ U0 MemberAdd(CLex *lx,CMemberLst *tempm,CHashClass *tempc,I64 mode) if (MemberFind(st,tempc) && StrCmp(st,"pad") && StrCmp(st,"reserved") && StrCmp(st,"_anon_")) LexExcept(lx,"Duplicate member at "); if (mode==PRS1B_LOCAL_VAR) { - tempc2=tempm->member_class-tempm->member_class->ptr_cnt; + tempc2=tempm->member_class-tempm->member_class->ptr_stars_cnt; if (Bt(&lx->opts,OPTf_WARN_DUP_TYPES) && MemberFind2(tempc2,tempc)) LexWarn(lx,"Duplicate type at "); } else @@ -576,7 +572,7 @@ U0 MemberLstDel(CHashClass *tempc) if (tempm->flags & MLF_STR_DFT_AVAILABLE) Free(tempm->dft_val); if (tempm->flags & MLF_FUN) - HashDel(tempm->fun_ptr-tempm->fun_ptr->ptr_cnt); + HashDel(tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); temp_meta=tempm->meta; while (temp_meta) { temp_meta1=temp_meta->next; @@ -610,7 +606,7 @@ I64 MemberLstSize(CHashClass *tempc) if (tempm->flags & MLF_STR_DFT_AVAILABLE) result+=MSize2(tempm->dft_val); if (tempm->flags & MLF_FUN) - result+=HashEntrySize2(tempm->fun_ptr-tempm->fun_ptr->ptr_cnt); + result+=HashEntrySize2(tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); temp_meta=tempm->meta; while (temp_meta) { result+=MSize2(temp_meta->str); @@ -657,6 +653,9 @@ I64 LexInStr(CLex *lx,U8 *buf,I64 size,Bool *done) case 't': buf[i++]='\t'; break; + case '0': + buf[i++]=0; + break; case 'x': case 'X': j=0; @@ -673,36 +672,6 @@ I64 LexInStr(CLex *lx,U8 *buf,I64 size,Bool *done) buf[i++]=j; lx->flags|=LF_USE_LAST_U16; break; - case 'b': - case 'B': - j=0; - while (TRUE) { - ch=LexGetChar(lx); - if ('0'<=ch<='1') - j=j<<1+ch-'0'; - else - break; - } - buf[i++]=j; - lx->flags|=LF_USE_LAST_U16; - break; - case 'o': - case 'O': - j=0; - goto lis_octal; - case '0'...'7': - j=ch-'0'; -lis_octal: - while (TRUE) { - ch=LexGetChar(lx); - if ('0'<=ch<='7') - j=j<<3+ch-'0'; - else - break; - } - buf[i++]=j; - lx->flags|=LF_USE_LAST_U16; - break; default: lx->flags|=LF_USE_LAST_U16; buf[i++]='\\'; @@ -831,18 +800,6 @@ lex_ident: goto lex_end; } } - } else if (ch=='O') { - while (TRUE) { - ch=LexGetChar(lx); - if ('0'<=ch<='7') - i=i<<3+ch-'0'; - else { - lx->cur_i64=i; - lx->flags|=LF_USE_LAST_U16; - lx->token=TK_INTEGER; - goto lex_end; - } - } } while (TRUE) { if (Bt(chars_bitmap_dec_numeric,ch)) @@ -958,6 +915,9 @@ lex_float_start: case 't': k.u8[j]='\t'; break; + case '0': + k.u8[j]=0; + break; case 'x': case 'X': i=0; @@ -974,39 +934,9 @@ lex_float_start: k.u8[j]=i; lx->flags|=LF_USE_LAST_U16; break; - case 'b': - case 'B': - i=0; - while (TRUE) { - ch=LexGetChar(lx); - if ('0'<=ch<='1') - i=i<<1+ch-'0'; - else - break; - } - k.u8[j]=i; - lx->flags|=LF_USE_LAST_U16; - break; - case 'o': - case 'O': - i=0; - goto lex_octal; - case '0'...'7': - i=ch-'0'; -lex_octal: - while (TRUE) { - ch=LexGetChar(lx); - if ('0'<=ch<='7') - i=i<<3+ch-'0'; - else - break; - } - k.u8[j]=i; - lx->flags|=LF_USE_LAST_U16; - break; default: - lx->flags|=LF_USE_LAST_U16; k.u8[j]='\\'; + lx->flags|=LF_USE_LAST_U16; } } else if (ch=='$$') { ch=LexGetChar(lx); @@ -1053,7 +983,7 @@ lex_octal: temph->str=lx->cur_str; lx->cur_str=0; temph->type=HTT_DEFINE_STR; - SetSrcFileInfo(lx,temph); + HashSrcFileSet(lx,temph); do ch=LexGetChar(lx); //skip space between define name and start while (Bt(chars_bitmap_non_eol_white_space,ch)); @@ -1153,6 +1083,7 @@ lex_else: } } while (j); break; + case KW_IF: if (lx->flags & LF_IN_IF) { lx->token=TK_IF; @@ -1367,7 +1298,7 @@ lex_ifjit: temph->str=FileNameAbs(fbuf); Free(fbuf); temph->type=HTT_HELP_FILE|HTF_PUBLIC; - SetSrcFileInfo(lx,temph); + HashSrcFileSet(lx,temph); HashAdd(temph,lx->htc.glbl_hash_table); break; } @@ -1571,12 +1502,12 @@ U8 *LexPutLine(CLex *lx,U8 *start) U0 LexPutPos(CLex *lx) {//Print token, line link and, then, $LK,"LexPutLine",A="MN:LexPutLine"$(). LexPutToken(lx); - SetFix(lx->cur_lfn->name,lx->cur_lfn->line_num); + FixSet(lx->cur_lfn->full_name,lx->cur_lfn->line_num); if (IsRaw) - "%s,%d ",lx->cur_lfn->name,lx->cur_lfn->line_num; + "%s,%d ",lx->cur_lfn->full_name,lx->cur_lfn->line_num; else { - PutFileLink(lx->cur_lfn->name,lx->cur_lfn->line_num); - AdamErr("%s,%d\n",lx->cur_lfn->name,lx->cur_lfn->line_num); + PutFileLink(lx->cur_lfn->full_name,lx->cur_lfn->line_num); + AdamErr("%s,%d\n",lx->cur_lfn->full_name,lx->cur_lfn->line_num); '' CH_SPACE; } LexPutLine(lx,lx->cur_lfn->line_start); diff --git a/Compiler/OpCodes.TXT b/Compiler/OpCodes.TXT index 9df9336..d5571d8 100644 --- a/Compiler/OpCodes.TXT +++ b/Compiler/OpCodes.TXT @@ -8,7 +8,6 @@ '^'= Rex xor-like ':'= floating sti-like for disassembly '$$'= ending zero (ENTER) - $FG,4$Note:$FG$ TempleOS uses nonstandard opcodes. Asm is kind-of a bonus and I made changes to make the assembler simpler. For opcodes @@ -906,7 +905,8 @@ OPCODE CMPXCHG OPCODE CHPXCHG8B 0x0F 0xC7, RM64; OPCODE DAA 0x27; OPCODE DAS 0x2F; -OPCODE ENTER 0xC8, $$IW IMM16; +OPCODE ENTER + 0xC8, $$IW IMM16; OPCODE HLT 0xF4; OPCODE IN 0xE4, IB &AL UIMM8 diff --git a/Compiler/OptLib.CPP b/Compiler/OptLib.CPP index 76801d7..3092ed7 100644 --- a/Compiler/OptLib.CPP +++ b/Compiler/OptLib.CPP @@ -97,6 +97,7 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tempi, CIntermediateCode *tempi1,CIntermediateCode *tempi2, Bool *is_unsigned) { + CIntermediateCode *tempii; CHashClass *tempc=tempi->ic_class,*tempc1,*tempc2; if (tempi1->ic_flags&ICF_R_TO_INT) @@ -121,36 +122,54 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tempi, tempc=tempi->ic_class=tempc2; if (tempc->raw_type==RT_F64) { - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { tempi1->ic_data(F64)=tempi1->ic_data; tempi1->ic_class=cmp.internal_types[RT_F64]; tempi1->ic_code=IC_IMM_F64; tempi1->ic_flags&=~ICF_R_TO_F64; } else if (tempc1->raw_type!=RT_F64) - tempi1->ic_flags|=ICF_R_TO_F64; - if (tempi2->ic_code==IC_IMM_U64) { + tempi1->ic_flags|=ICF_R_TO_F64; + if (tempi2->ic_code==IC_IMM_I64) { tempi2->ic_data(F64)=tempi2->ic_data; tempi2->ic_class=cmp.internal_types[RT_F64]; tempi2->ic_code=IC_IMM_F64; tempi2->ic_flags&=~ICF_R_TO_F64; } else if (tempc2->raw_type!=RT_F64) - tempi2->ic_flags|=ICF_R_TO_F64; - if (tempi1->ic_code==IC_IMM_F64 && - tempi2->ic_code==IC_IMM_F64 && - !(tempi->ic_flags&(ICF_PUSH_CMP|ICF_POP_CMP))) { - tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags; - OptSetNOP1(tempi1); - OptSetNOP1(tempi2); - return FBO1_F64; - } else - return FBO1_NOT_CONST; + tempi2->ic_flags|=ICF_R_TO_F64; + if (IC_LESS<=tempi->ic_code<=IC_GREATER_EQUAL && (tempii=OptLead1(tempi)) && + tempii->ic_code!=IC_PUSH_CMP && tempii->ic_code!=IC_AND_AND) { + //We are looking for float comparisons to zero to convert to int. + if (tempi1->ic_code==IC_IMM_F64 && !tempi1->ic_data && + tempi2->ic_code==IC_DEREF && tempc2==cmp.internal_types[RT_F64]) { + tempi1->ic_code==IC_IMM_I64; + goto fb_here1; + } else if (tempi2->ic_code==IC_IMM_F64 && !tempi2->ic_data && + tempi1->ic_code==IC_DEREF && tempc1==cmp.internal_types[RT_F64]) { + tempi2->ic_code==IC_IMM_I64; +fb_here1: + tempi1->ic_flags&=~ICF_R_TO_F64; + tempi->ic_class=tempi1->ic_class=tempi2->ic_class=cmp.internal_types[RT_I64]; + *is_unsigned=FALSE; + return FBO1_NOT_CONST; + } + goto fb_here2; + } else { +fb_here2: + if (tempi1->ic_code==IC_IMM_F64 && tempi2->ic_code==IC_IMM_F64 && + !(tempi->ic_flags&(ICF_PUSH_CMP|ICF_POP_CMP))) { + tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags; + OptSetNOP1(tempi1); + OptSetNOP1(tempi2); + return FBO1_F64; + } else + return FBO1_NOT_CONST; + } } *is_unsigned=tempc1->raw_type&1 || tempc2->raw_type&1; - if (tempi1->ic_code==IC_IMM_U64 && - tempi2->ic_code==IC_IMM_U64 && - !(tempi->ic_flags&(ICF_PUSH_CMP|ICF_POP_CMP))) { + if (tempi1->ic_code==IC_IMM_I64 && tempi2->ic_code==IC_IMM_I64 && + !(tempi->ic_flags&(ICF_PUSH_CMP|ICF_POP_CMP))) { tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags; OptSetNOP1(tempi1); OptSetNOP1(tempi2); @@ -163,11 +182,9 @@ Bool OptFixupBinaryOp2(CIntermediateCode **tempi1,CIntermediateCode **tempi2) { CIntermediateCode *tempii1=*tempi1, *tempii2=*tempi2; - if (tempii1->ic_code==IC_IMM_U64 && - !(tempii1->ic_flags & ICF_R_TO_F64)) + if (tempii1->ic_code==IC_IMM_I64 && !(tempii1->ic_flags & ICF_R_TO_F64)) return TRUE; - if (tempii2->ic_code==IC_IMM_U64 && - !(tempii2->ic_flags & ICF_R_TO_F64)) { + if (tempii2->ic_code==IC_IMM_I64 && !(tempii2->ic_flags & ICF_R_TO_F64)) { *tempi1=tempii2; *tempi2=tempii1; return TRUE; @@ -184,7 +201,7 @@ Bool OptFixupUnaryOp(CIntermediateCode *tempi, tempi->ic_class=tempc1; tempc=tempi->ic_class; if (tempc->raw_type==RT_F64) { - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { tempi1->ic_data(F64)=tempi1->ic_data; tempi1->ic_class=cmp.internal_types[RT_F64]; tempi1->ic_code=IC_IMM_F64; @@ -200,7 +217,7 @@ Bool OptFixupUnaryOp(CIntermediateCode *tempi, return FBO1_NOT_CONST; } *is_unsigned=tempc1->raw_type&1; - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { tempi->ic_flags|=tempi1->ic_flags; OptSetNOP1(tempi1); return FBO1_INT; @@ -223,23 +240,8 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi) tempi->t.a1t=tempii->t.a1t; OptFree(tempii); return OptBrNotZero(lx,tempi); - case IC_EQUAL_EQUAL: - tempi->ic_code=IC_BR_NOT_EQUAL; - break; - case IC_NOT_EQUAL: - tempi->ic_code=IC_BR_EQUAL_EQUAL; - break; - case IC_LESS: - tempi->ic_code=IC_BR_GREATER_EQUAL; - break; - case IC_GREATER: - tempi->ic_code=IC_BR_LESS_EQUAL; - break; - case IC_LESS_EQUAL: - tempi->ic_code=IC_BR_GREATER; - break; - case IC_GREATER_EQUAL: - tempi->ic_code=IC_BR_LESS; + case IC_EQUAL_EQUAL...IC_LESS_EQUAL: + tempi->ic_code=(tempii->ic_code-IC_EQUAL_EQUAL)^1+IC_BR_EQUAL_EQUAL; break; case IC_OR_OR: tempi->ic_code=IC_BR_OR_OR_ZERO; @@ -265,27 +267,21 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi) case IC_BT: tempii2->ic_code=IC_BR_NOT_BT; break; + case IC_LBTS: + tempii2->ic_flags|=ICF_LOCK; case IC_BTS: tempii2->ic_code=IC_BR_NOT_BTS; break; + case IC_LBTR: + tempii2->ic_flags|=ICF_LOCK; case IC_BTR: tempii2->ic_code=IC_BR_NOT_BTR; break; + case IC_LBTC: + tempii2->ic_flags|=ICF_LOCK; case IC_BTC: tempii2->ic_code=IC_BR_NOT_BTC; break; - case IC_LBTS: - tempii2->ic_code=IC_BR_NOT_LBTS; - tempii2->ic_flags|=ICF_LOCK; - break; - case IC_LBTR: - tempii2->ic_code=IC_BR_NOT_LBTR; - tempii2->ic_flags|=ICF_LOCK; - break; - case IC_LBTC: - tempii2->ic_code=IC_BR_NOT_LBTC; - tempii2->ic_flags|=ICF_LOCK; - break; sub_switch_end: tempii2->ic_data=tempi->ic_data; tempii->ic_code=IC_CALL_END2; @@ -304,11 +300,11 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi) OptFree(tempii); if (tempi->ic_flags&ICF_PUSH_CMP && - IC_BR_NOT_EQUAL<=tempi->ic_code<=IC_BR_LESS && + IC_BR_NOT_EQUAL<=tempi->ic_code<=IC_BR_LESS_EQUAL && !(tempi->ic_flags&ICF_USE_F64)) { - tempi->ic_code+=IC_BR_NOT_EQUAL2-IC_BR_NOT_EQUAL; + tempi->ic_code+=IC_BR_EQUAL_EQUAL2-IC_BR_EQUAL_EQUAL; tempi->ic_flags&=~ICF_PUSH_CMP; - tempii =tempi->next; //IC_PUSH_CMP instruction + tempii=tempi->next; //IC_PUSH_CMP instruction while (tempii->ic_code!=IC_PUSH_CMP) tempii=tempii->next; tempii->t.a1t=tempi; @@ -371,23 +367,8 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) tempi->t.a1t=tempii->t.a1t; OptFree(tempii); return OptBrZero(lx,tempi); - case IC_EQUAL_EQUAL: - tempi->ic_code=IC_BR_EQUAL_EQUAL; - break; - case IC_NOT_EQUAL: - tempi->ic_code=IC_BR_NOT_EQUAL; - break; - case IC_LESS: - tempi->ic_code=IC_BR_LESS; - break; - case IC_GREATER: - tempi->ic_code=IC_BR_GREATER; - break; - case IC_LESS_EQUAL: - tempi->ic_code=IC_BR_LESS_EQUAL; - break; - case IC_GREATER_EQUAL: - tempi->ic_code=IC_BR_GREATER_EQUAL; + case IC_EQUAL_EQUAL...IC_LESS_EQUAL: + tempi->ic_code=tempii->ic_code+IC_BR_EQUAL_EQUAL-IC_EQUAL_EQUAL; break; case IC_OR_OR: tempi->ic_code=IC_BR_OR_OR_NOT_ZERO; @@ -413,27 +394,21 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) case IC_BT: tempii2->ic_code=IC_BR_BT; break; + case IC_LBTS: + tempii2->ic_flags|=ICF_LOCK; case IC_BTS: tempii2->ic_code=IC_BR_BTS; break; + case IC_LBTR: + tempii2->ic_flags|=ICF_LOCK; case IC_BTR: tempii2->ic_code=IC_BR_BTR; break; + case IC_LBTC: + tempii2->ic_flags|=ICF_LOCK; case IC_BTC: tempii2->ic_code=IC_BR_BTC; break; - case IC_LBTS: - tempii2->ic_code=IC_BR_LBTS; - tempii2->ic_flags|=ICF_LOCK; - break; - case IC_LBTR: - tempii2->ic_code=IC_BR_LBTR; - tempii2->ic_flags|=ICF_LOCK; - break; - case IC_LBTC: - tempii2->ic_code=IC_BR_LBTC; - tempii2->ic_flags|=ICF_LOCK; - break; sub_switch_end: tempii2->ic_data=tempi->ic_data; tempii->ic_code=IC_CALL_END2; @@ -452,11 +427,11 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) OptFree(tempii); if (tempi->ic_flags&ICF_PUSH_CMP && - IC_BR_NOT_EQUAL<=tempi->ic_code<=IC_BR_LESS && + IC_BR_NOT_EQUAL<=tempi->ic_code<=IC_BR_LESS_EQUAL && !(tempi->ic_flags&ICF_USE_F64)) { - tempi->ic_code+=IC_BR_NOT_EQUAL2-IC_BR_NOT_EQUAL; + tempi->ic_code+=IC_BR_EQUAL_EQUAL2-IC_BR_EQUAL_EQUAL; tempi->ic_flags&=~ICF_PUSH_CMP; - tempii =tempi->next; //IC_PUSH_CMP instruction + tempii=tempi->next; //IC_PUSH_CMP instruction while (tempii->ic_code!=IC_PUSH_CMP) tempii=tempii->next; tempii->t.a1t=tempi; @@ -508,12 +483,11 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) U0 OptFixSizeOf(CIntermediateCode *tempi1,CIntermediateCode *tempi_push,CHashClass *tempcc) { - if (tempi1->ic_code==IC_MUL && - tempi1->t.a2t->ic_code==IC_SIZEOF) { - tempi1->t.a2t->ic_code=IC_IMM_U64; + if (tempi1->ic_code==IC_MUL && tempi1->t.a2t->ic_code==IC_SIZEOF) { + tempi1->t.a2t->ic_code=IC_IMM_I64; tempi1->t.a2t->ic_class=tempcc; tempi_push->ic_class=tempcc; - if (tempcc->ptr_cnt) { + if (tempcc->ptr_stars_cnt) { tempcc--; if (tempcc->size==1) goto here; @@ -542,7 +516,7 @@ I64 CmpRawType(CHashClass *tempc) I64 CmpRawTypePointed(CHashClass *tempc) { if (tempc) { - if (tempc->ptr_cnt) + if (tempc->ptr_stars_cnt) tempc--; tempc=OptClassFwd(tempc); return tempc->raw_type; @@ -552,7 +526,7 @@ I64 CmpRawTypePointed(CHashClass *tempc) U0 CmpF1PushPop(CIntermediateCode *tempi,CIntermediateCode *tempi2) { - if (Bt(cmp.ic_bitmap_fpop,tempi2->ic_code)|| tempi2->ic_flags&ICF_R_TO_F64) + if (intermediate_code_table[tempi2->ic_code].fpop|| tempi2->ic_flags&ICF_R_TO_F64) Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); } @@ -560,9 +534,9 @@ U0 CmpF2PushPop(CIntermediateCode *tempi,CIntermediateCode *tempi1,CIntermediate { if ((tempi2->ic_code==IC_MOV || tempi2->ic_code==IC_IMM_F64) && !(tempi2->ic_flags&ICF_R_TO_F64) && - (Bt(cmp.ic_bitmap_fpop,tempi1->ic_code) || tempi1->ic_flags&ICF_R_TO_F64)) + (intermediate_code_table[tempi1->ic_code].fpop || tempi1->ic_flags&ICF_R_TO_F64)) Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); - else if ((Bt(cmp.ic_bitmap_fpop,tempi2->ic_code) || tempi2->ic_flags&ICF_R_TO_F64)&& + else if ((intermediate_code_table[tempi2->ic_code].fpop || tempi2->ic_flags&ICF_R_TO_F64)&& !(tempi1->ic_flags&ICF_R_TO_F64)) Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); } diff --git a/Compiler/OptPass012.CPP b/Compiler/OptPass012.CPP index 82cb387..99f7192 100644 --- a/Compiler/OptPass012.CPP +++ b/Compiler/OptPass012.CPP @@ -3,7 +3,7 @@ Pass#0 When parsing the arg expressions to a function call, there is a call to OptPass012 to determine -the type of the expression. $LK,"OptPass012",A="FF:::/Compiler/ExpParser.CPP,OptPass012"$ +the type of the expression. $LK,"OptPass012",A="FF:::/Compiler/PrsExp.CPP,OptPass012"$ Pass#1&2 Constant expressions are simplified. @@ -44,25 +44,25 @@ args. tempi->ic_class2=tempc; tempi_push=tempi; MemSet(&tempi->a1,0,sizeof(CICArg)*4); - nobound_switch (cmp.arg_cnt[code]) { - case 9: + nobound_switch (intermediate_code_table[code].arg_cnt) { + case IS_V_ARG: ps->ptr-=tempi->ic_data>>2; break; - case 2: + case IS_2_ARG: tempi2=PrsPop(ps); tempc2=tempi2->ic_class; tempi->t.a2t=tempi2; tempi->t.a2c=PrsPop(ps); - case 1: + case IS_1_ARG: tempi1=PrsPop(ps); tempc1=tempi1->ic_class; tempi->t.a1t=tempi1; tempi->t.a1c=PrsPop(ps); break; - case 0: //nobound_switch + case IS_0_ARG: //nobound_switch break; } - if (Bt(cmp.ic_bitmap_not_const,code)) + if (intermediate_code_table[code].not_const) lx->flags|=LF_NOT_CONST; nobound_switch (code) { case IC_IMM_F64: @@ -70,11 +70,11 @@ args. if (lx->pass==2 && tempi->ic_flags&ICF_R_TO_INT) { tempi->ic_data=ToI64(tempi->ic_data(F64)); tempi->ic_flags&=~ICF_R_TO_INT; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; tempi->ic_class=cmp.internal_types[RT_I64]; } break; - case IC_IMM_U64: + case IC_IMM_I64: tempi->ic_flags&=~ICF_R_TO_INT; if (lx->pass==2 && tempi->ic_flags&ICF_R_TO_F64) { tempi->ic_data(F64)=ToF64(tempi->ic_data); @@ -84,18 +84,18 @@ args. } break; case IC_HOLYC_TYPECAST: - if (tempi1->ic_code==IC_IMM_U64 || tempi1->ic_code==IC_IMM_F64) { + if (tempi1->ic_code==IC_IMM_I64 || tempi1->ic_code==IC_IMM_F64) { if (tempi->ic_class->raw_type==RT_F64) tempi1->ic_code=IC_IMM_F64; else - tempi1->ic_code=IC_IMM_U64; + tempi1->ic_code=IC_IMM_I64; tempi1->ic_class=tempi->ic_class; tempi1->ic_flags|=tempi->ic_flags; tempi_push=tempi1; OptSetNOP1(tempi); } else { if (tempi->ic_data) {//was paren - if (!tempi_push->ic_class->ptr_cnt) { + if (!tempi_push->ic_class->ptr_stars_cnt) { if (tempi_push->ic_class->raw_type==RT_F64) tempi_push->ic_class2=cmp.internal_types[RT_F64]; else @@ -115,7 +115,7 @@ args. tempi1=tempi->next->next; //IMM tempi2=tempi1->next; //ADD tempi3=tempi2->next; //DEREF - if (tempi1->ic_code==IC_IMM_U64 && tempi2->ic_code==IC_ADD && + if (tempi1->ic_code==IC_IMM_I64 && tempi2->ic_code==IC_ADD && tempi3->ic_code==IC_DEREF && !(tempi3->ic_flags&~ICG_NO_CVT_MASK)) { tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags|tempi3->ic_flags; if (tempi->ic_code==IC_FS) @@ -149,9 +149,9 @@ args. tempi->ic_flags|=ICF_USE_F64; break; case IC_COM: - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { tempi->ic_data=~tempi1->ic_data; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; tempi->ic_flags|=tempi1->ic_flags; OptSetNOP1(tempi1); } @@ -168,9 +168,9 @@ args. } break; } - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { tempi->ic_data=!tempi1->ic_data; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; tempi->ic_flags|=tempi1->ic_flags; OptSetNOP1(tempi1); } @@ -179,7 +179,7 @@ args. if (i=OptFixupUnaryOp(tempi,tempi1,&is_unsigned)) { if (i==FBO1_INT) { tempi->ic_data=-tempi1->ic_data(I64); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=-tempi1->ic_data(F64); tempi->ic_code=IC_IMM_F64; @@ -195,7 +195,7 @@ args. tempi->ic_data=tempi1->ic_data(U64)<ic_data(U64); else tempi->ic_data=tempi1->ic_data(I64)<ic_data(I64); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=tempi1->ic_data(F64)<ic_data; tempi->ic_code=IC_IMM_F64; @@ -213,7 +213,7 @@ args. tempi->ic_data=tempi1->ic_data(U64)>>tempi->ic_data(U64); else tempi->ic_data=tempi1->ic_data(I64)>>tempi->ic_data(I64); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=tempi1->ic_data(F64)>>tempi->ic_data; tempi->ic_code=IC_IMM_F64; @@ -231,12 +231,12 @@ args. tempi->ic_data=tempi1->ic_data(U64)<ic_data(U64); else tempi->ic_data=tempi1->ic_data(I64)<ic_data(I64); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=tempi1->ic_data(F64) << tempi2->ic_data(F64); tempi->ic_code=IC_IMM_F64; } - } else if (tempi2->ic_code==IC_IMM_U64) { + } else if (tempi2->ic_code==IC_IMM_I64) { tempi->ic_flags|=tempi2->ic_flags; tempi->ic_data=tempi2->ic_data; tempi->ic_code=IC_SHL_CONST; @@ -250,12 +250,12 @@ args. tempi->ic_data=tempi1->ic_data(U64)>>tempi2->ic_data(U64); else tempi->ic_data=tempi1->ic_data(I64)>>tempi2->ic_data(I64); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=tempi1->ic_data(F64) >> tempi2->ic_data(F64); tempi->ic_code=IC_IMM_F64; } - } else if (tempi2->ic_code==IC_IMM_U64) { + } else if (tempi2->ic_code==IC_IMM_I64) { tempi->ic_flags|=tempi2->ic_flags; tempi->ic_data=tempi2->ic_data; tempi->ic_code=IC_SHR_CONST; @@ -263,7 +263,7 @@ args. } break; sub_switch_end: - if (!tempi_push->ic_class->ptr_cnt) { + if (!tempi_push->ic_class->ptr_stars_cnt) { if (tempi_push->ic_class->raw_type==RT_F64) tempi_push->ic_class2=cmp.internal_types[RT_F64]; else @@ -310,13 +310,13 @@ args. tempi->ic_data=tempi1->ic_data(U64)*tempi2->ic_data(U64); else tempi->ic_data=tempi1->ic_data(I64)*tempi2->ic_data(I64); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=tempi1->ic_data(F64)*tempi2->ic_data(F64); tempi->ic_code=IC_IMM_F64; } } else { - if (tempi1->ic_code==IC_IMM_U64 && lx->pass==2) { + if (tempi1->ic_code==IC_IMM_I64 && lx->pass==2) { switch (i=tempi1->ic_data) { case 0: break; @@ -336,7 +336,7 @@ args. OptSetNOP1(tempi1); } } - } else if (tempi2->ic_code==IC_IMM_U64) { + } else if (tempi2->ic_code==IC_IMM_I64) { switch (i=tempi2->ic_data) { case 0: break; @@ -354,14 +354,14 @@ args. tempi->ic_code=IC_SHL_CONST; OptSetNOP1(tempi2); } else if (tempi1->ic_code==IC_MUL && lx->pass==2) { - if (tempi1->t.a1t->ic_code==IC_IMM_U64) { + if (tempi1->t.a1t->ic_code==IC_IMM_I64) { tempi1->ic_flags|=tempi->ic_flags; tempi1->t.a1t->ic_data*=tempi2->ic_data; tempi1->ic_class2=tempi->ic_class2; tempi_push=tempi1; OptSetNOP1(tempi2); OptSetNOP1(tempi); - } else if (tempi1->t.a2t->ic_code==IC_IMM_U64) { + } else if (tempi1->t.a2t->ic_code==IC_IMM_I64) { tempi1->ic_flags|=tempi->ic_flags; tempi1->t.a2t->ic_data*=tempi2->ic_data; tempi1->ic_class2=tempi->ic_class2; @@ -399,21 +399,21 @@ args. } break; case IC_DIV: - if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_U64 && tempi2->ic_code!=IC_IMM_F64) && + if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_I64 && tempi2->ic_code!=IC_IMM_F64) && (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned))) { if (i==FBO1_INT) { if (is_unsigned) tempi->ic_data=tempi1->ic_data(U64)/tempi2->ic_data(U64); else tempi->ic_data=tempi1->ic_data(I64)/tempi2->ic_data(I64); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=tempi1->ic_data(F64)/ tempi2->ic_data(F64); tempi->ic_code=IC_IMM_F64; } } else { - if (tempi2->ic_code==IC_IMM_U64 && (i=tempi2->ic_data)) { + if (tempi2->ic_code==IC_IMM_I64 && (i=tempi2->ic_data)) { if (i==1) { tempi1->ic_flags|=tempi2->ic_flags|tempi->ic_flags; tempi1->ic_class2=tempi->ic_class2; @@ -430,20 +430,20 @@ args. } break; case IC_MOD: - if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_U64 && tempi2->ic_code!=IC_IMM_F64) && + if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_I64 && tempi2->ic_code!=IC_IMM_F64) && (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned))) { if (i==FBO1_INT) { if (is_unsigned) tempi->ic_data=tempi1->ic_data(U64)%tempi2->ic_data(U64); else tempi->ic_data=tempi1->ic_data(I64)%tempi2->ic_data(I64); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=tempi1->ic_data(F64)% tempi2->ic_data(F64); tempi->ic_code=IC_IMM_F64; } - } else if (lx->pass==2 && tempi2->ic_code==IC_IMM_U64 && + } else if (lx->pass==2 && tempi2->ic_code==IC_IMM_I64 && (i=tempi2->ic_data) && Bsf(i)==Bsr(i) && tempi_push->ic_class->raw_type!=RT_F64 && tempi_push->ic_class->raw_type&1) {//do only unsigned tempi2->ic_data=i-1; @@ -454,7 +454,7 @@ args. if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { tempi->ic_data=tempi1->ic_data&tempi2->ic_data; if (i==FBO1_INT) - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; else tempi->ic_code=IC_IMM_F64; } @@ -463,7 +463,7 @@ args. if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { tempi->ic_data=tempi1->ic_data|tempi2->ic_data; if (i==FBO1_INT) - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; else tempi->ic_code=IC_IMM_F64; } @@ -472,7 +472,7 @@ args. if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { tempi->ic_data=tempi1->ic_data^tempi2->ic_data; if (i==FBO1_INT) - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; else tempi->ic_code=IC_IMM_F64; } @@ -481,21 +481,21 @@ args. if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { if (i==FBO1_INT) { tempi->ic_data=tempi1->ic_data+tempi2->ic_data; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=tempi1->ic_data(F64)+ tempi2->ic_data(F64); tempi->ic_code=IC_IMM_F64; } } else { - if (tempi1->ic_code==IC_ABS_ADDR&&tempi2->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_ABS_ADDR&&tempi2->ic_code==IC_IMM_I64) { tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags; tempi->ic_data=tempi1->ic_data+tempi2->ic_data; tempi->ic_code=IC_ABS_ADDR; OptSetNOP1(tempi1); OptSetNOP1(tempi2); } else if (lx->pass==2) { - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { if (!tempi1->ic_data) { tempi2->ic_flags|=tempi1->ic_flags|tempi->ic_flags; tempi2->ic_class2=tempi->ic_class2; @@ -504,14 +504,14 @@ args. OptSetNOP1(tempi); } else if (tempi2->ic_code==IC_ADD|| tempi2->ic_code==IC_SUB) { - if (tempi2->t.a1t->ic_code==IC_IMM_U64) { + if (tempi2->t.a1t->ic_code==IC_IMM_I64) { tempi2->ic_flags|=tempi->ic_flags; tempi2->t.a1t->ic_data+=tempi1->ic_data; tempi2->ic_class2=tempi->ic_class2; tempi_push=tempi2; OptSetNOP1(tempi1); OptSetNOP1(tempi); - } else if (tempi2->t.a2t->ic_code==IC_IMM_U64) { + } else if (tempi2->t.a2t->ic_code==IC_IMM_I64) { tempi2->ic_flags|=tempi->ic_flags; if (tempi2->ic_code==IC_ADD) tempi2->t.a2t->ic_data+=tempi1->ic_data; @@ -523,7 +523,7 @@ args. OptSetNOP1(tempi); } } - } else if (tempi2->ic_code==IC_IMM_U64) { + } else if (tempi2->ic_code==IC_IMM_I64) { if (!tempi2->ic_data) { tempi1->ic_flags|=tempi2->ic_flags|tempi->ic_flags; tempi1->ic_class2=tempi->ic_class2; @@ -532,14 +532,14 @@ args. OptSetNOP1(tempi); } else if (tempi1->ic_code==IC_ADD || tempi1->ic_code==IC_SUB) { - if (tempi1->t.a1t->ic_code==IC_IMM_U64) { + if (tempi1->t.a1t->ic_code==IC_IMM_I64) { tempi1->ic_flags|=tempi->ic_flags; tempi1->t.a1t->ic_data+=tempi2->ic_data; tempi1->ic_class2=tempi->ic_class2; tempi_push=tempi1; OptSetNOP1(tempi2); OptSetNOP1(tempi); - } else if (tempi1->t.a2t->ic_code==IC_IMM_U64) { + } else if (tempi1->t.a2t->ic_code==IC_IMM_I64) { tempi1->ic_flags|=tempi->ic_flags; if (tempi1->ic_code==IC_ADD) tempi1->t.a2t->ic_data+=tempi2->ic_data; @@ -615,7 +615,7 @@ args. if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { if (i==FBO1_INT) { tempi->ic_data=tempi1->ic_data-tempi2->ic_data; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else { tempi->ic_data(F64)=tempi1->ic_data(F64)- tempi2->ic_data(F64); @@ -623,7 +623,7 @@ args. } } else { if (lx->pass==2) { - if (tempi2->ic_code==IC_IMM_U64) { + if (tempi2->ic_code==IC_IMM_I64) { if (!tempi2->ic_data) { tempi1->ic_flags|=tempi2->ic_flags|tempi->ic_flags; tempi1->ic_class2=tempi->ic_class2; @@ -633,14 +633,14 @@ args. } else if (tempi1->ic_code==IC_ADD || tempi1->ic_code==IC_SUB) { - if (tempi1->t.a1t->ic_code==IC_IMM_U64) { + if (tempi1->t.a1t->ic_code==IC_IMM_I64) { tempi1->ic_flags|=tempi->ic_flags; tempi1->t.a1t->ic_data-=tempi2->ic_data; tempi1->ic_class2=tempi->ic_class2; tempi_push=tempi1; OptSetNOP1(tempi2); OptSetNOP1(tempi); - } else if (tempi1->t.a2t->ic_code==IC_IMM_U64) { + } else if (tempi1->t.a2t->ic_code==IC_IMM_I64) { tempi1->ic_flags|=tempi->ic_flags; if (tempi1->ic_code==IC_ADD) tempi1->t.a2t->ic_data-=tempi2->ic_data; @@ -689,26 +689,26 @@ args. case IC_AND_AND: if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { tempi->ic_data=tempi1->ic_data&&tempi2->ic_data; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } tempi->ic_class=cmp.internal_types[RT_I64]; break; case IC_OR_OR: if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { tempi->ic_data=tempi1->ic_data||tempi2->ic_data; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } tempi->ic_class=cmp.internal_types[RT_I64]; break; case IC_XOR_XOR: if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { tempi->ic_data=tempi1->ic_data^^tempi2->ic_data; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } tempi->ic_class=cmp.internal_types[RT_I64]; break; sub_switch_end: - if (!tempi_push->ic_class->ptr_cnt) { + if (!tempi_push->ic_class->ptr_stars_cnt) { if (tempi_push->ic_class->raw_type==RT_F64) tempi_push->ic_class2=cmp.internal_types[RT_F64]; else if (is_unsigned) @@ -721,7 +721,7 @@ args. case IC_EQUAL_EQUAL: if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { tempi->ic_data=tempi1->ic_data==tempi2->ic_data; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else if (tempi->ic_class->raw_type==RT_F64) tempi->ic_flags|=ICF_USE_F64; @@ -729,7 +729,7 @@ args. case IC_NOT_EQUAL: if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { tempi->ic_data=tempi1->ic_data!=tempi2->ic_data; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } else if (tempi->ic_class->raw_type==RT_F64) tempi->ic_flags|=ICF_USE_F64; @@ -741,49 +741,9 @@ args. tempi->ic_data=tempi1->ic_data(U64)ic_data(U64); else tempi->ic_data=tempi1->ic_data(I64)ic_data(I64); - } else { - tempi->ic_data=tempi1->ic_data(F64)< - tempi2->ic_data(F64); - } - tempi->ic_code=IC_IMM_U64; - } else { - if (is_unsigned) - tempi->ic_flags|=ICF_USE_UNSIGNED; - if (tempi->ic_class->raw_type==RT_F64) - tempi->ic_flags|=ICF_USE_F64; - } - break; - case IC_GREATER: - if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { - if (i==FBO1_INT) { - if (is_unsigned) - tempi->ic_data=tempi1->ic_data(U64)>tempi2->ic_data(U64); - else - tempi->ic_data=tempi1->ic_data(I64)>tempi2->ic_data(I64); - } else { - tempi->ic_data=tempi1->ic_data(F64)> - tempi2->ic_data(F64); - } - tempi->ic_code=IC_IMM_U64; - } else { - if (is_unsigned) - tempi->ic_flags|=ICF_USE_UNSIGNED; - if (tempi->ic_class->raw_type==RT_F64) - tempi->ic_flags|=ICF_USE_F64; - } - break; - case IC_LESS_EQUAL: - if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { - if (i==FBO1_INT) { - if (is_unsigned) - tempi->ic_data=tempi1->ic_data(U64)<=tempi2->ic_data(U64); - else - tempi->ic_data=tempi1->ic_data(I64)<=tempi2->ic_data(I64); - } else { - tempi->ic_data=tempi1->ic_data(F64)<= - tempi2->ic_data(F64); - } - tempi->ic_code=IC_IMM_U64; + } else + tempi->ic_data=tempi1->ic_data(F64)ic_data(F64); + tempi->ic_code=IC_IMM_I64; } else { if (is_unsigned) tempi->ic_flags|=ICF_USE_UNSIGNED; @@ -798,11 +758,43 @@ args. tempi->ic_data=tempi1->ic_data(U64)>=tempi2->ic_data(U64); else tempi->ic_data=tempi1->ic_data(I64)>=tempi2->ic_data(I64); - } else { - tempi->ic_data=tempi1->ic_data(F64)>= - tempi2->ic_data(F64); - } - tempi->ic_code=IC_IMM_U64; + } else + tempi->ic_data=tempi1->ic_data(F64)>=tempi2->ic_data(F64); + tempi->ic_code=IC_IMM_I64; + } else { + if (is_unsigned) + tempi->ic_flags|=ICF_USE_UNSIGNED; + if (tempi->ic_class->raw_type==RT_F64) + tempi->ic_flags|=ICF_USE_F64; + } + break; + case IC_GREATER: + if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { + if (i==FBO1_INT) { + if (is_unsigned) + tempi->ic_data=tempi1->ic_data(U64)>tempi2->ic_data(U64); + else + tempi->ic_data=tempi1->ic_data(I64)>tempi2->ic_data(I64); + } else + tempi->ic_data=tempi1->ic_data(F64)>tempi2->ic_data(F64); + tempi->ic_code=IC_IMM_I64; + } else { + if (is_unsigned) + tempi->ic_flags|=ICF_USE_UNSIGNED; + if (tempi->ic_class->raw_type==RT_F64) + tempi->ic_flags|=ICF_USE_F64; + } + break; + case IC_LESS_EQUAL: + if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) { + if (i==FBO1_INT) { + if (is_unsigned) + tempi->ic_data=tempi1->ic_data(U64)<=tempi2->ic_data(U64); + else + tempi->ic_data=tempi1->ic_data(I64)<=tempi2->ic_data(I64); + } else + tempi->ic_data=tempi1->ic_data(F64)<=tempi2->ic_data(F64); + tempi->ic_code=IC_IMM_I64; } else { if (is_unsigned) tempi->ic_flags|=ICF_USE_UNSIGNED; @@ -812,7 +804,7 @@ args. break; sub_switch_end: tempi->ic_flags&=~ICF_R_TO_INT; - if (!tempi_push->ic_class->ptr_cnt) { + if (!tempi_push->ic_class->ptr_stars_cnt) { if (tempi_push->ic_class->raw_type==RT_F64) tempi_push->ic_class2=cmp.internal_types[RT_F64]; else if (is_unsigned) @@ -830,7 +822,7 @@ args. LexWarn(lx,"Assign U0 "); sub_switch_start: case IC_MUL_EQUAL: - if (tempi2->ic_code==IC_IMM_U64 && + if (tempi2->ic_code==IC_IMM_I64 && tempc->raw_type!=RT_F64 && tempc2->raw_type!=RT_F64) { if (i=tempi2->ic_data) { @@ -842,7 +834,7 @@ args. } break; case IC_DIV_EQUAL: - if (tempi2->ic_code==IC_IMM_U64 && + if (tempi2->ic_code==IC_IMM_I64 && tempc->raw_type!=RT_F64 && tempc2->raw_type!=RT_F64 && (i=tempi2->ic_data) && Bsf(i)==Bsr(i)) { @@ -851,7 +843,7 @@ args. } break; case IC_MOD_EQUAL: - if (tempi2->ic_code==IC_IMM_U64 && + if (tempi2->ic_code==IC_IMM_I64 && tempc->raw_type!=RT_F64 && tempc2->raw_type!=RT_F64 && (i=tempi2->ic_data) && Bsf(i)==Bsr(i)) { @@ -917,7 +909,7 @@ args. case IC_ADD_RSP1: break; case IC_BSF: - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { tempi1->ic_data=Bsf(tempi1->ic_data); tempi_push=tempi1; OptSetNOP1(OptLag(tempi1)); //CALL_START @@ -928,7 +920,7 @@ args. } break; case IC_BSR: - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { tempi1->ic_data=Bsr(tempi1->ic_data); tempi_push=tempi1; OptSetNOP1(OptLag(tempi1)); //CALL_START @@ -957,12 +949,12 @@ args. tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_INT|tempi2->ic_flags; OptSetNOP1(tempi2); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; tempi->ic_data=ToI64(tempi1->ic_data(F64)); tempi->ic_class=cmp.internal_types[RT_I64]; tempi->ic_class2=cmp.internal_types[RT_I64]; OptSetNOP1(tempi1); - } else if (tempi1->ic_code==IC_IMM_U64) { + } else if (tempi1->ic_code==IC_IMM_I64) { tempi2=tempi1->last; while (tempi2->ic_code!=IC_CALL_START) tempi2=tempi2->last; @@ -975,7 +967,7 @@ args. tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64|tempi2->ic_flags; OptSetNOP1(tempi2); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; tempi->ic_data=tempi1->ic_data; tempi->ic_class=cmp.internal_types[RT_I64]; tempi->ic_class2=cmp.internal_types[RT_I64]; @@ -1008,7 +1000,7 @@ args. } break; case IC_TO_F64: - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { tempi2=tempi1->last; while (tempi2->ic_code!=IC_CALL_START) tempi2=tempi2->last; @@ -1072,7 +1064,7 @@ args. } break; case IC_TO_BOOL: - if (tempi1->ic_code==IC_IMM_U64 || tempi1->ic_code==IC_IMM_F64) { + if (tempi1->ic_code==IC_IMM_I64 || tempi1->ic_code==IC_IMM_F64) { tempi2=tempi1->last; while (tempi2->ic_code!=IC_CALL_START) tempi2=tempi2->last; @@ -1085,7 +1077,7 @@ args. tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64|tempi2->ic_flags; OptSetNOP1(tempi2); - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; tempi->ic_data=ToBool(tempi1->ic_data); tempi->ic_class=cmp.internal_types[RT_I64]; tempi->ic_class2=cmp.internal_types[RT_I64]; @@ -1098,14 +1090,6 @@ args. case IC_BR_NOT_ZERO: tempi_push=OptBrNotZero(lx,tempi); break; - case IC_BR_LBTS: - case IC_BR_LBTR: - case IC_BR_LBTC: - case IC_BR_NOT_LBTS: - case IC_BR_NOT_LBTR: - case IC_BR_NOT_LBTC: - tempi->ic_flags|=ICF_LOCK; - break; case IC_NOP1: if (tempi->ic_flags&ICF_PUSH_RESULT) { tempi1=tempi; @@ -1177,18 +1161,8 @@ args. case IC_ATAN: case IC_BR_CARRY: case IC_BR_NOT_CARRY: - case IC_BR_NOT_EQUAL: - case IC_BR_EQUAL_EQUAL: - case IC_BR_GREATER_EQUAL: - case IC_BR_LESS_EQUAL: - case IC_BR_GREATER: - case IC_BR_LESS: - case IC_BR_NOT_EQUAL2: - case IC_BR_EQUAL_EQUAL2: - case IC_BR_GREATER_EQUAL2: - case IC_BR_LESS_EQUAL2: - case IC_BR_GREATER2: - case IC_BR_LESS2: + case IC_BR_EQUAL_EQUAL ...IC_BR_LESS_EQUAL: + case IC_BR_EQUAL_EQUAL2...IC_BR_LESS_EQUAL2: case IC_BR_OR_OR_NOT_ZERO: case IC_BR_OR_OR_ZERO: case IC_BR_AND_AND_NOT_ZERO: @@ -1278,10 +1252,10 @@ args. break; default: "Pass:%d Missing IC handler\n",lx->pass; - ICPut(tempi); + ICPut(lx,tempi); LexExcept(lx,"Compiler Optimization Error at "); } - if (cmp.arg_cnt[code]==2) { + if (intermediate_code_table[code].arg_cnt==IS_2_ARG) { if (tempi_push->ic_precedence.u8[0]&~ASSOC_MASK==PREC_ASSIGN) OptFixSizeOf(tempi2,tempi_push,tempi1->ic_class-1); else { @@ -1289,7 +1263,7 @@ args. OptFixSizeOf(tempi2,tempi_push,tempi1->ic_class); } } - if (cmp.result_cnt[tempi_push->ic_code]) { + if (intermediate_code_table[tempi_push->ic_code].result_cnt) { PrsPush(ps,tempi->ic_class2); PrsPush(ps,tempi_push); } diff --git a/Compiler/OptPass3.CPP b/Compiler/OptPass3.CPP index 56bfa40..5b72ace 100644 --- a/Compiler/OptPass3.CPP +++ b/Compiler/OptPass3.CPP @@ -7,6 +7,8 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) I64 code,i,j,l,member_cnt,used_reg_mask=0; CMemberLst *tempm; COptMemberVar *mv=NULL; + CExe *tempx; + CExeImportExport *tempe; CPrsStk *ps=lx->ps; ps->ptr=0; ps->ptr2=0; @@ -27,7 +29,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) if (0<=tempm->regreg)) PrintWarn("Reg in use\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); + lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); reg_offsets[tempm->reg].offset=tempm->offset; reg_offsets[tempm->reg].m=tempm; } else if (tempc->raw_type!=RT_F64 && tempm->reg!=REG_NONE || @@ -40,7 +42,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) } else { if (tempm->reg==REG_ALLOC) PrintWarn("Can't reg var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); + lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); } tempm=tempm->next; } @@ -59,11 +61,11 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) } else tempil1=tempil2=&cmp.ic_nop; tempc=tempi->ic_class; - nobound_switch (cmp.arg_cnt[code]) { - case 9: + nobound_switch (intermediate_code_table[code].arg_cnt) { + case IS_V_ARG: ps->ptr-=tempi->ic_data>>3; break; - case 2: + case IS_2_ARG: tempi2=PrsPop(ps); if (tempi2->ic_flags&ICF_R_TO_F64) tempc2=cmp.internal_types[RT_F64]; @@ -74,7 +76,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) tempi->a2.type=TY_STK+CmpRawType(tempc2); tempi->a2.type_pointed=CmpRawTypePointed(tempc2); tempi->ic_flags|=ICF_A2_WAS_STK; - case 1: + case IS_1_ARG: tempi1=PrsPop(ps); if (tempi1->ic_flags&ICF_R_TO_F64) tempc1=cmp.internal_types[RT_F64]; @@ -86,10 +88,10 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) tempi->a1.type_pointed=CmpRawTypePointed(tempc1); tempi->ic_flags|=ICF_A1_WAS_STK; break; - case 0: //nobound_switch + case IS_0_ARG: //nobound_switch break; } - if (cmp.result_cnt[code]) { + if (intermediate_code_table[code].result_cnt) { tempi->r.type=TY_STK+CmpRawType(tempc); tempi->r.type_pointed=CmpRawTypePointed(tempc); tempi->ic_flags|=ICF_R_WAS_STK; @@ -101,10 +103,10 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) if (tempi->ic_flags&ICF_R_TO_INT) { tempi->ic_data=ToI64(tempi->ic_data(F64)); tempi->ic_flags&=~ICF_R_TO_INT; - tempi->ic_code=IC_IMM_U64; + tempi->ic_code=IC_IMM_I64; } break; - case IC_IMM_U64: + case IC_IMM_I64: tempi->ic_flags&=~ICF_R_TO_INT; if (tempi->ic_flags&ICF_R_TO_F64) { tempi->ic_data(F64)=ToF64(tempi->ic_data); @@ -207,7 +209,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) CmpF2PushPop(tempi,tempi1,tempi2); break; } - if (tempi2->ic_code==IC_IMM_U64) { + if (tempi2->ic_code==IC_IMM_I64) { tempi->ic_flags|=tempi2->ic_flags; tempi->ic_data=tempi2->ic_data; tempi->ic_code=IC_SUB_CONST; @@ -216,9 +218,9 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) } break; case IC_LESS: + case IC_GREATER_EQUAL: case IC_GREATER: case IC_LESS_EQUAL: - case IC_GREATER_EQUAL: if (tempi->ic_flags&ICF_USE_F64) CmpF2PushPop(tempi,tempi1,tempi2); break; @@ -273,9 +275,20 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) lb=OptLabelFwd(tempi->ic_data(CLexCodeMisc *)->dft); lb->use_cnt++; break; + case IC_ASM: + tempx=tempi->ic_data; + tempe=tempx->next_ie; + while (tempe!=&tempx->next_ie) { + if (EIT_REL_I0<=tempe->type<=EIT_IMM_I64 && + tempe->str && tempe->flags&EIF_GOTO_LABEL && + (lb=LCCGoToLabelFind(lx,tempe->str))) + lb->use_cnt++; //Prevent deadcode elimination. + tempe=tempe->next; + } + break; case IC_BR_NOT_EQUAL: case IC_BR_EQUAL_EQUAL: - if ((tempi1->ic_code==IC_IMM_U64 || tempi1->ic_code==IC_IMM_F64) && !tempi1->ic_data) { + if ((tempi1->ic_code==IC_IMM_I64 || tempi1->ic_code==IC_IMM_F64) && !tempi1->ic_data) { OptFree(tempi1); MemCpy(&tempi->a1,&tempi->a2,sizeof(CICArg)); tempi->a2.type=TY_NULL; @@ -285,7 +298,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) code=tempi->ic_code=IC_BR_NOT_ZERO; tempi1=tempi2; tempc1=tempc2; - } else if ((tempi2->ic_code==IC_IMM_U64 || tempi2->ic_code==IC_IMM_F64) && !tempi2->ic_data) { + } else if ((tempi2->ic_code==IC_IMM_I64 || tempi2->ic_code==IC_IMM_F64) && !tempi2->ic_data) { OptFree(tempi2); tempi->a2.type=TY_NULL; if (code==IC_BR_EQUAL_EQUAL) @@ -296,7 +309,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) goto here1; case IC_BR_ZERO: case IC_BR_NOT_ZERO: - if (tempi1->ic_code==IC_IMM_U64 || tempi1->ic_code==IC_IMM_F64) { + if (tempi1->ic_code==IC_IMM_I64 || tempi1->ic_code==IC_IMM_F64) { if (code==IC_BR_ZERO ^^ tempi1->ic_data) { OptFree(tempi1); tempi->a1.type=TY_NULL; @@ -309,7 +322,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) } goto here1; case IC_BR_AND_ZERO: - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { i=Bsr(tempi1->ic_data); if (0<=i==Bsf(tempi1->ic_data)) { tempi1->ic_data=i; @@ -318,7 +331,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) goto here1; } } - if (tempi2->ic_code==IC_IMM_U64) { + if (tempi2->ic_code==IC_IMM_I64) { i=Bsr(tempi2->ic_data); if (0<=i==Bsf(tempi2->ic_data)) { tempi2->ic_data=i; @@ -328,7 +341,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) } goto here1; case IC_BR_AND_NOT_ZERO: - if (tempi1->ic_code==IC_IMM_U64) { + if (tempi1->ic_code==IC_IMM_I64) { i=Bsr(tempi1->ic_data); if (0<=i==Bsf(tempi1->ic_data)) { tempi1->ic_data=i; @@ -337,7 +350,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) goto here1; } } - if (tempi2->ic_code==IC_IMM_U64) { + if (tempi2->ic_code==IC_IMM_I64) { i=Bsr(tempi2->ic_data); if (0<=i==Bsf(tempi2->ic_data)) { tempi2->ic_data=i; @@ -359,20 +372,15 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) } tempi->a1.type_pointed=CmpRawType(tempc); goto here1; - case IC_BR_GREATER_EQUAL: - case IC_BR_LESS_EQUAL: - case IC_BR_GREATER: case IC_BR_LESS: + case IC_BR_GREATER_EQUAL: + case IC_BR_GREATER: + case IC_BR_LESS_EQUAL: if (tempi->ic_flags&ICF_USE_F64) CmpF2PushPop(tempi,tempi1,tempi2); + case IC_BR_EQUAL_EQUAL2...IC_BR_LESS_EQUAL2: case IC_BR_CARRY: case IC_BR_NOT_CARRY: - case IC_BR_GREATER_EQUAL2: - case IC_BR_LESS_EQUAL2: - case IC_BR_GREATER2: - case IC_BR_LESS2: - case IC_BR_NOT_EQUAL2: - case IC_BR_EQUAL_EQUAL2: case IC_GET_LABEL: case IC_BR_BT: case IC_BR_BTS: @@ -382,12 +390,6 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) case IC_BR_NOT_BTS: case IC_BR_NOT_BTR: case IC_BR_NOT_BTC: - case IC_BR_LBTS: - case IC_BR_LBTR: - case IC_BR_LBTC: - case IC_BR_NOT_LBTS: - case IC_BR_NOT_LBTR: - case IC_BR_NOT_LBTC: case IC_JMP: case IC_SUB_CALL: here1: @@ -470,7 +472,6 @@ here1: case IC_OUT_U32: case IC_OUT_U16: case IC_OUT_U8: - case IC_ASM: case IC_STR_CONST: case IC_FS: case IC_GS: @@ -509,7 +510,7 @@ here1: break; default: "Pass:%d Missing IC handler\n",lx->pass; - ICPut(tempi); + ICPut(lx,tempi); LexExcept(lx,"Compiler Optimization Error at "); } } @@ -550,7 +551,7 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k. } else { if (mv[i].m->reg==REG_ALLOC) PrintWarn("Can't reg var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->name,lx->cur_lfn->line_num,mv[i].m->str,lx->htc.fun->str); + lx->cur_lfn->full_name,lx->cur_lfn->line_num,mv[i].m->str,lx->htc.fun->str); } } if (j>0) { @@ -561,7 +562,7 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k. for (i=0;imember_class); - if (!tempc->ptr_cnt && !tempm->dim.next) { + if (!tempc->ptr_stars_cnt && !tempm->dim.next) { while (lhtc.fun->used_reg_mask,cmp.non_ptr_vars_map[l])) l++; @@ -574,10 +575,10 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k. tempm->str,reg_offsets[tempm->reg].offset; mv[i].offset_start=0; //flag as reg var if (tempm->size<8 && !StrIMatch("Bool",tempm->member_class->str) && - tempm->member_class->type&HTT_INTERNAL_TYPE) + tempm->member_class->type&HTT_INTERNAL_TYPE) PrintWarn("Using 64-bit reg var.\n " "$$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->name,lx->cur_lfn->line_num, + lx->cur_lfn->full_name,lx->cur_lfn->line_num, tempm->str,lx->htc.fun->str); } } @@ -600,11 +601,11 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k. "Reg %Z Var \"%-15ts\" %016X[RBP]\n",tempm->reg,"ST_U64_REGS", tempm->str,reg_offsets[tempm->reg].offset; if (tempm->size<8 && !StrIMatch("Bool",tempm->member_class->str) && - tempm->member_class->type&HTT_INTERNAL_TYPE) + tempm->member_class->type&HTT_INTERNAL_TYPE) PrintWarn("Using 64-bit reg var.\n " - "$$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->name,lx->cur_lfn->line_num, - tempm->str,lx->htc.fun->str); + "$$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", + lx->cur_lfn->full_name,lx->cur_lfn->line_num, + tempm->str,lx->htc.fun->str); } } } diff --git a/Compiler/OptPass4.CPP b/Compiler/OptPass4.CPP index 1a51f20..06e4a69 100644 --- a/Compiler/OptPass4.CPP +++ b/Compiler/OptPass4.CPP @@ -3,7 +3,7 @@ Bool OptIC4(CIntermediateCode *tempi) I64 i,ty,pt,ty1,pt1; CIntermediateCode *tempil1,*tempil2; - if (tempi->ic_codeic_codeic_class; - tempi1=tempi2=tempi3=&cmp.ic_nop; + tempi1=tempi2=&cmp.ic_nop; if (tempil1=OptLag2(tempi)) { if (tempil2=OptLag2(tempil1)) { if (!(tempil3=OptLag2(tempil2))) @@ -203,25 +203,22 @@ U0 OptPass4(CLex *lx,COptReg *reg_offsets,I64 *_type) tempil2=tempil3=&cmp.ic_nop; } else tempil1=tempil2=tempil3=&cmp.ic_nop; - nobound_switch (cmp.arg_cnt[code]) { - case 9: + nobound_switch (intermediate_code_table[code].arg_cnt) { + case IS_V_ARG: ps->ptr-=tempi->ic_data>>3; break; - case 3: - tempi3=PrsPop(ps); - tempc3=tempi3->ic_class; - case 2: + case IS_2_ARG: tempi2=PrsPop(ps); tempc2=tempi2->ic_class; - case 1: + case IS_1_ARG: tempi1=PrsPop(ps); tempc1=tempi1->ic_class; break; - case 0: //nobound_switch + case IS_0_ARG: //nobound_switch break; } nobound_switch (code) { - case IC_IMM_U64: + case IC_IMM_I64: case IC_TYPE: tempi->a1.type=TY_IMM+RT_I64; tempi->a1.disp=tempi->ic_data; @@ -391,7 +388,7 @@ p4_sib: case IC_ASSIGN_PP: case IC_ASSIGN_MM: //this val was stashed during pass012 for pointer arithmetic - tempi->ic_class2=tempi->t.class2; + tempi->ic_class2=tempi->t.class2; //See $LK,"ic_class2",A="FF:::/Compiler/BackB.CPP,ic_class2"$ case IC_ASSIGN: case IC_SHL_EQUAL: case IC_SHR_EQUAL: @@ -476,12 +473,6 @@ p4_sib: case IC_BR_NOT_BTS: case IC_BR_NOT_BTR: case IC_BR_NOT_BTC: - case IC_BR_LBTS: - case IC_BR_LBTR: - case IC_BR_LBTC: - case IC_BR_NOT_LBTS: - case IC_BR_NOT_LBTR: - case IC_BR_NOT_LBTC: case IC_BT: case IC_BTS: case IC_BTR: @@ -553,22 +544,12 @@ p4_sib: } } break; - case IC_BR_NOT_EQUAL2: - case IC_BR_EQUAL_EQUAL2: - case IC_BR_GREATER_EQUAL2: - case IC_BR_LESS_EQUAL2: - case IC_BR_GREATER2: - case IC_BR_LESS2: - case IC_BR_ZERO: - case IC_BR_NOT_ZERO: + case IC_BR_EQUAL_EQUAL ...IC_BR_LESS_EQUAL: + case IC_BR_EQUAL_EQUAL2...IC_BR_LESS_EQUAL2: case IC_BR_CARRY: case IC_BR_NOT_CARRY: - case IC_BR_NOT_EQUAL: - case IC_BR_EQUAL_EQUAL: - case IC_BR_GREATER_EQUAL: - case IC_BR_LESS_EQUAL: - case IC_BR_GREATER: - case IC_BR_LESS: + case IC_BR_ZERO: + case IC_BR_NOT_ZERO: lb=tempi->ic_data; if (tempi->ic_flags&ICF_PUSH_CMP) { lb->flags|=CMF_POP_CMP; @@ -589,9 +570,12 @@ p4_sib: break; case IC_CALL_END: case IC_END_EXP: - if (tempi->a1.type&TY_MASK==TY_STK) { - if (tempil1->r.type&TY_MASK==TY_STK && - !(tempil1->ic_flags&ICF_PUSH_RESULT)) { + if (!(tempil1->ic_flags&ICF_PUSH_RESULT)) { + if (tempi->ic_flags&ICF_NO_DEPEND_RESULT) { + tempil1->ic_flags|=ICF_NO_DEPEND_RESULT; + tempil1->r.type=TY_NULL+tempil1->r.type&RT_MASK; + } else if (tempi->a1.type&TY_MASK==TY_STK && + tempil1->r.type&TY_MASK==TY_STK) { tempi->a1.type=TY_REG+tempi->a1.type&RT_MASK; tempi->a1.reg=REG_RAX; tempi->a1.disp=0; @@ -652,12 +636,7 @@ p4_sib: case IC_OR: case IC_XOR: case IC_SUB: - case IC_EQUAL_EQUAL: - case IC_NOT_EQUAL: - case IC_LESS: - case IC_GREATER: - case IC_LESS_EQUAL: - case IC_GREATER_EQUAL: + case IC_EQUAL_EQUAL...IC_LESS_EQUAL: case IC_AND_AND: case IC_OR_OR: case IC_XOR_XOR: @@ -719,13 +698,13 @@ p4_sib: break; default: "Pass:%d Missing IC handler\n",lx->pass; - ICPut(tempi); + ICPut(lx,tempi); LexExcept(lx,"Compiler Optimization Error at "); } if (tempi) { while (OptIC4(tempi)); code=tempi->ic_code; - if (cmp.result_cnt[code]) + if (intermediate_code_table[code].result_cnt) PrsPush(ps,tempi); } } diff --git a/Compiler/OptPass5.CPP b/Compiler/OptPass5.CPP index 8ad7c8f..945b4be 100644 --- a/Compiler/OptPass5.CPP +++ b/Compiler/OptPass5.CPP @@ -10,12 +10,12 @@ U0 OptPass5(CLex *lx) while (code=tempi->ic_code) { if (code>IC_NOP2) { if (tempi->ic_flags&ICF_TRACE) { - if (Bt(&lx->pass_trace_mask,5)) { + if (Bt(&lx->otrace_mask,5)) { "%2d:",ps->ptr; - ICPut(tempi); + ICPut(lx,tempi); } } - if (cmp.arg_cnt[code]==9) + if (intermediate_code_table[code].arg_cnt==IS_V_ARG) ps->ptr-=tempi->ic_data>>3; if (code==IC_PUSH_REGS) { for (i=0;ir.type&TY_MASK==TY_STK) + if (tempi->r.type&TY_MASK==TY_STK && !(tempi->ic_flags&ICF_NO_DEPEND_RESULT)) PrsPush(ps,tempi); } tempi=tempi->next; diff --git a/Compiler/OptPass6.CPP b/Compiler/OptPass6.CPP index cf2c868..0858792 100644 --- a/Compiler/OptPass6.CPP +++ b/Compiler/OptPass6.CPP @@ -1,7 +1,7 @@ Bool OptIC6(CIntermediateCode *tempi) { CIntermediateCode *tempil1; - if (tempi->ic_codeic_codeic_code==IC_ADD_CONST && tempi->ic_code==IC_DEREF && tempi->ic_flags&ICF_A1_WAS_STK && tempi->a1.type&TY_MASK==TY_REG && @@ -25,21 +25,20 @@ Bool OptIC6(CIntermediateCode *tempi) return FALSE; } -U0 OptPass6Lag(CLex *lx, - CPrsStk *ps,CIntermediateCode *tempi,I64 *i_,I64 num_stk, - I64 *_clobbered_reg_mask,I64 fun_num) +U0 OptPass6Lag(CLex *lx,CPrsStk *ps,CIntermediateCode *tempi, + I64 *i_,I64 num_stk,I64 *_clobbered_reg_mask,I64 fun_num) { I64 i=*i_,j,k,l,code,clobbered_reg_mask=*_clobbered_reg_mask; CHashFun *tempf; code=tempi->ic_code; - if (tempi->ic_flags&ICF_TRACE && Bt(&lx->pass_trace_mask,6)) { + if (tempi->ic_flags&ICF_TRACE && Bt(&lx->otrace_mask,6)) { "%2d:",i; - ICPut(tempi); + ICPut(lx,tempi); } if (code==IC_CALL_START) { k=MinI64(i,num_stk); j=0; - //See $LK,"STK TEMP ALLOCATION",A="FF:::/Compiler/CmpInit.CPP.Z,STK TEMP ALLOCATION"$ + //See $LK,"STK TEMP ALLOCATION",A="FF:::/Compiler/CInit.CPP,STK TEMP ALLOCATION"$ if (fun_num&1) for (l=0;lptr--; i=PrsPop(ps); } - if (cmp.arg_cnt[code]==9) + if (intermediate_code_table[code].arg_cnt==IS_V_ARG) i-=tempi->ic_data>>3; if (tempi->a2.type&TY_MASK==TY_STK) { i--; @@ -111,66 +110,41 @@ U0 OptPass6Lag(CLex *lx, U0 OptPass6(CLex *lx) { - CIntermediateCode *tempi,*tempil1,*tempil2,*tempil3,*tempif1,*tempif2,*old_tempil2; - I64 i=0,code,num_stk,clobbered_reg_mask=REG_ALWAYS_CLOBBERED_MASK,fun_num=0; + CIntermediateCode *tempi,*tempi_next,*tempil1,*tempil2,*old_tempil2; + I64 i=0,num_stk,clobbered_reg_mask=REG_ALWAYS_CLOBBERED_MASK,fun_num=0; CPrsStk *ps=lx->ps; ps->ptr=0; ps->ptr2=0; - if (lx->htc.fun) - fun_num=cmp.compiled_funs++; if (Bt(&lx->opts,OPTf_NO_REG_VAR) || lx->flags&LF_NO_REG_OPT) num_stk=0; else num_stk=cmp.num_stk_temps; tempi=lx->lcc.lcc_root.next; old_tempil2=NULL; - tempil1=tempil2=tempil3=&cmp.ic_nop; - while (code=tempi->ic_code) { - if ( code>=IC_END_EXP && code!=IC_NOP2) { - if ( tempil1->ic_code>=IC_END_EXP && tempil1->ic_code!=IC_NOP2) { - if (tempil2->ic_code>=IC_END_EXP && tempil2->ic_code!=IC_NOP2) - tempil3=tempil2; + tempil1=tempil2=&cmp.ic_nop; + while (tempi->ic_code) { + if (tempi->ic_code>IC_NOP2) { + if (tempil1->ic_code>IC_NOP2) tempil2=tempil1; - } tempil1=tempi; - } - if (tempil2->ic_code==IC_END_EXP && code!=IC_RETURN_VAL2 && code!=IC_NOP1 && - !(tempil3->ic_flags&(ICF_R_TO_F64|ICF_R_TO_INT|ICF_PUSH_RESULT|ICF_DEPEND_RESULT))) { - tempil3->ic_flags|=ICF_NO_DEPEND_RESULT; - tempil3->r.type=TY_NULL+tempil3->r.type&RT_MASK; - tempil2->ic_flags|=ICF_NO_DEPEND_RESULT; - tempil2->r.type=TY_NULL+tempil2->r.type&RT_MASK; - } - if (code>IC_NOP2) { if (tempi->a2.type&TY_MASK==TY_STK) { if (tempil2->r.type&TY_MASK==TY_STK && !(tempil2->ic_flags&ICF_PUSH_RESULT)) { - tempif2=NULL; - if (tempi->ic_code==IC_ASSIGN && - tempi->ic_flags&ICF_NOT_ADDR && - tempil2->ic_code!=IC_CALL_END && - tempil2->ic_code!=IC_CALL_END2 && + if (tempi->ic_code==IC_ASSIGN && tempi->ic_flags&ICF_NOT_ADDR && + tempi->ic_flags&ICF_NO_DEPEND_RESULT && + tempil2->ic_code!=IC_CALL_END && tempil2->ic_code!=IC_CALL_END2 && tempil2->ic_code!=IC_SET_RAX && - !(tempi->ic_flags& - (ICF_A2_TO_F64|ICF_A2_TO_INT)) && - !(tempil2->ic_flags& - (ICF_R_TO_F64|ICF_R_TO_INT))) { - if (tempif1=OptLead1(tempi)) //predict NO_DEPEND - if (tempif2=OptLead1(tempif1)) - if (tempif1->ic_code==IC_END_EXP && - tempif2->ic_code!=IC_RETURN_VAL2) { - tempil2->r.type =tempi->a1.type&TY_MASK+tempi->a1.type_pointed; - tempil2->r.type_pointed=tempi->a1.type_pointed; - tempil2->r.reg =tempi->a1.reg; - tempil2->r.disp =tempi->a1.disp; - tempil2->ic_flags=tempil2->ic_flags&~(ICF_NO_DEPEND_RESULT|ICF_R_WAS_STK)| - tempi->ic_flags&~(ICF_NOT_ADDR|ICF_A1_WAS_STK|ICF_A2_WAS_STK)|ICF_DEPEND_RESULT; - old_tempil2=NULL; - OptSetNOP1(tempi); - } else - tempif2=NULL; - } - if (!tempif2) { + !(tempi->ic_flags&(ICF_A2_TO_F64|ICF_A2_TO_INT)) && + !(tempil2->ic_flags&(ICF_R_TO_F64|ICF_R_TO_INT))) { + tempil2->r.type =tempi->a1.type&TY_MASK+tempi->a1.type_pointed; + tempil2->r.type_pointed=tempi->a1.type_pointed; + tempil2->r.reg =tempi->a1.reg; + tempil2->r.disp =tempi->a1.disp; + tempil2->ic_flags=tempil2->ic_flags&~(ICF_NO_DEPEND_RESULT|ICF_R_WAS_STK)| + tempi->ic_flags&~(ICF_NOT_ADDR|ICF_A1_WAS_STK|ICF_A2_WAS_STK)|ICF_DEPEND_RESULT; + old_tempil2=NULL; + OptSetNOP1(tempi); + } else { tempi->a2.type=TY_REG+tempi->a2.type&RT_MASK; tempi->a2.reg=REG_RAX; tempi->a2.disp=0; @@ -180,8 +154,8 @@ U0 OptPass6(CLex *lx) } } } else if (tempi->a1.type&TY_MASK==TY_STK && - tempil2->r.type&TY_MASK==TY_STK && - !(tempil2->ic_flags&ICF_PUSH_RESULT)) { + tempil2->r.type&TY_MASK==TY_STK && + !(tempil2->ic_flags&ICF_PUSH_RESULT)) { tempi->a1.type=TY_REG+tempi->a1.type&RT_MASK; tempi->a1.reg=REG_RAX; tempi->a1.disp=0; @@ -191,13 +165,16 @@ U0 OptPass6(CLex *lx) } if (tempi->ic_flags & ICF_PUSH_RESULT) tempi->r.type==TY_STK+tempi->r.type&RT_MASK; + if (old_tempil2!=tempil2) { + if (tempil2->ic_code>IC_NOP2) + OptPass6Lag(lx,ps,tempil2,&i,num_stk,&clobbered_reg_mask,fun_num); + old_tempil2=tempil2; + } } - if (old_tempil2!=tempil2) { - if (tempil2->ic_code>IC_NOP2) - OptPass6Lag(lx,ps,tempil2,&i,num_stk,&clobbered_reg_mask,fun_num); - old_tempil2=tempil2; - } - tempi=tempi->next; + tempi_next=tempi->next; + if (tempi->ic_code<=IC_NOP2) + OptFree(tempi); + tempi=tempi_next; } if (ps->ptr>2) { "Pass:%d Stk:%08X\n",lx->pass,ps->ptr; @@ -208,7 +185,7 @@ U0 OptPass6(CLex *lx) lx->htc.fun->used_reg_mask|=clobbered_reg_mask; lx->htc.fun->clobbered_reg_mask=clobbered_reg_mask; if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT) && - Bt(&lx->pass_trace_mask,6)) { + Bt(&lx->otrace_mask,6)) { "Used Reg Mask:%04X\n",lx->htc.fun->used_reg_mask; "Clobbered Reg Mask:%04X\n",clobbered_reg_mask; } diff --git a/Compiler/OptPass789.CPP b/Compiler/OptPass789.CPP deleted file mode 100644 index f377df3..0000000 --- a/Compiler/OptPass789.CPP +++ /dev/null @@ -1,1202 +0,0 @@ -I64 OptPass789(CLex *lx,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg) -{/* lx->pass==7 is first time - lx->pass==8 is second time - lx->pass==8 is third time and repeated until size stops shrinking - size is now known - lx->pass==9 is final pass, code is placed into buf. -*/ - CIntermediateCode *tempi,*tempi_next; - I64 code,i,cnt,num_lines=lx->max_line+1-lx->min_line,ip=0,ip2; - U8 *ptr; - CLexCodeMisc *lb; - CExe *tempx; - CExeAbsAddr *tempa; - CExeImportExport *tempe; - CExeHeapGlbl *temphg; - CExeHeapGlblRef *temphgr; - CDbgInfo *dbg_info; - CAOTCtrl *a=lx->a; - Bool short_jmp; - CICArg saved_p123[3]; - CHashClass *tempc; - CHashFun *tempf; - CHashGlblVar *tempg; - CExternUsage *tempeu; - - if (_dbg) { - *_dbg=dbg_info=CAlloc(offset(CDbgInfo.body)+sizeof(U32)*(num_lines+1)); - dbg_info->min_line=lx->min_line; - dbg_info->max_line=lx->max_line; - if (lx->flags&LF_AOT_COMPILE) - dbg_info->body[0]=a->ip; - else - dbg_info->body[0]=buf; - } else - dbg_info=NULL; - - if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT) && Bt(&lx->pass_trace_mask,lx->pass)) - "$$BK,1$$$$LTRED$$$$IV,1$$This code gets merged together and patched.\n$$FG$$$$IV,0$$$$BK,0$$"; - - lx->last_float_op_ic=NULL; - tempi=&lx->lcc.lcc_root; - tempi->ic_cnt=0; - tempi->ic_last_cnt=-1; - tempi=tempi->next; - while (code=tempi->ic_code) { - tempi_next=tempi->next; - if (code>IC_END_EXP) { - if (tempi->ic_flags&ICF_TRACE && Bt(&lx->pass_trace_mask,lx->pass)) - ICPut(tempi); - ip2=ip; - if (lx->flags&LF_AOT_COMPILE) - ip2+=a->ip; - else - ip2+=buf; - lx->cur_ic_float_op_num=0; - if (!(tempi->ic_flags &ICF_CODE_FINAL)) { - tempi->ic_flags=tempi->ic_flags&~(ICF_PREVIOUS_DELETED|ICF_DONT_RESTORE)|ICF_CODE_FINAL; - if (lx->pass==7) - lx->dont_push_float=Btr(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); - MemCpy(saved_p123,&tempi->a1,3*sizeof(CICArg)); - if (cmp.arg_cnt[code]==2 && tempi->a1.type&TY_MASK==TY_REG && - tempi->a1.reg==REG_RAX) - tempi->ic_flags|=ICF_A1_FIRST; - tempi->ic_cnt=0; - tempi->ic_last_cnt=-1; - if (tempi->ic_flags & ICF_A1_FIRST) { - if (tempi->a1.type&TY_MASK) { - if (tempi->ic_flags & ICF_A1_TO_F64) { - ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_A1,ip2); - tempi->a1.type=TY_REG+RT_I64; - tempi->a1.reg=REG_RDX; - tempi->a1.disp=0; - tempi->ic_flags&=~ICF_A1_FIRST; - } else if (tempi->ic_flags & ICF_A1_TO_INT) { - ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_A1,ip2); - tempi->a1.type=TY_REG+RT_I64; - tempi->a1.reg=REG_RDX; - tempi->a1.disp=0; - tempi->ic_flags&=~ICF_A1_FIRST; - } - } - if (tempi->a2.type&TY_MASK) { - if (tempi->ic_flags & ICF_A2_TO_F64) { - if (tempi->ic_flags&ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - tempi->a1.type=TY_REG+RT_I64; - tempi->a1.reg=REG_RDX; - tempi->a1.disp=0; - tempi->ic_flags&=~ICF_A1_FIRST; - } - ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,FALSE,CN_A2,ip2); - tempi->a2.type=TY_REG+RT_I64; - tempi->a2.reg=REG_RAX; - tempi->a2.disp=0; - } else if (tempi->ic_flags & ICF_A2_TO_INT) { - if (tempi->ic_flags&ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - tempi->a1.type=TY_REG+RT_I64; - tempi->a1.reg=REG_RDX; - tempi->a1.disp=0; - tempi->ic_flags&=~ICF_A1_FIRST; - } - ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,TRUE,CN_A2,ip2); - tempi->a2.type=TY_REG+RT_I64; - tempi->a2.reg=REG_RAX; - tempi->a2.disp=0; - } - } - } else { - if (tempi->a2.type&TY_MASK) { - if (tempi->ic_flags & ICF_A2_TO_F64) { - ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,FALSE,CN_A2,ip2); - tempi->a2.type=TY_REG+RT_I64; - tempi->a2.reg=REG_RAX; - tempi->a2.disp=0; - } else if (tempi->ic_flags & ICF_A2_TO_INT) { - ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,TRUE,CN_A2,ip2); - tempi->a2.type=TY_REG+RT_I64; - tempi->a2.reg=REG_RAX; - tempi->a2.disp=0; - } - } - if (tempi->a1.type&TY_MASK) { - if (tempi->ic_flags & ICF_A1_TO_F64) { - ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_A1,ip2); - tempi->a1.type=TY_REG+RT_I64; - tempi->a1.reg=REG_RDX; - tempi->a1.disp=0; - } else if (tempi->ic_flags & ICF_A1_TO_INT) { - ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_A1,ip2); - tempi->a1.type=TY_REG+RT_I64; - tempi->a1.reg=REG_RDX; - tempi->a1.disp=0; - } - } - } - nobound_switch (code) { - sub_switch_start: - sub_switch_start: - case IC_ABS_ADDR: - ICU16(tempi,0xB848); - ICU64(tempi,tempi->ic_data); - if (buf && lx->flags&LF_AOT_COMPILE && - !(lx->flags&(LF_NO_ABSS|LF_ASM_EXPRESSIONS))) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - tempa->type=EAT_ADD_U64; - a->abss=tempa; - tempa->ip=ip2+tempi->ic_cnt-8; - } - break; - case IC_HEAP_GLBL: - ICU16(tempi,0xB848); - ICU64(tempi,0); - temphg=tempi->ic_data; - if (buf && lx->flags&LF_AOT_COMPILE && - !(lx->flags&(LF_NO_ABSS|LF_ASM_EXPRESSIONS))) {//is this necessary--flags? - temphgr=CAlloc(sizeof(CExeHeapGlblRef)); - temphgr->next=temphg->references; - temphg->references=temphgr; - temphgr->ip=ip2+tempi->ic_cnt-8; - } - break; - case IC_ADDR_IMPORT: - ICU8(tempi,0xB8); - ICU32(tempi,0); - if (buf && !(lx->flags&LF_NO_ABSS)) { - tempg=tempi->ic_data; - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_IMM_U32; - tempe->ip=ip2+tempi->ic_cnt-4; - tempe->next=tempg->ie_lst; - tempg->ie_lst=tempe; - } - ICU24(tempi,0xC06348); - break; - case IC_RIP: - ICU16(tempi,0xB848); - ICU64(tempi,ip2+tempi->ic_cnt-2); - if (lx->flags&LF_AOT_COMPILE && buf && !(lx->flags&LF_NO_ABSS)) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - tempa->type=EAT_ADD_U64; - a->abss=tempa; - tempa->ip=ip2+tempi->ic_cnt-8; - } - break; - sub_switch_end: - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip2); - break; - case IC_BR_CARRY: - ICFlagBranch(tempi,ip,0x72820F,buf); - break; - case IC_BR_NOT_CARRY: - ICFlagBranch(tempi,ip,0x73830F,buf); - break; - case IC_BR_ZERO: - ICTestAndBranch(tempi,ip,0x74840F,buf,ip2); - break; - case IC_BR_NOT_ZERO: - ICTestAndBranch(tempi,ip,0x75850F,buf,ip2); - break; - case IC_BR_MM_ZERO: - ICPreIncDec(tempi,SLASH_OP_DEC,ip2); - ICFlagBranch(tempi,ip,0x74840F,buf); - break; - case IC_BR_MM_NOT_ZERO: - ICPreIncDec(tempi,SLASH_OP_DEC,ip2); - ICFlagBranch(tempi,ip,0x75850F,buf); - break; - case IC_BR_EQUAL_EQUAL: - ICCmpAndBranch(tempi,FALSE,ip,0x74840F,0x74840F,0x74840F,0x74840F,buf,ip2); - break; - case IC_BR_EQUAL_EQUAL2: - ICCmpAndBranch(tempi,TRUE,ip,0x74840F,0x74840F,0x74840F,0x74840F,buf,ip2); - break; - case IC_BR_NOT_EQUAL: - ICCmpAndBranch(tempi,FALSE,ip,0x75850F,0x75850F,0x75850F,0x75850F,buf,ip2); - break; - case IC_BR_NOT_EQUAL2: - ICCmpAndBranch(tempi,TRUE,ip,0x75850F,0x75850F,0x75850F,0x75850F,buf,ip2); - break; - case IC_BR_GREATER_EQUAL: - if (tempi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(lx,tempi, ip,0x73830F,0x76860F,buf,ip2); - else - ICCmpAndBranch(tempi,FALSE,ip,0x73830F,0x7D8D0F,0x76860F,0x7E8E0F,buf,ip2); - break; - case IC_BR_GREATER_EQUAL2: - ICCmpAndBranch(tempi,TRUE,ip,0x73830F,0x7D8D0F,0x76860F,0x7E8E0F,buf,ip2); - break; - case IC_BR_LESS_EQUAL: - if (tempi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(lx,tempi, ip,0x76860F,0x73830F,buf,ip2); - else - ICCmpAndBranch(tempi,FALSE,ip,0x76860F,0x7E8E0F,0x73830F,0x7D8D0F,buf,ip2); - break; - case IC_BR_LESS_EQUAL2: - ICCmpAndBranch(tempi,TRUE,ip,0x76860F,0x7E8E0F,0x73830F,0x7D8D0F,buf,ip2); - break; - case IC_BR_GREATER: - if (tempi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(lx,tempi, ip,0x77870F,0x72820F,buf,ip2); - else - ICCmpAndBranch(tempi,FALSE,ip,0x77870F,0x7F8F0F,0x72820F,0x7C8C0F,buf,ip2); - break; - case IC_BR_GREATER2: - ICCmpAndBranch(tempi,TRUE,ip,0x77870F,0x7F8F0F,0x72820F,0x7C8C0F,buf,ip2); - break; - case IC_BR_LESS: - if (tempi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(lx,tempi, ip,0x72820F,0x77870F,buf,ip2); - else - ICCmpAndBranch(tempi,FALSE,ip,0x72820F,0x7C8C0F,0x77870F,0x7F8F0F,buf,ip2); - break; - case IC_BR_LESS2: - ICCmpAndBranch(tempi,TRUE,ip,0x72820F,0x7C8C0F,0x77870F,0x7F8F0F,buf,ip2); - break; - case IC_BR_BT: - ICBrBitOps(tempi,ip,0xA30F,0x20BA0F,0x72820F,buf,ip2); - break; - case IC_BR_BTS: - case IC_BR_LBTS: - ICBrBitOps(tempi,ip,0xAB0F,0x28BA0F,0x72820F,buf,ip2); - break; - case IC_BR_BTR: - case IC_BR_LBTR: - ICBrBitOps(tempi,ip,0xB30F,0x30BA0F,0x72820F,buf,ip2); - break; - case IC_BR_BTC: - case IC_BR_LBTC: - ICBrBitOps(tempi,ip,0xBB0F,0x38BA0F,0x72820F,buf,ip2); - break; - case IC_BR_NOT_BT: - ICBrBitOps(tempi,ip,0xA30F,0x20BA0F,0x73830F,buf,ip2); - break; - case IC_BR_NOT_BTS: - case IC_BR_NOT_LBTS: - ICBrBitOps(tempi,ip,0xAB0F,0x28BA0F,0x73830F,buf,ip2); - break; - case IC_BR_NOT_BTR: - case IC_BR_NOT_LBTR: - ICBrBitOps(tempi,ip,0xB30F,0x30BA0F,0x73830F,buf,ip2); - break; - case IC_BR_NOT_BTC: - case IC_BR_NOT_LBTC: - ICBrBitOps(tempi,ip,0xBB0F,0x38BA0F,0x73830F,buf,ip2); - break; - case IC_BR_AND_ZERO: - ICAndBranch(tempi,ip,0x74840F,buf,ip2); - break; - case IC_BR_AND_NOT_ZERO: - ICAndBranch(tempi,ip,0x75850F,buf,ip2); - break; - case IC_SUB_CALL: - lb=OptLabelFwd(tempi->ic_data); - ICU8(tempi,0xE8); - ICU32(tempi,lb->addr-(ip+5)); - break; - case IC_JMP: - lb=OptLabelFwd(tempi->ic_data); - short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP); - if (!buf && lb->addr!=INVALID_PTR && - MIN_I8+5addr-ipic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); - if (buf || i) - ICU16(tempi,i<<8+0xEB); - else - tempi->ic_code=IC_NOP1; - } else { - i=lb->addr-(ip+5); - ICU8(tempi,0xE9); - ICU32(tempi,i); - } - break; - case IC_LABEL: - lb=tempi->ic_data; - lb->addr=ip; - if (lb->flags&CMF_POP_CMP) { - ICAddRSP(tempi,-8,FALSE); - ICAddRSP(tempi,8,FALSE); - } - if (lb->type==CMT_ASM_LABEL) - lb->addr+=lb->ip; - break; - case IC_STR_CONST: - case IC_GET_LABEL: - lb=tempi->ic_data; - if (lx->flags&LF_AOT_COMPILE) - i=lb->addr+a->ip; - else - i=lb->addr+buf; - ICLea(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_RIP_DISP32+RT_PTR,0,i,lx,buf,ip2); - break; - case IC_ASM: - tempx=tempi->ic_data; - tempi->ic_cnt+=tempx->ex_U8s; - if (buf) { - MemCpy(buf+ip,tempx->buf,tempx->ex_U8s); - Free(tempx->buf); - tempx->buf=buf; - tempx->ip=ip; - tempx->ip2=ip2; - if (lx->flags&LF_AOT_COMPILE) - CmpFixUpAOTAsm(lx,tempx); - else - CmpFixUpJITAsm(lx,tempx); - cnt=tempi->ic_cnt; - goto skip_copy; - } - break; - case IC_CALL: - i=tempi->ic_data-(ip2+5); - if (!(MIN_I32<=i<=MAX_I32) && !(lx->flags&LF_AOT_COMPILE)) { - ICU16(tempi,0xBB48); - ICU64(tempi,tempi->ic_data); - ICU16(tempi,0xD3FF); - } else { - ICU8(tempi,0xE8); - ICU32(tempi,i); - } - break; - case IC_CALL_EXTERN: //Only for static modules - ICU8(tempi,0xE8); - ICU32(tempi,0); - if (buf) { - tempf=tempi->ic_data; - tempeu=CAlloc(sizeof(CExternUsage)); - tempeu->next=tempf->ext_lst; - tempf->ext_lst=tempeu; - tempeu->ip=ip2+1; - } - break; - case IC_CALL_INDIRECT2: - ICU16(tempi,0xBB48); - if (lx->flags&LF_AOT_COMPILE) i=ip2+tempi->ic_cnt; - ICU64(tempi,tempi->ic_data); - ICU16(tempi,0x13FF); - if (buf && lx->flags&LF_AOT_COMPILE&& !(lx->flags&LF_NO_ABSS)) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - tempa->type=EAT_ADD_U64; - a->abss=tempa; - tempa->ip=i; - } - break; - case IC_CALL_IMPORT: - if (GetOpt(OPTf_USE_IMM64)) { - ICU16(tempi,0xBB48); - ICU64(tempi,0); - if (buf) { - tempf=tempi->ic_data; - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_IMM_U64; - tempe->ip=ip2+tempi->ic_cnt-8; - tempe->next=tempf->ie_lst; - tempf->ie_lst=tempe; - } - ICU16(tempi,0xD3FF); - } else { - ICU8(tempi,0xE8); - ICU32(tempi,0); - if (buf) { - tempf=tempi->ic_data; - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_REL_I32; - tempe->ip=ip2+tempi->ic_cnt-4; - tempe->next=tempf->ie_lst; - tempf->ie_lst=tempe; - } - } - break; - sub_switch_end: - tempi->ic_flags&=~ICF_CODE_FINAL; - break; - case IC_LEAVE: - if (lx->htc.fun) { - if (Bt(&lx->htc.fun->flags,Ff_INTERRUPT)) - ICPopRegs(tempi,REG_ALWAYS_CLOBBERED_MASK&~(1<htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK|REG_STK_TEMPS_MASK)); - else - ICPopRegs(tempi,lx->htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK)); - } - if (tempi->ic_data<=MAX_I16) { - if (tempi->ic_data) - ICU8(tempi,0xC9); //LEAVE - else - ICU8(tempi,0x5D); //POP RBP - } else { - ICAddRSP(tempi,tempi->ic_data); - ICU8(tempi,0x5D); //POP RBP - } - if (lx->htc.fun && Bt(&lx->htc.fun->flags,Ff_INTERRUPT)) { - if (Bt(&lx->htc.fun->flags,Ff_HASERRCODE)) - ICAddRSP(tempi,8); - ICU16(tempi,0xCF48); - } else if (lx->htc.fun && lx->htc.fun->arg_cnt && - (Bt(&lx->htc.fun->flags,Ff_RET1) || Bt(&lx->htc.fun->flags,Ff_ARGPOP)) && - !Bt(&lx->htc.fun->flags,Ff_NOARGPOP)) { - ICU8(tempi,0xC2); - ICU16(tempi,lx->htc.fun->arg_cnt<<3); - } else - ICU8(tempi,0xC3); - break; - case IC_RET: - ICU8(tempi,0xC3); - break; - case IC_FS: - ICZero(tempi,REG_RAX); - ICU32(tempi,0x8B4864); - break; - case IC_GS: - ICZero(tempi,REG_RAX); - ICU32(tempi,0x8B4865); - break; - case IC_MOV_FS: - ICZero(tempi,REG_RAX); - ICU8(tempi,0x64); -//It's ugly to use ic_class here - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_DISP+CmpRawType(tempi->ic_class),REG_RAX,tempi->ic_data,ip2); - break; - case IC_MOV_GS: - ICZero(tempi,REG_RAX); - ICU8(tempi,0x65); -//It's ugly to use ic_class here - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_DISP+CmpRawType(tempi->ic_class),REG_RAX,tempi->ic_data,ip2); - break; - case IC_HOLYC_TYPECAST: - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - break; - case IC_COM: - ICUnaries(tempi,SLASH_OP_NOT,ip2); - break; - case IC_NOT: - ICNot(tempi,ip2); - break; - case IC_UNARY_MINUS: - if (tempi->r.type&RT_MASK==RT_F64) - ICFUnaryMinus(lx,tempi,buf,ip2); - else - ICUnaries(tempi,SLASH_OP_NEG,ip2); - break; - case IC_ADDR: - case IC_MOV: - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - break; - case IC_DEREF: - ICDeref(tempi,ip2); - break; - case IC_DEREF_PP: - ICDerefPostIncDec(tempi,SLASH_OP_INC,ip2); - break; - case IC_DEREF_MM: - ICDerefPostIncDec(tempi,SLASH_OP_DEC,ip2); - break; - case IC__PP: - if (tempi->ic_flags&ICF_USE_INT) - ICPostIncDec(tempi,SLASH_OP_INC,ip2); - else - ICFPostIncDec(lx,tempi,CMP_TEMPLATE_INC,ip2); - break; - case IC__MM: - if (tempi->ic_flags&ICF_USE_INT) - ICPostIncDec(tempi,SLASH_OP_DEC,ip2); - else - ICFPostIncDec(lx,tempi,CMP_TEMPLATE_DEC,ip2); - break; - case IC_PP_: - if (tempi->ic_flags&ICF_USE_INT) - ICPreIncDec(tempi,SLASH_OP_INC,ip2); - else - ICFPreIncDec(lx,tempi,CMP_TEMPLATE_INC,ip2); - break; - case IC_MM_: - if (tempi->ic_flags&ICF_USE_INT) - ICPreIncDec(tempi,SLASH_OP_DEC,ip2); - else - ICFPreIncDec(lx,tempi,CMP_TEMPLATE_DEC,ip2); - break; - case IC_LEA: - ICLea(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,lx,buf,ip2); - break; - case IC_POWER: - ICFPow(lx,tempi,buf,ip2); - break; - case IC_SHL: - ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); - break; - case IC_SHR: - ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); - break; - case IC_MUL: - if (tempi->ic_flags&ICF_USE_INT) - ICMul(tempi,ip2); - else - ICFMul(lx,tempi,buf,ip2); - break; - case IC_DIV: - if (tempi->ic_flags&ICF_USE_INT) - ICDiv(tempi,ip2); - else - ICFDiv(lx,tempi,buf,ip2); - break; - case IC_MOD: - if (tempi->ic_flags&ICF_USE_INT) - ICMod(tempi,ip2); - else - ICFMod(lx,tempi,ip2); - break; - case IC_AND: - ICAddEct(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x23,ip2); - break; - case IC_OR: - ICAddEct(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x0B,ip2); - break; - case IC_XOR: - ICAddEct(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x33,ip2); - break; - case IC_ADD: - if (tempi->ic_flags&ICF_USE_INT) - ICAddEct(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x03,ip2); - else - ICFAdd(lx,tempi,buf,ip2); - break; - case IC_SUB: - if (tempi->ic_flags&ICF_USE_INT) - ICSub(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); - else - ICFSub(lx,tempi,buf,ip2); - break; - case IC_EQUAL_EQUAL: - ICCmp(tempi,0x75,0x75,ip2); - break; - case IC_NOT_EQUAL: - ICCmp(tempi,0x74,0x74,ip2); - break; - case IC_LESS: - if (tempi->ic_flags&ICF_USE_INT) - ICCmp(tempi,0x73,0x7D,ip2); - else - ICFCmp(lx,tempi,CMP_TEMPLATE_LESS,ip2); - break; - case IC_GREATER: - if (tempi->ic_flags&ICF_USE_INT) - ICCmp(tempi,0x76,0x7E,ip2); - else - ICFCmp(lx,tempi,CMP_TEMPLATE_GREATER,ip2); - break; - case IC_LESS_EQUAL: - if (tempi->ic_flags&ICF_USE_INT) - ICCmp(tempi,0x77,0x7F,ip2); - else - ICFCmp(lx,tempi,CMP_TEMPLATE_LESS_EQUAL,ip2); - break; - case IC_GREATER_EQUAL: - if (tempi->ic_flags&ICF_USE_INT) - ICCmp(tempi,0x72,0x7C,ip2); - else - ICFCmp(lx,tempi,CMP_TEMPLATE_GREATER_EQUAL,ip2); - break; - case IC_AND_AND: - ICAndAnd(tempi,ip2); - break; - case IC_OR_OR: - ICOrOr(tempi,ip2); - break; - case IC_XOR_XOR: - ICXorXor(tempi,ip2); - break; - case IC_ASSIGN: - ICAssign(tempi,ip2); - break; - case IC_ASSIGN_PP: - ICAssignPostIncDec(tempi,SLASH_OP_INC,ip2); - break; - case IC_ASSIGN_MM: - ICAssignPostIncDec(tempi,SLASH_OP_DEC,ip2); - break; - case IC_SHL_EQUAL: - ICShiftEqual(tempi,tempi->a1.type_pointed, - tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); - break; - case IC_SHR_EQUAL: - ICShiftEqual(tempi,tempi->a1.type_pointed, - tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); - break; - case IC_MUL_EQUAL: - if (tempi->ic_flags&ICF_USE_INT) - ICMulEqual(tempi,ip2); - else - ICFOpEqual(lx,tempi,SLASH_OP_FMUL,buf,ip2); - break; - case IC_DIV_EQUAL: - if (tempi->ic_flags&ICF_USE_INT) - ICDivEqual(tempi,FALSE,ip2); - else - ICFOpEqual(lx,tempi,SLASH_OP_FDIV,buf,ip2); - break; - case IC_MOD_EQUAL: - if (tempi->ic_flags&ICF_USE_INT) - ICDivEqual(tempi,TRUE,ip2); - else - ICFModEqual(lx,tempi,ip2); - break; - case IC_AND_EQUAL: - ICAndEqual(tempi,ip2); - break; - case IC_OR_EQUAL: - ICOrEqual(tempi,ip2); - break; - case IC_XOR_EQUAL: - ICXorEqual(tempi,ip2); - break; - case IC_ADD_EQUAL: - if (tempi->ic_flags&ICF_USE_INT) - ICAddSubEctEqual(tempi,tempi->a1.type_pointed, - tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x010000000003,ip2); - else - ICFOpEqual(lx,tempi,SLASH_OP_FADD,buf,ip2); - break; - case IC_SUB_EQUAL: - if (tempi->ic_flags&ICF_USE_INT) - ICAddSubEctEqual(tempi,tempi->a1.type_pointed, - tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x29000000052B,ip2); - else - ICFOpEqual(lx,tempi,SLASH_OP_FSUB,buf,ip2); - break; - case IC_SHL_CONST: - ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - TY_IMM+RT_I64,0,tempi->ic_data,0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); - break; - case IC_SHR_CONST: - ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - TY_IMM+RT_I64,0,tempi->ic_data,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); - break; - case IC_ADD_CONST: - ICAddSubEctImm(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,tempi->ic_data,0x0003,ip2); - break; - case IC_SUB_CONST: - ICAddSubEctImm(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,tempi->ic_data,0x052B,ip2); - break; - case IC_ENTER: - ICU32(tempi,0xEC8B4855); - if (tempi->ic_data) - ICAddRSP(tempi,-tempi->ic_data,FALSE); - if (lx->htc.fun) { - if (Bt(&lx->htc.fun->flags,Ff_INTERRUPT)) - ICPushRegs(tempi,REG_ALWAYS_CLOBBERED_MASK&~(1<htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK|REG_STK_TEMPS_MASK)); - else { - if (sys_var_init_flag&1 && i) - ICLocalVarInit(tempi); - ICPushRegs(tempi,lx->htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK)); - } - for (i=0;i0 && reg_offsets[i].offset!=MAX_I64) { - tempc=OptClassFwd(reg_offsets[i].m->member_class); - ICMov(tempi,TY_REG+RT_I64,i,0, - TY_DISP+tempc->raw_type,REG_RBP,reg_offsets[i].offset,ip2); - } - } - break; - case IC_ADD_RSP: - ICAddRSP(tempi,tempi->ic_data); - break; - case IC_CALL_INDIRECT: - if (MIN_I8<=tempi->ic_data<=MAX_I8) { - ICU24(tempi,0x2454FF); //CALL disp[RSP] - ICU8(tempi,tempi->ic_data); - } else { - ICU24(tempi,0x2494FF); //CALL disp[RSP] - ICU32(tempi,tempi->ic_data); - } - break; - case IC_PUSH: - ICPush(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - break; - case IC_POP: - ICU8(tempi,0x58); - break; - case IC_INVLPG: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICU24(tempi,0x38010F); - break; - case IC_CLFLUSH: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICU24(tempi,0x38AE0F); - break; - case IC_GET_RFLAGS: - ICU8(tempi,0x9C); - ICPop(tempi,TY_REG+RT_I64,REG_RAX,0,ip2); - break; - case IC_CARRY: - ICU24(tempi,0xC0920F); //SETC AL - ICU24(tempi,0x01E083); //AND EAX,1 - break; - case IC_RDTSC: - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_RDTSC,TRUE,FALSE,FALSE,CN_MAIN); - break; - case IC_HPET: - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_HPET,TRUE,FALSE,FALSE,CN_MAIN); - break; - case IC_SET_RFLAGS: - ICPush(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICU8(tempi,0x9D); - break; - case IC_GET_RBP: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - TY_REG+RT_I64,REG_RBP,0,ip2); - break; - case IC_SET_RBP: - ICMov(tempi,TY_REG+RT_I64,REG_RBP,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - break; - case IC_GET_RSP: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - TY_REG+RT_I64,REG_RSP,0,ip2); - break; - case IC_SET_RSP: - ICMov(tempi,TY_REG+RT_I64,REG_RSP,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - break; - case IC_RETURN_VAL: - case IC_SET_RAX: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - break; - case IC_GET_RAX: - break; - case IC_BT: - ICBitOps(tempi,&tempi->a1,&tempi->a2,tempi->next, - 0xA30F,0x20BA0F,ip2); - break; - case IC_BTS: - case IC_LBTS: - ICBitOps(tempi,&tempi->a1,&tempi->a2,tempi->next, - 0xAB0F,0x28BA0F,ip2); - break; - case IC_BTR: - case IC_LBTR: - ICBitOps(tempi,&tempi->a1,&tempi->a2,tempi->next, - 0xB30F,0x30BA0F,ip2); - break; - case IC_BTC: - case IC_LBTC: - ICBitOps(tempi,&tempi->a1,&tempi->a2,tempi->next, - 0xBB0F,0x38BA0F,ip2); - break; - case IC_BSF: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICU32(tempi,0xC0BC0F48); - ICU16(tempi,0x0375); - ICU24(tempi,0xD0F748); - break; - case IC_BSR: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICU32(tempi,0xC0BD0F48); - ICU16(tempi,0x0375); - ICU24(tempi,0xD0F748); - break; - case IC_SIGN_I64: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_SIGN_I64,TRUE,FALSE,FALSE,CN_MAIN); - break; - case IC_PREEMPT: - ICPreempt(tempi,ip2); - break; - case IC_TOUPPER: - ICToUpper(tempi,ip2); - break; - case IC_TO_I64: - ICToI64(lx,tempi,ip2); - break; - case IC_TO_F64: - ICToF64(lx,tempi,ip2); - break; - case IC_TO_BOOL: - ICToBool(lx,tempi,ip2); - break; - case IC_SQR: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_SQR,ip2); - break; - case IC_ABS: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_ABS,ip2); - break; - case IC_SQRT: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_SQRT,ip2); - break; - case IC_SIN: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_SIN,ip2); - break; - case IC_COS: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_COS,ip2); - break; - case IC_TAN: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_TAN,ip2); - break; - case IC_ATAN: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_ATAN,ip2); - break; - case IC_ABS_I64: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICU24(tempi,0xC08548); - ICU16(tempi,0x0379); - ICU24(tempi,0xD8F748); - break; - case IC_MIN_I64: - ICMinMax(tempi,0x4F,ip2); - break; - case IC_MAX_I64: - ICMinMax(tempi,0x4C,ip2); - break; - case IC_MIN_U64: - ICMinMax(tempi,0x47,ip2); - break; - case IC_MAX_U64: - ICMinMax(tempi,0x42,ip2); - break; - case IC_MOD_U64: - ICModU64(tempi,ip2); - break; - case IC_SQR_I64: - ICSqr(tempi,SLASH_OP_IMUL,ip2); - break; - case IC_SQR_U64: - ICSqr(tempi,SLASH_OP_MUL,ip2); - break; - case IC_SWAP_U8: - case IC_SWAP_U16: - case IC_SWAP_U32: - case IC_SWAP_I64: - ICSwap(tempi,ip2); - break; - case IC_QUE_INIT: - ICQueInit(tempi,ip2); - break; - case IC_QUE_INS: - ICQueIns(tempi,ip2); - break; - case IC_QUE_INS_REV: - ICQueInsRev(tempi,ip2); - break; - case IC_QUE_REM: - ICQueRem(tempi,ip2); - break; - case IC_STRLEN: - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_STRLEN,TRUE,FALSE,FALSE,CN_MAIN); - break; - case IC_IN_U32: - if (tempi->a1.type&TY_MASK==TY_IMM) { - ICU16(tempi,0xC033); - if (tempi->a1.disp<=MAX_U8) - ICU16(tempi,0xE5+tempi->a1.disp<<8); - else { - ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a1.disp<<16); - ICU8(tempi,0xED); - } - } else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICU16(tempi,0xC033); - ICU8(tempi,0xED); - } - break; - case IC_IN_U16: - if (tempi->a1.type&TY_MASK==TY_IMM) { - ICU16(tempi,0xC033); - if (tempi->a1.disp<=MAX_U8) - ICU24(tempi,0xE500+OC_OP_SIZE_PREFIX+tempi->a1.disp<<16); - else { - ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a1.disp<<16); - ICU16(tempi,0xED00+OC_OP_SIZE_PREFIX); - } - } else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICU16(tempi,0xC033); - ICU16(tempi,0xED00+OC_OP_SIZE_PREFIX); - } - break; - case IC_IN_U8: - if (tempi->a1.type&TY_MASK==TY_IMM) { - ICU16(tempi,0xC033); - if (tempi->a1.disp<=MAX_U8) - ICU16(tempi,0xE4+tempi->a1.disp<<8); - else { - ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a1.disp<<16); - ICU8(tempi,0xEC); - } - } else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICU16(tempi,0xC033); - ICU8(tempi,0xEC); - } - break; - case IC_OUT_U32: - if (tempi->a2.type&TY_MASK==TY_IMM) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - if (tempi->a2.disp<=MAX_U8) - ICU16(tempi,0xE7+tempi->a2.disp<<8); - else { - ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a2.disp<<16); - ICU8(tempi,0xEF); - } - } else { - if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); - } else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - } - ICU8(tempi,0xEF); - } - break; - case IC_OUT_U16: - if (tempi->a2.type&TY_MASK==TY_IMM) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - if (tempi->a2.disp<=MAX_U8) - ICU24(tempi,0xE700+OC_OP_SIZE_PREFIX+tempi->a2.disp<<16); - else { - ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a2.disp<<16); - ICU16(tempi,0xEF00+OC_OP_SIZE_PREFIX); - } - } else { - if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); - } else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - } - ICU16(tempi,0xEF00+OC_OP_SIZE_PREFIX); - } - break; - case IC_OUT_U8: - if (tempi->a2.type&TY_MASK==TY_IMM) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - if (tempi->a2.disp<=MAX_U8) - ICU16(tempi,0xE6+tempi->a2.disp<<8); - else { - ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a2.disp<<16); - ICU8(tempi,0xEE); - } - } else { - if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); - } else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - } - ICU8(tempi,0xEE); - } - break; - case IC_NOBOUND_SWITCH: - ICSwitch(tempi,ip,TRUE,lx,buf,ip2); - break; - case IC_SWITCH: - ICSwitch(tempi,ip,FALSE,lx,buf,ip2); - break; - case IC_NOP1: - case IC_NOP2: - OptFree(tempi); - goto op789_next; - case IC_CALL_START: - case IC_PUSH_REGS: - ICPushRegs(tempi,tempi->ic_data); - break; - case IC_CALL_END: - ICPopRegs(tempi,tempi->ic_data); - if (tempi->r.type&TY_MASK) - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip2); - break; - case IC_POP_REGS: - ICPopRegs(tempi,tempi->ic_data); - break; - case IC_RETURN_VAL2: - case IC_PUSH_CMP: - case IC_CALL_END2: - case IC_END_EXP: - case IC_END: - case IC_ADD_RSP1: - break; - default: - "Pass:%d Missing IC handler\n",lx->pass; - ICPut(tempi); - LexExcept(lx,"Compiler Optimization Error at "); - } - if (tempi->r.type&TY_MASK) { - if (tempi->ic_flags & ICF_R_TO_F64) { - if (tempi->ic_code==IC_PUSH_CMP) { - ICU24(tempi,0xDC8B48); - ICU24(tempi,0x2BDF48); - ICU24(tempi,0x1BDD48); - ICU8(tempi,0x9B); - } else { - ICFCvt(lx,tempi,REG_RAX,tempi->r.type,tempi->r.reg,tempi->r.disp,FALSE,CN_R,ip2); - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip2); - } - } else if (tempi->ic_flags & ICF_R_TO_INT) { - ICFCvt(lx,tempi,REG_RAX,tempi->r.type,tempi->r.reg,tempi->r.disp,TRUE,CN_R,ip2); - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip2); - } - } - } - if (tempi->ic_flags&ICF_DEL_PREVIOUS_INS) { - cnt=tempi->ic_last_cnt; - tempi->ic_flags&=~ICF_DEL_PREVIOUS_INS; - } else - cnt=tempi->ic_cnt; - - if (cnt && buf) - MemCpy(buf+ip,tempi->ic_body,cnt); - -skip_copy: - if (dbg_info && lx->min_line<=tempi->ic_line<=lx->max_line) { - i=tempi->ic_line-lx->min_line; - if (!dbg_info->body[i]) - dbg_info->body[i]=ip2; - } - - if (tempi->ic_flags&ICF_TRACE && Bt(&lx->pass_trace_mask,lx->pass) && cnt) { - "$$RED$$"; - if (buf) - Un(buf+ip,cnt,64); - else - Un(tempi->ic_body,cnt,64); - "$$FG$$"; - } - if (!(tempi->ic_flags&(ICF_CODE_FINAL|ICF_DONT_RESTORE))) - MemCpy(&tempi->a1,saved_p123,3*sizeof(CICArg)); - ip+=cnt; - } else { - tempi->ic_cnt=0; - tempi->ic_last_cnt=-1; - } -op789_next: - if (tempi->ic_cnt>=IC_BODY_SIZE && tempi->ic_code!=IC_ASM) - throw('Compiler'); - tempi=tempi_next; - } - - lb=lx->lcc.lcc_next_misc; - while (lb!=&lx->lcc.lcc_next_misc) { - switch (lb->type) { - case CMT_STR_CONST: - lb->addr=ip; - if (buf) - MemCpy(buf+ip,lb->str,lb->st_len); - ip+=lb->st_len; - break; - case CMT_JMP_TABLE: - lb->addr=ip; - ptr=buf+lb->addr; - if (lb->flags&(CMF_I8_JMP_TABLE|CMF_U8_JMP_TABLE)) { - if (buf) - for (i=0;irange;i++) - *ptr++=lb->jmp_table[i]->addr-lb->begin->addr; - ip+=lb->range; - } else if (lb->flags&(CMF_I16_JMP_TABLE|CMF_U16_JMP_TABLE)) { - if (buf) - for (i=0;irange;i++) - *ptr(U16 *)++=lb->jmp_table[i]->addr-lb->begin->addr; - ip+=lb->range<<1; - } else { - if (buf) - for (i=0;irange;i++) { - if (lx->flags&LF_AOT_COMPILE && !(lx->flags&LF_NO_ABSS)) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - tempa->type=EAT_ADD_U32; - a->abss=tempa; - tempa->ip=a->ip+lb->addr+i<<2; - *ptr(U32 *)++=lb->jmp_table[i]->addr+a->ip; - } else - *ptr(U32 *)++=lb->jmp_table[i]->addr+buf; - } - ip+=lb->range<<2; - } - break; - case CMT_FLOAT_CONSTS: - lb->addr=ip; - if (buf) - MemCpy(buf+lb->addr,lb->float_consts,lb->num_consts*sizeof(F64)); - ip+=lb->num_consts*sizeof(F64); - break; - } - lb=lb->next; - } - if (dbg_info) { - if (lx->flags&LF_AOT_COMPILE) - dbg_info->body[num_lines]=ip+a->ip; - else - dbg_info->body[num_lines]=ip+buf; - } - - return ip; -} diff --git a/Compiler/OptPass789A.CPP b/Compiler/OptPass789A.CPP new file mode 100644 index 0000000..81aa5ab --- /dev/null +++ b/Compiler/OptPass789A.CPP @@ -0,0 +1,1189 @@ +I64 OptPass789A(CLex *lx,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg) +{/*lx->pass==7 is first time +lx->pass==8 is second time +lx->pass==9 is third time +lx->pass==9 is fourth time and repeated until size stops shrinking +size is now known +lx->pass==10 is final pass, code is placed into buf. +*/ + CIntermediateCode *tempi,*tempi_next; + I64 i,cnt,num_lines=lx->max_line+1-lx->min_line,ip=0,ip2; + U8 *ptr; + CLexCodeMisc *lb; + CExe *tempx; + CExeAbsAddr *tempa; + CExeImportExport *tempe; + CExeHeapGlbl *temphg; + CExeHeapGlblRef *temphgr; + CDbgInfo *dbg_info; + CAOTCtrl *a=lx->a; + Bool short_jmp; + CICArg saved_p123[3]; + CHashClass *tempc; + CHashFun *tempf; + CHashGlblVar *tempg; + CExternUsage *tempeu; + + if (_dbg) { + *_dbg=dbg_info=CAlloc(offset(CDbgInfo.body)+sizeof(U32)*(num_lines+1)); + dbg_info->min_line=lx->min_line; + dbg_info->max_line=lx->max_line; + if (lx->flags&LF_AOT_COMPILE) + dbg_info->body[0]=a->ip; + else + dbg_info->body[0]=buf; + } else + dbg_info=NULL; + + if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT) && Bt(&lx->otrace_mask,lx->pass)) + "$$BK,1$$$$LTRED$$$$IV,1$$This code gets merged together and patched.\n$$FG$$$$IV,0$$$$BK,0$$"; + + lx->last_float_op_ic=NULL; + tempi=&lx->lcc.lcc_root; + tempi->ic_cnt=0; + tempi->ic_last_cnt=-1; + tempi=tempi->next; + while (tempi->ic_code) { + tempi_next=tempi->next; + if (tempi->ic_flags&ICF_TRACE && Bt(&lx->otrace_mask,lx->pass)) + ICPut(lx,tempi); + ip2=ip; + if (lx->flags&LF_AOT_COMPILE) + ip2+=a->ip; + else + ip2+=buf; + lx->cur_ic_float_op_num=0; + if (!(tempi->ic_flags &ICF_CODE_FINAL)) { + tempi->ic_flags=tempi->ic_flags&~(ICF_PREVIOUS_DELETED|ICF_DONT_RESTORE)|ICF_CODE_FINAL; + if (lx->pass==7) + lx->dont_push_float=Btr(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); + MemCpy(saved_p123,&tempi->a1,3*sizeof(CICArg)); + if (intermediate_code_table[tempi->ic_code].arg_cnt==IS_2_ARG && tempi->a1.type&TY_MASK==TY_REG && + tempi->a1.reg==REG_RAX) + tempi->ic_flags|=ICF_A1_FIRST; + tempi->ic_cnt=0; + tempi->ic_last_cnt=-1; + if (tempi->ic_flags & ICF_A1_FIRST) { + if (tempi->a1.type&TY_MASK) { + if (tempi->ic_flags & ICF_A1_TO_F64) { + ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_A1,ip2); + tempi->a1.type=TY_REG+RT_I64; + tempi->a1.reg=REG_RDX; + tempi->a1.disp=0; + tempi->ic_flags&=~ICF_A1_FIRST; + } else if (tempi->ic_flags & ICF_A1_TO_INT) { + ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_A1,ip2); + tempi->a1.type=TY_REG+RT_I64; + tempi->a1.reg=REG_RDX; + tempi->a1.disp=0; + tempi->ic_flags&=~ICF_A1_FIRST; + } + } + if (tempi->a2.type&TY_MASK) { + if (tempi->ic_flags & ICF_A2_TO_F64) { + if (tempi->ic_flags&ICF_A1_FIRST) { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type=TY_REG+RT_I64; + tempi->a1.reg=REG_RDX; + tempi->a1.disp=0; + tempi->ic_flags&=~ICF_A1_FIRST; + } + ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,FALSE,CN_A2,ip2); + tempi->a2.type=TY_REG+RT_I64; + tempi->a2.reg=REG_RAX; + tempi->a2.disp=0; + } else if (tempi->ic_flags & ICF_A2_TO_INT) { + if (tempi->ic_flags&ICF_A1_FIRST) { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type=TY_REG+RT_I64; + tempi->a1.reg=REG_RDX; + tempi->a1.disp=0; + tempi->ic_flags&=~ICF_A1_FIRST; + } + ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,TRUE,CN_A2,ip2); + tempi->a2.type=TY_REG+RT_I64; + tempi->a2.reg=REG_RAX; + tempi->a2.disp=0; + } + } + } else { + if (tempi->a2.type&TY_MASK) { + if (tempi->ic_flags & ICF_A2_TO_F64) { + ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,FALSE,CN_A2,ip2); + tempi->a2.type=TY_REG+RT_I64; + tempi->a2.reg=REG_RAX; + tempi->a2.disp=0; + } else if (tempi->ic_flags & ICF_A2_TO_INT) { + ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,TRUE,CN_A2,ip2); + tempi->a2.type=TY_REG+RT_I64; + tempi->a2.reg=REG_RAX; + tempi->a2.disp=0; + } + } + if (tempi->a1.type&TY_MASK) { + if (tempi->ic_flags & ICF_A1_TO_F64) { + ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_A1,ip2); + tempi->a1.type=TY_REG+RT_I64; + tempi->a1.reg=REG_RDX; + tempi->a1.disp=0; + } else if (tempi->ic_flags & ICF_A1_TO_INT) { + ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_A1,ip2); + tempi->a1.type=TY_REG+RT_I64; + tempi->a1.reg=REG_RDX; + tempi->a1.disp=0; + } + } + } + nobound_switch (tempi->ic_code) { + sub_switch_start: + sub_switch_start: + case IC_ABS_ADDR: + ICU16(tempi,0xB848); + ICU64(tempi,tempi->ic_data); + if (buf && lx->flags&LF_AOT_COMPILE && + !(lx->flags&(LF_NO_ABSS|LF_ASM_EXPRESSIONS))) { + tempa=CAlloc(sizeof(CExeAbsAddr)); + tempa->next=a->abss; + tempa->type=EAT_ADD_U64; + a->abss=tempa; + tempa->ip=ip2+tempi->ic_cnt-8; + } + break; + case IC_HEAP_GLBL: + ICU16(tempi,0xB848); + ICU64(tempi,0); + temphg=tempi->ic_data; + if (buf && lx->flags&LF_AOT_COMPILE && + !(lx->flags&(LF_NO_ABSS|LF_ASM_EXPRESSIONS))) {//is this necessary--flags? + temphgr=CAlloc(sizeof(CExeHeapGlblRef)); + temphgr->next=temphg->references; + temphg->references=temphgr; + temphgr->ip=ip2+tempi->ic_cnt-8; + } + break; + case IC_ADDR_IMPORT: + ICU8(tempi,0xB8); + ICU32(tempi,0); + if (buf && !(lx->flags&LF_NO_ABSS)) { + tempg=tempi->ic_data; + tempe=CAlloc(sizeof(CExeImportExport)); + tempe->type=EIT_IMM_U32; + tempe->ip=ip2+tempi->ic_cnt-4; + tempe->next=tempg->ie_lst; + tempg->ie_lst=tempe; + } + ICU24(tempi,0xC06348); + break; + case IC_RIP: + ICU16(tempi,0xB848); + ICU64(tempi,ip2+tempi->ic_cnt-2); + if (lx->flags&LF_AOT_COMPILE && buf && !(lx->flags&LF_NO_ABSS)) { + tempa=CAlloc(sizeof(CExeAbsAddr)); + tempa->next=a->abss; + tempa->type=EAT_ADD_U64; + a->abss=tempa; + tempa->ip=ip2+tempi->ic_cnt-8; + } + break; + sub_switch_end: + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip2); + break; + case IC_BR_CARRY: + ICFlagBranch(tempi,ip,0x72820F,buf); + break; + case IC_BR_NOT_CARRY: + ICFlagBranch(tempi,ip,0x73830F,buf); + break; + case IC_BR_ZERO: + ICTestAndBranch(tempi,ip,0x74840F,buf,ip2); + break; + case IC_BR_NOT_ZERO: + ICTestAndBranch(tempi,ip,0x75850F,buf,ip2); + break; + case IC_BR_MM_ZERO: + ICPreIncDec(tempi,SLASH_OP_DEC,ip2); + ICFlagBranch(tempi,ip,0x74840F,buf); + break; + case IC_BR_MM_NOT_ZERO: + ICPreIncDec(tempi,SLASH_OP_DEC,ip2); + ICFlagBranch(tempi,ip,0x75850F,buf); + break; + case IC_BR_EQUAL_EQUAL: + ICCmpAndBranch(tempi,FALSE,ip,0x74840F,0x74840F,0x74840F,0x74840F,buf,ip2); + break; + case IC_BR_EQUAL_EQUAL2: + ICCmpAndBranch(tempi,TRUE,ip,0x74840F,0x74840F,0x74840F,0x74840F,buf,ip2); + break; + case IC_BR_NOT_EQUAL: + ICCmpAndBranch(tempi,FALSE,ip,0x75850F,0x75850F,0x75850F,0x75850F,buf,ip2); + break; + case IC_BR_NOT_EQUAL2: + ICCmpAndBranch(tempi,TRUE,ip,0x75850F,0x75850F,0x75850F,0x75850F,buf,ip2); + break; + case IC_BR_LESS: + if (tempi->ic_flags&ICF_USE_F64) + ICFCmpAndBranch(lx,tempi, ip,0x72820F,0x77870F,buf,ip2); + else + ICCmpAndBranch(tempi,FALSE,ip,0x72820F,0x7C8C0F,0x77870F,0x7F8F0F,buf,ip2); + break; + case IC_BR_LESS2: + ICCmpAndBranch(tempi,TRUE,ip,0x72820F,0x7C8C0F,0x77870F,0x7F8F0F,buf,ip2); + break; + case IC_BR_GREATER_EQUAL: + if (tempi->ic_flags&ICF_USE_F64) + ICFCmpAndBranch(lx,tempi, ip,0x73830F,0x76860F,buf,ip2); + else + ICCmpAndBranch(tempi,FALSE,ip,0x73830F,0x7D8D0F,0x76860F,0x7E8E0F,buf,ip2); + break; + case IC_BR_GREATER_EQUAL2: + ICCmpAndBranch(tempi,TRUE,ip,0x73830F,0x7D8D0F,0x76860F,0x7E8E0F,buf,ip2); + break; + case IC_BR_GREATER: + if (tempi->ic_flags&ICF_USE_F64) + ICFCmpAndBranch(lx,tempi, ip,0x77870F,0x72820F,buf,ip2); + else + ICCmpAndBranch(tempi,FALSE,ip,0x77870F,0x7F8F0F,0x72820F,0x7C8C0F,buf,ip2); + break; + case IC_BR_GREATER2: + ICCmpAndBranch(tempi,TRUE,ip,0x77870F,0x7F8F0F,0x72820F,0x7C8C0F,buf,ip2); + break; + case IC_BR_LESS_EQUAL: + if (tempi->ic_flags&ICF_USE_F64) + ICFCmpAndBranch(lx,tempi, ip,0x76860F,0x73830F,buf,ip2); + else + ICCmpAndBranch(tempi,FALSE,ip,0x76860F,0x7E8E0F,0x73830F,0x7D8D0F,buf,ip2); + break; + case IC_BR_LESS_EQUAL2: + ICCmpAndBranch(tempi,TRUE,ip,0x76860F,0x7E8E0F,0x73830F,0x7D8D0F,buf,ip2); + break; + case IC_BR_BT: + ICBrBitOps(tempi,ip,0xA30F,0x20BA0F,0x72820F,buf,ip2); + break; + case IC_BR_BTS: + ICBrBitOps(tempi,ip,0xAB0F,0x28BA0F,0x72820F,buf,ip2); + break; + case IC_BR_BTR: + ICBrBitOps(tempi,ip,0xB30F,0x30BA0F,0x72820F,buf,ip2); + break; + case IC_BR_BTC: + ICBrBitOps(tempi,ip,0xBB0F,0x38BA0F,0x72820F,buf,ip2); + break; + case IC_BR_NOT_BT: + ICBrBitOps(tempi,ip,0xA30F,0x20BA0F,0x73830F,buf,ip2); + break; + case IC_BR_NOT_BTS: + ICBrBitOps(tempi,ip,0xAB0F,0x28BA0F,0x73830F,buf,ip2); + break; + case IC_BR_NOT_BTR: + ICBrBitOps(tempi,ip,0xB30F,0x30BA0F,0x73830F,buf,ip2); + break; + case IC_BR_NOT_BTC: + ICBrBitOps(tempi,ip,0xBB0F,0x38BA0F,0x73830F,buf,ip2); + break; + case IC_BR_AND_ZERO: + ICAndBranch(tempi,ip,0x74840F,buf,ip2); + break; + case IC_BR_AND_NOT_ZERO: + ICAndBranch(tempi,ip,0x75850F,buf,ip2); + break; + case IC_SUB_CALL: + lb=OptLabelFwd(tempi->ic_data); + ICU8(tempi,0xE8); + ICU32(tempi,lb->addr-(ip+5)); + break; + case IC_JMP: + lb=OptLabelFwd(tempi->ic_data); + short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP); + if (!buf && lb->addr!=INVALID_PTR && + MIN_I8+5addr-ipic_flags|=ICF_SHORT_JMP; + i=lb->addr-(ip+2); + if (buf || i) + ICU16(tempi,i<<8+0xEB); + else + tempi->ic_code=IC_NOP1; + } else { + i=lb->addr-(ip+5); + ICU8(tempi,0xE9); + ICU32(tempi,i); + } + break; + case IC_LABEL: + lb=tempi->ic_data; + lb->addr=ip; + if (lb->flags&CMF_POP_CMP) { + ICAddRSP(tempi,-8,FALSE); + ICAddRSP(tempi,8,FALSE); + } + if (lb->type==CMT_ASM_LABEL) + lb->addr+=lb->ip; + break; + case IC_STR_CONST: + case IC_GET_LABEL: + lb=tempi->ic_data; + if (lx->flags&LF_AOT_COMPILE) + i=lb->addr+a->ip; + else + i=lb->addr+buf; + ICLea(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_RIP_DISP32+RT_PTR,0,i,lx,buf,ip2); + break; + case IC_ASM: + tempx=tempi->ic_data; + tempi->ic_cnt+=tempx->ex_U8s; + if (buf) { + MemCpy(buf+ip,tempx->buf,tempx->ex_U8s); + Free(tempx->buf); + tempx->buf=buf; + tempx->ip=ip; + tempx->ip2=ip2; + if (lx->flags&LF_AOT_COMPILE) + CmpFixUpAOTAsm(lx,tempx); + else + CmpFixUpJITAsm(lx,tempx); + cnt=tempi->ic_cnt; + goto op789A_skip_copy; + } + break; + case IC_CALL: + i=tempi->ic_data-(ip2+5); + if (!(MIN_I32<=i<=MAX_I32) && !(lx->flags&LF_AOT_COMPILE)) { + ICU16(tempi,0xBB48); + ICU64(tempi,tempi->ic_data); + ICU16(tempi,0xD3FF); + } else { + ICU8(tempi,0xE8); + ICU32(tempi,i); + } + break; + case IC_CALL_EXTERN: //Only for static modules + ICU8(tempi,0xE8); + ICU32(tempi,0); + if (buf) { + tempf=tempi->ic_data; + tempeu=CAlloc(sizeof(CExternUsage)); + tempeu->next=tempf->ext_lst; + tempf->ext_lst=tempeu; + tempeu->ip=ip2+1; + } + break; + case IC_CALL_INDIRECT2: + ICU16(tempi,0xBB48); + if (lx->flags&LF_AOT_COMPILE) i=ip2+tempi->ic_cnt; + ICU64(tempi,tempi->ic_data); + ICU16(tempi,0x13FF); + if (buf && lx->flags&LF_AOT_COMPILE&& !(lx->flags&LF_NO_ABSS)) { + tempa=CAlloc(sizeof(CExeAbsAddr)); + tempa->next=a->abss; + tempa->type=EAT_ADD_U64; + a->abss=tempa; + tempa->ip=i; + } + break; + case IC_CALL_IMPORT: + if (GetOpt(OPTf_USE_IMM64)) { + ICU16(tempi,0xBB48); + ICU64(tempi,0); + if (buf) { + tempf=tempi->ic_data; + tempe=CAlloc(sizeof(CExeImportExport)); + tempe->type=EIT_IMM_I64; + tempe->ip=ip2+tempi->ic_cnt-8; + tempe->next=tempf->ie_lst; + tempf->ie_lst=tempe; + } + ICU16(tempi,0xD3FF); + } else { + ICU8(tempi,0xE8); + ICU32(tempi,0); + if (buf) { + tempf=tempi->ic_data; + tempe=CAlloc(sizeof(CExeImportExport)); + tempe->type=EIT_REL_I32; + tempe->ip=ip2+tempi->ic_cnt-4; + tempe->next=tempf->ie_lst; + tempf->ie_lst=tempe; + } + } + break; + sub_switch_end: + tempi->ic_flags&=~ICF_CODE_FINAL; + break; + case IC_LEAVE: + if (lx->htc.fun) { + if (Bt(&lx->htc.fun->flags,Ff_INTERRUPT)) + ICPopRegs(tempi,REG_ALWAYS_CLOBBERED_MASK&~(1<htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK|REG_STK_TEMPS_MASK)); + else + ICPopRegs(tempi,lx->htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK)); + } + if (tempi->ic_data<=MAX_I16) { + if (tempi->ic_data) + ICU8(tempi,0xC9); //LEAVE + else + ICU8(tempi,0x5D); //POP RBP + } else { + ICAddRSP(tempi,tempi->ic_data); + ICU8(tempi,0x5D); //POP RBP + } + if (lx->htc.fun && Bt(&lx->htc.fun->flags,Ff_INTERRUPT)) { + if (Bt(&lx->htc.fun->flags,Ff_HASERRCODE)) + ICAddRSP(tempi,8); + ICU16(tempi,0xCF48); + } else if (lx->htc.fun && lx->htc.fun->arg_cnt && + (Bt(&lx->htc.fun->flags,Ff_RET1) || Bt(&lx->htc.fun->flags,Ff_ARGPOP)) && + !Bt(&lx->htc.fun->flags,Ff_NOARGPOP)) { + ICU8(tempi,0xC2); + ICU16(tempi,lx->htc.fun->arg_cnt<<3); + } else + ICU8(tempi,0xC3); + break; + case IC_RET: + ICU8(tempi,0xC3); + break; + case IC_FS: + ICZero(tempi,REG_RAX); + ICU32(tempi,0x8B4864); + break; + case IC_GS: + ICZero(tempi,REG_RAX); + ICU32(tempi,0x8B4865); + break; + case IC_MOV_FS: + ICZero(tempi,REG_RAX); + ICU8(tempi,0x64); +//It's ugly to use ic_class here + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_DISP+CmpRawType(tempi->ic_class),REG_RAX,tempi->ic_data,ip2); + break; + case IC_MOV_GS: + ICZero(tempi,REG_RAX); + ICU8(tempi,0x65); +//It's ugly to use ic_class here + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_DISP+CmpRawType(tempi->ic_class),REG_RAX,tempi->ic_data,ip2); + break; + case IC_HOLYC_TYPECAST: + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + break; + case IC_COM: + ICUnaries(tempi,SLASH_OP_NOT,ip2); + break; + case IC_NOT: + ICNot(tempi,ip2); + break; + case IC_UNARY_MINUS: + if (tempi->r.type&RT_MASK==RT_F64) + ICFUnaryMinus(lx,tempi,buf,ip2); + else + ICUnaries(tempi,SLASH_OP_NEG,ip2); + break; + case IC_ADDR: + case IC_MOV: + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + break; + case IC_DEREF: + ICDeref(tempi,ip2); + break; + case IC_DEREF_PP: + ICDerefPostIncDec(tempi,SLASH_OP_INC,ip2); + break; + case IC_DEREF_MM: + ICDerefPostIncDec(tempi,SLASH_OP_DEC,ip2); + break; + case IC__PP: + if (tempi->ic_flags&ICF_USE_INT) + ICPostIncDec(tempi,SLASH_OP_INC,ip2); + else + ICFPostIncDec(lx,tempi,CMP_TEMPLATE_INC,ip2); + break; + case IC__MM: + if (tempi->ic_flags&ICF_USE_INT) + ICPostIncDec(tempi,SLASH_OP_DEC,ip2); + else + ICFPostIncDec(lx,tempi,CMP_TEMPLATE_DEC,ip2); + break; + case IC_PP_: + if (tempi->ic_flags&ICF_USE_INT) + ICPreIncDec(tempi,SLASH_OP_INC,ip2); + else + ICFPreIncDec(lx,tempi,CMP_TEMPLATE_INC,ip2); + break; + case IC_MM_: + if (tempi->ic_flags&ICF_USE_INT) + ICPreIncDec(tempi,SLASH_OP_DEC,ip2); + else + ICFPreIncDec(lx,tempi,CMP_TEMPLATE_DEC,ip2); + break; + case IC_LEA: + ICLea(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,lx,buf,ip2); + break; + case IC_POWER: + ICFPow(lx,tempi,buf,ip2); + break; + case IC_SHL: + ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + break; + case IC_SHR: + ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + break; + case IC_MUL: + if (tempi->ic_flags&ICF_USE_INT) + ICMul(tempi,ip2); + else + ICFMul(lx,tempi,buf,ip2); + break; + case IC_DIV: + if (tempi->ic_flags&ICF_USE_INT) + ICDiv(tempi,ip2); + else + ICFDiv(lx,tempi,buf,ip2); + break; + case IC_MOD: + if (tempi->ic_flags&ICF_USE_INT) + ICMod(tempi,ip2); + else + ICFMod(lx,tempi,ip2); + break; + case IC_AND: + ICAddEct(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x23,ip2); + break; + case IC_OR: + ICAddEct(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x0B,ip2); + break; + case IC_XOR: + ICAddEct(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x33,ip2); + break; + case IC_ADD: + if (tempi->ic_flags&ICF_USE_INT) + ICAddEct(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x03,ip2); + else + ICFAdd(lx,tempi,buf,ip2); + break; + case IC_SUB: + if (tempi->ic_flags&ICF_USE_INT) + ICSub(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + else + ICFSub(lx,tempi,buf,ip2); + break; + case IC_EQUAL_EQUAL: + ICCmp(tempi,0x75,0x75,ip2); + break; + case IC_NOT_EQUAL: + ICCmp(tempi,0x74,0x74,ip2); + break; + case IC_LESS: + if (tempi->ic_flags&ICF_USE_INT) + ICCmp(tempi,0x73,0x7D,ip2); + else + ICFCmp(lx,tempi,CMP_TEMPLATE_LESS,ip2); + break; + case IC_GREATER_EQUAL: + if (tempi->ic_flags&ICF_USE_INT) + ICCmp(tempi,0x72,0x7C,ip2); + else + ICFCmp(lx,tempi,CMP_TEMPLATE_GREATER_EQUAL,ip2); + break; + case IC_GREATER: + if (tempi->ic_flags&ICF_USE_INT) + ICCmp(tempi,0x76,0x7E,ip2); + else + ICFCmp(lx,tempi,CMP_TEMPLATE_GREATER,ip2); + break; + case IC_LESS_EQUAL: + if (tempi->ic_flags&ICF_USE_INT) + ICCmp(tempi,0x77,0x7F,ip2); + else + ICFCmp(lx,tempi,CMP_TEMPLATE_LESS_EQUAL,ip2); + break; + case IC_AND_AND: + ICAndAnd(tempi,ip2); + break; + case IC_OR_OR: + ICOrOr(tempi,ip2); + break; + case IC_XOR_XOR: + ICXorXor(tempi,ip2); + break; + case IC_ASSIGN: + ICAssign(tempi,ip2); + break; + case IC_ASSIGN_PP: + ICAssignPostIncDec(tempi,SLASH_OP_INC,ip2); + break; + case IC_ASSIGN_MM: + ICAssignPostIncDec(tempi,SLASH_OP_DEC,ip2); + break; + case IC_SHL_EQUAL: + ICShiftEqual(tempi,tempi->a1.type_pointed, + tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + break; + case IC_SHR_EQUAL: + ICShiftEqual(tempi,tempi->a1.type_pointed, + tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + break; + case IC_MUL_EQUAL: + if (tempi->ic_flags&ICF_USE_INT) + ICMulEqual(tempi,ip2); + else + ICFOpEqual(lx,tempi,SLASH_OP_FMUL,buf,ip2); + break; + case IC_DIV_EQUAL: + if (tempi->ic_flags&ICF_USE_INT) + ICDivEqual(tempi,FALSE,ip2); + else + ICFOpEqual(lx,tempi,SLASH_OP_FDIV,buf,ip2); + break; + case IC_MOD_EQUAL: + if (tempi->ic_flags&ICF_USE_INT) + ICDivEqual(tempi,TRUE,ip2); + else + ICFModEqual(lx,tempi,ip2); + break; + case IC_AND_EQUAL: + ICAndEqual(tempi,ip2); + break; + case IC_OR_EQUAL: + ICOrEqual(tempi,ip2); + break; + case IC_XOR_EQUAL: + ICXorEqual(tempi,ip2); + break; + case IC_ADD_EQUAL: + if (tempi->ic_flags&ICF_USE_INT) + ICAddSubEctEqual(tempi,tempi->a1.type_pointed, + tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x010000000003,ip2); + else + ICFOpEqual(lx,tempi,SLASH_OP_FADD,buf,ip2); + break; + case IC_SUB_EQUAL: + if (tempi->ic_flags&ICF_USE_INT) + ICAddSubEctEqual(tempi,tempi->a1.type_pointed, + tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x29000000052B,ip2); + else + ICFOpEqual(lx,tempi,SLASH_OP_FSUB,buf,ip2); + break; + case IC_SHL_CONST: + ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + TY_IMM+RT_I64,0,tempi->ic_data,0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + break; + case IC_SHR_CONST: + ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp, + TY_IMM+RT_I64,0,tempi->ic_data,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + break; + case IC_ADD_CONST: + ICAddSubEctImm(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,tempi->ic_data,0x0003,ip2); + break; + case IC_SUB_CONST: + ICAddSubEctImm(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,tempi->ic_data,0x052B,ip2); + break; + case IC_ENTER: + ICU32(tempi,0xEC8B4855); + if (tempi->ic_data) + ICAddRSP(tempi,-tempi->ic_data,FALSE); + if (lx->htc.fun) { + if (Bt(&lx->htc.fun->flags,Ff_INTERRUPT)) + ICPushRegs(tempi,REG_ALWAYS_CLOBBERED_MASK&~(1<htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK|REG_STK_TEMPS_MASK)); + else { + if (sys_var_init_flag&1 && i) + ICLocalVarInit(tempi); + ICPushRegs(tempi,lx->htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK)); + } + for (i=0;i0 && reg_offsets[i].offset!=MAX_I64) { + tempc=OptClassFwd(reg_offsets[i].m->member_class); + ICMov(tempi,TY_REG+RT_I64,i,0, + TY_DISP+tempc->raw_type,REG_RBP,reg_offsets[i].offset,ip2); + } + } + break; + case IC_ADD_RSP: + ICAddRSP(tempi,tempi->ic_data); + break; + case IC_CALL_INDIRECT: + if (MIN_I8<=tempi->ic_data<=MAX_I8) { + ICU24(tempi,0x2454FF); //CALL disp[RSP] + ICU8(tempi,tempi->ic_data); + } else { + ICU24(tempi,0x2494FF); //CALL disp[RSP] + ICU32(tempi,tempi->ic_data); + } + break; + case IC_PUSH: + ICPush(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + break; + case IC_POP: + ICU8(tempi,0x58); + break; + case IC_INVLPG: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICU24(tempi,0x38010F); + break; + case IC_CLFLUSH: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICU24(tempi,0x38AE0F); + break; + case IC_GET_RFLAGS: + ICU8(tempi,0x9C); + ICPop(tempi,TY_REG+RT_I64,REG_RAX,0,ip2); + break; + case IC_CARRY: + ICU24(tempi,0xC0920F); //SETC AL + ICU24(tempi,0x01E083); //AND EAX,1 + break; + case IC_RDTSC: + ICCopyTemplate(lx,tempi,CMP_TEMPLATE_RDTSC,TRUE,FALSE,FALSE,CN_MAIN); + break; + case IC_HPET: + ICCopyTemplate(lx,tempi,CMP_TEMPLATE_HPET,TRUE,FALSE,FALSE,CN_MAIN); + break; + case IC_SET_RFLAGS: + ICPush(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICU8(tempi,0x9D); + break; + case IC_GET_RBP: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + TY_REG+RT_I64,REG_RBP,0,ip2); + break; + case IC_SET_RBP: + ICMov(tempi,TY_REG+RT_I64,REG_RBP,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + break; + case IC_GET_RSP: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + TY_REG+RT_I64,REG_RSP,0,ip2); + break; + case IC_SET_RSP: + ICMov(tempi,TY_REG+RT_I64,REG_RSP,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + break; + case IC_RETURN_VAL: + case IC_SET_RAX: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + break; + case IC_RETURN_VAL2: + case IC_GET_RAX: + break; + case IC_BT: + ICBitOps(tempi,&tempi->a1,&tempi->a2,tempi->next, + 0xA30F,0x20BA0F,ip2); + break; + case IC_BTS: + case IC_LBTS: + ICBitOps(tempi,&tempi->a1,&tempi->a2,tempi->next, + 0xAB0F,0x28BA0F,ip2); + break; + case IC_BTR: + case IC_LBTR: + ICBitOps(tempi,&tempi->a1,&tempi->a2,tempi->next, + 0xB30F,0x30BA0F,ip2); + break; + case IC_BTC: + case IC_LBTC: + ICBitOps(tempi,&tempi->a1,&tempi->a2,tempi->next, + 0xBB0F,0x38BA0F,ip2); + break; + case IC_BSF: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICU32(tempi,0xC0BC0F48); + ICU16(tempi,0x0375); + ICU24(tempi,0xD0F748); + break; + case IC_BSR: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICU32(tempi,0xC0BD0F48); + ICU16(tempi,0x0375); + ICU24(tempi,0xD0F748); + break; + case IC_SIGN_I64: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICCopyTemplate(lx,tempi,CMP_TEMPLATE_SIGN_I64,TRUE,FALSE,FALSE,CN_MAIN); + break; + case IC_PREEMPT: + ICPreempt(tempi,ip2); + break; + case IC_TOUPPER: + ICToUpper(tempi,ip2); + break; + case IC_TO_I64: + ICToI64(lx,tempi,ip2); + break; + case IC_TO_F64: + ICToF64(lx,tempi,ip2); + break; + case IC_TO_BOOL: + ICToBool(lx,tempi,ip2); + break; + case IC_SQR: + ICFTemplateFun(lx,tempi,CMP_TEMPLATE_SQR,ip2); + break; + case IC_ABS: + ICFTemplateFun(lx,tempi,CMP_TEMPLATE_ABS,ip2); + break; + case IC_SQRT: + ICFTemplateFun(lx,tempi,CMP_TEMPLATE_SQRT,ip2); + break; + case IC_SIN: + ICFTemplateFun(lx,tempi,CMP_TEMPLATE_SIN,ip2); + break; + case IC_COS: + ICFTemplateFun(lx,tempi,CMP_TEMPLATE_COS,ip2); + break; + case IC_TAN: + ICFTemplateFun(lx,tempi,CMP_TEMPLATE_TAN,ip2); + break; + case IC_ATAN: + ICFTemplateFun(lx,tempi,CMP_TEMPLATE_ATAN,ip2); + break; + case IC_ABS_I64: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICU24(tempi,0xC08548); + ICU16(tempi,0x0379); + ICU24(tempi,0xD8F748); + break; + case IC_MIN_I64: + ICMinMax(tempi,0x4F,ip2); + break; + case IC_MAX_I64: + ICMinMax(tempi,0x4C,ip2); + break; + case IC_MIN_U64: + ICMinMax(tempi,0x47,ip2); + break; + case IC_MAX_U64: + ICMinMax(tempi,0x42,ip2); + break; + case IC_MOD_U64: + ICModU64(tempi,ip2); + break; + case IC_SQR_I64: + ICSqr(tempi,SLASH_OP_IMUL,ip2); + break; + case IC_SQR_U64: + ICSqr(tempi,SLASH_OP_MUL,ip2); + break; + case IC_SWAP_U8: + case IC_SWAP_U16: + case IC_SWAP_U32: + case IC_SWAP_I64: + ICSwap(tempi,ip2); + break; + case IC_QUE_INIT: + ICQueInit(tempi,ip2); + break; + case IC_QUE_INS: + ICQueIns(tempi,ip2); + break; + case IC_QUE_INS_REV: + ICQueInsRev(tempi,ip2); + break; + case IC_QUE_REM: + ICQueRem(tempi,ip2); + break; + case IC_STRLEN: + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICCopyTemplate(lx,tempi,CMP_TEMPLATE_STRLEN,TRUE,FALSE,FALSE,CN_MAIN); + break; + case IC_IN_U32: + if (tempi->a1.type&TY_MASK==TY_IMM) { + ICU16(tempi,0xC033); + if (tempi->a1.disp<=MAX_U8) + ICU16(tempi,0xE5+tempi->a1.disp<<8); + else { + ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a1.disp<<16); + ICU8(tempi,0xED); + } + } else { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICU16(tempi,0xC033); + ICU8(tempi,0xED); + } + break; + case IC_IN_U16: + if (tempi->a1.type&TY_MASK==TY_IMM) { + ICU16(tempi,0xC033); + if (tempi->a1.disp<=MAX_U8) + ICU24(tempi,0xE500+OC_OP_SIZE_PREFIX+tempi->a1.disp<<16); + else { + ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a1.disp<<16); + ICU16(tempi,0xED00+OC_OP_SIZE_PREFIX); + } + } else { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICU16(tempi,0xC033); + ICU16(tempi,0xED00+OC_OP_SIZE_PREFIX); + } + break; + case IC_IN_U8: + if (tempi->a1.type&TY_MASK==TY_IMM) { + ICU16(tempi,0xC033); + if (tempi->a1.disp<=MAX_U8) + ICU16(tempi,0xE4+tempi->a1.disp<<8); + else { + ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a1.disp<<16); + ICU8(tempi,0xEC); + } + } else { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICU16(tempi,0xC033); + ICU8(tempi,0xEC); + } + break; + case IC_OUT_U32: + if (tempi->a2.type&TY_MASK==TY_IMM) { + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + if (tempi->a2.disp<=MAX_U8) + ICU16(tempi,0xE7+tempi->a2.disp<<8); + else { + ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a2.disp<<16); + ICU8(tempi,0xEF); + } + } else { + if (tempi->ic_flags & ICF_A1_FIRST) { + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + } else { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + } + ICU8(tempi,0xEF); + } + break; + case IC_OUT_U16: + if (tempi->a2.type&TY_MASK==TY_IMM) { + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + if (tempi->a2.disp<=MAX_U8) + ICU24(tempi,0xE700+OC_OP_SIZE_PREFIX+tempi->a2.disp<<16); + else { + ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a2.disp<<16); + ICU16(tempi,0xEF00+OC_OP_SIZE_PREFIX); + } + } else { + if (tempi->ic_flags & ICF_A1_FIRST) { + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + } else { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + } + ICU16(tempi,0xEF00+OC_OP_SIZE_PREFIX); + } + break; + case IC_OUT_U8: + if (tempi->a2.type&TY_MASK==TY_IMM) { + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + if (tempi->a2.disp<=MAX_U8) + ICU16(tempi,0xE6+tempi->a2.disp<<8); + else { + ICU32(tempi,0xBA00+OC_OP_SIZE_PREFIX+tempi->a2.disp<<16); + ICU8(tempi,0xEE); + } + } else { + if (tempi->ic_flags & ICF_A1_FIRST) { + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + } else { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + } + ICU8(tempi,0xEE); + } + break; + case IC_NOBOUND_SWITCH: + ICSwitch(tempi,ip,TRUE,lx,buf,ip2); + break; + case IC_SWITCH: + ICSwitch(tempi,ip,FALSE,lx,buf,ip2); + break; + case IC_NOP1: + case IC_NOP2: + OptFree(tempi); + goto op789A_next; + case IC_CALL_START: + case IC_PUSH_REGS: + ICPushRegs(tempi,tempi->ic_data); + break; + case IC_CALL_END: + ICPopRegs(tempi,tempi->ic_data); + if (tempi->r.type&TY_MASK) + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip2); + break; + case IC_POP_REGS: + ICPopRegs(tempi,tempi->ic_data); + break; + case IC_PUSH_CMP: + case IC_CALL_END2: + case IC_END: + case IC_ADD_RSP1: + break; + default: + "Pass:%d Missing IC handler\n",lx->pass; + ICPut(lx,tempi); + LexExcept(lx,"Compiler Optimization Error at "); + } + if (tempi->r.type&TY_MASK) { + if (tempi->ic_flags & ICF_R_TO_F64) { + if (tempi->ic_code==IC_PUSH_CMP) { + ICU24(tempi,0xDC8B48); + ICU24(tempi,0x2BDF48); + ICU24(tempi,0x1BDD48); + ICU8(tempi,0x9B); + } else { + ICFCvt(lx,tempi,REG_RAX,tempi->r.type,tempi->r.reg,tempi->r.disp,FALSE,CN_R,ip2); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip2); + } + } else if (tempi->ic_flags & ICF_R_TO_INT) { + ICFCvt(lx,tempi,REG_RAX,tempi->r.type,tempi->r.reg,tempi->r.disp,TRUE,CN_R,ip2); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip2); + } + } + } + cnt=tempi->ic_cnt; + if (tempi->ic_flags&ICF_DEL_PREVIOUS_INS) { + if (lx->pass>8) + cnt=tempi->ic_last_cnt; + tempi->ic_flags&=~ICF_DEL_PREVIOUS_INS; + } + if (cnt && buf) + MemCpy(buf+ip,tempi->ic_body,cnt); +op789A_skip_copy: + if (dbg_info && lx->min_line<=tempi->ic_line<=lx->max_line) { + i=tempi->ic_line-lx->min_line; + if (!dbg_info->body[i]) + dbg_info->body[i]=ip2; + } + if (tempi->ic_flags&ICF_TRACE && Bt(&lx->otrace_mask,lx->pass) && cnt) { + "$$RED$$"; + if (buf) + Un(buf+ip,cnt,64); + else + Un(tempi->ic_body,cnt,64); + "$$FG$$"; + } + if (!(tempi->ic_flags&(ICF_CODE_FINAL|ICF_DONT_RESTORE))) + MemCpy(&tempi->a1,saved_p123,3*sizeof(CICArg)); + ip+=cnt; + if (tempi->ic_cnt>=IC_BODY_SIZE && tempi->ic_code!=IC_ASM) + throw('Compiler'); +op789A_next: + tempi=tempi_next; + } + + lb=lx->lcc.lcc_next_misc; + while (lb!=&lx->lcc.lcc_next_misc) { + switch (lb->type) { + case CMT_STR_CONST: + lb->addr=ip; + if (buf) + MemCpy(buf+ip,lb->str,lb->st_len); + ip+=lb->st_len; + break; + case CMT_JMP_TABLE: + lb->addr=ip; + ptr=buf+lb->addr; + if (lb->flags&(CMF_I8_JMP_TABLE|CMF_U8_JMP_TABLE)) { + if (buf) + for (i=0;irange;i++) + *ptr++=lb->jmp_table[i]->addr-lb->begin->addr; + ip+=lb->range; + } else if (lb->flags&(CMF_I16_JMP_TABLE|CMF_U16_JMP_TABLE)) { + if (buf) + for (i=0;irange;i++) + *ptr(U16 *)++=lb->jmp_table[i]->addr-lb->begin->addr; + ip+=lb->range<<1; + } else { + if (buf) + for (i=0;irange;i++) { + if (lx->flags&LF_AOT_COMPILE && !(lx->flags&LF_NO_ABSS)) { + tempa=CAlloc(sizeof(CExeAbsAddr)); + tempa->next=a->abss; + tempa->type=EAT_ADD_U32; + a->abss=tempa; + tempa->ip=a->ip+lb->addr+i<<2; + *ptr(U32 *)++=lb->jmp_table[i]->addr+a->ip; + } else + *ptr(U32 *)++=lb->jmp_table[i]->addr+buf; + } + ip+=lb->range<<2; + } + break; + case CMT_FLOAT_CONSTS: + lb->addr=ip; + if (buf) + MemCpy(buf+lb->addr,lb->float_consts,lb->num_consts*sizeof(F64)); + ip+=lb->num_consts*sizeof(F64); + break; + } + lb=lb->next; + } + if (dbg_info) { + if (lx->flags&LF_AOT_COMPILE) + dbg_info->body[num_lines]=ip+a->ip; + else + dbg_info->body[num_lines]=ip+buf; + } + + return ip; +} diff --git a/Compiler/ExpParser.CPP b/Compiler/PrsExp.CPP similarity index 92% rename from Compiler/ExpParser.CPP rename to Compiler/PrsExp.CPP index db341dd..81fc34d 100644 --- a/Compiler/ExpParser.CPP +++ b/Compiler/PrsExp.CPP @@ -55,15 +55,15 @@ CIntermediateCode *PrsAddOp(CLex *lx,I64 stk_op,CHashClass *tempc) Bool div_sizeof=FALSE; switch (stk_op.u16[0]) { case IC_ADD: - if (tempc->ptr_cnt && !tempi->ic_class->ptr_cnt && + if (tempc->ptr_stars_cnt && !tempi->ic_class->ptr_stars_cnt && tempi->ic_class->raw_type!=RT_F64) { LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]); LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]); } break; case IC_SUB: - if (tempc->ptr_cnt && tempi->ic_class->raw_type!=RT_F64) { - if (!tempi->ic_class->ptr_cnt) { + if (tempc->ptr_stars_cnt && tempi->ic_class->raw_type!=RT_F64) { + if (!tempi->ic_class->ptr_stars_cnt) { LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]); LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]); } else @@ -76,7 +76,7 @@ CIntermediateCode *PrsAddOp(CLex *lx,I64 stk_op,CHashClass *tempc) break; case IC_ADD_EQUAL: case IC_SUB_EQUAL: - if (tempc->ptr_cnt) { + if (tempc->ptr_stars_cnt) { LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]); LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]); } @@ -91,7 +91,7 @@ CIntermediateCode *PrsAddOp(CLex *lx,I64 stk_op,CHashClass *tempc) if (div_sizeof) { tempc--; if (tempc->size!=1) { - LCCAdd(lx,IC_IMM_U64,tempc->size,cmp.internal_types[RT_I64]); + LCCAdd(lx,IC_IMM_I64,tempc->size,cmp.internal_types[RT_I64]); LCCAdd(lx,IC_DIV,0,cmp.internal_types[RT_I64]); tempc=cmp.internal_types[RT_I64]; } @@ -183,11 +183,11 @@ pe_check_binary_ops2: } else { tempi=lx->lcc.lcc_root.last; tempc=tempi->ic_class; - if (stk_op.u16[0]==IC_DEREF && tempc->ptr_cnt) + if (stk_op.u16[0]==IC_DEREF && tempc->ptr_stars_cnt) tempc--; else if (stk_op.u16[0]==IC_ADDR) { lx->abs_cnts.c_addres++; - if (Bt(cmp.ic_bitmap_deref,tempi->ic_code)) + if (intermediate_code_table[tempi->ic_code].type==IST_DEREF) OptFree(tempi); tempc++; } @@ -208,7 +208,7 @@ pe_do_binary_op: case IC_ADD: case IC_SUB: tempi=lx->lcc.lcc_root.last; - if (!tempi->ic_class->ptr_cnt && + if (!tempi->ic_class->ptr_stars_cnt && tempi->ic_class->raw_type!=RT_F64) { LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]); LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]); @@ -233,11 +233,11 @@ pe_do_binary_op: if (cur_op.u8[2]>max_prec) max_prec=cur_op.u8[2]; left_prec=cur_op.u8[2]; - if (Bt(cmp.ic_bitmap_assign,cur_op.u16[0])) { + if (intermediate_code_table[cur_op.u16[0]].type==IST_ASSIGN) { tempi=lx->lcc.lcc_root.last; tempc=OptClassFwd(tempi->ic_class); - if (!Bt(cmp.ic_bitmap_deref,tempi->ic_code) || - !tempc->ptr_cnt && !Bt(&tempc->flags,Cf_INTERNAL_TYPE)) + if (intermediate_code_table[tempi->ic_code].type!=IST_DEREF || + !tempc->ptr_stars_cnt && !Bt(&tempc->flags,Cf_INTERNAL_TYPE)) LexExcept(lx,"invalid lval at "); tempi->ic_code=IC_NOP1; //Important for setting class (pretty sure) cur_op.u8[2]=PREC_ASSIGN|ASSOCF_RIGHT; @@ -257,7 +257,7 @@ pe_pop_higher: tempi=PrsAddOp(lx,stk_op,tempc); - if (Bt(cmp.ic_bitmap_cmp,cur_op.u16[0]) && Bt(cmp.ic_bitmap_cmp,stk_op.u16[0])) { + if (intermediate_code_table[cur_op.u16[0]].type==IST_CMP && intermediate_code_table[stk_op.u16[0]].type==IST_CMP) { tempi->ic_flags|=ICF_PUSH_CMP; LCCAdd(lx,IC_NOP1,0,cmp.internal_types[RT_I64]); LCCAdd(lx,IC_PUSH_CMP,0,tempc); @@ -323,7 +323,7 @@ Bool PrsExpression(CLex *lx,I64 *_max_prec,Bool end_exp,CPrsStk *_ps=NULL) Free(ps); } if (end_exp && result) - LCCAdd(lx,IC_END_EXP,0,0); + LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); lx->flags|=old_flags&(LF_PREINC|LF_PREDEC); return result; } @@ -373,7 +373,7 @@ pu_sizeof_member: while (Lex(lx)=='*'); i=sizeof(U8 *); } - LCCAdd(lx,IC_IMM_U64,i,cmp.internal_types[RT_I64]); + LCCAdd(lx,IC_IMM_I64,i,cmp.internal_types[RT_I64]); } U0 PrsOffsetOf(CLex *lx) @@ -403,7 +403,7 @@ U0 PrsOffsetOf(CLex *lx) i+=tempm->offset; tempc=tempm->member_class; } while (Lex(lx)=='.'); - LCCAdd(lx,IC_IMM_U64,i,cmp.internal_types[RT_I64]); + LCCAdd(lx,IC_IMM_I64,i,cmp.internal_types[RT_I64]); } I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf) @@ -481,7 +481,7 @@ I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf) (lx->token==')' || lx->token==',' || !needs_right_paren)) { dft_val=tempm->dft_val; if (tempm->flags & MLF_LASTCLASS && last_class) - dft_val=(last_class-last_class->ptr_cnt)->str; + dft_val=(last_class-last_class->ptr_stars_cnt)->str; if (tempm->flags & (MLF_STR_DFT_AVAILABLE|MLF_LASTCLASS) && lx->flags&LF_AOT_COMPILE) { mc=LCCMiscNew(lx,CMT_STR_CONST); @@ -490,7 +490,7 @@ I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf) mc->str=StrNew(dft_val); lx->flags|=LF_HAS_MISC_DATA; } else - LCCAdd(lx,IC_IMM_U64,dft_val,tempm->member_class); + LCCAdd(lx,IC_IMM_I64,dft_val,tempm->member_class); } else { if (!PrsExpression(lx,NULL,FALSE,ps)) throw('Compiler'); @@ -516,7 +516,7 @@ I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf) } if (tempm && tempm->flags & MLF_DOT_DOT_DOT) { LCCInit(lx); - tempi=LCCAdd(lx,IC_IMM_U64,0,tempm->member_class); + tempi=LCCAdd(lx,IC_IMM_I64,0,tempm->member_class); LCCPush(lx); if (is_str_out) { if (lx->token!=';') { @@ -609,7 +609,7 @@ I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf) if (!is_template_fun) LCCAdd(lx,IC_CALL_END,tempf,tempf->return_class); if (is_str_out||is_putchars) - LCCAdd(lx,IC_END_EXP,0,0); + LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); lx->flags=(lx->flags|LF_RAX) & ~(LF_ARRAY|LF_FUN_EXP); return PE_UNARY_MODIFIERS; } @@ -659,7 +659,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa LexExcept(lx,"Can't take addr of extern fun"); } lx->abs_cnts.externs++; - LCCAdd(lx,IC_IMM_U64, + LCCAdd(lx,IC_IMM_I64, &tempf->executable_addr,cmp.internal_types[RT_PTR]); LCCAdd(lx,IC_DEREF,0, cmp.internal_types[RT_PTR]); @@ -670,7 +670,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa if (lx->flags&LF_ASM_EXPRESSIONS) lx->abs_cnts.abs_addres++; } else - LCCAdd(lx,IC_IMM_U64, + LCCAdd(lx,IC_IMM_I64, tempf->executable_addr,cmp.internal_types[RT_PTR]); } lx->abs_cnts.c_addres++; @@ -682,7 +682,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa if (lx->flags&LF_ASM_EXPRESSIONS && !(lx->flags&LF_AOT_COMPILE) && tempex->type&HTF_IMM) { lx->abs_cnts.c_addres++; - LCCAdd(lx,IC_IMM_U64, + LCCAdd(lx,IC_IMM_I64, tempex->val,cmp.internal_types[RT_PTR]); Lex(lx); return PE_MAYBE_MODIFIERS; @@ -704,9 +704,9 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa case TK_CHAR_CONST: case TK_INS_BINARY_SIZE: if (lx->cur_i64<0) - LCCAdd(lx,IC_IMM_U64,lx->cur_i64,cmp.internal_types[RT_U64]); + LCCAdd(lx,IC_IMM_I64,lx->cur_i64,cmp.internal_types[RT_U64]); else - LCCAdd(lx,IC_IMM_U64,lx->cur_i64,cmp.internal_types[RT_I64]); + LCCAdd(lx,IC_IMM_I64,lx->cur_i64,cmp.internal_types[RT_I64]); Lex(lx); break; case TK_F64: @@ -734,10 +734,10 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa if (lx->flags&LF_AOT_COMPILE) LCCAdd(lx,IC_ABS_ADDR,lx->a->ip,cmp.internal_types[RT_PTR]); else - LCCAdd(lx,IC_IMM_U64,lx->a->ip,cmp.internal_types[RT_PTR]); + LCCAdd(lx,IC_IMM_I64,lx->a->ip,cmp.internal_types[RT_PTR]); } else { if (lx->flags&LF_CLASS_IP) - LCCAdd(lx,IC_IMM_U64,lx->class_ip,cmp.internal_types[RT_I64]); + LCCAdd(lx,IC_IMM_I64,lx->class_ip,cmp.internal_types[RT_I64]); else LCCAdd(lx,IC_RIP,0,cmp.internal_types[RT_PTR]); } @@ -789,7 +789,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa if (tempm->flags & MLF_FUN && !(lx->flags&LF_ASM_EXPRESSIONS)) { PrsPopDeref(ps); lx->flags|=LF_FUN_EXP; - PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_cnt); + PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); } if (tempm->dim.next) { *_tempad=tempm->dim.next; @@ -802,14 +802,14 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa // else LCCAdd(lx,IC_ABS_ADDR,tempm->static_data_ip,tempc); } else - LCCAdd(lx,IC_IMM_U64,tempm->static_data,tempc); + LCCAdd(lx,IC_IMM_I64,tempm->static_data,tempc); } else { if (lx->flags&LF_ASM_EXPRESSIONS) { i=PrsPop(ps); ps->ptr--; if (i.u16[0]!=IC_ADDR) LexExcept(lx,"expecting '&' at "); - LCCAdd(lx,IC_IMM_U64,tempm->offset,cmp.internal_types[RT_PTR]); + LCCAdd(lx,IC_IMM_I64,tempm->offset,cmp.internal_types[RT_PTR]); *_local_var=tempm; Lex(lx); return PE_MAYBE_MODIFIERS; @@ -819,7 +819,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa lx->flags&=~LF_ARRAY; } LCCAdd(lx,IC_RBP,0,tempc); - LCCAdd(lx,IC_IMM_U64,tempm->offset,tempc); + LCCAdd(lx,IC_IMM_I64,tempm->offset,tempc); LCCAdd(lx,IC_ADD,0,tempc); } } @@ -866,7 +866,7 @@ pu_export_sys_sym: lx->flags|=LF_UNRESOLVED|LF_LOCAL; else lx->flags|=LF_UNRESOLVED; - LCCAdd(lx,IC_IMM_U64,&tempex->val,cmp.internal_types[RT_PTR],ICF_NO_RIP); + LCCAdd(lx,IC_IMM_I64,&tempex->val,cmp.internal_types[RT_PTR],ICF_NO_RIP); LCCAdd(lx,IC_DEREF,0,cmp.internal_types[RT_PTR]); } else { if (lx->flags&LF_AOT_COMPILE && !(tempex->type & HTF_IMM)) @@ -874,7 +874,7 @@ pu_export_sys_sym: else { if (tempex->type&HTF_IMM) lx->abs_cnts.c_addres++; - LCCAdd(lx,IC_IMM_U64,tempex->val,cmp.internal_types[RT_PTR]); + LCCAdd(lx,IC_IMM_I64,tempex->val,cmp.internal_types[RT_PTR]); } } Lex(lx); @@ -910,16 +910,16 @@ pu_export_sys_sym: } else { if (tempg->flags & GVF_EXTERN) { lx->abs_cnts.externs++; - LCCAdd(lx,IC_IMM_U64,&tempg->data_addr,tempc); + LCCAdd(lx,IC_IMM_I64,&tempg->data_addr,tempc); LCCAdd(lx,IC_DEREF,0,tempc); } else - LCCAdd(lx,IC_IMM_U64,tempg->data_addr,tempc); + LCCAdd(lx,IC_IMM_I64,tempg->data_addr,tempc); } Lex(lx); if (tempg->flags & GVF_FUN) { PrsPopDeref(ps); lx->flags|=LF_FUN_EXP; - PrsPush2(ps,tempg->fun_ptr-tempg->fun_ptr->ptr_cnt); + PrsPush2(ps,tempg->fun_ptr-tempg->fun_ptr->ptr_stars_cnt); } return PE_UNARY_MODIFIERS; case HTt_CLASS: @@ -961,9 +961,9 @@ pu_export_sys_sym: j++; if (lx->token==TK_IDENT && (lx->hash_entry || lx->local_var_entry)) - LCCAdd(lx,IC_IMM_U64,TRUE,cmp.internal_types[RT_I64]); + LCCAdd(lx,IC_IMM_I64,TRUE,cmp.internal_types[RT_I64]); else - LCCAdd(lx,IC_IMM_U64,FALSE,cmp.internal_types[RT_I64]); + LCCAdd(lx,IC_IMM_I64,FALSE,cmp.internal_types[RT_I64]); Lex(lx); while (j--) { if (lx->token!=')') @@ -1005,7 +1005,7 @@ um_join: if (!*unary_post_prec) *unary_post_prec=PREC_TERM; tempc=lx->lcc.lcc_root.last->ic_class; - if (!tempc->ptr_cnt && lx->token=='.') + if (!tempc->ptr_stars_cnt && lx->token=='.') LexExcept(lx,"Must be address, not value "); if (!(lx->flags & LF_RAX)) tempc--; @@ -1018,7 +1018,7 @@ um_join: lx->local_var_entry->use_cnt--; Lex(lx); //skip member name tempc1=tempm->member_class+1; - LCCAdd(lx,IC_IMM_U64,tempm->offset,tempc1); + LCCAdd(lx,IC_IMM_I64,tempm->offset,tempc1); lx->flags&=~(LF_RAX|LF_ARRAY|LF_FUN_EXP); if (tempm->dim.next) { *_tempad=tempm->dim.next; @@ -1026,7 +1026,7 @@ um_join: } if(tempm->flags & MLF_FUN) { PrsPopDeref(ps); - PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_cnt); + PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); lx->flags|=LF_FUN_EXP; } LCCAdd(lx,IC_ADD,0,tempc1); @@ -1075,17 +1075,17 @@ um_join: *unary_post_prec=PREC_TERM; Lex(lx); tempc=OptClassFwd(lx->lcc.lcc_root.last->ic_class); - if (!tempc->ptr_cnt) + if (!tempc->ptr_stars_cnt) LexExcept(lx,"not array or ptr "); if (!(lx->flags & (LF_ARRAY | LF_RAX))) { tempc=OptClassFwd(tempc-1); - if (!tempc->ptr_cnt) + if (!tempc->ptr_stars_cnt) LexExcept(lx,"not array or ptr "); LCCAdd(lx,IC_DEREF+PREC_UNARY_PRE<<16,0,tempc); } tempc1=tempc-1; if (tempad1=*_tempad) { - LCCAdd(lx,IC_IMM_U64,tempad1->total_cnt*tempc1->size,tempc); + LCCAdd(lx,IC_IMM_I64,tempad1->total_cnt*tempc1->size,tempc); if (*_tempad=tempad1->next) { old_flags=lx->flags; if (!PrsExpression(lx,NULL,FALSE,ps)) @@ -1102,7 +1102,7 @@ um_join: return PE_UNARY_MODIFIERS; } } else - LCCAdd(lx,IC_IMM_U64,tempc1->size,tempc); + LCCAdd(lx,IC_IMM_I64,tempc1->size,tempc); old_flags=lx->flags; if (!PrsExpression(lx,NULL,FALSE,ps)) throw('Compiler'); @@ -1140,7 +1140,7 @@ U8 *LexExpression2Bin(CLex *lx,I64 *_type=NULL) LCCPush(lx); LCCInit(lx); if (PrsExpression(lx,NULL,FALSE)) { - LCCAdd(lx,IC_RETURN_VAL,0,NULL); + LCCAdd(lx,IC_RETURN_VAL,0,0); LCCAdd(lx,IC_RET,0,0); result=LCCCompile(lx,&size,NULL,_type); } else diff --git a/Compiler/StmtParser.CPP b/Compiler/PrsStmt.CPP similarity index 96% rename from Compiler/StmtParser.CPP rename to Compiler/PrsStmt.CPP index 8a84a2c..6bf6161 100644 --- a/Compiler/StmtParser.CPP +++ b/Compiler/PrsStmt.CPP @@ -11,7 +11,7 @@ for one * and two fwd for two **. tempc->type=HTT_CLASS; tempc->raw_type=RT_PTR; tempc->size=sizeof(U8 *); - tempc->ptr_cnt=i; + tempc->ptr_stars_cnt=i; tempc++; } result->last_in_member_lst=&result->member_lst; @@ -27,7 +27,7 @@ CHashFun *PrsFunNew() tempf->type=HTT_FUN; tempf->raw_type=RT_PTR; tempf->size=sizeof(U8 *); - tempf->ptr_cnt=i; + tempf->ptr_stars_cnt=i; tempf++; } result->last_in_member_lst=&result->member_lst; @@ -43,7 +43,7 @@ CMemberLst *MemberLstNew(I64 _reg) } I64 PrsKeyWord(CLex *lx) -{//Cvt cur token to $LK,"KEYWORD",A="FF:::/Compiler/OpCodes.TXT.Z,KEYWORD"$ or -1. +{//Cvt cur token to $LK,"KEYWORD",A="FF:::/Compiler/OpCodes.TXT,KEYWORD"$ or -1. CHashGeneric *temph; if (lx->token==TK_IDENT &&(temph=lx->hash_entry) && temph->type&HTT_KEYWORD) return temph->user_data0; @@ -92,7 +92,7 @@ U0 PrsVarInit(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_ad LexExcept(lx,"missing '}' at "); Lex(lx); } else { - if (tempc->ptr_cnt==1 && ((tempc-1)->raw_type==RT_I8 || (tempc-1)->raw_type==RT_U8) && + if (tempc->ptr_stars_cnt==1 && ((tempc-1)->raw_type==RT_I8 || (tempc-1)->raw_type==RT_U8) && !tempad && lx->token==TK_STR) is_str=TRUE; else @@ -127,15 +127,17 @@ U0 PrsVarInit(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_ad LCCPush(lx); LCCInit(lx); LCCAdd(lx,IC_ABS_ADDR,data_addr_ip,tempc+1); - LCCAdd(lx,IC_IMM_U64,dst-*_base,tempc+1); + LCCAdd(lx,IC_IMM_I64,dst-*_base,tempc+1); LCCAdd(lx,IC_ADD,0,tempc+1); if (!PrsExpression(lx,NULL,TRUE)) throw('Compiler'); tempi=lx->lcc.lcc_root.last; - if (tempi->ic_code==IC_END_EXP) + if (tempi->ic_code==IC_END_EXP) { tempi->ic_code=IC_NOP1; + tempi->ic_flags=0; + } LCCAdd(lx,IC_ASSIGN,0,tempc); - LCCAdd(lx,IC_END_EXP,0,tempc); + LCCAdd(lx,IC_END_EXP,0,tempc,ICF_NO_DEPEND_RESULT); LCCAdd(lx,IC_RET,0,0); if (ex=LCCCompile(lx,&size,NULL,NULL)) { tempe=CAlloc(sizeof(CExeImportExport)); @@ -186,7 +188,7 @@ U0 PrsVarInit2(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_a CArrayDim *tempad1; tempc=OptClassFwd(tempc); if (tempad1=tempad->next) { - if (!tempc->ptr_cnt && + if (!tempc->ptr_stars_cnt && (tempc->raw_type==RT_I8 || tempc->raw_type==RT_U8) && lx->token==TK_STR) { lx->stk_ptr--; //grows up @@ -376,7 +378,7 @@ CHashClass *PrsType(CLex *lx,CHashClass **_tempc1, I64 *_mode,CMemberLst *tempm,U8 **_ident,CHashFun **_fun_ptr, CHashExport **_tempex,CArrayDim *tempad,I64 fsp_flags) { - I64 k,ptr_cnt,mode=*_mode; + I64 k,ptr_stars_cnt,mode=*_mode; CHashClass *tempc1=*_tempc1,*tempc2; CHashFun *fun_ptr=NULL; CHashExport *tempex=NULL; @@ -386,7 +388,7 @@ pt_start: if (!tempc1 || !(tempc1->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) LexExcept(lx,"invalid class at "); - ptr_cnt=0; + ptr_stars_cnt=0; while (lx->token=='*') { if (mode.u8[1]) { lx->stk_ptr--; //grows up @@ -394,7 +396,7 @@ pt_start: } Lex(lx); tempc1++; - if (++ptr_cnt>MAX_PTR_STARS) + if (++ptr_stars_cnt>MAX_PTR_STARS) LexExcept(lx,"Too many *'s at "); } @@ -412,13 +414,13 @@ pt_start: if (lx->token=='(') { if (Lex(lx)!='*') LexExcept(lx,"expecting '*' at "); - ptr_cnt=1; //fun_ptr + ptr_stars_cnt=1; //fun_ptr while (Lex(lx)=='*') - ptr_cnt++; //fun_ptr - if (ptr_cnt>MAX_PTR_STARS) + ptr_stars_cnt++; //fun_ptr + if (ptr_stars_cnt>MAX_PTR_STARS) LexExcept(lx,"Too many *'s at "); } else - ptr_cnt=-1; //fun_ptr + ptr_stars_cnt=-1; //fun_ptr if (_ident) { if (lx->token==TK_IDENT) { @@ -438,13 +440,13 @@ pt_start: } } - if (ptr_cnt>=0) { //fun_ptr + if (ptr_stars_cnt>=0) { //fun_ptr if (lx->token!=')') LexExcept(lx,"missing ')' at "); if (Lex(lx)!='(') LexExcept(lx,"expecting '(' at "); - fun_ptr=PrsFunJoin(lx,tempc1,NULL,fsp_flags)+ptr_cnt; - tempc1=cmp.internal_types[RT_PTR]+ptr_cnt; + fun_ptr=PrsFunJoin(lx,tempc1,NULL,fsp_flags)+ptr_stars_cnt; + tempc1=cmp.internal_types[RT_PTR]+ptr_stars_cnt; } if (!PrsArrayDims(lx,tempad) && lx->token!='=') { tempc1++; @@ -454,8 +456,8 @@ pt_start: } tempc2=OptClassFwd(tempc1); - if (tempc2->ptr_cnt) { - tempc2-=tempc2->ptr_cnt; + if (tempc2->ptr_stars_cnt) { + tempc2-=tempc2->ptr_stars_cnt; if (tempc2->type&HTT_INTERNAL_TYPE && !tempc2->size) LexWarn(lx,"use \"U8 *\" instead of \"U0 *\" at "); } @@ -478,10 +480,9 @@ U0 PrsVarLst(CLex *lx,CHashClass *tempc,I64 mode,I64 union_base=0) lx->flags|=LF_DONT_MAKE_RESULT; if (mode.u8[1]==PRS1B_CLASS) lx->flags|=LF_CLASS_IP; - if (mode.u8[1]!=PRS1B_LOCAL_VAR && mode.u8[1]!=PRS1B_STATIC_LOCAL_VAR || mode&PRSF_UNION) { - if (lx->token=='(' || lx->token=='{') - Lex(lx); - } + if ((mode.u8[1]!=PRS1B_LOCAL_VAR && mode.u8[1]!=PRS1B_STATIC_LOCAL_VAR || + mode&PRSF_UNION) && (lx->token=='(' || lx->token=='{')) + Lex(lx); while (TRUE) { while (lx->token==';') Lex(lx); @@ -793,7 +794,7 @@ CHashClass *PrsClass(CLex *lx,I64 keyword,I64 fsp_flags,Bool is_extern) lx->cur_str=NULL; HashAdd(tempc,lx->htc.glbl_hash_table); LBts(&tempc->flags,Cf_EXTERN); - SetSrcFileInfo(lx,tempc); + HashSrcFileSet(lx,tempc); Lex(lx); } else { if (lx->flags&LF_AOT_COMPILE) { @@ -827,9 +828,9 @@ CHashClass *PrsClass(CLex *lx,I64 keyword,I64 fsp_flags,Bool is_extern) tempc->type|=HTF_PUBLIC; tempc->use_cnt=0; if (lx->last_U16=='\n') - SetSrcFileInfo(lx,tempc,-1); + HashSrcFileSet(lx,tempc,-1); else - SetSrcFileInfo(lx,tempc,0); + HashSrcFileSet(lx,tempc,0); if (Lex(lx)==':') { if (Lex(lx)!=TK_IDENT || !(base_class=lx->hash_entry) || !(base_class->type&HTT_CLASS)) @@ -897,7 +898,7 @@ CHashFun *PrsFunJoin(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags) BEqu(&tempf->type,HTf_PUBLIC,fsp_flags&FSF_PUBLIC); tempf->return_class=temp_return; tempf->use_cnt=0; - SetSrcFileInfo(lx,tempf); + HashSrcFileSet(lx,tempf); PrsVarLst(lx,tempf,PRS0_NULL|PRS1_FUN_ARG); tempf->arg_cnt=tempf->member_cnt; if (0arg_cnt<<3<=MAX_I16 && !Bt(&tempf->flags,Ff_DOT_DOT_DOT)) @@ -932,6 +933,10 @@ U0 PrsFun(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags) lx->lb_leave=LCCMiscNew(lx,CMT_LABEL); lx->flags&=~LF_HAS_RETURN; PrsStatement(lx,,,0); + + if (lx->max_linemin_line) + lx->max_line=lx->min_line; + if (lx->htc.fun->return_class->size && !(lx->flags&LF_HAS_RETURN)) LexWarn(lx,"Function should return val "); LCCAdd(lx,IC_LABEL,lx->lb_leave,0); @@ -964,10 +969,10 @@ U0 PrsFun(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags) if (tempm->flags & MLF_NO_UNUSED_WARN) { if (tempm->use_cnt>1&&StrCmp(tempm->str,"_anon_")) PrintWarn("Unneeded nounusedwarn\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); + lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); } else if (!tempm->use_cnt && GetOpt(OPTf_WARN_UNUSED_VAR)) PrintWarn("Unused var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); + lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); tempm=tempm->next; } lx->htc.local_var_lst=lx->htc.fun=lx->fun_lfn=NULL; @@ -1145,8 +1150,8 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, } tempg->type=HTT_GLBL_VAR; if (tempex && tempex->type&HTT_GLBL_VAR && - tempex->type&HTF_UNRESOLVED && - MHeapCtrl(tempex)==MHeapCtrl(tempg)) + tempex->type&HTF_UNRESOLVED && + MHeapCtrl(tempex)==MHeapCtrl(tempg)) has_alias=TRUE; if (sys_var_init_flag&1) MemSet(tempg->data_addr,sys_var_init_val,j); @@ -1161,9 +1166,9 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, tempg->dim.total_cnt=i; tempg->use_cnt=0; if (lx->last_U16=='\n') - SetSrcFileInfo(lx,tempg,-1); + HashSrcFileSet(lx,tempg,-1); else - SetSrcFileInfo(lx,tempg,0); + HashSrcFileSet(lx,tempg,0); if (mode&255==PRS0_IMPORT || mode&255==PRS0__IMPORT) tempg->flags|=GVF_IMPORT; if (mode&255==PRS0_EXTERN) @@ -1232,7 +1237,6 @@ U0 PrsIf(CLex *lx,I64 try_cnt,CLexCodeMisc *lb_break) { CLexCodeMisc *lb,*lb1; I64 k; - if (lx->token!='(') LexExcept(lx,"expecting '(' at "); Lex(lx); @@ -1259,7 +1263,6 @@ U0 PrsIf(CLex *lx,I64 try_cnt,CLexCodeMisc *lb_break) U0 PrsWhile(CLex *lx,I64 try_cnt) { CLexCodeMisc *lb,*lb_done; - if (lx->token!='(') LexExcept(lx,"expecting '(' at "); Lex(lx); @@ -1270,7 +1273,6 @@ U0 PrsWhile(CLex *lx,I64 try_cnt) if (lx->token!=')') LexExcept(lx,"missing ')' at "); Lex(lx); - lb_done=LCCMiscNew(lx,CMT_LABEL); LCCAdd(lx,IC_BR_ZERO,lb_done,0); PrsStatement(lx,try_cnt,lb_done); @@ -1281,7 +1283,6 @@ U0 PrsWhile(CLex *lx,I64 try_cnt) U0 PrsDoWhile(CLex *lx,I64 try_cnt) { CLexCodeMisc *lb,*lb_done; - lb=LCCMiscNew(lx,CMT_LABEL); lb_done=LCCMiscNew(lx,CMT_LABEL); LCCAdd(lx,IC_LABEL,lb,0); @@ -1374,9 +1375,9 @@ U0 PrsSwitch(CLex *lx,Bool nobound,I64 try_cnt) mc_jt->begin->use_cnt++; if (!PrsExpression(lx,NULL,FALSE)) throw('Compiler'); - tempi_sub=LCCAdd(lx,IC_IMM_U64,0,cmp.internal_types[RT_I64]); + tempi_sub=LCCAdd(lx,IC_IMM_I64,0,cmp.internal_types[RT_I64]); LCCAdd(lx,IC_SUB,0,cmp.internal_types[RT_I64]); - tempi_cmp=LCCAdd(lx,IC_IMM_U64,0,cmp.internal_types[RT_I64]); + tempi_cmp=LCCAdd(lx,IC_IMM_I64,0,cmp.internal_types[RT_I64]); if (nobound) LCCAdd(lx,IC_NOBOUND_SWITCH,mc_jt,0); else @@ -1632,7 +1633,7 @@ U0 PrsTryBlk(CLex *lx,I64 try_cnt) else LCCAdd(lx,IC_ADD_RSP,16,tempc); LCCAdd(lx,IC_CALL_END,0,tempc); - LCCAdd(lx,IC_END_EXP,0,0); + LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); PrsStatement(lx,try_cnt+1); @@ -1647,7 +1648,7 @@ U0 PrsTryBlk(CLex *lx,I64 try_cnt) } else LCCAdd(lx,IC_CALL,temp_untry->executable_addr,tempc); LCCAdd(lx,IC_CALL_END,0,tempc); - LCCAdd(lx,IC_END_EXP,0,0); + LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); LCCAdd(lx,IC_JMP,lb_done,0); @@ -1684,6 +1685,8 @@ Bool PrsStatement(CLex *lx,I64 try_cnt=0, Lex(lx); while (lx->token!='}' && lx->token!=TK_EOF) PrsStatement(lx,try_cnt,lb_break); + if (lx->cur_lfn==lx->fun_lfn) + lx->max_line=lx->cur_lfn->line_num; if (Lex(lx)!=',') goto sm_done; } else if (lx->token==';') { if (cmp_flags&CMPF_PRS_SEMICOLON) diff --git a/Compiler/CmpAsm.CPP b/Compiler/Templates.CPP similarity index 100% rename from Compiler/CmpAsm.CPP rename to Compiler/Templates.CPP diff --git a/Compiler/Unassembler.CPP b/Compiler/UAsm.CPP similarity index 93% rename from Compiler/Unassembler.CPP rename to Compiler/UAsm.CPP index 6afe0c4..94d8261 100644 --- a/Compiler/Unassembler.CPP +++ b/Compiler/UAsm.CPP @@ -188,35 +188,39 @@ U0 UasmHashLoad() { CHashOpcode *temph; CInstruction *tempi; - I64 cnt=0,j,k; + I64 i,j,k,cnt=0; uasm.table=NULL; uasm.table_entries=0; uasm.ins64_mask=0x0880888880+1<next_added; - while (temph!=cmp.asm_hash) { - if (temph->type==HTT_OPCODE) - cnt+=temph->instruction_entry_cnt; - temph=temph->next_added; + for (i=0;i<=cmp.asm_hash->mask;i++) { + temph=cmp.asm_hash->body[i]; + while (temph) { + if (temph->type==HTT_OPCODE) + cnt+=temph->instruction_entry_cnt; + temph=temph->next; + } } uasm.table_entries=cnt; j=0; uasm.table=MAlloc(cnt*sizeof(U8 *)); - temph=cmp.asm_hash->next_added; - while (temph!=cmp.asm_hash) { - if (temph->type==HTT_OPCODE) { - tempi=&temph->ins; - for (k=0;kinstruction_entry_cnt;k++) { - uasm.table[j++]=tempi; - tempi++; + for (i=0;i<=cmp.asm_hash->mask;i++) { + temph=cmp.asm_hash->body[i]; + while (temph) { + if (temph->type==HTT_OPCODE) { + tempi=&temph->ins; + for (k=0;kinstruction_entry_cnt;k++) { + uasm.table[j++]=tempi; + tempi++; + } } - } - temph=temph->next_added; + temph=temph->next; + } } QSortI64(uasm.table,cnt,&InstEntriesCompare); @@ -246,7 +250,7 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) CInstruction *tempi,*tempi2; CHashOpcode *tempo; U8 *ip=*_ip,*ptr,*reloced_a1_st,*reloced_a2_st,*bin_data_area1,*bin_data_area2, - line1[512],line2[512],a1_st[512],a2_st[512],seg_overrides[32]; + line1[512],line2[512],buf2[512],a1_st[512],a2_st[512],seg_overrides[32]; if (_jmp_dst) *_jmp_dst=-1; if (seg_size==16) { @@ -530,29 +534,22 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) case ARGT_UIMM64: CatPrint(a1_st,"%016X",*ip(I64 *)++); break; - case ARGT_REL8: - disp=*ip(I8 *)++; - disp+=ip; - if (IsDbg) - CatPrint(a1_st,"%p ",disp); - else - CatPrint(a1_st,"%P ",disp); - if (_jmp_dst) *_jmp_dst=disp; - break; - case ARGT_REL16: - disp=*ip(I16 *)++; - disp+=ip; - if (IsDbg) - CatPrint(a1_st,"%p ",disp); - else - CatPrint(a1_st,"%P ",disp); - if (_jmp_dst) *_jmp_dst=disp; - break; - case ARGT_REL32: - disp=*ip(I32 *)++; + sub_switch_start: + case ARGT_REL8: + disp=*ip(I8 *)++; + break; + case ARGT_REL16: + disp=*ip(I16 *)++; + break; + case ARGT_REL32: + disp=*ip(I32 *)++; + break; + sub_switch_end: disp+=ip; if (IsDbg) CatPrint(a1_st,"%p ",disp); + else if (PutSrcLink(disp,512,buf2)) + CatPrint(a1_st,"%s ",buf2); else CatPrint(a1_st,"%P ",disp); if (_jmp_dst) *_jmp_dst=disp; diff --git a/Demo/AcctExample/Adam3bPkgs.CPP b/Demo/AcctExample/Adam3bPkgs.CPP deleted file mode 100644 index 268a782..0000000 --- a/Demo/AcctExample/Adam3bPkgs.CPP +++ /dev/null @@ -1,8 +0,0 @@ -#include "/Accts/Adam3bPkgs" -#include "/Apps/Psalmody/Load" -Cd("HOME");; -#include "/Accts/TS/TSAdam" -#include "/Accts/TS/TSSortHeader" -#include "/Accts/TS/TSDistro" -#include "/Accts/TS/TSHolySpirit" -Cd("HOME");; diff --git a/Demo/AcctExample/Adam3cKeyPlugIns.CPP b/Demo/AcctExample/AdamKeyPlugIns.CPP similarity index 62% rename from Demo/AcctExample/Adam3cKeyPlugIns.CPP rename to Demo/AcctExample/AdamKeyPlugIns.CPP index b7b5f86..ec3dd93 100644 --- a/Demo/AcctExample/Adam3cKeyPlugIns.CPP +++ b/Demo/AcctExample/AdamKeyPlugIns.CPP @@ -1,13 +1,38 @@ -//Change anything you want in this -//acct file or others. +//Place this file in /Home and change +//anything you want. -U0 FillInTime() +U0 InsTime() { CDate cdt; cdt=Now; "$$IV,1$$----%D %T----$$IV,0$$\n",cdt,cdt; } +U0 InsFileLink() +{ + U8 *st=PopUpPickFile; + st[0]=':'; //This is my personal code, not production. LOL + "$$LK,\"%s\",A=\"FI:%s\"$$",st+2,st; + Free(st); +} + +U0 InsDirLinks() +{ + CDirEntry *tempde,*tempde1; + U8 *st=PopUpPickDir,*st2; + st[0]=':'; //This is my personal code, not production. LOL + st2=MStrPrint("%s/*",st); + tempde=tempde1=FilesFind(st2,FUF_JUST_FILES|FUF_JUST_TXT); + while (tempde) { + tempde->full_name[0]=':'; + "$$LK,\"%s\",A=\"FI:%s\"$$\n",tempde->full_name+2,tempde->full_name; + tempde=tempde->next; + } + DirTreeDel(tempde1); + Free(st); + Free(st2); +} + Bool MyPutKey(I64 ch,I64 sc) {//ch=ASCII; sc=scan_code @@ -32,9 +57,9 @@ Bool MyPutKey(I64 ch,I64 sc) case SC_F1: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("Dollar/LTPURPLE"); + KeyDescSet("Dollar/LTPURPLE"); else - SetKeyDesc("Dollar/PURPLE"); + KeyDescSet("Dollar/PURPLE"); } else { if (sc & SCF_SHIFT) "$$LTPURPLE$$"; @@ -45,9 +70,9 @@ Bool MyPutKey(I64 ch,I64 sc) case SC_F2: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("Dollar/LTRED"); + KeyDescSet("Dollar/LTRED"); else - SetKeyDesc("Dollar/RED"); + KeyDescSet("Dollar/RED"); } else { if (sc & SCF_SHIFT) "$$LTRED$$"; @@ -58,9 +83,9 @@ Bool MyPutKey(I64 ch,I64 sc) case SC_F3: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("Dollar/LTGREEN"); + KeyDescSet("Dollar/LTGREEN"); else - SetKeyDesc("Dollar/GREEN"); + KeyDescSet("Dollar/GREEN"); } else { if (sc & SCF_SHIFT) "$$LTGREEN$$"; @@ -71,39 +96,52 @@ Bool MyPutKey(I64 ch,I64 sc) case SC_F4: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("Dollar/LTBLUE"); + KeyDescSet("Dollar/Default Color"); else - SetKeyDesc("Dollar/Default Color"); + KeyDescSet("Dollar/BLUE"); } else { if (sc & SCF_SHIFT) - "$$LTBLUE$$"; - else "$$FG$$"; + else + "$$BLUE$$"; } break; case SC_F6: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("Misc/Insert My URL"); + KeyDescSet("Misc/Ins My URL"); else - SetKeyDesc("Misc/Insert Datetime"); + KeyDescSet("Misc/Ins Datetime"); } else { if (sc & SCF_SHIFT) - FillInMyURL; + InsMyURL; else - FillInTime; + InsTime; } break; case SC_F7: if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) - SetKeyDesc("God Book Passage"); + KeyDescSet("God Book Passage"); } else { //$LK,"::/Adam/God/HSNotes.TXT"$ FifoU8Flush(god.fifo); GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); if (sc & SCF_SHIFT) - GodBooksPassage("HOME/Archive/Text/*"); + GodBooksPassage("C:/Home/Wb2/Files/Text/*"); + } + break; + case SC_F8: + if (sc&SCF_KEY_DESC) { + if (sc & SCF_SHIFT) + KeyDescSet("Misc/Ins Dir Links"); + else + KeyDescSet("Misc/Ins File Link"); + } else { + if (sc & SCF_SHIFT) + InsDirLinks; + else + InsFileLink; } break; } @@ -112,15 +150,28 @@ Bool MyPutKey(I64 ch,I64 sc) if (!(sc & SCF_CTRL)) { if (sc & SCF_ALT) { switch (ch) { + case 'a': + if (sc&SCF_KEY_DESC) + KeyDescSet("Win/AutoComplete(ON);"); + else + AutoComplete(ON); + return TRUE; + case 'A': + if (sc&SCF_KEY_DESC) + KeyDescSet("Win/AutoComplete;"); + else + AutoComplete; + return TRUE; + case 'h': if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/Tile Horizontally"); + KeyDescSet("Win/Tile Horizontally"); else WinTileHorz; return TRUE; case 'm': if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/Maximize"); + KeyDescSet("Win/Maximize"); else { WinMax; WinBorder; @@ -128,23 +179,23 @@ Bool MyPutKey(I64 ch,I64 sc) return TRUE; case 'v': if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/Tile Vertically"); + KeyDescSet("Win/Tile Vertically"); else WinTileVert; return TRUE; case 'V': if (sc&SCF_KEY_DESC) - SetKeyDesc("Sys/Frame Grabber Toggle"); + KeyDescSet("Sys/Frame Grabber Toggle"); else FrameGrabberToggle; return TRUE; case 'l': if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Put Link to Cur Pos on Clipboard"); + KeyDescSet("Edit/Put Link to Cur Pos on Clipboard"); else { ClipboardDel; - st1=FileNameAbs(Define("ST_BIBLE_FILE")); + st1=FileNameAbs(BIBLE_FILENAME); st2=FileNameAbs(DocPut->filename.name); if (!StrCmp(st1,st2)) { Free(st1); @@ -159,7 +210,7 @@ Bool MyPutKey(I64 ch,I64 sc) return TRUE; case 'L': if (sc&SCF_KEY_DESC) - SetKeyDesc("Edit/Place Anchor, Put Link to Clipboard"); + KeyDescSet("Edit/Place Anchor, Put Link to Clipboard"); else { i=RandU32; ClipboardDel; @@ -169,43 +220,30 @@ Bool MyPutKey(I64 ch,I64 sc) } return TRUE; - case 'w': - if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/WordStat(ON);"); - else - WordStat(ON); - return TRUE; - case 'W': - if (sc&SCF_KEY_DESC) - SetKeyDesc("Win/WordStat;"); - else - WordStat; - return TRUE; - //Ins your own ALT-key plug-ins case 'b': if (sc&SCF_KEY_DESC) - SetKeyDesc("Cmd/Jump to Bad Code"); + KeyDescSet("Cmd/Jump to Bad Code"); else //$LK,"::/Adam/God/HSNotes.TXT"$ BadCodeJump; return TRUE; case 'g': if (sc&SCF_KEY_DESC) - SetKeyDesc("BlogScreenShot"); + KeyDescSet("BlogScreenShot"); else BlogScreenShot; return TRUE; case 'p': if (sc&SCF_KEY_DESC) - SetKeyDesc("JukeBox(TAD)"); + KeyDescSet("JukeBox(TAD)"); else - JukeBox("::/Accts/TS/TAD/Psalmody"); + JukeBox("::/Home/Psalmody"); return TRUE; case 'P': if (sc&SCF_KEY_DESC) - SetKeyDesc("JukeBox(Examples)"); + KeyDescSet("JukeBox(Examples)"); else JukeBox("::/Apps/Psalmody/Examples"); return TRUE; diff --git a/Demo/AcctExample/AdamLocalize.CPP b/Demo/AcctExample/AdamLocalize.CPP new file mode 100644 index 0000000..7a5f969 --- /dev/null +++ b/Demo/AcctExample/AdamLocalize.CPP @@ -0,0 +1,20 @@ +//Place this file in /Home and change +//anything you want. + +OptOn(OPTf_WARN_PAREN); +OptOn(OPTf_WARN_DUP_TYPES); + +KbdTypeMatic(0); + +// Las Vegas is -7 during summer, -8 during winter +local_time_offset=-8*60*60*CDATE_FREQ; //Pacific + +//$AN,"",A="mouse_move_scale"$adjust these to set mouse move scale +mouse.scale.x=0.5; +mouse.scale.y=0.5; +mouse.scale.z=5.0; //wheel + +//don't change these +mouse.prescale.x=mouse.pos.x/mouse.scale.x; +mouse.prescale.y=mouse.pos.y/mouse.scale.y; +mouse.prescale.z=mouse.pos.z/mouse.scale.z; diff --git a/Demo/AcctExample/AdamPkgs.CPP b/Demo/AcctExample/AdamPkgs.CPP new file mode 100644 index 0000000..53d201e --- /dev/null +++ b/Demo/AcctExample/AdamPkgs.CPP @@ -0,0 +1,13 @@ +//Place this file in /Home and change +//anything you want. + +#include "::/AdamPkgs" +#include "::/Apps/Psalmody/Load" +#include "::/Demo/WebLogExample/WebLogRep" +Cd("::/Home");; +#include "::/Home/TOSIDComputer" +#include "::/Home/TOSCfg" +#include "::/Home/TOSMisc" +#include "::/Home/TOSDistro" +#include "::/Home/TOSHolySpirit" +Cd("::/Home");; diff --git a/Demo/AcctExample/Adam3eSys.CPP b/Demo/AcctExample/AdamSys.CPP similarity index 59% rename from Demo/AcctExample/Adam3eSys.CPP rename to Demo/AcctExample/AdamSys.CPP index 641f49e..b6f1e76 100644 --- a/Demo/AcctExample/Adam3eSys.CPP +++ b/Demo/AcctExample/AdamSys.CPP @@ -1,3 +1,6 @@ +//Place this file in /Home and change +//anything you want. + U0 UserStartUp() {//Run each time a user a spawned DocTermNew; @@ -7,18 +10,12 @@ U0 UserStartUp() WinZBufUpdate; Preempt(ON); Dir; - switch (ts_cid) { - case CID_TAD8: - "$$GREEN$$TAD8$$FG$$:"; - break; - case CID_TAD8_VM: - "$$RED$$TAD8_VM$$FG$$:"; - break; + switch (tos_cid) { case CID_DFT: "$$PURPLE$$DFT$$FG$$:"; break; } - "$TX,"81,527",D="DD_TEMPLEOS_LOC_OFFICIAL"$LOC:"; + "$TX,"79,905",D="DD_TEMPLEOS_LOC_OFFICIAL"$LOC:"; CPURep; } @@ -35,19 +32,16 @@ CTask *user1,*user2; U0 StartUpTasks() { - user1=SpawnUser; - user2=SpawnUser; + user1=User; + user2=User; WinToTop(user1); WinTileVert; - PopUp("#include \"::/Adam/Start\";"); "Boot Time:%7.3fs\n",tS; - XTalk(user1,"Cd(\"HOME\");#include \"DoOnce\";\n"); - Silent(ON); - WSInit("/*;~*Bible.TXT*"); + XTalk(user1,"Cd(\"::/Home\");#include \"DoOnce\";\n"); + Silent; + ACInit("/*;~*Bible.TXT*;~*.TXT*"); //No Bible, no uncompressed TXT. Silent(OFF); - "WordStat Time:%7.3fs\n",tS; - if (ts_has_win_drv) - DrvEnable(TS_WIN_DRV_LET,OFF); + "AutoComplete Time:%7.3fs\n",tS; } DelTree("::/Temp/ScreenShots"); diff --git a/Demo/AcctExample/DbgAdam2.CPP b/Demo/AcctExample/DbgAdam2.CPP deleted file mode 100644 index e5e249d..0000000 --- a/Demo/AcctExample/DbgAdam2.CPP +++ /dev/null @@ -1,51 +0,0 @@ -#exe {OptOn(OPTf_WARN_PAREN);}; -#exe {OptOn(OPTf_WARN_DUP_TYPES);}; - -HashTablePurge(adam_task->hash_table); - -#help_index "Misc" - -F64 os_version=2.11;//Operating system version. - -#include "AdamExts.HPP" -#include "Math2a" -#include "Training" -#include "Utils2a" -#include "MathODE" - -Dbg("Type 'G;'"); - -Cd("::/Adam/Gr");; -#include "Gr" - -Cd("::/Adam/Snd");; -#include "Snd" - -Cd("::/Adam/Dsk");; -#include "Dsk2" - -Cd("::/Adam");; -#include "Menu" -#include "Win2a" -#include "Win2b" -#include "Dbg2a" - -Cd("::/Adam/DolDoc");; -#include "Doc" -LBts(&sys_run_level,RLf_DOC); - -Cd("::/Adam/Ctrls");; -#include "Ctrls" - -Cd("::/Adam");; -#include "AutoFile2a" -#include "LogIn" - -Cd("::/Adam/WordStat");; -#include "WordStat" - -Cd("::/Adam");; -#include "Hash2a" -#include "TaskSettings" -#include "DevInfo" -#include "DocDefines" diff --git a/Demo/AcctExample/DoOnce.CPP b/Demo/AcctExample/DoOnce.CPP index 8e87280..66abf99 100644 --- a/Demo/AcctExample/DoOnce.CPP +++ b/Demo/AcctExample/DoOnce.CPP @@ -1,12 +1,19 @@ +//Place this file in /Home and change +//anything you want. + //This file is executed by the //first terminal window upon start-up. -//See $LK,"DoOnce",A="FF:HOME/Adam3eSys.CPP,DoOnce"$ and $LK,"Acct Files",A="FF:::/Doc/GuideLines.TXT,ACCT FILES"$. +//See $LK,"DoOnce",A="FF:/Home/AdamSys.CPP,DoOnce"$ and $LK,"Home Files",A="FF:::/Doc/GuideLines.TXT,/Home Files"$. -//It goes in your HOME directory and -//you can customize it. +// Type("::/Doc/Customize.TXT"); -//Delete this to get rid of -//default start-up msg. - -//Type("::/Doc/Customize.TXT"); +U0 DoOnce() +{ + if (FileFind("D:/Temp/Logs/access.log")) { + Auto("\n\n%C",CH_ESC); + WebLogRep("D:/Temp/Logs/*.log","D:/Temp/LogRep.TXT"); + Del("D:/Temp/Logs/*.log"); + } +} +DoOnce; diff --git a/Demo/AcctExample/PersonalMenu.TXT b/Demo/AcctExample/PersonalMenu.TXT index 14a2e54..9b15842 100644 Binary files a/Demo/AcctExample/PersonalMenu.TXT and b/Demo/AcctExample/PersonalMenu.TXT differ diff --git a/Demo/AcctExample/PersonalNotes.TXT b/Demo/AcctExample/PersonalNotes.TXT new file mode 100644 index 0000000..122eaa3 --- /dev/null +++ b/Demo/AcctExample/PersonalNotes.TXT @@ -0,0 +1,403 @@ +$WW,1$* Clean-up $LK,"FileNameAbs",A="MN:FileNameAbs"$(). + +* Get rid of having two terms and pick one, "Disk" and "BlkDev"? I don't think so. (Probably not.) + +* God said this is bad. $LK,"FL:::/Adam/DolDoc/DocFind.CPP,41"$ + +* $LK,"ChkDsk",A="MN:ChkDsk"$ alloc unalloced. + +* Entering a '$$' in text entry + +* Clean-up ASCII-127 delete. +* $LK,"StrPrintJoin",A="MN:StrPrintJoin"$(st); With st="\n\\"; + +* 1/1/2015 Bug messing-up keyboard, like no CTRL key. Was working on Sprites. + +* 1/?/2015 Macro select in Menu did not go to shell. + +* Real World User Issues: + QEMU runs maximized, but slow. + If you move cursor off of bottom, macros don't work. + Stutters in QEMU doing sound. + +* $LK,"BMPRLE4To",A="MN:BMPRLE4To"$() has files_size too big by 108. + +* Why is nontimer $LK,"Rand",A="MN:Rand"$() so bad? + +* $LK,"FL:::/Adam/Gr/SpriteEd.CPP,789"$ Resize bitmap? + +* More $LK,"CCtrl",A="MN:CCtrl"$. + +* Add change-triangle-color to mesh editor. + +* Add AVL binary tree support or red/black whatever that is. We have fixed-size stack. Auto-balancing binary tree is very needed. Where could we use? + +* Maybe let committee decide if we want intern to make binary tree look-up using PSECT symbol addresses, so we can eliminate psect cache and wall-paper kludge. All HolyC functions and glbl vars would have left-right for address search. + +* QEMU $LK,"tS",A="MN:tS"$ real-time-clock, slow Wenceslas. + +* Is "GrSetSymmetry" or "GrSymmetry" better? + +* DCF_TRANSFORMATION|DCF_SYMMETRY|DCF_JUST_MIRROR -- maybe not both needed at once. + +* DiskCache during FileRead. CTRL-ALT-C, $LK,"Kill",A="MN:Kill"$(). + +* Help Index no mention of Symmetry in $LK,"GrLine",A="MN:GrLine"$() $LK,"GrLine3",A="MN:GrLine3"$(). + +* Get rid of BYTE WORD DWORD in opcode and replace with U8 U16 U32. + +* 5/7/14:Something like AFSetIP.CPP caused hang, then reboot in TestSuite. +* 5/7/14:#63 Maybe, $LK,"::/Demo/Graphics/Pick3D.CPP"$ crashed in TestSuite. +* 6/8/14:After or in PageEntries2 in TestSuite crash. + +* $$LK,L="FL:D:/Kernel/File.CPP"$$ instead of A= +* $$SP,B=1$$ instead of $$SP,BI=1$$ +* $$CM+LE+RE is nasty + +* FlatTop is torpedo, not bombs. +* BomberGolf is weird concept? + +* Make a game, S.E.T.I., with radio telescope array. Put God on air. + +* $LK,"Diff",A="MN:Diff"$() flags. + +* Backward SHIFT-F3 is broken + +* MOV U8 [RSP+RCX],DL + +* Might want HeapLog x Cnt + +* Find-and-replace text on $$PT$$ line before it. + +* Compiler: Warn recurse class define? + +* Text "$$" has no extents and deletes + +* Exception msgs in Adam look bad + +3sGCGCqCCe2G3EE2G3qDetDEFsDBDB + +* $LK,"Mem32DevAlloc",A="MN:Mem32DevAlloc"$() is broken. Devices should be in free spot of E820 report. + +* SPRITES in CMD Line code. + +* Might want to move kernel code out of low 2Meg. Might be faster. + +* F2 Macro on TestSuite + +* 4/13/14 Strut or RawHide crashed when sys_var_init_flag etc +was set during testsuite. + +* PSect search all tables if not found very well. +* asm LIST NOLIST bug +* Bible ranges. +* No way to clear +Hold entries + +--------------------- +$$=-CTASK_NEG_OFFSET +offset(CTask.addr)==0 +Spawn(): CAlloc() +TaskFinishOff(): Free() +CSysFixedArea.adam +Looks like task_flags,locked_flags cause problems with neg offset. +--------------------- + +* 3/19/14: RESET during RawHide +* 2013? Wenceslas in TestSuite crashes, long time ago + +* 12/26/13: Mountain in TestSuite didn't run right. Turned yellow, did nothing. + +* FAQ frontloaded + +COMPILER + * Postpone LocalVar Init until last possible moment. (in case RETURN) + * PtrArith MUL SIZE -->QueIns(MUL)? + * QueRem(IC_NOP)? + +* Fix return result for GrBlot, ect. + +* CTRL-r transform individual elements + +* Size zero files don't copy out from VMware. + +* FileMgr header (scrolled out of window?) + +* ATA/ATAPI ID in VMware, when not booted to CD? I forgot. + +* I use fixed-point in $LK,"Circle",A="MN:Circle"$(), $LK,"Ellipse",A="MN:Ellipse"$(), $LK,"GrRot",A="MN:GrRot"$(), $LK,"GrMulMat",A="MN:GrMulMat"$() and others. +God says I might want to change to float. +$LK,"::/Demo/Lectures/FixedPoint.CPP"$. +$LK,"::/Demo/Lectures/FixedPointAdvanced.CPP"$. + +* DOCF_DBL_DOLLARS in reindention +* # in reindention + +* HexEdit with odd size, ASCII cannot be edited. + +* clean-up addDev pmt + +* Might want to convert some Preempt() to Cli + +* $LK,"Plain",A="MN:Plain"$() might be better not saving $LK,"CH_CURSOR",A="MN:CH_CURSOR"$. + +* TRANSPARENT might not work with line ROPF_DITHER + +* It would be nice if $LK,"U",A="MN:U"$() NOP were better. + +* unhandled exception on MP message gets overwritten by WinMgr + +* Cmd to enable/disable compiler warnings + +* What if we had a type for either F64 or I64, like Print -- no conversion. +* What if we had a ... that did do conversion, if we have one that doesn't. + +* fix documentation problem -- remembering 0 terminator in str or not for $$DA +* GetS, crazy putkey code +* editor page formatting is FUBAR + +* $LK,"gr.screen_image",A="MN:CGrGlbls"$ + >Might want to do ZOOM in U8 graphics and convert screen capture to U8 + >Might want to reverse bit order + +* return vals for grrect, grblot, grputchar? +* collisions for grrect, grblot, grputchar? + +* Race condition in FlatTops.CPP.Z torpedo + +* {Lock|Rep}{Seg|2E=NotBr|3E=Br}{OP}{ADD}{REX} +* Virtual Box MP reboot +* Std local var names + +//After Egypt possible future ideas +//$LK,"Numbers,13:33",A="BF:Numbers,13:33"$ scouts +//$LK,"Numbers,21:8",A="BF:Numbers,21:8"$ snakes + +* GrEdit: Move sidebar selected elems. + - Be careful of multipt elems. +* GrEdit: Strip origin shift cmds. + +* GrEditBitMap, grabscroll? + +* extern of fun with dft arg of str? + +* We kinda need a routine to return how much free memory, +so that applications can plan a big alloc. + +* FileMgr bad with lots of files. + +* This $LK,"Fs->catch_except=TRUE",A="FF:::/Kernel/SrvCmd.CPP,Fs->catch_except=TRUE"$ causes problems because it +catches divide and out-of-mem. Not sure what to do, yet. + +* Make $LK,"BSPStartMP",A="MN:BSPStartMP"$() start work after boot to reset multicores. Bonus for +freeing old task memory. (Prolly never gonna do anything about this.) + +* $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$ local vars. +* sprite shift pts, ctrl pt for ellipse/polygon w,h is off when rotated. + +* Window mgr needs to do DOC operations on posted messages from mouse. +Works for $LK,"IPSet",A="MN:IPSet"$(), though. + +* Add local vars to sym table in $LK,"Dbg",A="MN:Dbg"$()? (maybe) + +* $LK,"Bible sized nodes",A="FF:::/Adam/DolDoc/DocRecalcB.CPP,->tag+i"$ +* Mouseinstall throws exceptions, doesn't work, investigate Mouse $LK,"0x9FC30",A="FF:::/Kernel/KbdMouse/Mouse.CPP,9FC"$ +* get kbd lights working. +* Might have issue with compiler exceptions and restoring lex.hash tables. +* Generates two compiler error messages for expressions in statements. +* release semaphores or break lock sema,usb_td +* Fix Mom's secondary CD-ROM, dad's primary +* pmtstr in install didn't like focus change + +*$FG,2$U0 Main() +{ + U0 (*fp_old_draw_input_ptr)(CDC *dc,I64 x,I64 y)=gr.fp_draw_input_ptr; +}$FG$ + +* What about local variable array/struct initialization. + +* Demo $LK,"ToHtml",A="MN:ToHtml"$(). + +* Del short name in FAT32--currently I do not check to see if I have generated +a unique short name and one can delete multiple files accidentally. +Generating unique short names is a pain in the ass because you have to scan +the whole directory. I think I just truncate the name instead of +"Program~1" or whatever. S081130-0001.BMP crashed windows--two identical +short names. + +* OVERSTRIKE at cmd line with menu macro. + +* $FG,2$lock{}$FG$ warning on invalid modes. +* Local array vars-->reg. +* $LK,"DCF_SYMMETRY",A="MN:DCF_SYMMETRY"$, before transformation? (Currently it's after) +* all graphics clipping -- screen y+top<0 for top<0 +* Maybe convert graphics to float +* Warn unnecessary typecast +* compiler F32 +* preempt(OFF) during graphic clipping? +* compiler optimization heap_glbls with added offset +* Might make FAT32 read in contiguous chunks. +* make Clamp(),Min(),Max() asm routines. +* Might make CSprite flood fill operate on a separate bitmap +and blotted at the end. +* autofile popup of popup +* delete subsprite in menu near others +* consider changing domenu so a real on menu item doesn't select +( sends followed by or something) +* puts3 with depth buf? might not do this +* make task queins and querem safe for multicore cycling through tasks (fwd). +* make better heapwalk, do something with _CFG_HEAP_DBG. +* log to file--would be inefficient--load-in whole file, modify and write out. +Useful, but not very efficient (TempleOS file system has no grow-file ability. +Created when FAT patent was an issue and wanted absly nothing people could sue +me for.) +* APIC2 +* import intel datasheets, somehow? +* Get better dictionary, good spell checker. +* AutoComplete/Man Jmp for user code. +* Might make DskView show drive colors. +* Might do utility to set drive colors, making a tree entry in Adam 3 using +registry-like routines... or registry I guess. + +* New Editor widgets + +* Make use of flag potential in SysFilesFind and possibly CFileAccess +* implement fixed pos files + +* new HolyC language features +* better debugging + +* Too much preemption turned off? +* Look for mem leaks. +* Move stuff out of Kernel module. + +* $LK,"ROP_XOR",A="MN:ROP_XOR"$ with pen_width>1 is broken. +* RGB wrong in BMP files. + +* use width and height in line clipping for pen_width>1 or blot. +* SIMD transformation +* test removable media id (critical for resident files) + +* add field overflow U8 "t='*'" +* Implement fmt codes into Get +* Date Input +* Default date fmt + +* 16 bit Unassembly is bad--very low priority +* more signed int disassembly +* support r4u8 by adding 0x40 byte +* static var off of data heap. +* Might want to use U32*U32 multiplication. +* could add "const" to not set LF_NOT_CONST flag for trig, etc. +* do r,rm ICCmp like ICBrCmp +* could make glblvar imports use TY_RIP_DISP32. +* PUSH_CMP allocs reg R9 or whatever +* Might be problem with NOP in OPT pass1 for NO_PUSH in expressions besides +assignments. Is ShiftNoPush fully implemented? +* NOP1 might need to have diff ic_data's +* in divequal, it assumes about ebx +* error/warning line nums +* ASM branch out warning of range off by 1 line--use lx->last_line_num + +* Switch statement with sparse cases (low priority) +* maybe inline functions? +* Use of more floating-point stk? + +* More aggressive in this routine $LK,"CmpF2PushPop",A="MN:CmpF2PushPop"$() with types besides MOV and F64. +* !dbl ~dbl +* &=, |= can overflow with Bts Btr on small data types + +* num lock comes on with break key +* sort options for findfiles +* Maybe, get rid of $LK,"0x20000",A="FF:::/Compiler/CMain.CPP,0x20000"$ in compiler. + + +$LK,"Hosea,6:6",A="BF:Hosea,6:6"$ + +$LK,"Hebrews,13:15",A="BF:Hebrews,13:15"$ + +$LK,"Psalms,50:14",A="BF:Psalms,50:14"$ + + + +>lspci -v + + + +/*****************************************************************************/ +$WW,1$This is the transcript of a radio conversation of a US naval ship with Canadian authorities off the coast of Newfoundland in October, 1995. Radio conversation released by the Chief of Naval Operations 10-10-95. + + Americans: Please divert your course 15 degrees to the North to avoid a Collision. + + Canadians: Recommend you divert YOUR course 15 degrees to the South to avoid a collision. + + Americans: This is the Captain of a US Navy ship. I say again, divert YOUR course. + + Canadians: No. I say again, you divert YOUR course. + + Americans: This is the aircraft carrier USS Lincoln, the second largest ship in the United States' Atlantic fleet. We are accompanied by three destroyers, three cruisers and numerous support vessels. I demand that YOU change your course 15 degrees north, that's one five degrees north, or countermeasures will be undertaken to ensure the safety of this ship. + + Canadians: This is a lighthouse. Your call.[2] +$WW,0$/*****************************************************************************/ + + + +/*****************************************************************************/ +char *words[10000]; //Single word list. No statistical weights allowed. +int i=0; + +while (true) { + while (!keyboard_hit()) + i++; + printf("%s ",words[i%10000]); +} +/*****************************************************************************/ + + +Size:$TX,"17784 KB",D="DD_TEMPLEOSCD_K_SIZE"$ + +/************************** $TX,"Perfect Coin Toss",HTML="http://hackaday.com/2014/12/19/nist-randomness-beacon/"$ ********************************/ +$TX,"NIST Randomness Beacon",HTML="http://www.nist.gov/itl/csd/ct/nist_beacon.cfm"$ is a government certified random number. You can call +the caretaker on that page, Rene Peralta 301-975-8702, $TX,"rene.peralta@nist.gov",HTML="mailto:rene.peralta@nist.gov"$. +Once every minute, they have a random lottery and post the results to their +site. You can go back and check old lottery numbers, by entering link+time. +$TX,"https:/beacon.nist.gov/rest/record/1415440980",HTML="https:/beacon.nist.gov/rest/record/1415440980"$ +$TX,"https:/beacon.nist.gov/rest/record/1415445300",HTML="https:/beacon.nist.gov/rest/record/1415445300"$ To check old numbers, enter +$TX,"https:/beacon.nist.gov/rest/record/1415529600",HTML="https:/beacon.nist.gov/rest/record/1415529600"$ Unix timestamp in the the URL. +$TX,"https:/beacon.nist.gov/rest/record/1415531580",HTML="https:/beacon.nist.gov/rest/record/1415531580"$ (Seconds since 1-JAN-1970) +$TX,"https:/beacon.nist.gov/rest/record/1415563680",HTML="https:/beacon.nist.gov/rest/record/1415563680"$ $TX,"Unix Timestamp Tool",HTML="http://www.epochconverter.com"$ +$TX,"https:/beacon.nist.gov/rest/record/1415565600",HTML="https:/beacon.nist.gov/rest/record/1415565600"$ +$TX,"https:/beacon.nist.gov/rest/record/1415566560",HTML="https:/beacon.nist.gov/rest/record/1415566560"$ They chain the numbers so they +$TX,"https:/beacon.nist.gov/rest/record/1415568120",HTML="https:/beacon.nist.gov/rest/record/1415568120"$ cannot be tampered with. +/*****************************************************************************/ + +Cop tying shoe: (After drive-by shooting, God said kid was not innocent, LOL.) +$HC,"\"\""$ + +$TX,"WWW.OSDEV.ORG",HTML="http://www.osdev.org"$ +$TX,"Perfect Coin Toss",HTML="http://hackaday.com/2014/12/19/nist-randomness-beacon/"$ +$TX,"Top 100 Movies",HTML="http://www.afi.com/100years/movies10.aspx"$ +$TX,"Dr. David Pheanis",HTML="https://webapp4.asu.edu/directory/person/77201"$ +$TX,"KeyPeele#1",HTML="http://www.youtube.com/watch?v=Dd7FixvoKBw"$ +$TX,"KeyPeele#2",HTML="http://www.youtube.com/watch?v=VHG_Gv_zLY4"$ +$TX,"ThePrisoner",HTML="http://www.youtube.com/watch?v=HRPDO63rI1E"$ +$TX,"WestWorld",HTML="http://www.youtube.com/watch?v=LcL3eP0Hfy4"$ +$TX,"Picard:FourLights",HTML="http://www.youtube.com/watch?v=o_eSwq1ewsU"$ +$TX,"Dwight:NerdTorture",HTML="http://www.noob.us/humor/the-office-dwight-faces-nerd-torture-of-the-highest-form"$ +$TX,"AliG:Homosapiens",HTML="http://www.youtube.com/watch?v=eB5VXJXxnNU&t=2m20s"$ +$TX,"Dumb Guards",HTML="http://www.youtube.com/watch?v=OdKa9bXVinE"$ +$TX,"Mapping the Commodore 64",HTML="http://unusedino.de/ec64/technical/project64/mapping_c64.html"$ +Holy Grail: Lmq5PxHpLNw 1:28:27 +$TX,"ATA/ATAPI Spec",HTML="http://www.t13.org/Documents/UploadedDocuments/docs2007/D1532v1r4b-AT_Attachment_with_Packet_Interface_-_7_Volume_1.pdf"$ +$TX,"BBC",HTML="http://www.knpr.org/"$ +$TX,"BBC_Five_Live",HTML="http://www.bbc.co.uk/radio/player/bbc_radio_five_live"$ +$TX,"KNPR",HTML="http://www.knpr.org/"$ +$TX,"C64 Users Guide",HTML="http://www.commodore.ca/manuals/c64_users_guide/c64-users_guide.htm"$ +$TX,"C64 Programmers Reference Guide",HTML="http://www.commodore.ca/manuals/c64_programmers_reference/c64-programmers_reference.htm"$ + + +1) Strings, Opcode in Compiler +2) FizzBuzz +3) Negative displacements +4) Multicore +5) Preempt +6) Graphics diff --git a/Demo/AcctExample/Registry.CPP b/Demo/AcctExample/Registry.CPP new file mode 100644 index 0000000..b73b5a5 --- /dev/null +++ b/Demo/AcctExample/Registry.CPP @@ -0,0 +1,40 @@ +$TR-UL,"Adam"$ +$ID,2$$TR,"SysMsgFlags"$ +$ID,2$sys_msg_flags[0]=0xFB; +$ID,-2$$TR,"SysRegVer"$ +$ID,2$registry_version=3.030; +$ID,-2$$ID,-2$$TR-C-UL,"TempleOS"$ +$ID,2$$TR,"CircleTrace"$ +$ID,2$F64 best_score=4.9425; +$ID,-2$$TR,"DiningStars"$ +$ID,2$F64 best_score=9999.0000; +$ID,-2$$TR,"DunGen"$ +$ID,2$F64 best_score=20.5295; +$ID,-2$$TR,"CastleFrankenstein"$ +$ID,2$F64 best_score=33.8405; +$ID,-2$$TR,"ZoneOut"$ +$ID,2$F64 best_score=50.3318; +$ID,-2$$TR,"BugBird"$ +$ID,2$F64 best_score=18.2332; +$ID,-2$$TR,"TimeOut"$ +$ID,2$I64 best_score=21532; +$ID,-2$$TR,"RawHide"$ +$ID,2$F64 best_score=81.1088; +$ID,-2$$TR,"KeepAway"$ +$ID,2$I64 best_score0=0,best_score1=9999; +$ID,-2$$TR,"XCaliber"$ +$ID,2$I64 best_score=248; +I64 msg_flags=1; +$ID,-2$$TR,"Wenceslas"$ +$ID,2$F64 best_score=62.7035; +$ID,-2$$TR,"BomberGolf"$ +$ID,2$I64 best_score=32; +$ID,-2$$TR,"EagleDive"$ +$ID,2$I64 best_score=4; +$ID,-2$$TR,"Varoom"$ +$ID,2$F64 best_score=11.8623; +$ID,-2$$TR,"BlackDiamond"$ +$ID,2$I64 best_score=1; +$ID,-2$$TR,"TOS"$ +$ID,2$I64 tos_code_walk_thru=101,tos_after_egypt_in_action=46; +$ID,-2$$ID,-2$ \ No newline at end of file diff --git a/Demo/AcctExample/TOSCfg.CPP b/Demo/AcctExample/TOSCfg.CPP new file mode 100644 index 0000000..2e34f04 --- /dev/null +++ b/Demo/AcctExample/TOSCfg.CPP @@ -0,0 +1,84 @@ +#define SLOP BLK_SIZE +U0 TOSBootRescueDrv1() +{ + CBinFile *bfh=sys_boot_base-sizeof(CBinFile); + bfh(I64)+=bfh->file_size-1; + DefinePrint("TOS_BOOT_RESCUE_DRV","0x%X",CeilI64(SYS_KERNEL_END+SLOP,BLK_SIZE)); + DefinePrint("TOS_BOOT_RESCUE_DRV_END", "0x%X",FloorI64( + (BOOT_RAM_LIMIT-(BOOT_STK_SIZE+CD_BOOT_LOADER_SIZE))>>4<<4- + (bfh(I64)-SYS_KERNEL_END)-SLOP,BLK_SIZE)); + DefinePrint("CFG_BOOT_RESCUE_DRV_FILE","\"/Temp/BootRescueDrv.BIN.Z\""); +} TOSBootRescueDrv1; + +U0 TOSBootRescueDrv2() +{ + DefinePrint("CFG_BOOT_RESCUE_DRV","\"a10x%X\n0x%X\n\"",TOS_BOOT_RESCUE_DRV, + (TOS_BOOT_RESCUE_DRV_END-TOS_BOOT_RESCUE_DRV)/BLK_SIZE); + DefinePrint("CFG_BOOT_RESCUE_DRV_START","\"0x%X\"",TOS_BOOT_RESCUE_DRV); +} TOSBootRescueDrv2; + +U0 TOSInit() +{ + CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL; + CBlkDev *bd; + switch (tos_cid) { + case CID_DFT: + DefinePrint("CFG_RAM_DRVS","\"b1\nScale2Mem(2048,0x280000,4*1024*1024*1024)\n\""); + if (dsk.auto_mount_ide_cnt) { + //If AutoMount was successful, No need to manually mount in next compile + DefinePrint("CFG_HARD_DRVS","\"\""); + DefinePrint("CFG_CDROM_DRVS","\"\""); + } else { + + //These two are a crazy guess. ATA:IDE Primary ATAPI:IDE Secondary + DefinePrint("CFG_HARD_DRVS","\"c2s0x1F0\n0x3F4\n0\""); + DefinePrint("CFG_CDROM_DRVS","\"t3s0x170\n0\""); + + bd=Let2BlkDev(':'); + if (bd->type==BDT_ATAPI) { + ATARep(FALSE,,&root); + ATAIDDrvs(root,dsk.boot_drv_let,&ata_drv,&atapi_drv); + if (ata_drv) + DefinePrint("CFG_HARD_DRVS","\"c2p%d\n\"",ata_drv->num); + if (atapi_drv) + DefinePrint("CFG_CDROM_DRVS","\"t3p%d\n\"",atapi_drv->num); + } else { + try { + bd=Let2BlkDev('C'); + DefinePrint("CFG_HARD_DRVS","\"c2s0x%X\n0x%X\n%d\"", + bd->base0,bd->base1,bd->unit); + } catch + Fs->catch_except=TRUE; + try { + bd=Let2BlkDev('T'); + DefinePrint("CFG_CDROM_DRVS","\"t3s0x%X\n%d\"",bd->base0,bd->unit); + } catch + Fs->catch_except=TRUE; + } + } + DefinePrint("CFG_DSK_CACHE","\"Scale2Mem(0x80000,0x8000000)\n\""); + DefinePrint("TOS_HDS","\"CD\""); + DefinePrint("TOS_MASTER_BOOT_DRVS","\"C\""); + } +} TOSInit; + +U0 TOSDrvTextAttrSet() +{ + DrvTextAttrSet('C', WHITE <<4|BLUE); //Main + DrvTextAttrSet('D', WHITE <<4|RED); //Back-up + DrvTextAttrSet('A', BLUE <<4|BROWN); //Rescue + DrvTextAttrSet('B', BLUE <<4|YELLOW);//RAM + DrvTextAttrSet('T', LTGRAY<<4|BLUE); //CDROM +} TOSDrvTextAttrSet; + +#define TOS_ISO_NAME "B:/TempleOSCD.ISO" +#define TOS_DISTRO_DIR "B:/Distro" +#define CFG_OPTS "AutoMountIDE\nCT\n" +#define CFG_DBG_OPTS "AutoMountIDE\nCT"\ + "HeapInit\n130\nMemInit\n131\nVarInit\n132\n\n" +#define CFG_DBGZ_OPTS "AutoMountIDE\nCT"\ + "HeapInit\n0\nMemInit\n0\nVarInit\n0\n\n" +#define TOS_CFG "\n" CFG_RAM_DRVS CFG_CDROM_DRVS CFG_HARD_DRVS "\n" CFG_DSK_CACHE CFG_OPTS +#define TOS_CDROM_CFG "Tb1\n0x20000\nt3 \n\n\nAutoMountIDE\nCT\n" +#define TOS_CDROM_DBG_CFG "A" CFG_BOOT_RESCUE_DRV "b1\nScale2Mem(2048,0x40000)\n\n\n"\ + "DontProbe\nBootRescueDrv\n" "C:" CFG_BOOT_RESCUE_DRV_FILE "\n" CFG_BOOT_RESCUE_DRV_START "\n\n" diff --git a/Demo/AcctExample/TOSDistro.CPP b/Demo/AcctExample/TOSDistro.CPP new file mode 100644 index 0000000..80be0b9 --- /dev/null +++ b/Demo/AcctExample/TOSDistro.CPP @@ -0,0 +1,509 @@ +//The CFG defines are $LK,"::/Home/TOSCfg.CPP",A="FI:::/Demo/AcctExample/TOSCfg.CPP"$. + +U8 TOSGetDrv() +{ + I64 result; + "Drive (%s):",TOS_HDS; + result=ToUpper(GetChar); + '\n'; + return result; +} + +U0 TOSMakeOSDrvBootInstall(U8 drv_let) +{ + drv_let=ToUpper(drv_let); + Auto(TOS_CFG); + MakeOSDrvBootInstall(drv_let); + if (StrOcc(TOS_MASTER_BOOT_DRVS,drv_let)) + MasterBootIntall(drv_let); +} + +U0 TOSCopyDrv(U8 src,U8 dst) +{ + U8 buf_s[128],buf_d[128]; + src=ToUpper(src); + dst=ToUpper(dst); + + Fmt(dst,,FALSE,DVT_FAT32); + + StrPrint(buf_s,"%c:/",src); + StrPrint(buf_d,"%c:/",dst); + CopyTree(buf_s,buf_d); + + DocClear; + Drv(dst); + TOSMakeOSDrvBootInstall(dst); +} + +U0 TOSPromptAndCopyDrv() +{ + I64 src,dst; + "$$RED$$\nCopy Src Drive:\n$$FG$$"; + src=TOSGetDrv; + "$$RED$$\nCopy Dst Drive:\n$$FG$$"; + dst=TOSGetDrv; + TOSCopyDrv(src,dst); +} + +public U0 CursorRemFile(U8 *filename) +{ + CDoc *doc; + doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); + DocWrite(doc); + DocDel(doc); +} +public U0 CursorRem(U8 *files_find_mask="*") +{ + I64 fuf_flags=0; + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+T+f+F+O"); + CDirEntry *tempde=FilesFind(files_find_mask,fuf_flags),*tempde1=tempde; + while (tempde) { + CursorRemFile(tempde->full_name); + Touch(tempde->full_name,"",,tempde->datetime); + tempde=tempde->next; + } + DirTreeDel(tempde1); +} + +U0 UncollapseFile(U8 *filename,I64 *) +{ + CDoc *doc=DocRead(filename,DOCF_NO_CURSOR); + DocCollapse(FALSE,doc); + DocWrite(doc); + DocDel(doc); +} +U0 Uncollapse(U8 *files_find_mask="*",U8 *fu_flags=NULL) +{ + I64 fuf_flags=0; + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+T+O"); + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); + CDirEntry *tempde=FilesFind(files_find_mask,fuf_flags),*tempde1=tempde; + while (tempde && !Bt(&fuf_flags,FUf_CANCEL)) { + UncollapseFile(tempde->full_name,&fuf_flags); + Touch(tempde->full_name,"",,tempde->datetime); + tempde=tempde->next; + } + DirTreeDel(tempde1); +} + +public U0 CopySongs(U8 threshold='7') +{ + CDoc *s; + CDocEntry *doc_e; + CDirEntry *tempde=FilesFind("::/Home/Psalmody/*.CPP*",FUF_CLUSTER_ORDER),*tempde1=tempde; + DelTree("/Apps/Psalmody/Examples"); + MkDir("/Apps/Psalmody/Examples"); + while (tempde) { + s=DocRead(tempde->full_name); + doc_e=s->root.next; + if (doc_e->type_u8==DOCT_TEXT && doc_e->tag[2]>=threshold) + Copy(tempde->full_name,"/Apps/Psalmody/Examples"); + tempde=tempde->next; + } + DirTreeDel(tempde1); +} + +U0 DistroPrep() +{ + Del("/Demo/WebLogExample/WebLogRep.TXT*"); + Del("/Demo/ReverseFileExample/PoemForeward.TXT*"); + DelTree("/Home/*Temp.TXT.Z"); + CopySongs; + + DelTree("/Temp"); + MkDir("/Temp"); + MkDir("/Temp/ScreenShots"); + + Touch("/PersonalMenu.TXT.Z","+T"); + Touch("/Home/PersonalMenu.TXT.Z","+T"); + + DelTree("/Demo/AcctExample"); + CopyTree("/Home","/Demo/AcctExample"); + DelTree("/Demo/AcctExample/Archive"); + DelTree("/Demo/AcctExample/Budget"); + DelTree("/Demo/AcctExample/Psalmody"); + DelTree("/Demo/AcctExample/Wb2"); + Del("/Demo/AcctExample/Test*"); + +//Once in a while, do these: +// SortHeaders; +// DocOpt("/*"); +// DblSpaceScan("/*"); + + CursorRem("/*"); + DelTree("/Demo/*.BI*"); + S2T("/*","+r+S"); + DocOpt("/*"); + Move(ACD_DEF_FILENAME,ACD_DEF_FILENAME_Z); +} + +U0 MakeBootRescueDrvFile() +{ + try + Let2Drv('A'); + catch { + Fs->catch_except=TRUE; + Auto(CFG_BOOT_RESCUE_DRV "\n"); + Mount; + } + CBlkDev *bd=Let2BlkDev('A'); + Fmt('A',,FALSE,DVT_REDSEA); + + MkDir("A:/Compiler"); + Copy("C:/Compiler/Compiler.BIN.Z", "A:/Compiler"); + Copy("C:/Compiler/OpCodes.TXT.Z", "A:/Compiler"); + Copy("C:/Compiler/CompilerA.HPP.Z", "A:/Compiler"); + Copy("C:/Compiler/CompilerB.HPP.Z", "A:/Compiler"); + + MkDir("A:/Kernel"); + Copy("C:/Kernel/*.HPP*", "A:/Kernel"); + CopyTree("C:/Kernel/Dsk", "A:/Kernel/Dsk"); + + Copy("C:/Home/Wb2/Files/DbgAdam.CPP.Z","A:/Adam.CPP.Z"); + + MkDir("A:/Adam"); + Copy("C:/Adam/AExts.HPP.Z", "A:/Adam"); + Copy("C:/Adam/AMath.CPP.Z", "A:/Adam"); + Copy("C:/Adam/Training.CPP.Z","A:/Adam"); + Copy("C:/Adam/AUtils.CPP.Z", "A:/Adam"); + Copy("C:/Adam/AMathODE.CPP.Z","A:/Adam"); + + FileWrite("C:" CFG_BOOT_RESCUE_DRV_FILE,bd->RAM_dsk,(bd->max_blk+1)<hash_table); + Who; + if (doc=DocPut) { + st=StrNew(doc->filename.name); + StrCpy(doc->filename.name,"D:/Wb/Home/Wb2/SymsAlpha.TXT.Z"); + DocWrite(doc); + StrCpy(doc->filename.name,st); + Free(st); + } + DocClear; + DocMax; + Who("+m"); + if (doc=DocPut) { + st=StrNew(doc->filename.name); + StrCpy(doc->filename.name,"D:/Wb/Home/Wb2/SymsAddress.TXT.Z"); + DocWrite(doc); + StrCpy(doc->filename.name,st); + Free(st); + } + DocClear; +} + +I64 MakeLineRepFile() +{ + U8 *st; + CDoc *doc; + I64 result,official; + CDocEntry *tree_branch,*start_indent,*end_indent; + + DocClear; + Drv('C'); + DistroPrep; + + Cd("C:/"); + DelTree("B:/TOS"); + CopyTree("C:/Home","B:/TOS"); + DelTree("C:/Home"); + + DocMax; + DocClear; + result=LineRep; + if (doc=DocPut) { + st=StrNew(doc->filename.name); + StrCpy(doc->filename.name,"B:/TOS/Wb2/LineRep.TXT.Z"); + DocWrite(doc); + StrCpy(doc->filename.name,st); + Free(st); + } + DocClear; + official=LineRep("C:/*","-r")+ + LineRep("C:/Adam/*")+ + LineRep("C:/Compiler/*","-S+T")+ + LineRep("C:/Kernel/*"); + DocClear; + CopyTree("B:/TOS","C:/Home"); + DelTree("B:/TOS"); + + doc=DocRead("C:/Adam/ADefine.CPP.Z"); + DocTreeFind(doc,"LineRep",&tree_branch,&start_indent,&end_indent); + DocCut(doc,start_indent->next,end_indent->last); + doc->cur_entry=start_indent->next; + doc->cur_data_col=0; + + DocPrint(doc,"DefinePrint(\"DD_TEMPLEOS_LOC\",\"%,d\");\n",result); + DocPrint(doc,"DefinePrint(\"DD_TEMPLEOS_LOC_OFFICIAL\",\"%,d\");\n",official); + + DefinePrint("DD_TEMPLEOS_LOC","%,d",result); + DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","%,d",official); + + DocWrite(doc); + DocDel(doc); + + "Total LOC:%12,d\n\n",result; + return result; +} + +U0 TOSDistroPrep() +{/*This is the TempleOS internal distro. Only run this on a +virtual machine, not bare metal hardware because it's settings could cause +problems. The hard drive must be partitioned. Install Std Distro, then +install this on top. +>$LK,"TSInstall",A="FF:::/Demo/AcctExample/TOSDistro.CPP,TSInstall"$; +>$LK,"TSUpgrade",A="FF:::/Demo/AcctExample/TOSDistro.CPP,TSUpgrade"$; +See $LK,"MakeDistrosAndBackUp",A="FF:::/Demo/AcctExample/TOSDistro.CPP,MakeDistrosAndBackUp"$() to reproduce the ISO's in $FG,4$E:/Wb$FG$. It makes this +website, too. +*/ + Drv('C'); + DistroPrep; + Auto(TOS_CDROM_CFG); + MakeOSDrvBootInstall('C','T'); + DelTree(TOS_DISTRO_DIR); + CopyTree("C:/",TOS_DISTRO_DIR "/"); +} +U0 MakeTOSDistro() +{ + TOSDistroPrep; + CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + DefinePrint("DD_TEMPLEOSTS_SIZE", + "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - T.S. Company Internal Distro (%0.1f MB)", + 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); + Drv('C'); +} + + +U0 DbgDistroPrep() +{/*This is a debug distro. The CDROM bootloader uses BIOS INT 0x13 0x42 to +load Kernel.BIN.C which has been modified to also hold a small RAM drive +(Drive A) that fits in the low 640k. The bootloader starts in real mode +and the kernel changes to long, 64-bit mode. It loads the 64-bit compiler +and assembler, compiles some, but not all, of the normal start-up scripts +and drops you off at the $LK,"Dbg",A="MN:Dbg"$ command-line where you can JIT compile, +use $LK,"EdLite",A="MN:EdLite"$ on RAM files, and use many of the other normal Kernel commands. +I could not fit all the normal start-up scripts into the small RAM drive, +so you do not have the window manager or normal document framework. You +should have many Gig of RAM to play with with RAM Drive B, a high memory +RAM drive, but you have only those few files. When I generate this distro, +I call $LK,"MakeBootDrvFile",A="FF:::/Demo/AcctExample/TOSDistro.CPP,MakeBootRescueDrvFile"$. +*/ + Drv('C'); + DistroPrep; + MakeBootRescueDrvFile; + Auto(TOS_CDROM_DBG_CFG); + MakeOSDrvBootInstall('C','T'); + DelTree(TOS_DISTRO_DIR); + CopyTree("C:/",TOS_DISTRO_DIR "/"); + Del("C:" CFG_BOOT_RESCUE_DRV_FILE); +} +U0 MakeDbgDistro() +{ + DbgDistroPrep; + CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + DefinePrint("DD_TEMPLEOSDBG_SIZE", + "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)", + 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); + Drv('C'); +} + +U0 StdDistroPrep() +{ + Drv('C'); + DistroPrep; + Auto(STD_DISTRO_CDROM_CFG); + MakeOSDrvBootInstall('C','T'); + DelTree(TOS_DISTRO_DIR); + CopyTree("C:/",TOS_DISTRO_DIR "/"); + DelTree(TOS_DISTRO_DIR "/Home"); + MkDir(TOS_DISTRO_DIR "/Home"); + Del(TOS_DISTRO_DIR "/0000Boot/OldMBR.BIN.C"); + Del(TOS_DISTRO_DIR "/0000Boot/BootMHD2.BIN.C"); +} +U0 MakeStdDistro() +{ + StdDistroPrep; + CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + Drv('C'); +} + +U0 LiteDistroPrep() +{/*Missing: Dictionary, Bible and TOSZ Utility. Still 100% OpenSource. +Includes: x86_64 64BitMultiCoredKernel, 64BitCompiler, Assembler, +Unassembler, Debugger, Editor, VGAGraphics, Tools, BootLoaders, +Keyboard&Mouse, HardDrives, FAT32, Partitioner, CD/DVD, ISO9660FileCreator, +FileManager, WindowManager, PCSpeaker, Apps, Games, God-Oracle-App, Hymns, +Demos, Documentation. +*/ + StdDistroPrep; + DelTree(TOS_DISTRO_DIR "/Linux"); + Del(TOS_DISTRO_DIR "/Adam/AutoComplete/ACDefs.DAT*"); + Del(TOS_DISTRO_DIR "/Misc/PCIDevices.TXT.Z"); + Del(TOS_DISTRO_DIR "/Misc/Bible.TXT.Z"); +} +U0 MakeLiteDistro() +{ + LiteDistroPrep; + CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + DefinePrint("DD_TEMPLEOSLITE_SIZE", + "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - Lite Distro (%0.1f MB)", + 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); + Drv('C'); +} + +U0 UltraDistroPrep() +{/*Missing: Apps, Demos, Dictionary, Bible and TOSZ Utility. Still 100% OpenSource. +Includes: x86_64 64BitMultiCoredKernel, 64BitCompiler, Assembler, +Unassembler, Debugger, Editor, VGAGraphics, Tools, BootLoaders, +Keyboard&Mouse, HardDrives, FAT32, Partitioner, CD/DVD, ISO9660FileCreator, +FileManager, WindowManager, PCSpeaker, Documentation. +*/ + LiteDistroPrep; + DelTree(TOS_DISTRO_DIR "/Apps"); + DelTree(TOS_DISTRO_DIR "/Demo"); + DelTree(TOS_DISTRO_DIR "/Misc/Tour"); + Del(TOS_DISTRO_DIR "/Adam/AutoComplete/ACWords.DAT*"); + Del(TOS_DISTRO_DIR "/Adam/God/Vocab.TXT.Z"); + Del(TOS_DISTRO_DIR "/Misc/OSTestSuite.CPP.Z"); +} +U0 MakeUltraDistro() +{ + UltraDistroPrep; + CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + DefinePrint("DD_TEMPLEOSULTRA_SIZE", + "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - UltraLite Distro (%0.1f MB)", + 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); + Drv('C'); +} + +U0 TOSWebFile(U8 *name) +{ + U8 *name2; + CDirEntry de; + if (FileFind(name,&de)) { + Free(de.full_name); + "File:%s\n",name; + UncollapseFile(name,NULL); + Touch(name,"",,de.datetime); + name2=ChgExt(name,"html"); + ToHtml(name,name2, + "The Temple Operating System\n" + "\n" + ); + Touch(name2,"",,de.datetime); + Free(name2); + } +} + +U0 MakeWebSite() +{ + CDirEntry *tempde,*tempde1; + DocClear; + Cd("D:/Wb"); + DelTree("D:/Wb/Home/Archive"); + DelTree("D:/Wb/Home/Budget"); + DelTree("D:/Wb/Home/Psalmody"); + Del("D:/Wb/Home/*"); + Touch("D:/Wb/Home/Wb2/index.TXT.Z","",,Now); + Touch("D:/Wb/Home/Wb2/Downloads.TXT.Z","",,Now); + Touch("D:/Wb/Home/Wb2/TempleOS.TXT.Z","",,Now); + tempde=tempde1=FilesFind("*",FUF_RECURSE|FUF_JUST_FILES|FUF_JUST_TXT|FUF_CLUSTER_ORDER); + while (tempde) { + TOSWebFile(tempde->full_name); + tempde=tempde->next; + } + DirTreeDel(tempde1); + Drv('C'); +} + +U0 FreshenWebDir(U8 *dirname) +{//No recurse + CDirEntry *tempde,*tempde1; + U8 *src,*dst; + + src=MStrPrint("D:/Wb%s/*",dirname); + Del(src); + Free(src); + src=MStrPrint("C:%s/*",dirname); + dst=MStrPrint("D:/Wb%s",dirname); + Copy(src,dst); + Free(src); + Free(dst); + + src=MStrPrint("D:/Wb%s/*",dirname); + tempde=tempde1=FilesFind(src,FUF_JUST_FILES|FUF_JUST_TXT|FUF_CLUSTER_ORDER); + while (tempde) { + TOSWebFile(tempde->full_name); + tempde=tempde->next; + } + DirTreeDel(tempde1); +} + +U0 MakeWebSitePartial() +{ + FreshenWebDir("/Home/Wb2"); + Drv('C'); +} + +U0 UpdateISODocDefines() +{ + DefinePrint("DD_TEMPLEOSCD_SIZE", + "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", + 0.1*(10*Size("D:/Wb/TempleOSCD.ISO","+s")/1024/1024)); + DefinePrint("DD_TEMPLEOSCD_K_SIZE", + "%d KB",Size("D:/Wb/TempleOSCD.ISO","+s")/1024); + DefinePrint("DD_TEMPLEOSULTRA_SIZE", + "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.1f MB)", + 0.1*(10*Size("D:/Wb/TempleOSUltra.ISO","+s")/1024/1024)); + DefinePrint("DD_TEMPLEOSULTRA_K_SIZE", + "%d KB",Size("D:/Wb/TempleOSUltra.ISO","+s")/1024); +} + +UpdateISODocDefines; + +public U0 MakeDistrosAndBackUp() +{ + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + progress4=*progress4_desc=0; + progress4_max=13; + AutoComplete; + WinMax; + WinBorder; + ChkAll; progress4++; + + MakeLineRepFile; progress4++; + TOSCopyDrv('C','D'); progress4++; + DelTree ("D:/Wb"); progress4++; + CopyTree("C:/","D:/Wb"); progress4++; + DocClear; + + MakeStdDistro; progress4++; + DocClear; + Copy(TOS_ISO_NAME,"D:/Wb/TempleOSCD.ISO"); progress4++; + + MakeUltraDistro; progress4++; + DocClear; + Copy(TOS_ISO_NAME,"D:/Wb/TempleOSUltra.ISO"); progress4++; + + UpdateISODocDefines; + + Cd("C:/"); + if (LinkChk) + throw; + progress4++; + MakeSymFiles; progress4++; + MakeWebSite; progress4++; + + Drv('C'); + ChkAll; progress4++; + progress4=progress4_max=0; + SettingsPop; +} diff --git a/Demo/AcctExample/TSHolySpirit.CPP b/Demo/AcctExample/TOSHolySpirit.CPP similarity index 71% rename from Demo/AcctExample/TSHolySpirit.CPP rename to Demo/AcctExample/TOSHolySpirit.CPP index 88bc06d..48062d4 100644 --- a/Demo/AcctExample/TSHolySpirit.CPP +++ b/Demo/AcctExample/TOSHolySpirit.CPP @@ -37,10 +37,11 @@ public U8 *FileNameNumNext(U8 *files_find_mask,U8 *fmt) U0 DCImgWrite(CDC *dc) { - U8 *st=FileNameNumNext("::" TS_BLOG_DIR "/Img*","::" TS_BLOG_DIR "/Img%03d.BMP"),*st2; - st2=MStrPrint("http://www.templeos.org/Wb%s",st+2); - BMPFileWrite(st,dc); - Free(st); + U8 *st1=FileNameNumNext("::/Home/Wb2/Imgs/Img*", + "::/Home/Wb2/Imgs/Img%03d.BMP"), + *st2=MStrPrint("http://www.templeos.org/Wb%s",st1+2); + BMPWrite(st1,dc); + Free(st1); "$$HC,\"\\\"\\\"\"$$\n",st2,dc->width,dc->height; Free(st2); } @@ -61,7 +62,7 @@ U0 BlogScreenShot() DocCursor(old_cursor); } -U8 *WebBookMarks(U8 *filename="HOME/Archive/Bookmarks.html") +U8 *WebBookMarks(U8 *filename="::/Home/Archive/Bookmarks.html") { U8 *st; CDocEntry *doc_e; @@ -90,6 +91,45 @@ U8 *WebBookMarks(U8 *filename="HOME/Archive/Bookmarks.html") return st; } +U8 *TopMoviesRead(U8 *filename="C:/Home/Wb2/Files/Movies.TXT.Z", + I64 line) +{ + U8 *result=NULL; + CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT_WITH_TABS); + if (DocLineNumGoTo(doc,line-1) && doc->cur_entry->type_u8==DOCT_TEXT) + result=StrNew(doc->cur_entry->tag); + DocDel(doc); + return result; +} + +U8 *TopMoviesWrite(U8 *filename="C:/Home/Wb2/Files/Movies.TXT.Z", + I64 line,U8 *st) +{ + U8 *result=NULL; + CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT_WITH_TABS); + if (DocLineNumGoTo(doc,line-1)) { + if (doc->cur_entry->type_u8==DOCT_TEXT) { + Free(doc->cur_entry->tag); + doc->cur_entry->tag=StrNew(st); + } else + DocPrint(doc,"%s",st); + DocTop(doc); + DocWrite(doc); + } + DocDel(doc); + return result; +} + +class CTopMoviesForm +{ + U8 tag[136]; + U8 special[136]; + I64 timestamp; + I64 cert fmtstr "$$DA,32,A=\"Movie #1-100 :%d\"$$\n"; + I64 min; + I64 sec; +}; + class CWebBookMarkForm { U8 tag[136] fmtstr "$$DA-P,135,A=\"Tag Text :%s\"$$\n"; @@ -120,6 +160,16 @@ class CYouTubeForm I64 sec fmtstr "$$DA,32,A=\"Seconds :%d\"$$\n"; }; +class CTopMoviesYouTubeForm +{ + U8 tag[136] fmtstr "$$DA-P,135,A=\"Movie :%s\"$$\n"; + U8 special[136] fmtstr "$$DA-P,135,A=\"SerialNum:%s\"$$\n"; + I64 timestamp; + I64 cert; + I64 min fmtstr "$$DA,32,A=\"Minutes :%d\"$$\n"; + I64 sec fmtstr "$$DA,32,A=\"Seconds :%d\"$$\n"; +}; + class CImgurForm { U8 tag[136]; @@ -208,10 +258,9 @@ U0 MyBibleLines(U8 *st,I64 num_lines,I64 radix,Bool modulo,Bool plus_one) i=Str2I64(st,radix); if (modulo) { - DocPrint(doc_out,"$TX,"(Modulo is just remainder.)",HTML="http://en.wikipedia.org/wiki/Modulo_operation"$\n"); if (radix==16) DocPrint(doc_out,"0x%s-->",st); - DocPrint(doc_out,"(%d mod %d)",i,ST_BIBLE_LINES-(num_lines-1)); + DocPrint(doc_out,"(%d remainder when divided by %d)",i,ST_BIBLE_LINES-(num_lines-1)); start=i%(ST_BIBLE_LINES-(num_lines-1)); } else { if (radix==16) @@ -223,7 +272,7 @@ U0 MyBibleLines(U8 *st,I64 num_lines,I64 radix,Bool modulo,Bool plus_one) start++; DocPrint(doc_out,"+1"); } - DocPrint(doc_out,"-->Line:%d\n\n",start); + DocPrint(doc_out,"-->Line:%d\n",start); verse=BibleLine2Verse(start); DocPrint(doc_out,"$TX,"KingJamesBible",HTML="http://www.templeos.org/files/BIBLE.TXT"$ (%s) God says...\n$$RED$$",verse); @@ -259,7 +308,7 @@ U0 MyBibleLines(U8 *st,I64 num_lines,I64 radix,Bool modulo,Bool plus_one) } } -#define NIST_TIME_OFFSET 17586 +#define NIST_TIME_OFFSET 21082 public U0 SyncNIST() { @@ -276,22 +325,21 @@ public U0 SyncNIST() } } -U0 FillInMyURL() +U0 InsMyURL() { U8 *tag,*st,*st2; CWebBibleForm *url=CAlloc(sizeof(CWebBibleForm)); url->timestamp= FloorI64((Now-Str2Date("1/1/1970"))/CDATE_FREQ+NIST_TIME_OFFSET,60); switch (PopUpPickLst("NISTBeacon\0WebBible\0YouTube\0Imgur\0Wikipedia\0RandomNumbers.info\0" - "Random.org\0VirtualNotary\0Nist\0HotBits\0GenerateData\0WebBookMark\0")) { + "Random.org\0VirtualNotary\0Nist\0HotBits\0GenerateData\0WebBookMark\0" + "Roulette\0Movie\0")) { case 0: if (DocFormDo(url(CRandHexBeaconForm *))) { - "$$TX,\"National Institute of Standards Public Randomness Beacon\"," - "HTML=\"http://beacon.nist.gov/home\"$$\n\n" - "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n\n"; - tag=MStrPrint("http://beacon.nist.gov/rest/record/%d",url->timestamp); - "$$TX,\"%Q\",HTML=\"%Q\"$$\n\n",tag,tag; + "$$TX,\"Guidelines for Talking with God.\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag=MStrPrint("https:/beacon.nist.gov/rest/record/%d",url->timestamp); + "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; Free(tag); MyBibleLines(url->special,20,16,TRUE,TRUE); } @@ -343,30 +391,30 @@ U0 FillInMyURL() case 5: if (DocFormDo(url(CRandDecForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://www.randomnumbers.info"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n\n",tag,tag; + "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,10,FALSE,TRUE); } break; case 6: if (DocFormDo(url(CRandDecForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://www.random.org"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n\n",tag,tag; + "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,10,FALSE,FALSE); } break; case 7: if (DocFormDo(url(CRandCertForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://virtual-notary.org"; "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; tag="Here is the certificate"; st=MStrPrint("http://www.templeos.org/Certs/virtual-notary-cert-randomnum-%d.p12",url->cert); - "\n$$TX,\"%Q: %d\",HTML=\"%Q\"$$.\n\n",tag,url->cert,st; + "\n$$TX,\"%Q: %d\",HTML=\"%Q\"$$.\n",tag,url->cert,st; Free(st); MyBibleLines(url->special,20,10,FALSE,FALSE); } @@ -374,27 +422,27 @@ U0 FillInMyURL() case 8: if (DocFormDo(url(CRandHexForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://qrng.anu.edu.au/NIST.php"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n\n",tag,tag; + "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,16,TRUE,TRUE); } break; case 9: if (DocFormDo(url(CRandHexForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="https://www.fourmilab.ch/hotbits/secure_generate.html"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n\n",tag,tag; + "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,16,TRUE,TRUE); } break; case 10: if (DocFormDo(url(CRandDecForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://www.generatedata.com"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n\n",tag,tag; + "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,10,FALSE,FALSE); } break; @@ -407,6 +455,44 @@ U0 FillInMyURL() Free(st); } break; + case 12: + if (DocFormDo(url(CRandDecForm *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="https://www.dublinbet.com/casino_game.html?mode=demo&game=136#gameId=136"; + "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; + MyBibleLines(url->special,20,10,FALSE,FALSE); + } + break; + case 13: + if (DocFormDo(url(CTopMoviesForm *)) && (st=TopMoviesRead(,url->cert*2))) { + StrCpy(url->tag,st); + Free(st); + if (!(st=TopMoviesRead(,url->cert*2+1))||!*st) { + Free(st); + if (DocFormDo(url(CTopMoviesYouTubeForm *)) && *url->special) { + if (url->min || url->sec) + st=MStrPrint("%s&hl=enUS&start=%d",url->special,url->min*60+url->sec); + else + st=StrNew(url->special); + TopMoviesWrite(,url->cert*2+1,st); + } else + st=NULL; + } + "God's response:\n" + "$$TX,\"Top 100 Movies\",HTML=\"http://www.afi.com/100years/movies10.aspx\"$$\n" + "#%s\n",url->tag; + if (st) { + "$$HC,\"\"$$\n",st,st; + Free(st); + } + } + break; } Free(url); } @@ -434,7 +520,7 @@ public U0 GodBooksPassage(U8 *files_find_mask,I64 len=512) st=FileRead(tempm->full_name); st2=st+(tempm->user_data+1-len)+i; st2[len]=0; - "%s\n",st2; + "%s\n\n%s\n",tempm->full_name,st2; Free(st); } } @@ -442,3 +528,6 @@ public U0 GodBooksPassage(U8 *files_find_mask,I64 len=512) } DirTreeDel(tempm1); } + + +//GodInit("C:/Home/Wb2/Files/Words/Happy.TXT*"); diff --git a/Demo/AcctExample/TOSIDComputer.CPP b/Demo/AcctExample/TOSIDComputer.CPP new file mode 100644 index 0000000..b34584b --- /dev/null +++ b/Demo/AcctExample/TOSIDComputer.CPP @@ -0,0 +1,63 @@ +//This file has handy functions used to identify which machine +//is which in your personal collection of computers. + +Bool IsDrvVMware(U8 drv_let) +{ + Bool result=FALSE; + U8 *m=NULL; + try + if ((m=DrvModelNum(drv_let)) && + !MemCmp(m,"VMware",6)) + result=TRUE; + catch + Fs->catch_except=TRUE; + Free(m); + return result; +} + +I64 DrvMaxBlk(U8 drv_let) +{ + I64 result=0; + CBlkDev *bd; + try { + if (bd=Let2BlkDev(drv_let)) + result=bd->max_blk; + } catch + Fs->catch_except=TRUE; + return result; +} + +I64 IsDrvATAPI(U8 drv_let) +{ + Bool result=FALSE; + CBlkDev *bd; + try if ((bd=Let2BlkDev(drv_let)) && + bd->type==BDT_ATAPI) + result=TRUE; + catch + Fs->catch_except=TRUE; + return result; +} + +Bool ChkDrvModelSerial(U8 drv_let,U8 *model,U8 *serial) +{ + Bool result; + U8 *m=NULL,*s=NULL; + try { + m=DrvModelNum(drv_let); + s=DrvSerialNum(drv_let); + } catch { + Free(m); Free(s); + m=NULL; s=NULL; + Fs->catch_except=TRUE; + } + if (m && s && !StrCmp(m,model) && !StrCmp(s,serial)) + result=TRUE; + else + result=FALSE; + Free(m); Free(s); + return result; +} + +#define CID_DFT 0 +I64 tos_cid=CID_DFT; diff --git a/Demo/AcctExample/TOSMisc.CPP b/Demo/AcctExample/TOSMisc.CPP new file mode 100644 index 0000000..17703c4 --- /dev/null +++ b/Demo/AcctExample/TOSMisc.CPP @@ -0,0 +1,301 @@ +#define VIDEO_FRAME_RATE 8 + +#define FG_JUST_AUDIO 0 +#define FG_BOOT_DRV 1 +#define FG_RAM_DRV 2 +I64 fg_mode=FG_JUST_AUDIO; +Bool fg_on =FALSE; + +U0 FrameGrabberTask(I64) +{//ffmpeg -r 8 -i VID%05d.BMP -y Movie.avi + I64 frame_num=0; + U8 buf[136],buf2[136]; + F64 end_time=tS; + Silent; //no output to screen + if (fg_mode==FG_RAM_DRV) { + MkDir("B:/Temp/ScreenShots"); + while (fg_on) { + StrPrint(buf,"B:/Temp/ScreenShots/VID%05d.BMP",frame_num++); + StrCpy(buf2,buf); + BMPCaptureScreen(buf); + while (TRUE) { + end_time+=1.0/VIDEO_FRAME_RATE; + if (end_time3.0) { + last_time=tS; + if (fg_on) { + fg_on=FALSE; + Snd(0); + wall->record=snd.record=FALSE; + Sleep(1000); + CopyVideo; + } else { + fg_on=TRUE; + if (fg_mode!=FG_JUST_AUDIO) + Spawn(&FrameGrabberTask,NULL,"Frame Grabber"); + wall->record=snd.record=TRUE; + Snd(0); + } + } +} + +public U0 JukeLines(I64 start_line,I64 end_line) +{ + AutoComplete; + if (!fg_on) + FrameGrabberToggle; + JukeSongsPuppet("::/Apps/Psalmody/Examples",,start_line*5,end_line*5); + if (fg_on) + FrameGrabberToggle; +} + +public U0 ChkAll() +{ + U8 *ptr=TOS_HDS; + while (*ptr) + ChkDsk(*ptr++); +} + +public CDoc *DC2Doc(CDC *dc,I64 dx=0,I64 dy=0,I64 *_total_score=NULL) +{ + U8 byte_bit_cnts[256]; + I64 i,j,*ptr,row,col,ch,best_ch,score,best_score,cur_char_image,diff_image,total_score=0; + CDoc *doc=DocNew; + + MemSet(byte_bit_cnts,0,sizeof(byte_bit_cnts)); + for (i=0;i<256;i++) + for (j=0;j<7;j++) + if (Bt(&i,j)) + byte_bit_cnts[i]++; + + for (row=0;rowheight/FONT_HEIGHT;row++) { + for (col=0;colwidth/FONT_WIDTH;col++) { + + cur_char_image=0; + for (i=0;ifilename.name,out_name); + DocWrite(doc); + } + DocDel(doc); + } + } + Free(in_name); + Free(out_name); +} + +U0 DblSpaceScanFile(U8 *filename) +{ + CDoc *doc=DocRead(filename); + I64 i; + CDocEntry *doc_e=doc->root.next; + while (doc_e!=doc) { + if (doc_e->type_u8==DOCT_NEW_LINE && + doc_e->next->type_u8==DOCT_NEW_LINE && + doc_e->next->next->type_u8==DOCT_NEW_LINE) { + i=0; + while (doc_e->type_u8==DOCT_NEW_LINE) { + i++; + doc_e=doc_e->next; + } + "%02d:",i; + PutFileLink(doc->filename.name,doc_e->y); + '\n'; + } else + doc_e=doc_e->next; + } + DocDel(doc); +} + +U0 DblSpaceScanLst(CDirEntry *tempde) +{ + CDirEntry *tempde1; + while (tempde) { + tempde1=tempde->next; + if (tempde->attr & RS_ATTR_DIR) { + if (tempde->sub) { + "Scanning Directory: %s\n",tempde->full_name; + DblSpaceScanLst(tempde->sub); + } + } else + DblSpaceScanFile(tempde->full_name); + DirEntryDel(tempde); + tempde=tempde1; + } +} + +public U0 DblSpaceScan(U8 *files_find_mask="*",U8 *fu_flags=NULL) +{ + I64 f=0; + ScanFlags(&f,Define("ST_FILE_UTIL_FLAGS"),"+r+T"); + ScanFlags(&f,Define("ST_FILE_UTIL_FLAGS"),fu_flags); + DblSpaceScanLst(FilesFind(files_find_mask,f)); +} + +AcctRegSetDftEntry("TempleOS/TOS", + "I64 tos_code_walk_thru=1,tos_after_egypt_in_action=1;\n"); +AcctRegExeBranch("TempleOS/TOS"); + +U0 TOSRegInit() +{ + DefinePrint("DD_CODE_WALK_THRU","Episode #%d",tos_code_walk_thru); + DefinePrint("DD_AFTER_EGYPT_IN_ACTION","Episode #%d",tos_after_egypt_in_action); +} TOSRegInit; + +U0 TOSRegWrite() +{ + AcctRegWriteBranch("TempleOS/TOS", + "I64 tos_code_walk_thru=%d,tos_after_egypt_in_action=%d;\n", + tos_code_walk_thru,tos_after_egypt_in_action); + TOSRegInit; +} + +class CYouTubeForm2 +{ + U8 special[136] fmtstr "$$DA-P,135,A=\"SerialNum:%s\"$$\n"; +}; + +U8 *TOSYouTube() +{ + U8 *result; + CYouTubeForm2 *url=CAlloc(sizeof(CYouTubeForm2)); + if (DocFormDo(url(CYouTubeForm2 *)) && *url->special) + result=MStrPrint("$$HC,\"\"$$", + url->special,url->special); + else + result=NULL; + Free(url); + return result; +} + +U0 AfterEgyptInAction() +{ + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + Adam("GodInit(\"/Adam/God/Vocab.TXT*\");"); + AutoComplete; + WinMax; + WinBorder; + if (!fg_on) + PopUp("Sleep(50);FrameGrabberToggle;"); + Ed("::/Home/Archive/AfterEgypt.TXT.Z"); + Msg(MSG_KEY_DOWN_UP,CH_SPACE,0x3900000039); // + ExeFile("::/Apps/AfterEgypt/Run"); + SettingsPop; + tos_after_egypt_in_action++; + TOSRegWrite; +} + +U0 CodeWalkThru() +{ + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + AutoComplete; + WinMax; + WinBorder; + if (!fg_on) + PopUp("Sleep(50);FrameGrabberToggle;"); + Ed("::/Home/Archive/RandomCode.TXT.Z"); + SettingsPop; + Msg(MSG_KEY_DOWN_UP,'b',0x83000000830); // + tos_code_walk_thru++; + TOSRegWrite; +} diff --git a/Demo/AcctExample/TSAdam.CPP b/Demo/AcctExample/TSAdam.CPP deleted file mode 100644 index d84698e..0000000 --- a/Demo/AcctExample/TSAdam.CPP +++ /dev/null @@ -1,490 +0,0 @@ -Bool IsDrvVMware(U8 drv_let) -{ - Bool result=FALSE; - U8 *m=NULL; - try - if ((m=DrvModelNum(drv_let)) && - !MemCmp(m,"VMware",6)) - result=TRUE; - catch - Fs->catch_except=TRUE; - Free(m); - return result; -} - -I64 DrvMaxBlk(U8 drv_let) -{ - I64 result=0; - CBlkDev *bdev; - try { - if (bdev=Drv2BlkDev(drv_let)) - result=bdev->max_blk; - } catch - Fs->catch_except=TRUE; - return result; -} - -I64 IsDrvATAPI(U8 drv_let) -{ - Bool result=FALSE; - CBlkDev *bdev; - try if ((bdev=Drv2BlkDev(drv_let)) && - bdev->type==BDT_ATAPI) - result=TRUE; - catch - Fs->catch_except=TRUE; - return result; -} - -Bool ChkDrvModelSerial(U8 drv_let,U8 *model,U8 *serial) -{ - Bool result; - U8 *m=NULL,*s=NULL; - try { - m=DrvModelNum(drv_let); - s=DrvSerialNum(drv_let); - } catch { - Free(m); Free(s); - m=NULL; s=NULL; - Fs->catch_except=TRUE; - } - if (m && s && !StrCmp(m,model) && !StrCmp(s,serial)) - result=TRUE; - else - result=FALSE; - Free(m); Free(s); - return result; -} - -#define SLOP BLK_SIZE -U0 TSBootRescueDrv1() -{ - CBinFile *bfh=sys_boot_base-sizeof(CBinFile); - bfh(I64)+=bfh->file_size-1; - DefinePrint("TS_BOOT_RESCUE_DRV_START","0x%X",CeilI64(SYS_KERNEL_END+SLOP,BLK_SIZE)); - DefinePrint("TS_BOOT_RESCUE_DRV_END", "0x%X",FloorI64( - (BOOT_RAM_LIMIT-(BOOT_STK_SIZE+CD_BOOT_LOADER_SIZE))>>4<<4- - (bfh(I64)-SYS_KERNEL_END)-SLOP,BLK_SIZE)); - DefinePrint("CFG_BOOT_RESCUE_DRV_FILE","\"/Temp/BootRescueDrv.BIN.Z\""); -} TSBootRescueDrv1; - -U0 TSBootRescueDrv2() -{ - DefinePrint("CFG_BOOT_RESCUE_DRV","\"a10x%X\n0x%X\n\"",TS_BOOT_RESCUE_DRV_START, - (TS_BOOT_RESCUE_DRV_END-TS_BOOT_RESCUE_DRV_START)/BLK_SIZE); - DefinePrint("CFG_BOOT_RESCUE_DRV_START","\"0x%X\"",TS_BOOT_RESCUE_DRV_START); -} TSBootRescueDrv2; - -U0 TSEmployeeSet() -{ - U8 *st=StrNew(sys_acct),*st2=MAllocIdentical(st); - StrLastRem(st,"/",st2); - Free(st); - DefinePrint("TS_EMPLOYEE","\"%s\"",st2); - Free(st2); -} TSEmployeeSet; - -U0 TSBlogDirSet() -{ - CDateStruct ds; - Date2Struct(&ds,Now+local_time_offset); - DefinePrint("TS_BLOG_DIR","\"/Accts/TS/Wb2/Rants/%s/%04d/%02d\"", - TS_EMPLOYEE,ds.year,ds.mon); -} TSBlogDirSet; - -#define CID_DFT 0 -#define CID_TAD8 1 //This was my old machine but it died. Booted natively -#define CID_TAD8_VM 2 //It could run booted with physical drive in VMware -//My current machine is TAD9 but it only runs in VMware, so it's CID_DFT - -I64 ts_cid=CID_DFT; - -U0 TSIDComputer() -{ -/* My TAD8 computer died. It had two hard drives. You could -boot it directly or from VMware with a physical drive. - - CMemE820 *m20=SYS_MEM_E820; - if (IsDrvVMware('D') && DrvMaxBlk('D')==0x575466EF) - ts_cid=CID_TAD8_VM; //VMware boot of TAD8 - else if (ChkDrvModelSerial('D',"Hitachi HDS721075KLA330","GTF202P8H509AF") && - ChkDrvModelSerial('I',"ST3320620AS","6QF24J0A")) - ts_cid=CID_TAD8; //Regular boot of TAD8 -//beware 'S' - else if (*sys_acct=='T' && IsDrvATAPI('T') && m20[11].base==0x100000000 && - m20[11].base(I64)+m20[11].len-1==0x33FFFFFFF) - ts_cid=CID_TAD8; //CDROM boot of TAD8 - -*/ -} TSIDComputer; - -U0 TSInit() -{ - CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL; - CBlkDev *bdev; - switch (ts_cid) { -/* This machine died, but you can use it as an example. - - case CID_TAD8: - case CID_TAD8_VM: - DefinePrint("CFG_ACCT","\"\nTS/TAD\n\""); - DefinePrint("CFG_HARD_DRVS","\"h2s0xbc00\n0xb880\n1d2s0xbc00\n0xb880\n0\""); - DefinePrint("CFG_RAM_DRVS","\"b1\nScale2Mem(2048,0x40000)\n\""); - DefinePrint("CFG_CDROM_DRVS","\"t3s0xb800\n0\""); - DefinePrint("CFG_DSK_CACHE","\"Scale2Mem(0x80000,0x8000000)\n\""); - if (ts_cid==CID_TAD8) { - DefinePrint("TS_HDS","\"DEI\""); - DefinePrint("TS_MASTER_BOOT_DRVS","\"I\""); - } else {//CID_TAD8_VM - DefinePrint("TS_HDS","\"DE\""); - DefinePrint("TS_MASTER_BOOT_DRVS","\"\""); - } - DefinePrint("TS_MAIN_DRV","\"D\""); - DefinePrint("TS_BAK_DRV","\"E\""); - DefinePrint("TS_RAM_DRV","\"B\""); - DefinePrint("TS_WIN_DRV","\"H\""); - DefinePrint("TS_CDROM_DRV","\"T\""); - break; -*/ - case CID_DFT: - DefinePrint("CFG_ACCT","\"\nTS/TAD\n\""); - DefinePrint("CFG_RAM_DRVS","\"b1\nScale2Mem(2048,0x40000)\n\""); - if (dsk.auto_mount_ide_cnt) { - //If AutoMount was successful, No need to manually mount in next compile - DefinePrint("CFG_HARD_DRVS","\"\""); - DefinePrint("CFG_CDROM_DRVS","\"\""); - } else { - - //These two are a crazy guess. ATA:IDE Primary ATAPI:IDE Secondary - DefinePrint("CFG_HARD_DRVS","\"d2s0x1F0\n0x3F4\n0\""); - DefinePrint("CFG_CDROM_DRVS","\"t3s0x170\n0\""); - - bdev=Drv2BlkDev(*sys_acct); - if (bdev->type==BDT_ATAPI) { - ATARep(FALSE,,&root); - ATAIDDrvs(root,*sys_acct,&ata_drv,&atapi_drv); - if (ata_drv) - DefinePrint("CFG_HARD_DRVS","\"d2p%d\n\"",ata_drv->num); - if (atapi_drv) - DefinePrint("CFG_CDROM_DRVS","\"t3p%d\n\"",atapi_drv->num); - } else { - try { - bdev=Drv2BlkDev('D'); - DefinePrint("CFG_HARD_DRVS","\"d2s0x%X\n0x%X\n%d\"", - bdev->base0,bdev->base1,bdev->unit); - } catch - Fs->catch_except=TRUE; - try { - bdev=Drv2BlkDev('T'); - DefinePrint("CFG_CDROM_DRVS","\"t3s0x%X\n%d\"",bdev->base0,bdev->unit); - } catch - Fs->catch_except=TRUE; - } - } - DefinePrint("CFG_DSK_CACHE","\"Scale2Mem(0x80000,0x8000000)\n\""); - DefinePrint("TS_HDS","\"DE\""); - DefinePrint("TS_MASTER_BOOT_DRVS","\"D\""); - DefinePrint("TS_MAIN_DRV","\"D\""); - DefinePrint("TS_BAK_DRV","\"E\""); - DefinePrint("TS_BOOT_RESCUE_DRV","\"A\""); - DefinePrint("TS_RAM_DRV","\"B\""); - DefinePrint("TS_WIN_DRV","\"\""); - DefinePrint("TS_CDROM_DRV","\"T\""); - } -} TSInit; - -U0 TSInit2() -{ - DefinePrint("TS_MAIN_DRV_LET","'%s'",TS_MAIN_DRV); - DefinePrint("TS_BAK_DRV_LET","'%s'",TS_BAK_DRV); - DefinePrint("TS_BOOT_RESCUE_DRV_LET","'%s'",TS_BOOT_RESCUE_DRV); - DefinePrint("TS_RAM_DRV_LET","'%s'",TS_RAM_DRV); - DefinePrint("TS_WIN_DRV_LET","'%s'",TS_WIN_DRV); - DefinePrint("TS_CDROM_DRV_LET","'%s'",TS_CDROM_DRV); - -} TSInit2; - -Bool ts_has_main_drv =ToBool(StrLen(TS_MAIN_DRV)), - ts_has_bak_drv =ToBool(StrLen(TS_BAK_DRV)), - ts_has_boot_rescue_drv =ToBool(StrLen(TS_BOOT_RESCUE_DRV)), - ts_has_ram_drv =ToBool(StrLen(TS_RAM_DRV)), - ts_has_win_drv =ToBool(StrLen(TS_WIN_DRV)), - ts_has_cdrom_drv=ToBool(StrLen(TS_CDROM_DRV)); - -if (ts_has_main_drv) - SetDrvTextAttr(TS_MAIN_DRV_LET, WHITE <<4|BLUE); -if (ts_has_bak_drv) - SetDrvTextAttr(TS_BAK_DRV_LET, WHITE <<4|RED); -if (ts_has_boot_rescue_drv) - SetDrvTextAttr(TS_BOOT_RESCUE_DRV_LET, BLUE <<4|BROWN); -if (ts_has_ram_drv) - SetDrvTextAttr(TS_RAM_DRV_LET, BLUE <<4|YELLOW); -if (ts_has_win_drv) - SetDrvTextAttr(TS_WIN_DRV_LET, LTRED <<4|BLACK); -if (ts_has_cdrom_drv) - SetDrvTextAttr(TS_CDROM_DRV_LET,LTGRAY<<4|BLUE); - -#define TS_ISO_NAME TS_RAM_DRV ":/TempleOSCD.ISO" -#define TS_DISTRO_DIR TS_RAM_DRV ":/Distro" -#define CFG_OPTS "AutoMountIDE\nDT\n" -#define CFG_DBG_OPTS "AutoMountIDE\nDT"\ - "HeapInit\n130\nMemInit\n131\nVarInit\n132\n\n" -#define CFG_DBGZ_OPTS "AutoMountIDE\nDT"\ - "HeapInit\n0\nMemInit\n0\nVarInit\n0\n\n" -#define TS_CFG "\n" CFG_RAM_DRVS CFG_CDROM_DRVS CFG_HARD_DRVS CFG_ACCT CFG_DSK_CACHE CFG_OPTS -#define TS_MENU_CFG "\n" CFG_RAM_DRVS CFG_CDROM_DRVS CFG_HARD_DRVS "\n\n" CFG_DSK_CACHE CFG_OPTS -#define TS_CDROM_CFG "Tb1\n0x20000\nt3 \n\nTS\n\nAutoMountIDE\nDT\n" -#define TS_CDROM_DBG_CFG "A" CFG_BOOT_RESCUE_DRV "b1\nScale2Mem(2048,0x40000)\n\n\n\n"\ - "DontProbe\nBootRescueDrv\n" TS_MAIN_DRV ":" CFG_BOOT_RESCUE_DRV_FILE "\n" CFG_BOOT_RESCUE_DRV_START "\n\n" -//$BK,1$Change these, too...$BK,0$ -//$MA-X+PU,"STD_DISTRO_CDROM_CFG",LM="F(\"STD_DISTRO_CDROM_CFG\");View;"$ -//$LK,"Install Acct",A="FF:::/Accts/Install/DoOnce.CPP,MakeOSPrtBootInstall"$ - -Bool frame_grabber_on=FALSE; -#define VIDEO_FRAME_RATE 8 -U0 FrameGrabberTask(I64) -{/**** TO MAKE MOVIE **** - -TempleOS - - [Do stuff you want recorded] - - -Boot Windows - Copy /Temp - Download "ffmpeg" from the Internet - - >CD SCREENSHOTS - >TSZ . - >ffmpeg -r 8 -i VID%05d.BMP -y Movie.avi - -*/ - I64 frame_num=0; - U8 buf[136],buf2[136]; - F64 end_time=tS; - Silent(ON); //no output to screen - MkDir("::/Temp/ScreenShots"); - while (frame_grabber_on) { - StrPrint(buf,"::/Temp/ScreenShots/VID%05d.BMP.Z",frame_num++); - StrCpy(buf2,buf); - BMPFileCaptureScreen(buf); - while (TRUE) { - end_time+=1.0/VIDEO_FRAME_RATE; - if (end_time3.0) { - last_time=tS; - if (frame_grabber_on) { - frame_grabber_on=FALSE; - Snd(0); - wall->record=snd.record=FALSE; - Sleep(1000); - CopyVideo; - } else { - frame_grabber_on=TRUE; - Spawn(&FrameGrabberTask,NULL,"Frame Grabber"); - wall->record=snd.record=TRUE; - Snd(0); - } - } -} - -U0 JukeSongsPut(U8 *dir,I64 start_song,I64 end_song) -{ - I64 i,j,len=4; - CDirEntry *tempde,*tempde1; - Cd(dir); - tempde1=FilesFind("*",FUF_RECURSE|FUF_JUST_TXT|FUF_JUST_FILES); - - for (tempde=tempde1,i=0;tempde && inext; - for (i=start_song;tempde && iname)) - FileExtRem(tempde->name); - if (j=StrLen(tempde->name)) { - *tempde->full_name=':'; - *tempde->name=ToUpper(*tempde->name); - if (j>len) len=j; - } - tempde=tempde->next; - } - - for (tempde=tempde1,i=0;tempde && inext; - if (end_song-start_song<=9) - j=1; - else if (end_song-start_song<=99) - j=2; - else - j=3; - for (i=start_song;tempde && iname,tempde->full_name; - tempde=tempde->next; - } - - DirTreeDel(tempde1); -} - -public U0 JukeLines(I64 start_line,I64 end_line) -{ - WordStat; - if (!frame_grabber_on) - FrameGrabberToggle; - JukeSongsPuppet("::/Apps/Psalmody/Examples",,start_line*5,end_line*5); - if (frame_grabber_on) - FrameGrabberToggle; - JukeSongsPut("::/Apps/Psalmody/Examples",start_line*5,end_line*5); -} - -public U0 ChkAll() -{ - U8 *ptr=TS_HDS; - while (*ptr) - ChkDsk(*ptr++); -} - -public CDoc *DC2Doc(CDC *dc,I64 dx=0,I64 dy=0,I64 *_total_score=NULL) -{ - U8 byte_bit_cnts[256]; - I64 i,j,*ptr,row,col,ch,best_ch,score,best_score,cur_char_image,diff_image,total_score=0; - CDoc *doc=DocNew; - - MemSet(byte_bit_cnts,0,sizeof(byte_bit_cnts)); - for (i=0;i<256;i++) - for (j=0;j<7;j++) - if (Bt(&i,j)) - byte_bit_cnts[i]++; - - for (row=0;rowheight/FONT_HEIGHT;row++) { - for (col=0;colwidth/FONT_WIDTH;col++) { - - cur_char_image=0; - for (i=0;ifilename.name,out_name); - DocWrite(doc); - } - DocDel(doc); - } - } - Free(in_name); - Free(out_name); -} - -U0 DblSpaceScanFile(U8 *filename) -{ - CDoc *doc=DocRead(filename); - I64 i; - CDocEntry *doc_e=doc->root.next; - while (doc_e!=doc) { - if (doc_e->type_u8==DOCT_NEW_LINE && - doc_e->next->type_u8==DOCT_NEW_LINE && - doc_e->next->next->type_u8==DOCT_NEW_LINE) { - i=0; - while (doc_e->type_u8==DOCT_NEW_LINE) { - i++; - doc_e=doc_e->next; - } - "%02d:",i; - PutFileLink(doc->filename.name,doc_e->y); - '\n'; - } else - doc_e=doc_e->next; - } - DocDel(doc); -} - -U0 DblSpaceScanLst(CDirEntry *tempde) -{ - CDirEntry *tempde1; - while (tempde) { - tempde1=tempde->next; - if (tempde->attr & RS_ATTR_DIR) { - if (tempde->sub) { - "Scanning Directory: %s\n",tempde->full_name; - DblSpaceScanLst(tempde->sub); - } - } else - DblSpaceScanFile(tempde->full_name); - DirEntryDel(tempde); - tempde=tempde1; - } -} - -public U0 DblSpaceScan(U8 *files_find_mask="*",U8 *fu_flags=NULL) -{ - I64 f=0; - ScanFlags(&f,Define("ST_FILE_UTIL_FLAGS"),"+r+T"); - ScanFlags(&f,Define("ST_FILE_UTIL_FLAGS"),fu_flags); - DblSpaceScanLst(FilesFind(files_find_mask,f)); -} diff --git a/Demo/AcctExample/TSDistro.CPP b/Demo/AcctExample/TSDistro.CPP deleted file mode 100644 index 711d8cf..0000000 --- a/Demo/AcctExample/TSDistro.CPP +++ /dev/null @@ -1,624 +0,0 @@ -//The CFG defines are $LK,"Here",A="FI:::/Demo/AcctExample/TSAdam.CPP"$. - -U8 TSGetDrv() -{ - I64 result; - "Drive (%s):",TS_HDS; - result=ToUpper(GetChar); - '\n'; - return result; -} - -U0 TSMakeOSPrtBootInstall(U8 drv_let) -{ - drv_let=ToUpper(drv_let); - Auto(TS_CFG); - MakeOSPrtBootInstall(drv_let); - if (StrOcc(TS_MASTER_BOOT_DRVS,drv_let)) - MasterBootIntall(drv_let); -} - -U0 SoftBootMenu(U8 drv_let=0) -{ - if (!drv_let) - drv_let=Prt2Drv(Fs->cur_prt); - Drv(drv_let); - Cd("/Kernel"); - Auto(TS_MENU_CFG); - if (!Cmp("Kernel","Kernel",NULL,':')) - SoftBoot("Kernel.BIN.Z"); -} - -U0 TSCopyDrv(U8 src,U8 dst) -{ - U8 buf_s[128],buf_d[128]; - src=ToUpper(src); - dst=ToUpper(dst); - - Fmt(dst,,FALSE,PT_FAT32); - - StrPrint(buf_s,"%c:/",src); - StrPrint(buf_d,"%c:/",dst); - CopyTree(buf_s,buf_d); - - DocClear; - Drv(dst); - TSMakeOSPrtBootInstall(dst); -} - -U0 TSPromptAndCopyDrv() -{ - I64 src,dst; - "$$RED$$\nCopy Src Drive:\n$$FG$$"; - src=TSGetDrv; - "$$RED$$\nCopy Dst Drive:\n$$FG$$"; - dst=TSGetDrv; - TSCopyDrv(src,dst); -} - -public U0 CursorRemFile(U8 *filename) -{ - CDoc *doc; - doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); - DocWrite(doc); - DocDel(doc); -} -public U0 CursorRem(U8 *files_find_mask="*") -{ - I64 fuf_flags=0; - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+T+f+F+O"); - CDirEntry *tempde=FilesFind(files_find_mask,fuf_flags),*tempde1=tempde; - while (tempde) { - CursorRemFile(tempde->full_name); - Touch(tempde->full_name,"",,tempde->datetime); - tempde=tempde->next; - } - DirTreeDel(tempde1); -} - -U0 UncollapseFile(U8 *filename,I64 *) -{ - CDoc *doc=DocRead(filename,DOCF_NO_CURSOR); - DocCollapse(FALSE,doc); - DocWrite(doc); - DocDel(doc); -} -U0 Uncollapse(U8 *files_find_mask="*",U8 *fu_flags=NULL) -{ - I64 fuf_flags=0; - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+T+O"); - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); - CDirEntry *tempde=FilesFind(files_find_mask,fuf_flags),*tempde1=tempde; - while (tempde && !Bt(&fuf_flags,FUf_CANCEL)) { - UncollapseFile(tempde->full_name,&fuf_flags); - Touch(tempde->full_name,"",,tempde->datetime); - tempde=tempde->next; - } - DirTreeDel(tempde1); -} - -public U0 CopySongs(U8 threshold='7') -{ - CDoc *s; - CDocEntry *doc_e; - CDirEntry *tempde=FilesFind("/Accts/TS/TAD/Psalmody/*.CPP*",FUF_CLUSTER_ORDER),*tempde1=tempde; - DelTree("/Apps/Psalmody/Examples"); - MkDir("/Apps/Psalmody/Examples"); - while (tempde) { - s=DocRead(tempde->full_name); - doc_e=s->root.next; - if (doc_e->type_u8==DOCT_TEXT && doc_e->tag[2]>=threshold) - Copy(tempde->full_name,"/Apps/Psalmody/Examples"); - tempde=tempde->next; - } - DirTreeDel(tempde1); -} - -U0 DistroPrep() -{ - Del("/Demo/WebLogExample/WebLogRep.TXT*"); - Del("/Demo/ReverseFileExample/PoemForeward.TXT*"); - Del("/Demo/Games/EagleDive.BIN*"); - DelTree("/Accts/*Temp.TXT.Z"); - CopySongs; - - DelTree("/Temp"); - MkDir("/Temp"); - MkDir("/Temp/ScreenShots"); - - //User - Del("/Accts/User/Registry.CPP.Z"); - //Install - Del("/Accts/Install/Registry.CPP.Z"); - - Touch("/Accts/PersonalMenu.TXT.Z","+T"); - //TS - Touch("/Accts/TS/PersonalMenu.TXT.Z","+T"); - - DelTree("/Demo/AcctExample"); - CopyTree("/Accts/TS","/Demo/AcctExample"); - DelTree("/Demo/AcctExample/TAD/Psalmody"); - DelTree("/Demo/AcctExample/Wb2"); - DelTree("/Demo/AcctExample/TAD"); - -//Once in a while, do these: -// TSSortHeaders; -// DocOpt("/*"); -// DblSpaceScan("/*"); - - CursorRem("/*"); - DelTree("/Demo/*.BI*"); - S2T("/*","+r+S"); - DocOpt("/*"); - Move(WSD_DEF_FILENAME,WSD_DEF_FILENAME_Z); -} - -U0 MakeBootRescueDrvFile() -{ - try - PrtChk(Drv2Prt(TS_BOOT_RESCUE_DRV_LET)); - catch { - Fs->catch_except=TRUE; - Auto(CFG_BOOT_RESCUE_DRV "\n"); - Mount; - } - CBlkDev *bdev=Drv2BlkDev(TS_BOOT_RESCUE_DRV_LET); - Fmt(TS_BOOT_RESCUE_DRV_LET,,FALSE,PT_REDSEA); - - MkDir(TS_BOOT_RESCUE_DRV ":/Compiler"); - Copy(TS_MAIN_DRV ":/Compiler/Compiler.BIN.Z", TS_BOOT_RESCUE_DRV ":/Compiler"); - Copy(TS_MAIN_DRV ":/Compiler/OpCodes.TXT.Z", TS_BOOT_RESCUE_DRV ":/Compiler"); - Copy(TS_MAIN_DRV ":/Compiler/CmpDefs.HPP.Z", TS_BOOT_RESCUE_DRV ":/Compiler"); - Copy(TS_MAIN_DRV ":/Compiler/Cmp.HPP.Z", TS_BOOT_RESCUE_DRV ":/Compiler"); - - MkDir(TS_BOOT_RESCUE_DRV ":/Kernel"); - Copy(TS_MAIN_DRV ":/Kernel/*.HPP*", TS_BOOT_RESCUE_DRV ":/Kernel"); - Copy(TS_MAIN_DRV ":/Kernel/Adam1*", TS_BOOT_RESCUE_DRV ":/Kernel"); - CopyTree(TS_MAIN_DRV ":/Kernel/Dsk", TS_BOOT_RESCUE_DRV ":/Kernel/Dsk"); - - MkDir(TS_BOOT_RESCUE_DRV ":/Adam"); - Copy(TS_MAIN_DRV ":/Accts/TS/DbgAdam2.CPP.Z", TS_BOOT_RESCUE_DRV ":/Adam/Adam2.CPP.Z"); - Copy(TS_MAIN_DRV ":/Adam/AdamExts.HPP.Z", TS_BOOT_RESCUE_DRV ":/Adam"); - Copy(TS_MAIN_DRV ":/Adam/Math2a.CPP.Z", TS_BOOT_RESCUE_DRV ":/Adam"); - Copy(TS_MAIN_DRV ":/Adam/Training.CPP.Z", TS_BOOT_RESCUE_DRV ":/Adam"); - Copy(TS_MAIN_DRV ":/Adam/Utils2a.CPP.Z", TS_BOOT_RESCUE_DRV ":/Adam"); - Copy(TS_MAIN_DRV ":/Adam/MathODE.CPP.Z", TS_BOOT_RESCUE_DRV ":/Adam"); - - FileWrite(TS_MAIN_DRV ":" CFG_BOOT_RESCUE_DRV_FILE,bdev->RAM_dsk,(bdev->max_blk+1)<hash_table); - Who; - if (doc=DocPut) { - st=StrNew(doc->filename.name); - StrCpy(doc->filename.name,TS_BAK_DRV ":/Wb/Accts/TS/Wb2/SymsAlpha.TXT.Z"); - DocWrite(doc); - StrCpy(doc->filename.name,st); - Free(st); - } - DocClear; - DocMax; - Who("+m"); - if (doc=DocPut) { - st=StrNew(doc->filename.name); - StrCpy(doc->filename.name,TS_BAK_DRV ":/Wb/Accts/TS/Wb2/SymsAddress.TXT.Z"); - DocWrite(doc); - StrCpy(doc->filename.name,st); - Free(st); - } - DocClear; - } -} - -I64 MakeLineRepFile() -{ - U8 *st; - CDoc *doc; - I64 result,official; - CDocEntry *tree_branch,*start_indent,*end_indent; - - DocClear; - Drv(TS_MAIN_DRV_LET); - DistroPrep; - - Cd(TS_MAIN_DRV ":/"); - if (ts_has_ram_drv) { - DelTree(TS_RAM_DRV ":/TS"); - CopyTree(TS_MAIN_DRV ":/Accts/TS",TS_RAM_DRV ":/TS"); - DelTree(TS_MAIN_DRV ":/Accts/TS"); - } - - DocMax; - DocClear; - result=LineRep; - if (doc=DocPut) { - st=StrNew(doc->filename.name); - StrCpy(doc->filename.name,TS_RAM_DRV ":/TS/Wb2/LineRep.TXT.Z"); - DocWrite(doc); - StrCpy(doc->filename.name,st); - Free(st); - } - DocClear; - official=LineRep(TS_MAIN_DRV ":/Accts/*")+ - LineRep(TS_MAIN_DRV ":/Adam/*")+ - LineRep(TS_MAIN_DRV ":/Compiler/*","-S+T")+ - LineRep(TS_MAIN_DRV ":/Kernel/*"); - DocClear; - if (ts_has_ram_drv) { - CopyTree(TS_RAM_DRV ":/TS",TS_MAIN_DRV ":/Accts/TS"); - DelTree(TS_RAM_DRV ":/TS"); - } - - doc=DocRead(TS_MAIN_DRV ":/Adam/DocDefines.CPP.Z"); - DocTreeFind(doc,"LineRep",&tree_branch,&start_indent,&end_indent); - DocCut(doc,start_indent->next,end_indent->last); - doc->cur_entry=start_indent->next; - doc->cur_data_col=0; - - DocPrint(doc,"DefinePrint(\"DD_TEMPLEOS_LOC\",\"%,d\");\n",result); - DocPrint(doc,"DefinePrint(\"DD_TEMPLEOS_LOC_OFFICIAL\",\"%,d\");\n",official); - st=MStrPrint("%,d",result); - DefineLoad("DD_TEMPLEOS_LOC",st); - Free(st); - st=MStrPrint("%,d",official); - DefineLoad("DD_TEMPLEOS_LOC_OFFICIAL",st); - Free(st); - - DocWrite(doc); - DocDel(doc); - - "Total LOC:%12,d\n\n",result; - return result; -} - -U0 TSDistroPrep() -{/*This is the Trivial Solution internal company distro. Only run this on a -virtual machine, not bare metal hardware because it's settings could cause -problems. The hard drive must be partitioned. Install Std Distro, then -install this on top. ->$LK,"TSInstall",A="FF:::/Demo/AcctExample/TSDistro.CPP,TSInstall"$; ->$LK,"TSUpgrade",A="FF:::/Demo/AcctExample/TSDistro.CPP,TSUpgrade"$; -See $LK,"MakeDistrosAndBackUp",A="FF:::/Demo/AcctExample/TSDistro.CPP,MakeDistrosAndBackUp"$() to reproduce the ISO's in $FG,4$E:/Wb$FG$. It makes this -website, too. -*/ - Drv(TS_MAIN_DRV_LET); - DistroPrep; - Auto(TS_CDROM_CFG); - MakeOSPrtBootInstall(TS_MAIN_DRV_LET,TS_CDROM_DRV_LET); - DelTree(TS_DISTRO_DIR); - CopyTree(TS_MAIN_DRV ":/",TS_DISTRO_DIR "/"); -} -U0 MakeTSDistro() -{ - TSDistroPrep; - CDFileCreate(TS_ISO_NAME,TS_DISTRO_DIR "/*",,TS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); - DefinePrint("DD_TEMPLEOSTS_SIZE", - "Download $TX,"TempleOS V2.10",D="DD_OS_NAME_VERSION"$ - T.S. Company Internal Distro (%0.1f MB)", - 0.1*(10*Size(TS_ISO_NAME,"+s")/1024/1024)); - Drv(TS_MAIN_DRV_LET); -} - - -U0 DbgDistroPrep() -{/*This is a debug distro. The CDROM bootloader uses BIOS INT 0x13 0x42 to -load Kernel.BIN.C which has been modified to also hold a small RAM drive -(Drive A) that fits in the low 640k. The bootloader starts in real mode -and the kernel changes to long, 64-bit mode. It loads the 64-bit compiler -and assembler, compiles some, but not all, of the normal start-up scripts -and drops you off at the $LK,"Dbg",A="MN:Dbg"$ command-line where you can JIT compile, -use $LK,"EdLite",A="MN:EdLite"$ on RAM files, and use many of the other normal Kernel commands. -I could not fit all the normal start-up scripts into the small RAM drive, -so you do not have the window manager or normal document framework. You -should have many Gig of RAM to play with with RAM Drive B, a high memory -RAM drive, but you have only those few files. When I generate this distro, -I call $LK,"MakeBootDrvFile",A="FF:::/Demo/AcctExample/TSDistro.CPP,MakeBootRescueDrvFile"$. -*/ - if (ts_has_boot_rescue_drv) { - Drv(TS_MAIN_DRV_LET); - DistroPrep; - MakeBootRescueDrvFile; - Auto(TS_CDROM_DBG_CFG); - MakeOSPrtBootInstall(TS_MAIN_DRV_LET,TS_CDROM_DRV_LET); - DelTree(TS_DISTRO_DIR); - CopyTree(TS_MAIN_DRV ":/",TS_DISTRO_DIR "/"); - Del(TS_MAIN_DRV ":" CFG_BOOT_RESCUE_DRV_FILE); - } -} -U0 MakeDbgDistro() -{ - DbgDistroPrep; - CDFileCreate(TS_ISO_NAME,TS_DISTRO_DIR "/*",,TS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); - DefinePrint("DD_TEMPLEOSDBG_SIZE", - "Download $TX,"TempleOS V2.10",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)", - 0.1*(10*Size(TS_ISO_NAME,"+s")/1024/1024)); - Drv(TS_MAIN_DRV_LET); -} - - -U0 StdDistroPrep() -{ - Drv(TS_MAIN_DRV_LET); - DistroPrep; - Auto(STD_DISTRO_CDROM_CFG); - MakeOSPrtBootInstall(TS_MAIN_DRV_LET,TS_CDROM_DRV_LET); - DelTree(TS_DISTRO_DIR); - CopyTree(TS_MAIN_DRV ":/",TS_DISTRO_DIR "/"); - DelTree(TS_DISTRO_DIR "/Accts/TS"); - Del(TS_DISTRO_DIR "/0000Boot/OldMBR.BIN.C"); - Del(TS_DISTRO_DIR "/0000Boot/BootMHD2.BIN.C"); -} -U0 MakeStdDistro() -{ - StdDistroPrep; - CDFileCreate(TS_ISO_NAME,TS_DISTRO_DIR "/*",,TS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); - Drv(TS_MAIN_DRV_LET); -} - - -U0 LiteDistroPrep() -{/*Missing: Dictionary, Bible and TSZ Utility. Still 100% OpenSource. -Includes: x86_64 64BitMultiCoredKernel, 64BitCompiler, Assembler, -Unassembler, Debugger, Editor, VGAGraphics, Tools, BootLoaders, -Keyboard&Mouse, HardDrives, FAT32, Partitioner, CD/DVD, ISO9660FileCreator, -FileManager, WindowManager, PCSpeaker, Apps, Games, God-Oracle-App, Hymns, -Demos, Documentation. -*/ - Drv(TS_MAIN_DRV_LET); - DistroPrep; - Auto(STD_DISTRO_CDROM_CFG); - MakeOSPrtBootInstall(TS_MAIN_DRV_LET,TS_CDROM_DRV_LET); - DelTree(TS_DISTRO_DIR); - CopyTree(TS_MAIN_DRV ":/",TS_DISTRO_DIR "/"); - DelTree(TS_DISTRO_DIR "/Accts/TS"); - DelTree(TS_DISTRO_DIR "/Linux"); - DelTree(TS_DISTRO_DIR "/Windows"); - Del(TS_DISTRO_DIR "/0000Boot/OldMBR.BIN.C"); - Del(TS_DISTRO_DIR "/0000Boot/BootMHD2.BIN.C"); - Del(TS_DISTRO_DIR "/Adam/WordStat/WSDefs.DAT*"); - Del(TS_DISTRO_DIR "/Misc/PCIDevices.TXT.Z"); - Del(TS_DISTRO_DIR "/Misc/Bible.TXT.Z"); -} -U0 MakeLiteDistro() -{ - LiteDistroPrep; - CDFileCreate(TS_ISO_NAME,TS_DISTRO_DIR "/*",,TS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); - DefinePrint("DD_TEMPLEOSLITE_SIZE", - "Download $TX,"TempleOS V2.10",D="DD_OS_NAME_VERSION"$ - Lite Distro (%0.1f MB)", - 0.1*(10*Size(TS_ISO_NAME,"+s")/1024/1024)); - Drv(TS_MAIN_DRV_LET); -} - -U0 UltraDistroPrep() -{/*Missing: Apps, Demos, Dictionary, Bible and TSZ Utility. Still 100% OpenSource. -Includes: x86_64 64BitMultiCoredKernel, 64BitCompiler, Assembler, -Unassembler, Debugger, Editor, VGAGraphics, Tools, BootLoaders, -Keyboard&Mouse, HardDrives, FAT32, Partitioner, CD/DVD, ISO9660FileCreator, -FileManager, WindowManager, PCSpeaker, Documentation. -*/ - Drv(TS_MAIN_DRV_LET); - DistroPrep; - Auto(STD_DISTRO_CDROM_CFG); - MakeOSPrtBootInstall(TS_MAIN_DRV_LET,TS_CDROM_DRV_LET); - DelTree(TS_DISTRO_DIR); - CopyTree(TS_MAIN_DRV ":/",TS_DISTRO_DIR "/"); - DelTree(TS_DISTRO_DIR "/Accts/TS"); - DelTree(TS_DISTRO_DIR "/Linux"); - DelTree(TS_DISTRO_DIR "/Windows"); - DelTree(TS_DISTRO_DIR "/Apps"); - DelTree(TS_DISTRO_DIR "/Demo"); - Del(TS_DISTRO_DIR "/0000Boot/OldMBR.BIN.C"); - Del(TS_DISTRO_DIR "/0000Boot/BootMHD2.BIN.C"); - Del(TS_DISTRO_DIR "/Adam/WordStat/*.DAT*"); - DelTree(TS_DISTRO_DIR "/Misc/Tour"); - Del(TS_DISTRO_DIR "/Misc/PCIDevices.TXT.Z"); - Del(TS_DISTRO_DIR "/Misc/Bible.TXT.Z"); - Del(TS_DISTRO_DIR "/Adam/God/Vocab.TXT.Z"); -} -U0 MakeUltraDistro() -{ - UltraDistroPrep; - CDFileCreate(TS_ISO_NAME,TS_DISTRO_DIR "/*",,TS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); - DefinePrint("DD_TEMPLEOSULTRA_SIZE", - "Download $TX,"TempleOS V2.10",D="DD_OS_NAME_VERSION"$ - UltraLite Distro (%0.1f MB)", - 0.1*(10*Size(TS_ISO_NAME,"+s")/1024/1024)); - Drv(TS_MAIN_DRV_LET); -} - -U0 TSWebFile(U8 *name) -{ - U8 *name2; - CDirEntry de; - if (FileFind(name,&de)) { - Free(de.full_name); - "File:%s\n",name; - UncollapseFile(name,NULL); - Touch(name,"",,de.datetime); - name2=ChgExt(name,"html"); - ToHtml(name,name2, - "The Temple Operating System\n" - "\n" - ); - Touch(name2,"",,de.datetime); - Free(name2); - } -} - -U0 MakeWebSite() -{ - CDirEntry *tempde,*tempde1; - if (ts_has_bak_drv) { - DocClear; - Cd(TS_BAK_DRV ":/Wb"); - DelTree(TS_BAK_DRV ":/Wb/Accts/TS/TAD"); - Del(TS_BAK_DRV ":/Wb/Accts/TS/*"); - Touch(TS_BAK_DRV ":/Wb/Accts/TS/Wb2/index.TXT.Z","",,Now); - Touch(TS_BAK_DRV ":/Wb/Accts/TS/Wb2/Downloads.TXT.Z","",,Now); - Touch(TS_BAK_DRV ":/Wb/Accts/TS/Wb2/TempleOS.TXT.Z","",,Now); - tempde=tempde1=FilesFind("*",FUF_RECURSE|FUF_JUST_FILES|FUF_JUST_TXT|FUF_CLUSTER_ORDER); - while (tempde) { - TSWebFile(tempde->full_name); - tempde=tempde->next; - } - DirTreeDel(tempde1); - Drv(TS_MAIN_DRV_LET); - } -} - -U0 FreshenWebDir(U8 *dirname) -{ - CDirEntry *tempde,*tempde1; - U8 *src,*dst; - - src=MStrPrint(TS_BAK_DRV ":/Wb%s/*",dirname); - Del(src); - Free(src); - src=MStrPrint(TS_MAIN_DRV ":%s/*",dirname); - dst=MStrPrint(TS_BAK_DRV ":/Wb%s",dirname); - Copy(src,dst); - Free(src); - Free(dst); - - src=MStrPrint(TS_BAK_DRV ":/Uncompressed%s/*",dirname); - Del(src); - Free(src); - src=MStrPrint(TS_MAIN_DRV ":%s/*",dirname); - dst=MStrPrint(TS_BAK_DRV ":/Uncompressed%s",dirname); - Copy(src,dst); - Free(src); - Free(dst); - - src=MStrPrint(TS_BAK_DRV ":/Wb%s/*",dirname); - tempde=tempde1=FilesFind(src,FUF_JUST_FILES|FUF_JUST_TXT|FUF_CLUSTER_ORDER); - while (tempde) { - TSWebFile(tempde->full_name); - tempde=tempde->next; - } - DirTreeDel(tempde1); -} - -U0 MakeWebSitePartial() -{ - if (ts_has_bak_drv) { - FreshenWebDir("/Accts/TS/Wb2"); - FreshenWebDir("/Accts/TS/Wb2/Rants/TAD"); - FreshenWebDir(TS_BLOG_DIR); - Drv(TS_MAIN_DRV_LET); - } -} - -I64 TSUncompress() -{ - I64 result=0; - if (ts_has_bak_drv) { - DelTree(TS_BAK_DRV ":/Uncompressed"); - CopyTree(TS_MAIN_DRV ":/",TS_BAK_DRV ":/Uncompressed"); - result=Unzip(TS_BAK_DRV ":/Uncompressed/*.Z"); - CursorRem(TS_BAK_DRV ":/Uncompressed/*"); - } - "Files Copied:%d\n",result; - return result; -} - -U0 UpdateISODocDefines() -{ - DefinePrint("DD_TEMPLEOSCD_SIZE", - "Download $TX,"TempleOS V2.10",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", - 0.1*(10*Size(TS_BAK_DRV ":/Wb/TempleOSCD.ISO","+s")/1024/1024)); -} - -UpdateISODocDefines; - -public U0 MakeDistrosAndBackUp() -{ - SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - progress4=*progress4_desc=0; - progress4_max=12; - WordStat; - WinMax; - WinBorder; - ChkAll; progress4++; - if (ts_has_bak_drv) { - MakeLineRepFile; progress4++; - TSCopyDrv(TS_MAIN_DRV_LET,TS_BAK_DRV_LET); progress4++; - DelTree (TS_BAK_DRV ":/Wb"); progress4++; - CopyTree(TS_MAIN_DRV ":/",TS_BAK_DRV ":/Wb"); progress4++; - DocClear; - - MakeStdDistro; progress4++; - DocClear; - Copy(TS_ISO_NAME,TS_BAK_DRV ":/Wb/TempleOSCD.ISO"); progress4++; - - UpdateISODocDefines; - - Cd(TS_MAIN_DRV ":/"); - if (LinkChk) - throw; - progress4++; - MakeSymFiles; progress4++; - MakeWebSite; progress4++; - TSUncompress; progress4++; - } - Drv(TS_MAIN_DRV_LET); - ChkAll; progress4++; - progress4=progress4_max=0; - SettingsPop; -} - -public U0 TSMount() -{ - if (!dsk.auto_mount_ide_cnt) { - Auto(CFG_HARD_DRVS "\n"); - Mount; - } -} - -U0 TSCopy() -{ - if (ts_cid==CID_DFT) {//Dangerous! don't do on my main machine - Fmt(TS_MAIN_DRV_LET,,FALSE); - CopyTree(TS_CDROM_DRV ":/",TS_MAIN_DRV ":/"); - TSMakeOSPrtBootInstall(TS_MAIN_DRV_LET); - Fmt(TS_BAK_DRV_LET,,FALSE); - CopyTree(TS_CDROM_DRV ":/",TS_BAK_DRV ":/"); - TSMakeOSPrtBootInstall(TS_BAK_DRV_LET); - Reboot; - } -} - -U0 TSPrtDsk() -{ - CTask *task=SpawnUser; - CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL; - if (ts_cid==CID_DFT) {//Dangerous! don't do on my main machine - ATARep(FALSE,TRUE,&root); - ATAIDDrvs(root,*sys_acct,&ata_drv,&atapi_drv); - if (ata_drv) { - XTalkWait(task,"PrtDsk;\nY%C2p%d\nYYY",TS_MAIN_DRV_LET,ata_drv->num); - XTalkWait(task,"%d\nY\nY\n",(prt_dsk_dsk_size-PRT_HEADER)/2); - } - Kill(task); - } -} - -public U0 TSUpgrade() -{ - if (ts_cid==CID_DFT) {//Dangerous! don't do on my main machine - TSMount; - TSCopy; - } -} - -public U0 TSInstall() -{ - if (ts_cid==CID_DFT) {//Dangerous! don't do on my main machine - TSPrtDsk; - TSCopy; - } -} diff --git a/Demo/AcctExample/TSSortHeader.CPP b/Demo/AcctExample/TSSortHeader.CPP deleted file mode 100644 index 2faf67c..0000000 --- a/Demo/AcctExample/TSSortHeader.CPP +++ /dev/null @@ -1,276 +0,0 @@ -class CSHEntry -{ - CDocEntry *next,*last; -}; - -class CSHSection -{ - CDocEntry *next,*last; -}; - -U8 *SHSkipDataType(U8 *st) -{ - if (!st) - return NULL; - while (Bt(chars_bitmap_white_space,*st)) - st++; - if (*st=='#') - return st; - while (Bt(chars_bitmap_alpha_numeric,*st)) - st++; - while (Bt(chars_bitmap_white_space,*st)) - st++; - while (*st=='*') - st++; - return st; -} - -U8 *SHSkipLabel(U8 *st) -{ - if (!st) - return NULL; - while (Bt(chars_bitmap_white_space,*st)) - st++; - while (Bt(chars_bitmap_alpha_numeric,*st)) - st++; - while (Bt(chars_bitmap_white_space,*st)) - st++; - return st; -} - -U8 *SHNewEntry(CDocEntry *doc_e,I64 *_type=NULL) -{ - U8 *st; - if (doc_e->type_u8==DOCT_TEXT && (st=doc_e->tag)) { - if (!StrNCmp("#help_index",st,11)) { - if (_type) *_type=0; - return st+11; - } else if (!StrNCmp("#help_file",st,10)) { - if (_type) *_type=1; - return st+10;//'#' makes it first alphabetically. - } else if (!StrNCmp("import",st,6)) { - if (_type) *_type=2; - return st+6; - } else if (!StrNCmp("public import",st,13)) { - if (_type) *_type=2; - return st+13; - } else if (!StrNCmp("_import",st,7)) { - if (_type) *_type=2; - return SHSkipLabel(st+7); - } else if (!StrNCmp("public _import",st,14)) { - if (_type) *_type=2; - return SHSkipLabel(st+14); - } else if (!StrNCmp("_intern",st,7)) { - if (_type) *_type=3; - return SHSkipLabel(st+7); - } else if (!StrNCmp("public _intern",st,14)) { - if (_type) *_type=3; - return SHSkipLabel(st+14); - } else if (!StrNCmp("extern",st,6)) { - if (_type) *_type=4; - return st+6; - } else if (!StrNCmp("public extern",st,13)) { - if (_type) *_type=4; - return st+13; - } else if (!StrNCmp("_extern",st,7)) { - if (_type) *_type=4; - return SHSkipLabel(st+7); - } else if (!StrNCmp("public _extern",st,14)) { - if (_type) *_type=4; - return SHSkipLabel(st+14); - } - } - if (_type) *_type=-1; - return NULL; -} - -I64 SHCompareEntry(CSHEntry *e1,CSHEntry *e2) -{ - U8 *st1,*st2; - I64 t1,t2; - if (e1 && e2 && e1->next!=e1 && e2->next!=e2) { - if (e1->next->type_u8==DOCT_TEXT && e2->next->type_u8==DOCT_TEXT) { - st1=SHNewEntry(e1->next,&t1); - st2=SHNewEntry(e2->next,&t2); - if (t1!=t2) - return t1-t2; - else { - if (st1&&st2) { - st1=SHSkipDataType(st1); - st2=SHSkipDataType(st2); - if (st1&&st2) - return StrCmp(st1,st2); - else - return Sign(st1-st2); - } else - return Sign(st1-st2); - } - } else - return Sign(e1->next-e2->next); - } else - return Sign(e1-e2); -} - -U0 SHSortSection(CSHSection *temps) -{ - I64 i=0,cnt; - CSHEntry **a; - CDocEntry *doc_e,*doc_e1; - - cnt=0; - doc_e=temps->next; - while (doc_e!=temps) { - if (SHNewEntry(doc_e)) - cnt++; - doc_e=doc_e->next; - } - cnt++; - - a=MAlloc(sizeof(CSHEntry *)*cnt); - for (i=0;inext; - while (doc_e!=temps) { - doc_e1=doc_e->next; - QueRem(doc_e); - if (SHNewEntry(doc_e)) - i++; - QueIns(doc_e,a[i]->last); - doc_e=doc_e1; - } - - QSortI64(a,cnt,&SHCompareEntry); - - for (i=0;inext; - while (doc_e!=a[i]) { - doc_e1=doc_e->next; - QueRem(doc_e); - QueIns(doc_e,temps->last); - doc_e=doc_e1; - } - Free(a[i]); - } - Free(a); -} - -U8 *SHNewSection(CDocEntry *doc_e) -{ - U8 *st; - if (doc_e->type_u8==DOCT_TEXT && (st=doc_e->tag)) { - if (!StrNCmp(st,"#help_index",11)) - return st+11; - } - return NULL; -} - -I64 SHCompareSection(CSHSection *e1,CSHSection *e2) -{ - I64 i1,i2; - U8 *st1,*st2; - if (e1 && e2 && e1->next!=e1 && e2->next!=e2) { - if (e1->next->type_u8==DOCT_TEXT && e2->next->type_u8==DOCT_TEXT) { - st1=SHNewSection(e1->next); - st2=SHNewSection(e2->next); - if (st1&&st2) { - if (StrMatch("\"\"",st1)) - i1=1; - else - i1=0; - if (StrMatch("\"\"",st2)) - i2=1; - else - i2=0; - if (i1!=i2) - return i1-i2; - else - return StrCmp(st1,st2); - } else - return Sign(st1-st2); - } else - return Sign(e1->next-e2->next); - } else - return Sign(e1-e2); -} - -public U0 TSSortHeader(U8 *name) -{ - CDoc *doc; - I64 i=0,cnt; - CSHSection **a; - CDocEntry *doc_e,*doc_e1; - - if (!name || !*name || !FileFind(name)) - return; - - doc=DocRead(name,DOCF_PLAIN_TEXT_WITH_TABS|DOCF_NO_CURSOR); - - cnt=1; - doc_e=doc->root.next; - while (doc_e!=doc) { - if (SHNewSection(doc_e)) - cnt++; - doc_e=doc_e->next; - } - - a=MAlloc(sizeof(CSHSection *)*cnt); - for (i=0;iroot.next; - while (doc_e!=doc) { - doc_e1=doc_e->next; - if (doc_e->type_u8==DOCT_TEXT && doc_e->tag && *doc_e->tag) { - QueRem(doc_e); - if (SHNewSection(doc_e)) - i++; - QueIns(doc_e,a[i]->last); - } else - DocEntryDel(doc,doc_e); - doc_e=doc_e1; - } - - QSortI64(a,cnt,&SHCompareSection); - - for (i=0;inext!=a[i]) { - SHSortSection(a[i]); - doc_e=a[i]->next; - while (doc_e!=a[i]) { - doc_e1=doc_e->next; - QueRem(doc_e); - QueIns(doc_e,doc->root.last); - if (doc_e->type_u8==DOCT_TEXT && doc_e->tag) { - doc->cur_entry=doc_e; - doc->cur_data_col=StrLen(doc_e->tag); - DocPrint(doc,"\n"); - } - doc_e=doc_e1; - } - if (i+1next!=a[i+1]) - DocPrint(doc,"\n"); - } - Free(a[i]); - } - Free(a); - DocWrite(doc); - DocDel(doc); -} - -public U0 TSSortHeaders() -{ - TSSortHeader("/Kernel/Adam1b.HPP.Z"); - TSSortHeader("/Kernel/Adam1c.HPP.Z"); - TSSortHeader("/Kernel/KExts.CPP.Z"); - TSSortHeader("/Compiler/CmpExts.CPP.Z"); - TSSortHeader("/Compiler/Cmp.HPP.Z"); - TSSortHeader("/Adam/AdamExts.HPP.Z"); -} - diff --git a/Demo/Asm/AsmAndC1.CPP b/Demo/Asm/AsmAndC1.CPP index 4374efd..17ec145 100644 --- a/Demo/Asm/AsmAndC1.CPP +++ b/Demo/Asm/AsmAndC1.CPP @@ -17,7 +17,7 @@ _BEEPS:: //You can always clobber RAX,RBX,RCX,RDX,R8,R9. The compiler expects that. PUSH RBP MOV RBP,RSP - MOV RCX,U64 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/Adam1a.HPP,SF_ARG1"$ + MOV RCX,U64 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/KernelA.HPP,SF_ARG1"$ @@05: PUSH RCX //U0 $LK,"Beep",A="MN:Beep"$(I64 freq=500,Bool busy=FALSE) diff --git a/Demo/Asm/AsmAndC2.CPP b/Demo/Asm/AsmAndC2.CPP index fce1bb1..281aa73 100644 --- a/Demo/Asm/AsmAndC2.CPP +++ b/Demo/Asm/AsmAndC2.CPP @@ -17,13 +17,13 @@ USE64 //Defaults to 64, but this is a good habit. JIFFIES_MSG: DU8 "Jiffies:",0; -//See $LK,"::/Kernel/Str1a.CPP",A="FL:::/Kernel/Str1a.CPP,1"$ and $LK,"::/Kernel/Utils1a.CPP"$. +//See $LK,"::/Kernel/StrA.CPP",A="FL:::/Kernel/StrA.CPP,1"$ and $LK,"::/Kernel/KUtils.CPP"$. _BEEPS2:: //You can clobber RAX,RBX,RCX,RDX,R8,R9. The compiler expects that. PUSH RBP MOV RBP,RSP - MOV RCX,U64 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/Adam1a.HPP,SF_ARG1"$ + MOV RCX,U64 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/KernelA.HPP,SF_ARG1"$ PUSH U64 [&cnts.jiffies] diff --git a/Demo/Asm/AsmHelloWorld.CPP b/Demo/Asm/AsmHelloWorld.CPP index 6d6f6ce..52383bd 100644 --- a/Demo/Asm/AsmHelloWorld.CPP +++ b/Demo/Asm/AsmHelloWorld.CPP @@ -5,7 +5,7 @@ error, like when repeatedly #including it from the cmd line. These are many useful kernel -routines $LK,"::/Kernel/Str1a.CPP",A="FF:::/Kernel/Str1a.CPP,PUT_CHARS"$ +routines $LK,"::/Kernel/StrA.CPP",A="FF:::/Kernel/StrA.CPP,PUT_CHARS"$ intended to be called from asm. Generally, they preserve regs. diff --git a/Demo/Asm/BuzzFizz.CPP b/Demo/Asm/BuzzFizz.CPP index ebb1241..cfd9593 100644 --- a/Demo/Asm/BuzzFizz.CPP +++ b/Demo/Asm/BuzzFizz.CPP @@ -51,29 +51,27 @@ Call(_BUZZ_FIZZ); _BUZZ_FIZZ+0x0001 488BEC MOV U64 RBP,U64 RSP _BUZZ_FIZZ+0x0004 56 PUSH U64 RSI _BUZZ_FIZZ+0x0005 57 PUSH U64 RDI - _BUZZ_FIZZ+0x0006 BE06000000 MOV U64 RSI,U32 00000006 - _BUZZ_FIZZ+0x000B BF07000000 MOV U64 RDI,U32 00000007 - _BUZZ_FIZZ+0x0010 B801000000 MOV U64 RAX,U32 00000001 - _BUZZ_FIZZ+0x0015 E88F7D2480 CALL I32 PUT_HEX_U64+0x0000 + _BUZZ_FIZZ+0x0006 BE06000000 MOV U32 ESI,U32 00000006 + _BUZZ_FIZZ+0x000B BF07000000 MOV U32 EDI,U32 00000007 + _BUZZ_FIZZ+0x0010 B801000000 MOV U32 EAX,U32 00000001 + _BUZZ_FIZZ+0x0015 E8C51F2BC0 CALL I32 PUT_HEX_U64+0x0000 _BUZZ_FIZZ+0x001A 50 PUSH U64 RAX - _BUZZ_FIZZ+0x001B B820000000 MOV U64 RAX,U32 00000020 - _BUZZ_FIZZ+0x0020 E8E87D2480 CALL I32 PUT_CHARS+0x0000 + _BUZZ_FIZZ+0x001B B820000000 MOV U32 EAX,U32 00000020 + _BUZZ_FIZZ+0x0020 E81E202BC0 CALL I32 PUT_CHARS+0x0000 _BUZZ_FIZZ+0x0025 48FFCE DEC U64 RSI _BUZZ_FIZZ+0x0028 7514 JNZ I8 _BUZZ_FIZZ+0x003E - _BUZZ_FIZZ+0x002A 48B846495A5A MOV U64 RAX,U32 5A5A4946 - _BUZZ_FIZZ+0x0030 2000 AND U8 [RAX],U8 AL - _BUZZ_FIZZ+0x0032 0000 ADD U8 [RAX],U8 AL - _BUZZ_FIZZ+0x0034 E8D47D2480 CALL I32 PUT_CHARS+0x0000 - _BUZZ_FIZZ+0x0039 BE06000000 MOV U64 RSI,U32 00000006 + _BUZZ_FIZZ+0x002A 48B846495A5A MOV U64 RAX,I64 000000205A5A4946 + _BUZZ_FIZZ+0x0030 20000000 + _BUZZ_FIZZ+0x0034 E80A202BC0 CALL I32 PUT_CHARS+0x0000 + _BUZZ_FIZZ+0x0039 BE06000000 MOV U32 ESI,U32 00000006 _BUZZ_FIZZ+0x003E 48FFCF DEC U64 RDI _BUZZ_FIZZ+0x0041 7514 JNZ I8 _BUZZ_FIZZ+0x0057 - _BUZZ_FIZZ+0x0043 48B842555A5A MOV U64 RAX,U32 5A5A5542 - _BUZZ_FIZZ+0x0049 2000 AND U8 [RAX],U8 AL - _BUZZ_FIZZ+0x004B 0000 ADD U8 [RAX],U8 AL - _BUZZ_FIZZ+0x004D E8BB7D2480 CALL I32 PUT_CHARS+0x0000 - _BUZZ_FIZZ+0x0052 BF07000000 MOV U64 RDI,U32 00000007 - _BUZZ_FIZZ+0x0057 B80A000000 MOV U64 RAX,U32 0000000A - _BUZZ_FIZZ+0x005C E8AC7D2480 CALL I32 PUT_CHARS+0x0000 + _BUZZ_FIZZ+0x0043 48B842555A5A MOV U64 RAX,I64 000000205A5A5542 + _BUZZ_FIZZ+0x0049 20000000 + _BUZZ_FIZZ+0x004D E8F11F2BC0 CALL I32 PUT_CHARS+0x0000 + _BUZZ_FIZZ+0x0052 BF07000000 MOV U32 EDI,U32 00000007 + _BUZZ_FIZZ+0x0057 B80A000000 MOV U32 EAX,U32 0000000A + _BUZZ_FIZZ+0x005C E8E21F2BC0 CALL I32 PUT_CHARS+0x0000 _BUZZ_FIZZ+0x0061 58 POP U64 RAX _BUZZ_FIZZ+0x0062 48FFC0 INC U64 RAX _BUZZ_FIZZ+0x0065 4883F864 CMP U64 RAX,I8 64 diff --git a/Demo/Asm/MulByHand.CPP b/Demo/Asm/MulByHand.CPP index bcebd35..8138308 100644 --- a/Demo/Asm/MulByHand.CPP +++ b/Demo/Asm/MulByHand.CPP @@ -26,7 +26,7 @@ MUL_BY_HAND_U8_U8_TO_U16: //This is only for fun. _MUL_BY_HAND_U8_U8_TO_U16:: //C callable PUSH RBP MOV RBP,RSP - MOV AL,U8 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/Adam1a.HPP,SF_ARG1"$ + MOV AL,U8 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/KernelA.HPP,SF_ARG1"$ MOV BL,U8 SF_ARG2[RBP] CALL MUL_BY_HAND_U8_U8_TO_U16 MOVZX RAX,AX @@ -38,7 +38,7 @@ _MUL_U64_U64_TO_U128:: PUSH RBP MOV RBP,RSP MOV RBX,U64 SF_ARG3[RBP] - MOV RAX,U64 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/Adam1a.HPP,SF_ARG1"$ + MOV RAX,U64 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/KernelA.HPP,SF_ARG1"$ MUL U64 SF_ARG2[RBP] //Result RDX:RAX 128bit MOV U64 [RBX],RAX MOV U64 8[RBX],RDX diff --git a/Demo/Asm/PutDec.CPP b/Demo/Asm/PutDec.CPP index d3916da..6c41ac9 100644 --- a/Demo/Asm/PutDec.CPP +++ b/Demo/Asm/PutDec.CPP @@ -6,7 +6,7 @@ PUT_DEC_U64:: MOV RBP,RSP SUB RSP,24 //24 char buffer on stack -//$LK,"Save regs",A="FF:::/Kernel/Adam1a.HPP,PUSH_C_REGS"$ which C code is free to clobber. We don't have to for C callers, +//$LK,"Save regs",A="FF:::/Kernel/KernelA.HPP,PUSH_C_REGS"$ which C code is free to clobber. We don't have to for C callers, //but this function will be nice for ASM callers if it saves all regs. PUSH_C_REGS diff --git a/Demo/AutoFile/AFEd.TXT b/Demo/AutoFile/AFEd.TXT index 37553b0..6fcdef6 100644 --- a/Demo/AutoFile/AFEd.TXT +++ b/Demo/AutoFile/AFEd.TXT @@ -10,7 +10,7 @@ #define IC_CALL_END2 0x08 #define IC_RETURN_VAL 0x09 #define IC_RETURN_VAL2 0x0A -#define IC_IMM_U64 0x0B +#define IC_IMM_I64 0x0B #define IC_IMM_F64 0x0C #define IC_STR_CONST 0x0D #define IC_ABS_ADDR 0x0E diff --git a/Demo/AutoFile/AFSetIP.CPP b/Demo/AutoFile/AFSetIP.CPP index 287fb67..9649b2d 100644 --- a/Demo/AutoFile/AFSetIP.CPP +++ b/Demo/AutoFile/AFSetIP.CPP @@ -4,10 +4,10 @@ U0 AFSetIPDemo() WinBorder(ON); l=Fs->pix_left+Fs->scroll_x; t=Fs->pix_top+Fs->scroll_y; - SetIP(,,,FALSE,FALSE); //Mouse unclicked + IPSet(,,,FALSE,FALSE); //Mouse unclicked AFSetIP(,l-4,t-4); AFSetIP(20,l+20,t+20,,TRUE); - SetIP(,,,FALSE,FALSE); + IPSet(,,,FALSE,FALSE); } AFSetIPDemo; diff --git a/Demo/Directives.CPP b/Demo/Directives.CPP new file mode 100644 index 0000000..79af191 --- /dev/null +++ b/Demo/Directives.CPP @@ -0,0 +1,13 @@ +U0 Directives() +{ + "Date :%s\n",__DATE__; + "Time :%s\n",__TIME__; + "File :%s\n",__FILE__; + "Dir :%s\n",__DIR__; + "Line :%d\n",__LINE__; + "Depth:%d\n",__DEPTH__; + "Instruction1:%P:%08X\n",$$,$$; + "Instruction2:%P:%08X\n",$$,$$; +} + +Directives; diff --git a/Demo/DolDoc/DefineStr.CPP b/Demo/DolDoc/DefineStr.CPP index 1d4f50b..f47641f 100644 --- a/Demo/DolDoc/DefineStr.CPP +++ b/Demo/DolDoc/DefineStr.CPP @@ -7,7 +7,7 @@ documentation. */ -DefineLoad("COMPANY","Trivial Solutions"); +DefineLoad("COMPANY","Acme Inc"); "Company: $$TX,\"\",D=\"COMPANY\"$$\n"; DefinePrint("COMPANY_TIME","%T",Now); diff --git a/Demo/DolDoc/FileRead.CPP b/Demo/DolDoc/FileRead.CPP index 2432076..1bd33a7 100644 --- a/Demo/DolDoc/FileRead.CPP +++ b/Demo/DolDoc/FileRead.CPP @@ -57,7 +57,7 @@ Note: Not all $LK,"CDocEntry",A="MN:CDocEntry"$'s are full-sized nodes. Some are $LK,"MAlloc",A="MN:MAlloc"$ed with a smaller size to save mem. They all have at least the size $LK,"CDocEntryBase",A="MN:CDocEntryBase"$. -Note: $LK,"CDocEntry",A="MN:CDocEntry"$'s should be allocated from the +Note: $LK,"CDocEntry",A="MN:CDocEntry"$'s should be alloced from the heap of the owning task, doc->mem_task. The flag arrays $LK,"doldoc.type_flags_form",A="MN:CDolDocGlbls"$, etc diff --git a/Demo/DolDoc/MenuSprite.CPP b/Demo/DolDoc/MenuSprite.CPP index 0fb8bc8..6334108 100644 Binary files a/Demo/DolDoc/MenuSprite.CPP and b/Demo/DolDoc/MenuSprite.CPP differ diff --git a/Demo/DolDoc/UnusedDefine.CPP b/Demo/DolDoc/UnusedDefine.CPP index dd8ea75..7e8546c 100644 --- a/Demo/DolDoc/UnusedDefine.CPP +++ b/Demo/DolDoc/UnusedDefine.CPP @@ -5,16 +5,16 @@ it only occurs once in files. It's a brute force solution, but gets the job done... slowly. -$LK,"Grep",A="MN:Grep"$() returns a count of matches. +$LK,"Find",A="MN:Find"$() returns a count of matches. -$LK,"FileOcc",A="MN:FileOcc"$() is $LK,"Grep",A="MN:Grep"$() with +$LK,"FileOcc",A="MN:FileOcc"$() is $LK,"Find",A="MN:Find"$() with output $LK,"Silent",A="MN:Silent"$(). */ U0 UnusedDefineScan() { CDoc *old_put_doc,*old_display_doc,*doc; - I64 cnt=0; + I64 i,cnt=0; CHashTable *table; CHash *temph; CDocEntry *doc_e,*doc_e2; @@ -26,11 +26,13 @@ U0 UnusedDefineScan() try { table=Fs->hash_table; while (table) { - temph=table->next_added; - while (temph!=table) { - if (temph->type&HTT_DEFINE_STR) - cnt++; - temph=temph->next_added; + for (i=0;i<=table->mask;i++) { + temph=table->body[i]; + while (temph) { + if (temph->type&HTT_DEFINE_STR) + cnt++; + temph=temph->next; + } } table=table->next; } @@ -41,32 +43,34 @@ U0 UnusedDefineScan() table=Fs->hash_table; while (table) { - temph=table->next_added; - while (temph!=table) { - if (temph->type&HTT_DEFINE_STR) { - progress1++; - if (FileOcc(temph->str,"/*","+l-i+T")==1) { - doc=DocNew; - old_put_doc=DocPut; - old_display_doc=DocDisplay; - Fs->put_doc=Fs->display_doc=doc; - Grep(temph->str,"/*","+l-i+T"); - Fs->put_doc=old_put_doc; - Fs->display_doc=old_display_doc; - doc_e=doc->root.next; - while (doc_e!=doc) { - if (doc_e->type_u8==DOCT_LINK) { - "%s ",temph->str; - doc_e2=DocEntryCopy(doc,doc_e); - DocInsEntry(old_put_doc,doc_e2); - '\n'; + for (i=0;i<=table->mask;i++) { + temph=table->body[i]; + while (temph) { + if (temph->type&HTT_DEFINE_STR) { + progress1++; + if (FileOcc(temph->str,"/*","+l-i+T")==1) { + doc=DocNew; + old_put_doc=DocPut; + old_display_doc=DocDisplay; + Fs->put_doc=Fs->display_doc=doc; + Find(temph->str,"/*","+l-i+T"); + Fs->put_doc=old_put_doc; + Fs->display_doc=old_display_doc; + doc_e=doc->root.next; + while (doc_e!=doc) { + if (doc_e->type_u8==DOCT_LINK) { + "%s ",temph->str; + doc_e2=DocEntryCopy(doc,doc_e); + DocInsEntry(old_put_doc,doc_e2); + '\n'; + } + doc_e=doc_e->next; } - doc_e=doc_e->next; + DocDel(doc); } - DocDel(doc); } + temph=temph->next; } - temph=temph->next_added; } table=table->next; } diff --git a/Demo/Dsk/DataBase.CPP b/Demo/Dsk/DataBase.CPP index 5109b16..ef891ff 100644 --- a/Demo/Dsk/DataBase.CPP +++ b/Demo/Dsk/DataBase.CPP @@ -1,4 +1,4 @@ -#define DB_FILENAME "HOME/DataBaseDemo.BIN" +#define DB_FILENAME "::/Home/DataBaseDemo.BIN" #define DB_MAX_ACCT 100 #define DB_ACCT_BLKS 1 diff --git a/Demo/Dsk/DskRaw.CPP b/Demo/Dsk/DskRaw.CPP index 7663fa0..058c91e 100644 --- a/Demo/Dsk/DskRaw.CPP +++ b/Demo/Dsk/DskRaw.CPP @@ -1,41 +1,41 @@ U0 RawAccess(I64 drv_let=0) { - CPrt *p=Drv2Prt(drv_let); - CBlkDev *bdev=Drv2BlkDev(drv_let); + CDrv *dv=Let2Drv(drv_let); + CBlkDev *bd=Let2BlkDev(drv_let); I64 blk,old_offset,old_size; U8 *buf=MAlloc(BLK_SIZE); - PrtRep; + DrvRep; PressAKey; - ClassRep(p); + ClassRep(dv); PressAKey; - ClassRep(bdev); + ClassRep(bd); PressAKey; //Temporarily change partition range to full device. //Normally, you are limited to just your partition. //This is obviously $BK,1$dangerous$BK,0$! - old_offset=p->offset; - old_size =p->size; - p->offset=bdev->min_blk; - p->size=bdev->max_blk-bdev->min_blk+1; + old_offset=dv->base_offset; + old_size =dv->size; + dv->base_offset=bd->min_blk; + dv->size=bd->max_blk-bd->min_blk+1; try { - blk=GetI64("Blk to Read: ",old_offset,bdev->min_blk,bdev->max_blk); - RBlks(p,buf,blk,1); + blk=GetI64("Blk to Read: ",old_offset,bd->min_blk,bd->max_blk); + RBlks(dv,buf,blk,1); D(buf,BLK_SIZE); } catch PutExcept; - p->offset=old_offset; - p->size =old_size; + dv->base_offset=old_offset; + dv->size =old_size; Free(buf); } RawAccess; -//See $LK,"RBlks",A="MN:RBlks"$(), $LK,"WBlks",A="MN:WBlks"$(), $LK,"PrtLock",A="MN:PrtLock"$(), $LK,"PrtUnlock",A="MN:PrtUnlock"$() +//See $LK,"RBlks",A="MN:RBlks"$(), $LK,"WBlks",A="MN:WBlks"$(), $LK,"DrvLock",A="MN:DrvLock"$(), $LK,"DrvUnlock",A="MN:DrvUnlock"$() //$LK,"DBlk",A="MN:DBlk"$(), $LK,"DCluster",A="MN:DCluster"$(), $LK,"BlkDevLock",A="MN:BlkDevLock"$() and $LK,"BlkDevUnlock",A="MN:BlkDevUnlock"$(). diff --git a/Demo/Dsk/UnusedSpaceRep.CPP b/Demo/Dsk/UnusedSpaceRep.CPP index 037a12c..f58d49b 100644 --- a/Demo/Dsk/UnusedSpaceRep.CPP +++ b/Demo/Dsk/UnusedSpaceRep.CPP @@ -1,13 +1,13 @@ U0 UnusedSpaceRep() { I64 i; - CPrt *p; + CDrv *dv; for (i=0;i<26;i++) try { - p=Drv2Prt(i+'A'); - if (p->type==PT_FAT32 || p->type==PT_REDSEA) + dv=Let2Drv(i+'A'); + if (dv->type==DVT_FAT32 || dv->type==DVT_REDSEA) "%C: %7.3f%% Free\n", - Prt2Drv(p),UnusedDrvSpace(Prt2Drv(p))*100.0/(p->size*BLK_SIZE); + Drv2Let(dv),UnusedDrvSpace(Drv2Let(dv))*100.0/(dv->size*BLK_SIZE); } catch Fs->catch_except=TRUE; } diff --git a/Demo/ExtendedChars.CPP b/Demo/ExtendedChars.CPP index 54c46cb..3423b41 100644 --- a/Demo/ExtendedChars.CPP +++ b/Demo/ExtendedChars.CPP @@ -1,16 +1,19 @@ -U0 Install() -{ - text.font[8*255+0]=0b00111100; - text.font[8*255+1]=0b01000010; - text.font[8*255+2]=0b10100101; - text.font[8*255+3]=0b10000001; - text.font[8*255+4]=0b11000011; - text.font[8*255+5]=0b10111101; - text.font[8*255+6]=0b01000010; - text.font[8*255+7]=0b00111100; -} -Install; +U8 face[8]={ + +0b00111100, +0b01000010, +0b10100101, +0b10000001, +0b11000011, +0b10111101, +0b01000010, +0b00111100, + +}; + + +text.font[255]=face[0](U64); "Face:ÿ\n"; diff --git a/Demo/Games/BattleLines.CPP b/Demo/Games/BattleLines.CPP index 488652c..a2109d4 100644 Binary files a/Demo/Games/BattleLines.CPP and b/Demo/Games/BattleLines.CPP differ diff --git a/Demo/Games/BigGuns.CPP b/Demo/Games/BigGuns.CPP index 8595c1f..e3e9305 100644 Binary files a/Demo/Games/BigGuns.CPP and b/Demo/Games/BigGuns.CPP differ diff --git a/Demo/Games/BlackDiamond.CPP b/Demo/Games/BlackDiamond.CPP index 08dbf48..63b799c 100644 Binary files a/Demo/Games/BlackDiamond.CPP and b/Demo/Games/BlackDiamond.CPP differ diff --git a/Demo/Games/BomberGolf.CPP b/Demo/Games/BomberGolf.CPP index b1fa1f2..8e20311 100644 Binary files a/Demo/Games/BomberGolf.CPP and b/Demo/Games/BomberGolf.CPP differ diff --git a/Demo/Games/BugBird.CPP b/Demo/Games/BugBird.CPP index dba458d..a03ecda 100644 Binary files a/Demo/Games/BugBird.CPP and b/Demo/Games/BugBird.CPP differ diff --git a/Demo/Games/CastleFrankenstein.CPP b/Demo/Games/CastleFrankenstein.CPP index 43895f4..5555e98 100644 --- a/Demo/Games/CastleFrankenstein.CPP +++ b/Demo/Games/CastleFrankenstein.CPP @@ -144,6 +144,7 @@ U0 DrawIt(CTask *task,CDC *dc) CSprite *temps; F64 tt; CD3I32 poly[4]; + Monster *tempm; DCAllocDepthBuf(dc); MemSet(panels_processed_bitmap,0,(map_width*map_height+7)>>3); @@ -197,7 +198,7 @@ U0 DrawIt(CTask *task,CDC *dc) LOS(xx*SCREEN_SCALE+SCREEN_SCALE/2,yy*SCREEN_SCALE+SCREEN_SCALE/2, man_xx,man_yy)) { if (c==YELLOW) - dc->color=RED; + dc->color=DKGRAY; else dc->color=c; poly[0].x=x; @@ -246,7 +247,7 @@ U0 DrawIt(CTask *task,CDC *dc) GrFillPoly3(dc,4,poly); } if (!map[yy*map_width+xx+1]) { - dc->color=DKGRAY; + dc->color=WHITE; poly[0].x=x+SCREEN_SCALE; poly[0].y=y; poly[0].z=0; @@ -278,7 +279,7 @@ U0 DrawIt(CTask *task,CDC *dc) GrFillPoly3(dc,4,poly); } if (!map[yy*map_width+xx-1]) { - dc->color=DKGRAY; + dc->color=WHITE; poly[0].x=x; poly[0].y=y; poly[0].z=0; @@ -303,9 +304,9 @@ U0 DrawIt(CTask *task,CDC *dc) } //Draw Monsters - for (i=0;ix; + y=tempm->y; if (LOS(x,y,man_xx,man_yy)) { x-=man_xx; y-=man_yy; @@ -314,7 +315,7 @@ U0 DrawIt(CTask *task,CDC *dc) zz=0; GrTransform(dc,&xx,&yy,&zz); if (zz>0) { - if (monsters[i].dead) + if (tempm->dead) SpriteMat3B(dc,x,y,0,$IB,"<2>",BI=2$,r2); else { tt=Tri(tS,1.0); @@ -345,9 +346,9 @@ U0 DrawIt(CTask *task,CDC *dc) //Draw Things on heads-up Map dc->color=LTPURPLE; - for (i=0;idead) + GrPlot3(dc,2*(tempm->x/SCREEN_SCALE),2*(map_height-1-tempm->y/SCREEN_SCALE),0); dc->color=LTCYAN; GrPlot3(dc,2*(man_xx/SCREEN_SCALE),2*(map_height-1-man_yy/SCREEN_SCALE),0); @@ -370,11 +371,13 @@ U0 Fire() { I64 i,x,y; F64 d,dx,dy,xx=Cos(man_é),yy=Sin(man_é); + Monster *tempm; + Noise(100,300,1000); - for (i=0;ix; + y=tempm->y; + if (!tempm->dead && LOS(x,y,man_xx,man_yy)) { dx=x-man_xx; dy=man_yy-y; @@ -382,7 +385,7 @@ U0 Fire() dx/=d; dy/=d; if (dx*xx+dy*yy>0.995) { - monsters[i].dead=TRUE; + tempm->dead=TRUE; if (!--monsters_left) { tf=tS; if (tf-t0",BI=1$,&min_map_x,&max_map_x,&min_map_y,&max_map_y); - map_width =(max_map_x-min_map_x+1)/MAP_SCALE+2; - map_height=(max_map_y-min_map_y+1)/MAP_SCALE+2; + dc=Sprite2DC($IB,"<1>",BI=1$); + map_width =dc->width/MAP_SCALE+2; + map_height=dc->height/MAP_SCALE+2; Free(map); Free(panels_processed_bitmap); map=CAlloc(map_width*map_height*sizeof(U8)); panels_processed_bitmap=MAlloc((map_width*map_height+7)>>3); - dc=DCNew(map_width*MAP_SCALE,map_height*MAP_SCALE); - Sprite3(dc,-min_map_x+MAP_SCALE,-min_map_y+MAP_SCALE,0,$IB,"<1>",BI=1$); - for (y=1;ydead=FALSE; do { - monsters[i].x=RandU64%((map_width-2)*SCREEN_SCALE)+SCREEN_SCALE; - monsters[i].y=RandU64%((map_height-2)*SCREEN_SCALE)+SCREEN_SCALE; - } while (!map[(monsters[i].y/SCREEN_SCALE)*map_width+monsters[i].x/SCREEN_SCALE]); + tempm->x=RandU64%((map_width-2)*SCREEN_SCALE)+SCREEN_SCALE; + tempm->y=RandU64%((map_height-2)*SCREEN_SCALE)+SCREEN_SCALE; + } while (!map[(tempm->y/SCREEN_SCALE)*map_width+tempm->x/SCREEN_SCALE]); } monsters_left=NUM_MONSTERS; tf=0; @@ -434,12 +436,14 @@ U0 Init() U0 AnimateTask(I64) { I64 i,x,y,dd; + Monster *tempm; + while (TRUE) { dd=0.25*SCREEN_SCALE*Sin(tS/2); - for (i=0;idead) { + x=tempm->x; + y=tempm->y; if (i&1) x+=dd; else @@ -457,8 +461,8 @@ U0 AnimateTask(I64) !map[(y/SCREEN_SCALE-1)*map_width+x/SCREEN_SCALE] && y-RoundI64(y,SCREEN_SCALE)x=x; + tempm->y=y; } } Sleep(20); @@ -493,7 +497,7 @@ U0 MoveMan(F64 x=Clamp(x,0,map_width*SCREEN_SCALE); y=Clamp(y,0,map_height*SCREEN_SCALE); color=map[y/SCREEN_SCALE*map_width+x/SCREEN_SCALE]; - if (color==RED || color==GREEN) { + if (color==DKGRAY || color==GREEN) { man_xx=x; man_yy=y; break; @@ -531,11 +535,11 @@ U0 CastleFrankenstein() ); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Fs->text_attr=RED<<4+WHITE; + Fs->text_attr=DKGRAY<<4+WHITE; Preempt(OFF); WinBorder; WinMax; - WordStat; + AutoComplete; Init; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); @@ -583,7 +587,7 @@ fs_done: } CastleFrankenstein; -+ ++     < diff --git a/Demo/Games/ChessNet.CPP b/Demo/Games/ChessNet.CPP deleted file mode 100644 index b1cc931..0000000 Binary files a/Demo/Games/ChessNet.CPP and /dev/null differ diff --git a/Demo/Games/CircleTrace.CPP b/Demo/Games/CircleTrace.CPP index 0c15641..0e5e30e 100644 --- a/Demo/Games/CircleTrace.CPP +++ b/Demo/Games/CircleTrace.CPP @@ -40,7 +40,7 @@ U0 CircleTrace() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - WordStat; + AutoComplete; cx=Fs->pix_width/2; cy=Fs->pix_height/2; diff --git a/Demo/Games/Coach.CPP b/Demo/Games/Coach.CPP index 63e7fd2..b265b26 100644 Binary files a/Demo/Games/Coach.CPP and b/Demo/Games/Coach.CPP differ diff --git a/Demo/Games/DunGen.CPP b/Demo/Games/DunGen.CPP index a92fb86..7a76be1 100644 --- a/Demo/Games/DunGen.CPP +++ b/Demo/Games/DunGen.CPP @@ -23,9 +23,9 @@ $SP,"<2>",BI=2$ $SP,"<3>",BI=3$ -$SP,"<4>",BI=4$ //This is a template you can copy and use to make a tile. - + +$SP,"<4>",BI=4$ $SP,"<5>",BI=5$ @@ -35,28 +35,24 @@ $SP,"<7>",BI=7$ $SP,"<8>",BI=8$ - - $SP,"<9>",BI=9$ $SP,"<10>",BI=10$ -$SP,"<11>",BI=11$ - $BG$//These are indexed by color #. //See $LK,"COLORS",A="MN:RED"$. U8 *tiles1[16]= {NULL,$IB,"<7>",BI=7$ ,$IB,"<5>",BI=5$ ,NULL, - $IB,"<6>",BI=6$ ,NULL,NULL,NULL, NULL,NULL,NULL,NULL, + $IB,"<6>",BI=6$ ,NULL,NULL,NULL, NULL,NULL,NULL,NULL}; U8 *tiles2[16]= {NULL,$IB,"<8>",BI=8$ ,$IB,"<5>",BI=5$ ,NULL, - $IB,"<6>",BI=6$ ,NULL,NULL,NULL, NULL,NULL,NULL,NULL, + $IB,"<6>",BI=6$ ,NULL,NULL,NULL, NULL,NULL,NULL,NULL}; #define SCREEN_SCALE 24 @@ -102,11 +98,12 @@ U0 DrawIt(CTask *task,CDC *dc) { CDC *dc_t=DCAlias(gr.dc2,task); I64 i,x,y,xx,yy,x1,y1,z1,color, - cx=task->pix_width/2, - cy=task->pix_height/2; + cx=task->pix_width/2, + cy=task->pix_height/2; CD3I32 poly[4]; U8 **_tiles; F64 tt; + Monster *tempm; if (Blink(5)) _tiles=tiles1; @@ -131,7 +128,7 @@ U0 DrawIt(CTask *task,CDC *dc) xx=x+screen_x; if (0<=xxcolor=LTGRAY; - for (x=-SCREEN_WIDTH/2;x<=SCREEN_WIDTH/2;x++) - GrLine3(dc_t,x*SCREEN_SCALE,-SCREEN_HEIGHT/2*SCREEN_SCALE,0,x*SCREEN_SCALE,SCREEN_HEIGHT/2*SCREEN_SCALE-1,0); - for (y=-SCREEN_HEIGHT/2;y<=SCREEN_HEIGHT/2;y++) - GrLine3(dc_t,-SCREEN_WIDTH/2*SCREEN_SCALE,y*SCREEN_SCALE,0,SCREEN_WIDTH/2*SCREEN_SCALE,y*SCREEN_SCALE-1,0); + } for (y=-SCREEN_HEIGHT/2;y",BI=10$); + Sprite3(dc,x1,y1,z1,$IB,"<9>",BI=9$); } if (xx+1",BI=11$); + Sprite3(dc,x1,y1,z1,$IB,"<10>",BI=10$); } } } } - } + } - for (i=0;idead && LOS(tempm->x,tempm->y,man_x,man_y)) { + x1=(tempm->x-screen_x)*SCREEN_SCALE+SCREEN_SCALE/2; + y1=(tempm->y-screen_y)*SCREEN_SCALE+SCREEN_SCALE/2; z1=0; GrTransform(dc_t,&x1,&y1,&z1); - if (monsters[i].dx<0) { + if (tempm->dx<0) { dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; GrSetSymmetry(dc,x1,y1,x1,y1+1); } else dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); - Sprite3(dc,x1,y1,z1,$IB,"<9>",BI=9$); + Sprite3(dc,x1,y1,z1,$IB,"<4>",BI=4$); } x1=(man_x-screen_x)*SCREEN_SCALE+SCREEN_SCALE/2; @@ -211,6 +202,8 @@ U0 DrawIt(CTask *task,CDC *dc) if (tS-man_attack_t0<0.2) { x1+=Tri(tS-man_attack_t0,0.2)*SCREEN_SCALE*man_dx; y1+=Tri(tS-man_attack_t0,0.2)*SCREEN_SCALE*man_dy; + if (man_dy!=1) + y1-=Saw(tS-man_attack_t0,0.2)*SCREEN_SCALE; } GrTransform(dc_t,&x1,&y1,&z1); if (man_dx<0) { @@ -241,12 +234,14 @@ U0 DrawIt(CTask *task,CDC *dc) U0 Attack() { I64 i; + Monster *tempm; + man_attack_t0=tS; Noise(100,300,1000); - for (i=0;idead && + man_x+man_dx==tempm->x && man_y+man_dy==tempm->y) { + tempm->dead=TRUE; if (!--monsters_left) { tf=tS; if (tf-t0",BI=1$,&minx,&maxx,&miny,&maxy); - map_width =(maxx-minx+1)/MAP_SCALE; - map_height=(maxy-miny+1)/MAP_SCALE; + Monster *tempm; + + dc=Sprite2DC($IB,"<1>",BI=1$); + map_width =dc->width/MAP_SCALE; + map_height=dc->height/MAP_SCALE; Free(map); map=MAlloc(map_width*map_height*sizeof(U8)); - dc=DCNew(map_width*MAP_SCALE,map_height*MAP_SCALE); - Sprite3(dc,-minx,-miny,0,$IB,"<1>",BI=1$); for (y=0;ydead=FALSE; + tempm->dx=0; + tempm->dy=0; do { - monsters[i].x=RandU64%(map_width-2)+1; - monsters[i].y=RandU64%(map_height-2)+1; - } while (!map[(monsters[i].y)*map_width+monsters[i].x]); + tempm->x=RandU64%(map_width-2)+1; + tempm->y=RandU64%(map_height-2)+1; + } while (!map[(tempm->y)*map_width+tempm->x]); } monsters_left=NUM_MONSTERS; tf=0; @@ -303,19 +298,20 @@ U0 CleanUp() U0 AnimateTask(I64) { I64 i,x,y,dx,dy; + Monster *tempm; + while (TRUE) { - for (i=0;idead) { dx=RandU16%3-1; dy=RandU16%3-1; - x=monsters[i].x+dx; - y=monsters[i].y+dy; - if (0<=x<=map_width && 0<=y<=map_height && - map[y*map_width+x]) { - monsters[i].x=x; - monsters[i].y=y; - monsters[i].dx=dx; - monsters[i].dy=dy; + x=tempm->x+dx; + y=tempm->y+dy; + if (0<=xx=x; + tempm->y=y; + tempm->dx=dx; + tempm->dy=dy; } } Sleep(1000); @@ -345,7 +341,7 @@ U0 DunGen() Fs->text_attr=BLACK<<4+WHITE; Preempt(OFF); WinMax; - WordStat; + AutoComplete; Init; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); DocCursor; @@ -374,7 +370,7 @@ U0 DunGen() man_dy=0; Attack; } else - if (man_x+1SCREEN_WIDTH/2-3) { screen_x+=SCREEN_WIDTH/2; @@ -389,7 +385,7 @@ U0 DunGen() man_dy=0; Attack; } else - if (man_x-1>=0 && map[man_y*map_width+(man_x-1)]==RED) { + if (man_x-1>=0 && map[man_y*map_width+(man_x-1)]==DKGRAY) { man_x--; if (man_x-screen_x<-SCREEN_WIDTH/2+3) { screen_x-=SCREEN_WIDTH/2; @@ -404,7 +400,7 @@ U0 DunGen() man_dy=-1; Attack; } else - if (man_y-1>=0 && map[(man_y-1)*map_width+man_x]==RED) { + if (man_y-1>=0 && map[(man_y-1)*map_width+man_x]==DKGRAY) { man_y--; if (man_y-screen_y<-SCREEN_HEIGHT/2+3) { screen_y-=SCREEN_HEIGHT/2; @@ -419,7 +415,7 @@ U0 DunGen() man_dy=1; Attack; } else - if (man_y+1SCREEN_HEIGHT/2-3) { screen_y+=SCREEN_HEIGHT/2; @@ -448,127 +444,127 @@ dg_done: } DunGen; -£ -|˜ -˜øÿÿÿ˜ -˜´ -´´øÿÿÿ -´øÿÿÿ˜øÿÿÿ -¤¤ -œ ° -° °üÿÿÿ -°üÿÿÿœüÿÿÿ -œüÿÿÿœ -œ¬ -¬¬ -¬  -   - ¨ -¤$Ì$ -Ì$Ì@ -Ì@¤@ -¤@¤( -¨(È( -È(È< -È<¨< -¨<¨, -¨,Ä, -Ä,Ä8 -Ä8¬8 -¬8¬0 -¬0À0 -À0À4 -À4°4 -Ì4ä4 -ä(ä@ -ä@@ -@ -ø -øø$ -ø$ä$ -è(ü( -üü< -ø<è< -è8è, -è,ø, -ø,ø8 -ø8ì< -ì8ì0 -ì0ô0 -ð4ô4 -ô8ð8 -üü -üì -èøÿÿÿè -èÔ -ÔÔøÿÿÿ -Ôøÿÿÿäøÿÿÿ -äøÿÿÿà -ä äüÿÿÿ -äüÿÿÿØüÿÿÿ -ØüÿÿÿØ -Ø Ü -Ü Ü -àà -ÐÌ -ÈüÿÿÿÈ -È Ä -Ä Äüÿÿÿ - 4�4 -Œ,Œ< -Œ<€< -€<€, -€,ˆ, -ˆ,ˆ8 -ˆ8„8 -„8„0 -˜4˜L -”LœL -œLœX -œX”X -”X”P -˜P˜T -¼ôÿÿÿ¼0 -¼8¼P -¼P¼X°Ä,Ä8Rýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²%þÿÿÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +£ +7 +7üÿÿÿ7 +7S +SSüÿÿÿ +Süÿÿÿ7üÿÿÿ +CC$ +;O +OO +O; +;; +; K +K K +K? +?? +?G +C(k( +k(kD +kDCD +CDC, +G,g, +g,g@ +g@G@ +G@G0 +G0c0 +c0c< +c<K< +K<K4 +K4_4 +_4_8 +_8O8 +k8ƒ8 +ƒ,ƒD +ƒDŸD +ŸDŸ +Ÿ— +——( +—(ƒ( +‡,›, +› ›@ +—@‡@ +‡<‡0 +‡0—0 +—0—< +—<‹@ +‹<‹4 +‹4“4 +�8“8 +“<�< +›› +›‹ +‡üÿÿÿ‡ +‡s +ssüÿÿÿ +süÿÿÿƒüÿÿÿ +ƒüÿÿÿ +ƒƒ +ƒw +ww +w{ +{{ + +ok +gg +gc +cc +?8/8 ++0+@ ++@ @ + @ 0 + 0'0 +'0'< +'<#< +#<#4 +787P +3P;P +;P;\ +;\3\ +3\3T +7T7X +[øÿÿÿ[4 +[<[T +[T[\Oc0c<Òýÿÿÿëÿÿÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJ$ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2ýÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿ   ÿÿÿ    ÿÿ      ÿÿÿ    ÿÿ   ÿÿ  ÿÿÿÿÿÿ      ÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿ     ÿÿÿ    ÿÿ    ÿÿÿ    ÿÿ    ÿÿ  ÿÿÿÿÿÿ       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ' ìÿÿÿéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -òþÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ b ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²'$ìÿÿÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²öÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ýÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ýÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿ   ÿÿÿÿ    ÿÿ      ÿÿ    ÿ    ÿ   ÿ       ÿ   ÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ýÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿ     ÿÿÿÿ    ÿÿÿ    ÿÿÿÿ    ÿÿÿ    ÿÿÿ   ÿÿÿ       ÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ²ýÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2õÿÿÿèÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿ ÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚øÿÿÿéÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ  ÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ùÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Demo/Games/EagleDive.CPP b/Demo/Games/EagleDive.CPP index e5d348f..58478d6 100644 --- a/Demo/Games/EagleDive.CPP +++ b/Demo/Games/EagleDive.CPP @@ -59,7 +59,7 @@ U0 CriticalSectionEnd() LBtr(&critical_section_flag,0); } -/*These are $BK,1$NOT$BK,0$ deallocated after the program ends, +/*These are $BK,1$NOT$BK,0$ dealloced after the program ends, but I did them this way for your benefit so 2D array indexing is not done by hand. You can type "EagleDive;" at the command line @@ -88,7 +88,7 @@ class MPCtrl { Bool app_done; } mp; -U0 FSTransform(CDC *dc,I64 *x,I64 *y,I64 *z) +U0 EDTransform(CDC *dc,I64 *x,I64 *y,I64 *z) { I64 zz; GrRot(dc->r,x,y,z); @@ -479,7 +479,7 @@ U0 MPDrawIt(CTask *task,CDC *dc) //cycle initiated by core#0 to prevent flicker. dc->flags|=DCF_TRANSFORMATION; - dc->transform=&FSTransform; + dc->transform=&EDTransform; dc->x=cx; dc->y=cy; @@ -588,7 +588,7 @@ U0 DrawHorizon(CDC *dc) GrRotZEqu(dc->r,é1); GrSetRotMat(dc,dc->r); dc->flags&=~DCF_TRANSFORMATION; - dc->transform=&FSTransform; + dc->transform=&EDTransform; dc->x=cx; dc->y=cy; @@ -893,7 +893,7 @@ U0 EagleDive(I64 _mp_cnt=MP_MAX_PROCESSORS) F64 pp,tt1,tt2; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - WordStat; + AutoComplete; MenuPush( "File {" " Abort(,CH_SHIFT_ESC);" @@ -972,4 +972,4 @@ EagleDive; &  üÿÿÿ üÿÿÿáÿÿÿ -áÿÿÿ):_¡‘éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠëÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +áÿÿÿ):_éÿÿÿ¡‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠëÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Demo/Games/ElephantWalk.CPP b/Demo/Games/ElephantWalk.CPP index 94d9730..bdbeb56 100644 Binary files a/Demo/Games/ElephantWalk.CPP and b/Demo/Games/ElephantWalk.CPP differ diff --git a/Demo/Games/FlatTops.CPP b/Demo/Games/FlatTops.CPP index d0a6101..f332b6e 100644 --- a/Demo/Games/FlatTops.CPP +++ b/Demo/Games/FlatTops.CPP @@ -767,7 +767,7 @@ U0 FlatTops() Fs->text_attr=BLUE<<4+WHITE; WinMax; WinBorder; - WordStat; + AutoComplete; DocCursor; DocClear; PopUpOk("$$GREEN$${Left-Mouse}$$FG$$\t\tChange Course\n" @@ -846,6 +846,7 @@ FlatTops; + //Maybe use this in the future $SP,"<7>",BI=7$ @@ -862,22 +863,19 @@ FlatTops; -r&úÿÿÿéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr&úÿÿÿéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿb %üÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿb %üÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0 -þÿÿÿ -ÿÿÿÿ 0 -þÿÿÿ -ÿÿÿÿ ƒ 6,çÿÿÿ,}i(U(U7Ôþÿÿ7Ôþÿÿºÿÿÿºÿÿÿdâÿÿÿíþÿÿ2ÿÿÿ2ÿÿÿíþÿÿíþÿÿ2ÿÿÿ2ÿÿÿíþÿÿi,çÿÿÿöÿÿÿ,öÿÿÿ}öÿÿÿi(öÿÿÿU(öÿÿÿUöÿÿÿ7öÿÿÿÔþÿÿ7öÿÿÿÔþÿÿºÿÿÿöÿÿÿºÿÿÿöÿÿÿdâÿÿÿöÿÿÿiöÿÿÿ         - - - - - -       - -  -   ,ìÿÿÿ,(Ôþÿÿ#ÔþÿÿÄÿÿÿÎÿÿÿÞþÿÿÓÿÿÿâÿÿÿÞþÿÿâÿÿÿ#âÿÿÿÓÿÿÿâÿÿÿ'ñÿÿÿâÿÿÿ'âÿÿÿ    -      + +rúÿÿÿéÿÿÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrúÿÿÿéÿÿÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbüÿÿÿìÿÿÿ %ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbüÿÿÿìÿÿÿ %ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZþÿÿÿüÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZþÿÿÿüÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿã <,,çÿÿÿ}âÿÿÿiØÿÿÿUØÿÿÿUâÿÿÿÉÿÿÿÔþÿÿÉÿÿÿÔþÿÿFFdíþÿÿÎÿÿÿÿÿÿÎÿÿÿÿÿÿâÿÿÿíþÿÿâÿÿÿíþÿÿÎÿÿÿÿÿÿÎÿÿÿÿÿÿâÿÿÿíþÿÿâÿÿÿiâÿÿÿ,öÿÿÿ,çÿÿÿöÿÿÿ}âÿÿÿöÿÿÿiØÿÿÿöÿÿÿUØÿÿÿöÿÿÿUâÿÿÿöÿÿÿÉÿÿÿöÿÿÿÔþÿÿÉÿÿÿöÿÿÿÔþÿÿFöÿÿÿFöÿÿÿdöÿÿÿiâÿÿÿöÿÿÿ     +   - - -  \ No newline at end of file + + + +       + +  +           ,,ìÿÿÿØÿÿÿÔþÿÿÝÿÿÿÔþÿÿ<2Þþÿÿ-âÿÿÿÞþÿÿâÿÿÿâÿÿÿÝÿÿÿâÿÿÿ-âÿÿÿ'âÿÿÿ'ñÿÿÿâÿÿÿ   +     +  + + +  \ No newline at end of file diff --git a/Demo/Games/Halogen.CPP b/Demo/Games/Halogen.CPP index bd4a379..1e36dc9 100644 --- a/Demo/Games/Halogen.CPP +++ b/Demo/Games/Halogen.CPP @@ -95,7 +95,7 @@ U0 Halogen() "}" ); Preempt(OFF); - WordStat; + AutoComplete; WinMax; Init; DocCursor; diff --git a/Demo/Games/MassSpring.CPP b/Demo/Games/MassSpring.CPP index 4ff91bf..6de5e35 100644 --- a/Demo/Games/MassSpring.CPP +++ b/Demo/Games/MassSpring.CPP @@ -127,7 +127,7 @@ since we will yield during GetMsg(). Preempt(OFF); Fs->win_inhibit|=WIG_DBL_CLICK; - WordStat; + AutoComplete; MenuPush( "File {" diff --git a/Demo/Games/Maze.CPP b/Demo/Games/Maze.CPP index bd50b28..938cb4c 100644 --- a/Demo/Games/Maze.CPP +++ b/Demo/Games/Maze.CPP @@ -5,7 +5,7 @@ U32 text[TEXT_ROWS][TEXT_COLS]; U0 DrawIt(CTask *task,CDC *) -{ //$LK,"gr.text_base",A="MN:CGrGlbls"$ gets clear 60fps, so we must use our own permanent text array. +{ //$LK,"gr.text_base",A="MN:CGrGlbls"$ gets clear 30fps, so we must use our own permanent text array. MemCpy(gr.text_base+TEXT_COLS,text,(TEXT_ROWS-1)*TEXT_COLS*sizeof(U32)); // You can copy it this way, if you like: @@ -81,7 +81,7 @@ U0 Maze() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; WinBorder; - WordStat; + AutoComplete; DocCursor; DocClear; Fs->draw_it=&DrawIt; diff --git a/Demo/Games/RainDrops.CPP b/Demo/Games/RainDrops.CPP index c5f659d..837d95c 100644 --- a/Demo/Games/RainDrops.CPP +++ b/Demo/Games/RainDrops.CPP @@ -170,16 +170,15 @@ U0 RainDrops() DocCursor; DocClear; Fs->draw_it=&DrawIt; - WordStat; + AutoComplete; try { - do { - ch=GetKey(&sc); - switch (ch) { + do + switch (ch=GetKey(&sc)) { case '\n': Init; break; } - } while (ch!=CH_ESC && ch!=CH_SHIFT_ESC); + while (ch!=CH_ESC && ch!=CH_SHIFT_ESC); } catch PutExcept; SettingsPop; diff --git a/Demo/Games/RawHide.CPP b/Demo/Games/RawHide.CPP index 3c81da9..a13b3a6 100644 --- a/Demo/Games/RawHide.CPP +++ b/Demo/Games/RawHide.CPP @@ -4,11 +4,14 @@ AcctRegSetDftEntry("TempleOS/RawHide","F64 best_score=9999;\n"); AcctRegExeBranch("TempleOS/RawHide"); F64 t0,tf; +I64 outside_cnt; -#define MAP_WIDTH 1500 -#define MAP_HEIGHT 1500 +#define MAP_WIDTH 1000 +#define MAP_HEIGHT 1000 +#define FENCE_WIDTH 320 +#define FENCE_HEIGHT 200 #define MAP_BORDER 3 -CDC *dc2; +CDC *map_dc; $BG,10$#define GE_COW 0 @@ -23,6 +26,9 @@ $SP,"<2>",BI=2$ $SP,"<3>",BI=3$ #define GE_NUM 3 + + +$SP,"<4>",BI=4$ $BG$ class RHCSprite { @@ -30,7 +36,7 @@ class RHCSprite I64 min_x,max_x,min_y,max_y; } rh_sprite[GE_NUM]; -#define NUM_ANIMALS 128 +#define NUM_ANIMALS 100 class Animal { @@ -43,13 +49,13 @@ class Animal //************************************ #define COURSE_LEN (MAP_HEIGHT*2) -I32 *rx,*ry,*rw; +I32 *r_x,*r_y,*r_width; I64 river_lo,river_hi; U0 RiverNew() { - rx=MAlloc(COURSE_LEN*sizeof(I32)); - ry=MAlloc(COURSE_LEN*sizeof(I32)); - rw=MAlloc(COURSE_LEN*sizeof(I32)); + r_x=MAlloc(COURSE_LEN*sizeof(I32)); + r_y=MAlloc(COURSE_LEN*sizeof(I32)); + r_width=MAlloc(COURSE_LEN*sizeof(I32)); river_lo=river_hi=COURSE_LEN/2; } @@ -64,7 +70,7 @@ U0 RiverMake() i=COURSE_LEN/2; while (y.i32[1]=MAP_BORDER && i>=0) { if (old_x.i32[1]!=x.i32[1]||old_y.i32[1]!=y.i32[1]) { - rx[i]=x.i32[1]; ry[i]=y.i32[1]; rw[i]=w.i32[1]; + r_x[i]=x.i32[1]; r_y[i]=y.i32[1]; r_width[i]=w.i32[1]; river_lo=i--; old_x=x; old_y=y; } @@ -94,9 +100,9 @@ U0 RiverMake() //Plot sand bar x=0; y=0; for (i=river_lo;i<=river_hi;i++) { - dc2->color=YELLOW; - dc2->pen_width=rw[i]+5; - GrPlot3(dc2,rx[i]+x.i32[1],ry[i]+y.i32[1],0); + map_dc->color=YELLOW; + map_dc->pen_width=r_width[i]+5; + GrPlot3(map_dc,r_x[i]+x.i32[1],r_y[i]+y.i32[1],0); x=ClampI64(x+RandI32,-6*MAX_U32,6*MAX_U32); y=ClampI64(y+RandI32,-6*MAX_U32,6*MAX_U32); @@ -104,17 +110,17 @@ U0 RiverMake() //Plot water for (i=river_lo;i<=river_hi;i++) { - dc2->color=BLUE; - dc2->pen_width=rw[i]; - GrPlot3(dc2,rx[i],ry[i],0); + map_dc->color=BLUE; + map_dc->pen_width=r_width[i]; + GrPlot3(map_dc,r_x[i],r_y[i],0); } } U0 RiverDel() { - Free(rx); - Free(ry); - Free(rw); + Free(r_x); + Free(r_y); + Free(r_width); } //************************************ @@ -148,12 +154,12 @@ U0 RiverDropsNext(CTask *mem_task) } else { do { if (RandU16&1 && - GrPeek(dc2,rx[tempr->index]+tempr->dx,ry[tempr->index]+tempr->dy)==BLUE) + GrPeek(map_dc,r_x[tempr->index]+tempr->dx,r_y[tempr->index]+tempr->dy)==BLUE) break; - tempr->dx=ClampI64(tempr->dx+RandU16%3-1,-rw[tempr->index]/2,rw[tempr->index]/2); - tempr->dy=ClampI64(tempr->dy+RandU16%3-1,-rw[tempr->index]/2,rw[tempr->index]/2); - } while (GrPeek(dc2,rx[tempr->index]+tempr->dx,ry[tempr->index]+tempr->dy)!=BLUE && - GrPeek(dc2,rx[tempr->index] ,ry[tempr->index]) ==BLUE); //Might be reinitializing + tempr->dx=ClampI64(tempr->dx+RandU16%3-1,-r_width[tempr->index]/2,r_width[tempr->index]/2); + tempr->dy=ClampI64(tempr->dy+RandU16%3-1,-r_width[tempr->index]/2,r_width[tempr->index]/2); + } while (GrPeek(map_dc,r_x[tempr->index]+tempr->dx,r_y[tempr->index]+tempr->dy)!=BLUE && + GrPeek(map_dc,r_x[tempr->index] ,r_y[tempr->index]) ==BLUE); //Might be reinitializing } tempr=tempr1; } @@ -173,7 +179,7 @@ U0 RiverDropsDraw(CDC *dc,I64 cx,I64 cy) Yield; tempr=rd_root.next; while (tempr!=&rd_root) { - GrPlot(dc,rx[tempr->index]+tempr->dx-cx,ry[tempr->index]+tempr->dy-cy); + GrPlot(dc,r_x[tempr->index]+tempr->dx-cx,r_y[tempr->index]+tempr->dy-cy); tempr=tempr->next; } LBtr(&rd_lock,0); @@ -197,8 +203,8 @@ U0 DrawIt(CTask *task,CDC *dc) if (task->scroll_y+cy>MAP_HEIGHT-task->pix_height) task->scroll_y=MAP_HEIGHT-task->pix_height-cy; - dc2->flags|=DCF_NO_TRANSPARENTS; - GrBlot(dc,-cx,-cy,dc2); + map_dc->flags|=DCF_NO_TRANSPARENTS; + GrBlot(dc,-cx,-cy,map_dc); RiverDropsDraw(dc,cx,cy); @@ -237,7 +243,8 @@ U0 DrawIt(CTask *task,CDC *dc) dc->color=BLACK; t=tS-t0; } - GrPrint(dc,-task->scroll_x,-task->scroll_y,"Time:%7.2fs Best:%7.2fs",t,best_score); + GrPrint(dc,-task->scroll_x,-task->scroll_y,"Outside:%03d Time:%7.2fs Best:%7.2fs", + outside_cnt,t,best_score); } U0 BuddySelect(I64 i) @@ -259,8 +266,8 @@ U0 BuddySelect(I64 i) U0 AnimateTask(CTask *parent) { - I64 i,cx,cy,cursor_x,cursor_y,dd,ddx,ddy,cnt,max_speed=MAX_I64, - min_x,max_x,min_y,max_y,updates=0; + I64 i,cx,cy,cursor_x,cursor_y,dd,ddx,ddy,cnt,max_speed=MAX_I64,updates=0, + my_outside_cnt; F64 f,d,dx,dy,s,stress; Animal *tempa,*tempa1; while (TRUE) { @@ -269,8 +276,8 @@ U0 AnimateTask(CTask *parent) cy=(MAP_HEIGHT-parent->pix_height)/2; cursor_x=ip.pos.x+cx-parent->pix_left-parent->scroll_x; cursor_y=ip.pos.y+cy-parent->pix_top -parent->scroll_y; - min_x=max_x=min_y=max_y=cnt=0; - stress=0; + cnt=0;stress=0; + my_outside_cnt=0; for (i=0;idead) { @@ -281,7 +288,7 @@ U0 AnimateTask(CTask *parent) d=Sqrt(dd); dx=ddx/d; dy=ddy/d; - f=2.0e2*MAX_U32/dd; + f=5.0e2*MAX_U32/dd; tempa->dx+=f*dx; tempa->dy+=f*dy; } @@ -316,13 +323,15 @@ U0 AnimateTask(CTask *parent) tempa->dy=0.995*ClampI64(tempa->dy+RandI32/32,-max_speed,max_speed); //Slow in river - if (GrPeek(dc2,tempa->x.i32[1],tempa->y.i32[1])!=LTGREEN) { - tempa->dx/=4; - tempa->dy/=4; + if (GrPeek(map_dc,tempa->x.i32[1],tempa->y.i32[1])!=LTGREEN) { + tempa->dx/=2; + tempa->dy/=2; } - tempa->x+=tempa->dx; - tempa->y+=tempa->dy; + if (GrPeek(map_dc,(tempa->x+tempa->dx)>>32,(tempa->y+tempa->dy)>>32)!=LTGRAY) { + tempa->x+=tempa->dx; + tempa->y+=tempa->dy; + } //Keep on map if (!(MAP_BORDER-tempa->ge->min_x<=tempa->x.i32[1]ge->max_x)) { @@ -333,24 +342,17 @@ U0 AnimateTask(CTask *parent) tempa->y -=tempa->dy; tempa->dy=-tempa->dy; } - - if (cnt) { - min_x=MinI64(min_x,tempa->x); - max_x=MaxI64(max_x,tempa->x); - min_y=MinI64(min_y,tempa->y); - max_y=MaxI64(max_y,tempa->y); - } else { - min_x=max_x=tempa->x; - min_y=max_y=tempa->y; - } - cnt++; + if (tempa->x>>32>=FENCE_WIDTH || tempa->y>>32>=FENCE_HEIGHT) + my_outside_cnt++; } } + outside_cnt=my_outside_cnt; + if (!(updates&15)) RiverDropsNext(parent); - if (!tf && (max_x-min_x)>>32>32color=LTGREEN; - GrRect(dc2,2,2,MAP_WIDTH-4,MAP_HEIGHT-4); + map_dc->color=LTGREEN; + GrRect(map_dc,2,2,MAP_WIDTH-4,MAP_HEIGHT-4); RiverMake; - dc2->pen_width=MAP_BORDER; - dc2->color=RED; - GrBorder(dc2,MAP_BORDER/2,MAP_BORDER/2,MAP_WIDTH-(MAP_BORDER+1)/2,MAP_HEIGHT-(MAP_BORDER+1)/2); + //Plot fence + for (i=FENCE_WIDTH;i>0;i-=16) + Sprite3(map_dc,i,FENCE_HEIGHT,0,$IB,"<4>",BI=4$); + map_dc->pen_width=1; + map_dc->color=BROWN; + for (i=0;icolor=LTGRAY; + GrLine(map_dc,FENCE_WIDTH,0,FENCE_WIDTH,FENCE_HEIGHT-6); + + map_dc->color=LTGREEN; + GrRect(map_dc,FENCE_WIDTH-63,FENCE_HEIGHT-8,46,9); + + map_dc->pen_width=MAP_BORDER; + map_dc->color=RED; + GrBorder(map_dc,MAP_BORDER/2,MAP_BORDER/2,MAP_WIDTH-(MAP_BORDER+1)/2,MAP_HEIGHT-(MAP_BORDER+1)/2); for (i=river_lo;i<=river_hi;i++) RiverDropsNext(Fs); @@ -417,6 +432,7 @@ U0 ReInit() a[i].ge=&rh_sprite[GE_BULL]; BuddySelect(i); } + outside_cnt=NUM_ANIMALS; t0=tS; tf=0; } @@ -437,14 +453,14 @@ U0 Init() RiverNew; rd_lock=0; QueInit(&rd_root); - dc2=DCNew(MAP_WIDTH,MAP_HEIGHT); + map_dc=DCNew(MAP_WIDTH,MAP_HEIGHT); a=MAlloc(NUM_ANIMALS*sizeof(Animal)); ReInit; } U0 CleanUp() { - DCDel(dc2); + DCDel(map_dc); Free(a); RiverDropsDel; RiverDel; @@ -455,10 +471,9 @@ U0 RawHide() I64 msg_code,a1,a2; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ PopUpOk( - "Coral the cattle into an area\n" - "the size of a screen.\n\n" - "Scroll with {CTRL-Left Grab}.\n" - "Center with {CTRL-Right}."); + "Coral the cattle. The coral is in the\n" + "upper-left corner if you scroll.\n\n" + "Scroll with $$GREEN$${CTRL-Left Grab}$$FG$$.\n"); MenuPush( "File {" " Abort(,CH_SHIFT_ESC);" @@ -471,7 +486,7 @@ U0 RawHide() Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; WinMax; - WordStat; + AutoComplete; Preempt(OFF); Init; Fs->animate_task=Spawn(&AnimateTask,Fs,"Animate",,Fs); @@ -509,4 +524,9 @@ rh_done: } RawHide; - òöÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿböÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂöÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +òöÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿböÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂöÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿd +ùÿÿÿ +úÿÿÿðÿÿÿúÿÿÿ +ÿÿÿÿðÿÿÿÿÿÿÿ +ðÿÿÿÿÿÿÿÿÿÿÿúÿÿÿ +ÿÿÿÿÿÿÿÿðÿÿÿúÿÿÿ \ No newline at end of file diff --git a/Demo/Games/Rocket.CPP b/Demo/Games/Rocket.CPP index 07008e0..a8b68da 100644 Binary files a/Demo/Games/Rocket.CPP and b/Demo/Games/Rocket.CPP differ diff --git a/Demo/Games/RocketScience.CPP b/Demo/Games/RocketScience.CPP index 85143ec..79a8499 100644 Binary files a/Demo/Games/RocketScience.CPP and b/Demo/Games/RocketScience.CPP differ diff --git a/Demo/Games/Squirt.CPP b/Demo/Games/Squirt.CPP index 15bf88b..a9db332 100644 --- a/Demo/Games/Squirt.CPP +++ b/Demo/Games/Squirt.CPP @@ -242,22 +242,17 @@ U0 AnimateTask(I64) dx=Cos(nozzle_é), dy=Sin(nozzle_é), PlaceMass(MT_DROPLET, - nozzle->x+NOZZLE_LEN*dx,nozzle->y+NOZZLE_LEN*dy, - HOSE_RADIUS, - 500*dx,500*dy, - 100.0,Fs->parent_task); + nozzle->x+NOZZLE_LEN*dx,nozzle->y+NOZZLE_LEN*dy,HOSE_RADIUS, + 500*dx,500*dy,100.0,Fs->parent_task); if (Rand<0.05) //faucet drip PlaceMass(MT_DROPLET, - faucet->x,faucet->y, - HOSE_RADIUS, - 0,0, - 100.0,Fs->parent_task); + faucet->x,faucet->y,HOSE_RADIUS, + 0,0,100.0,Fs->parent_task); tempm=ode->next_mass; while (tempm!=&ode->next_mass) { tempm1=tempm->next; - if (tempm->type==MT_DROPLET && - tempm->y+tempm->radius>GROUND_Y) { + if (tempm->type==MT_DROPLET && tempm->y+tempm->radius>GROUND_Y) { QueRem(tempm); Free(tempm); } @@ -274,8 +269,7 @@ U0 MoveNozzleTaskX(I64 sign) { I64 i; for (i=0;ix=Clamp(nozzle->x+ - sign*NOZZLE_MOVE/NOZZLE_MOVE_STEPS, + nozzle->x=Clamp(nozzle->x+sign*NOZZLE_MOVE/NOZZLE_MOVE_STEPS, HOSE_RADIUS*3,GR_WIDTH-HOSE_RADIUS*3); WinMgrSync; } @@ -285,8 +279,7 @@ U0 MoveNozzleTaskY(I64 sign) { I64 i; for (i=0;iy=Clamp(nozzle->y+ - sign*NOZZLE_MOVE/NOZZLE_MOVE_STEPS, + nozzle->y=Clamp(nozzle->y+sign*NOZZLE_MOVE/NOZZLE_MOVE_STEPS, HOSE_RADIUS*3,GROUND_Y); WinMgrSync; } @@ -340,7 +333,7 @@ U0 Squirt() WinBorder; Preempt(OFF); DocCursor; - WordStat; + AutoComplete; MenuPush( "File {" @@ -397,4 +390,4 @@ sq_done: //Don't goto out of try } Squirt; -R÷ÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2 ÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJýÿÿÿýÿÿÿÿÿÿ ÿÿ ÿ ÿÿ  ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +R÷ÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2ÿÿÿÿûÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJýÿÿÿýÿÿÿÿÿÿ ÿÿ ÿ ÿÿ  ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Demo/Games/Stadium/Stadium.CPP b/Demo/Games/Stadium/Stadium.CPP index db11f0f..76150a0 100644 Binary files a/Demo/Games/Stadium/Stadium.CPP and b/Demo/Games/Stadium/Stadium.CPP differ diff --git a/Demo/Games/Stadium/Stadium.GRA b/Demo/Games/Stadium/StadiumBG.GRA similarity index 88% rename from Demo/Games/Stadium/Stadium.GRA rename to Demo/Games/Stadium/StadiumBG.GRA index a157dae..2fb5a9c 100644 Binary files a/Demo/Games/Stadium/Stadium.GRA and b/Demo/Games/Stadium/StadiumBG.GRA differ diff --git a/Demo/Games/Stadium/Stadium.TXT b/Demo/Games/Stadium/StadiumBG.TXT similarity index 99% rename from Demo/Games/Stadium/Stadium.TXT rename to Demo/Games/Stadium/StadiumBG.TXT index f9e1444..e2d3739 100644 Binary files a/Demo/Games/Stadium/Stadium.TXT and b/Demo/Games/Stadium/StadiumBG.TXT differ diff --git a/Demo/Games/Stadium/StadiumGen.CPP b/Demo/Games/Stadium/StadiumGen.CPP index 5645cc5..4f347b8 100644 --- a/Demo/Games/Stadium/StadiumGen.CPP +++ b/Demo/Games/Stadium/StadiumGen.CPP @@ -1,15 +1,16 @@ -//Generate "Stadium.GRA.Z" from "Stadium.TXT.Z" +//Generate "StadiumBG.GRA.Z" from "StadiumBG.TXT.Z" U0 StadiumGen() { U0 (*fp_old_update)(CDC *dc); CDC *dc,*dc2; + Cd(__DIR__); WinMax; WinBorder; - WordStat; + AutoComplete; DocClear; - Type("::/Demo/Games/Stadium/Stadium.TXT"); + Type("StadiumBG.TXT"); "$$CM,0,%d$$",TEXT_ROWS-3; DocCursor(OFF); fp_old_update=gr.fp_final_screen_update; //hide mouse cursor @@ -20,7 +21,7 @@ U0 StadiumGen() dc=DCExtract(dc2,0,FONT_HEIGHT,GR_WIDTH,GR_HEIGHT); DCDel(dc2); - GRAWrite("::/Demo/Games/Stadium/Stadium",dc); + GRAWrite("StadiumBG",dc); DCDel(dc); DocCursor(ON); diff --git a/Demo/Games/TheDead.CPP b/Demo/Games/TheDead.CPP index 8d5baa0..1e2f314 100644 Binary files a/Demo/Games/TheDead.CPP and b/Demo/Games/TheDead.CPP differ diff --git a/Demo/Games/TreeCheckers.CPP b/Demo/Games/TreeCheckers.CPP new file mode 100644 index 0000000..6344046 --- /dev/null +++ b/Demo/Games/TreeCheckers.CPP @@ -0,0 +1,340 @@ +#define BORDER 16 +#define NUM_UNITS 64 +#define CIRCLE_RAD 8 +#define MOVE_CIRCLES 5 + +class Unit +{ + I64 num,x,y,player,link,color; + Bool alive,king; +} u[NUM_UNITS]; + +CDC *map_dc; +I64 cur_player,num_alive[2],start_x,start_y,end_x,end_y; +Bool show_start; + +U0 S2Circle(I64 *_x,I64 *_y) +{ + I64 i,j; + j=(*_y-BORDER)/(CIRCLE_RAD*2); + if (j&1) + i=(*_x-CIRCLE_RAD-BORDER)/(CIRCLE_RAD*2); + else + i=(*_x-BORDER)/(CIRCLE_RAD*2); + *_y=j; + *_x=i; +} + +U0 Circle2S(I64 *_x,I64 *_y) +{ + I64 j=*_y,i=*_x; + *_y=j*CIRCLE_RAD*2+CIRCLE_RAD+BORDER; + *_x=i*CIRCLE_RAD*2+CIRCLE_RAD+BORDER; + if (j&1) *_x+=CIRCLE_RAD; +} + +U0 S2W(I64 *_x,I64 *_y) +{ + S2Circle(_x,_y); + Circle2S(_x,_y); +} + +U0 DrawIt(CTask *task,CDC *dc) +{ + I64 i; + map_dc->flags|=DCF_NO_TRANSPARENTS; + GrBlot(dc,0,0,map_dc); + + if (cur_player==0) { + dc->color=LTCYAN; + GrFloodFill(dc,0,0); + dc->color=CYAN; + } else { + dc->color=LTPURPLE; + GrFloodFill(dc,0,0); + dc->color=PURPLE; + } + GrPrint(dc,2,2,"Player %d",cur_player+1); + + for (i=0;icolor=u[i].color; + GrFloodFill(dc,u[i].x,u[i].y); + } + for (i=0;icolor=BLACK; + GrLine(dc,u[i].x,u[i].y,u[u[i].link].x,u[u[i].link].y); + if (Blink) { + dc->color=BLUE; + dc->pen_width=6; + GrPlot3(dc,(u[i].x+u[u[i].link].x)>>1,(u[i].y+u[u[i].link].y)>>1,0); + } + } + if (show_start) { + dc->color=LTRED; + GrLine(dc,start_x-4,start_y-4,start_x+4,start_y+4); + GrLine(dc,start_x-4,start_y+4,start_x+4,start_y-4); + GrLine(dc,start_x,start_y,end_x,end_y); + } + if ((num_alive[0]==1 || num_alive[1]==1) && Blink(4)) { + dc->color=BLACK; + GrPrint(dc,(task->pix_width-FONT_WIDTH*9)>>1, + (task->pix_height-FONT_HEIGHT)>>1,"Game Over"); + } +} + +Unit *FindUnit(I64 x,I64 y,I64 player) +{ + I64 i,dd,best_dd=MAX_I64; + Unit *result=NULL; + for (i=0;i>1; + y2=(u[i].y+u[u[i].link].y)>>1; + dd=SqrI64(x2-x1)+SqrI64(y2-y1); + if (dd<=(CIRCLE_RAD+2)*(CIRCLE_RAD+2)) { + u[i].alive=FALSE; + Snd(500);Sleep(100);Snd(0);Sleep(25); + num_alive[u[i].player]--; + do { + found=FALSE; + for (j=0;jx=x2; + end_y=tempu->y=y2; + return TRUE; + } + if (r2!=r) { + if (r&1) { + if (cc2) c--; + } + } + if (r2>r) { + x=c; y=++r; + Circle2S(&x,&y); + } else if (r2c) { + x=++c; y=r; + Circle2S(&x,&y); + } else if (c2width-BORDER*2-CIRCLE_RAD)/(CIRCLE_RAD*2); + *_h=(dc->height-BORDER*2)/(CIRCLE_RAD*2); + DCFill(dc,WHITE); + dc->color=LTGRAY; + for (j=0;j<*_h;j++) { + for (i=0;i<*_w;i++) { + y=j*CIRCLE_RAD*2+BORDER+CIRCLE_RAD; + x=i*CIRCLE_RAD*2+BORDER+CIRCLE_RAD; + if (j&1) x+=CIRCLE_RAD; + S2W(&x,&y); + GrCircle(dc,x,y,CIRCLE_RAD); + } + } + *_w*=CIRCLE_RAD*2; + *_h*=CIRCLE_RAD*2; + return dc; +} + +U0 Init() +{ + I64 i,j,dd,best_dd,best,w=Fs->pix_width,h=Fs->pix_height; + map_dc=DrawHexMap(&w,&h); + cur_player=0; + for (i=0;iwin_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU; + try { +cn_start: + Init; + tempu=NULL; + show_start=FALSE; + Fs->draw_it=&DrawIt; + while (TRUE) { + msg_code=GetMsg(&a1,&a2,1<1 && num_alive[1]>1) { + tempu=FindUnit(a1,a2,cur_player); + end_x=start_x=tempu->x; + end_y=start_y=tempu->y; + show_start=TRUE; + } + break; + case MSG_IP_MOVE: + if (tempu) + MoveUnit(tempu,a1,a2); + break; + case MSG_IP_L_UP: + MoveUnit(tempu,a1,a2); + CheckForKills(tempu->x,tempu->y,cur_player); + show_start=FALSE; + tempu=NULL; + cur_player=1-cur_player; + break; + } + } +cn_done: + GetMsg(,,1<text_attr=YELLOW<<4+BLUE; Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; - WordStat; + AutoComplete; WinMax; WinBorder; Preempt(OFF); @@ -472,38 +472,35 @@ U0 Varoom() DocClear; Fs->draw_it=&DrawIt; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); - while (TRUE) { - while (ScanKey(&ch,&sc)) - switch (ch) { - case 0: - switch (sc.u8[0]) { - case SC_CURSOR_LEFT: - c[0].é-=ã/100; - break; - case SC_CURSOR_RIGHT: - c[0].é+=ã/100; - break; - case SC_CURSOR_UP: - c[0].speed+=3; - break; - case SC_CURSOR_DOWN: - c[0].speed-=3; - break; - } - break; - case '\n': - Init; - break; - case CH_SHIFT_ESC: - case CH_ESC: - goto vr_done; - } - WinMgrSync; - } + while (TRUE) + switch (GetKey(&sc)) { + case 0: + switch (sc.u8[0]) { + case SC_CURSOR_LEFT: + c[0].é-=ã/100; + break; + case SC_CURSOR_RIGHT: + c[0].é+=ã/100; + break; + case SC_CURSOR_UP: + c[0].speed+=3; + break; + case SC_CURSOR_DOWN: + c[0].speed-=3; + break; + } + break; + case '\n': + Init; + break; + case CH_SHIFT_ESC: + case CH_ESC: + goto vr_done; + } vr_done: //Don't goto out of try } catch Fs->catch_except=TRUE; - SettingsPop(Fs,TSF_SAME_SONG); + SettingsPop(,TSF_SAME_SONG); MenuPop; AcctRegWriteBranch("TempleOS/Varoom","F64 best_score=%5.4f;\n",best_score); } diff --git a/Demo/Games/Wenceslas.CPP b/Demo/Games/Wenceslas.CPP index ccdaf8e..177a722 100644 --- a/Demo/Games/Wenceslas.CPP +++ b/Demo/Games/Wenceslas.CPP @@ -2,16 +2,35 @@ AcctRegSetDftEntry("TempleOS/Wenceslas","F64 best_score=9999;\n"); AcctRegExeBranch("TempleOS/Wenceslas"); #define BORDER 5 -#define KING_STEP 4 - - - - $SP,"<1>",BI=1$ +#define KING_STEP 6 - $SP,"<2>",BI=2$ + + $SP,"<1>",BI=1$ + + + + $SP,"<2>",BI=2$ + + + + $SP,"<3>",BI=3$ + + + + $SP,"<4>",BI=4$ + + + + $SP,"<5>",BI=5$ + + + + $SP,"<6>",BI=6$ + + @@ -22,19 +41,19 @@ AcctRegExeBranch("TempleOS/Wenceslas"); - $SP,"<3>",BI=3$ + $SP,"<7>",BI=7$ - $SP,"<4>",BI=4$ + $SP,"<8>",BI=8$ - $SP,"<5>",BI=5$ + $SP,"<9>",BI=9$ @@ -53,14 +72,18 @@ AcctRegExeBranch("TempleOS/Wenceslas"); - $SP,"<6>",BI=6$ + $SP,"<10>",BI=10$ - $SP,"<7>",BI=7$ + $SP,"<11>",BI=11$ + + +CSprite *king_imgs[4]={$IB,"<2>",BI=2$,$IB,"<1>",BI=1$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$}; +CSprite *peasant_imgs[4]={$IB,"<5>",BI=5$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<6>",BI=6$}; #define NUM_FLAKES 0x8000 class Flake @@ -76,10 +99,12 @@ class Tree } trees[NUM_TREES]; I64 snow_x,snow_y; -I64 king_x,king_y,not_stopped_cnt; -F64 king_é,t0,tf,door_open_t0; +I64 king_x,king_y,king_mS,king_phase, + not_stopped_cnt; +F64 king_timeout,king_é,t0,tf,door_open_t0; +I64 animate_mS,animate_phase; -#define NUM_PEASANTS 16 +#define NUM_PEASANTS 10 class Peasant { Peasant *next,*last; @@ -98,7 +123,8 @@ U0 DrawIt(CTask *task,CDC *dc) { I64 r[16],i,w=task->pix_width,h=task->pix_height; U8 *img; - Step *temps; + CSprite *temps; + Step *tempst; Peasant *tempp; F64 tt; Bool old_preempt=Preempt(OFF); @@ -108,43 +134,45 @@ U0 DrawIt(CTask *task,CDC *dc) if (trees[i].y<=h/2) {//Draw trees behind house if (trees[i].fire_frame_index) { if (trees[i].fire_frame_index++&1) - img=$IB,"<4>",BI=4$; + img=$IB,"<8>",BI=8$; else - img=$IB,"<5>",BI=5$; + img=$IB,"<9>",BI=9$; } else - img=$IB,"<3>",BI=3$; + img=$IB,"<7>",BI=7$; Sprite3(dc,trees[i].x,trees[i].y,0,img); } } - Sprite3(dc,w/2,h/2,0,$IB,"<6>",BI=6$); + Sprite3(dc,w/2,h/2,0,$IB,"<10>",BI=10$); if (tS",BI=7$); + Sprite3(dc,w/2,h/2,0,$IB,"<11>",BI=11$); for (i=0;ih/2) {//Draw trees in front of house if (trees[i].fire_frame_index) { if (trees[i].fire_frame_index++&1) - img=$IB,"<4>",BI=4$; + img=$IB,"<8>",BI=8$; else - img=$IB,"<5>",BI=5$; + img=$IB,"<9>",BI=9$; } else - img=$IB,"<3>",BI=3$; + img=$IB,"<7>",BI=7$; Sprite3(dc,trees[i].x,trees[i].y,0,img); } } - temps=step_root.next; - while (temps!=&step_root) { - if (tS-temps->t0<2.0) + tempst=step_root.next; + while (tempst!=&step_root) { + if (tS-tempst->t0<2.0) dc->color=DKGRAY; else dc->color=LTGRAY; - dc->pen_width=2; - GrPlot3(dc,temps->x,temps->y,0); - temps=temps->next; + dc->pen_width=4; + GrPlot3(dc,tempst->x,tempst->y,0); + tempst=tempst->next; } + DCAllocDepthBuf(dc); + dc->flags|=DCF_TRANSFORMATION; dc->pen_width=1; tempp=peasant_root.next; while (tempp!=&peasant_root) { @@ -152,25 +180,39 @@ U0 DrawIt(CTask *task,CDC *dc) GrRotYEqu(r,tempp->é+ã/2); GrRotXEqu(r,ã/6); if (tempp->stopped) - dc->color=LTCYAN; - else - dc->color=CYAN; - SpriteMat3B(dc,tempp->x,tempp->y,0,$IB,"<2>",BI=2$,r); + SpriteMat3B(dc,tempp->x,tempp->y,GR_Z_ALL,peasant_imgs[0],r); + else { + temps=SpriteInterpolate( + peasant_imgs[ animate_phase &3], + peasant_imgs[(animate_phase+1)&3], + Saw(animate_mS/250.0,1.0)); + SpriteMat3B(dc,tempp->x,tempp->y,GR_Z_ALL,temps,r); + Free(temps); + } tempp=tempp->next; } - + dc->pen_width=1; GrIdentEqu(r); GrRotYEqu(r,king_é+ã/2); GrRotXEqu(r,ã/6); - SpriteMat3B(dc,king_x,king_y,0,$IB,"<1>",BI=1$,r); + if (tS>king_timeout) + SpriteMat3B(dc,king_x,king_y,GR_Z_ALL,king_imgs[0],r); + else { + temps=SpriteInterpolate( + king_imgs[ king_phase &3], + king_imgs[(king_phase+1)&3], + Saw(king_mS/250.0,1.0)); + SpriteMat3B(dc,king_x,king_y,GR_Z_ALL,temps,r); + Free(temps); + } dc->pen_width=1; dc->color=WHITE; for (i=0;ipix_width, - (flakes[i].y+snow_y)%task->pix_height); - + (flakes[i].y+snow_y)%task->pix_height); + if (tf) { dc->color=LTRED; if (Blink) @@ -181,12 +223,12 @@ U0 DrawIt(CTask *task,CDC *dc) } dc->color=LTBLUE; GrPrint(dc,0,0,"Freezing Peasants:%d Time:%3.2f Best:%3.2f", - not_stopped_cnt,tt-t0,best_score); + not_stopped_cnt,tt-t0,best_score); Preempt(old_preempt); } -U0 StepNew(CTask *task,I64 x,I64 y,F64 é,Bool king) +U0 StepNew(CTask *task,I64 x,I64 y,F64 é,Bool left_right,Bool king) { Step *temps; @@ -198,17 +240,29 @@ U0 StepNew(CTask *task,I64 x,I64 y,F64 QueIns(temps,king_step_root.last); } - temps=MAlloc(sizeof(Step),task); - temps->x=x-3.5*Sin(é)+1.0*Cos(é); - temps->y=y+3.5*Cos(é)+1.0*Sin(é); - temps->t0=tS; - QueIns(temps,step_root.last); - - temps=MAlloc(sizeof(Step),task); - temps->x=x+3.5*Sin(é)-1.0*Cos(é); - temps->y=y-3.5*Cos(é)-1.0*Sin(é); - temps->t0=tS; - QueIns(temps,step_root.last); + if (left_right) { + temps=MAlloc(sizeof(Step),task); + temps->x=x-3.5*Sin(é)+2.0*Cos(é); + temps->y=y+3.5*Cos(é)+2.0*Sin(é); + temps->t0=tS; + QueIns(temps,step_root.last); + temps=MAlloc(sizeof(Step),task); + temps->x=x-3.5*Sin(é)+5.0*Cos(é); + temps->y=y+3.5*Cos(é)+5.0*Sin(é); + temps->t0=tS; + QueIns(temps,step_root.last); + } else { + temps=MAlloc(sizeof(Step),task); + temps->x=x+3.5*Sin(é)+0.0*Cos(é); + temps->y=y-3.5*Cos(é)+0.0*Sin(é); + temps->t0=tS; + QueIns(temps,step_root.last); + temps=MAlloc(sizeof(Step),task); + temps->x=x+3.5*Sin(é)+3.0*Cos(é); + temps->y=y-3.5*Cos(é)+3.0*Sin(é); + temps->t0=tS; + QueIns(temps,step_root.last); + } } U0 Init() @@ -223,7 +277,7 @@ U0 Init() flakes[i].y=RandU16; } - SpriteExtents($IB,"<3>",BI=3$,&min_x,&max_x,&min_y,&max_y); + SpriteExtents($IB,"<7>",BI=7$,&min_x,&max_x,&min_y,&max_y); for (i=0;i",BI=1$,&min_x,&max_x,&min_y,&max_y); + SpriteExtents($IB,"<12>",BI=12$,&min_x,&max_x,&min_y,&max_y); QueInit(&peasant_root); for (i=0;istopped=FALSE; QueIns(tempp,peasant_root.last); } - + animate_phase=0; + animate_mS=0; + king_phase=0; + king_mS=0; + king_timeout=0; king_x=w/2; king_y=h/2; king_é=-ã/2; @@ -281,7 +339,7 @@ U0 AnimateTask(I64) {//Preempt off by default after spawned. Step *temps,*temps1; Peasant *tempp; - I64 i,animate_cnt=0,w,h; + I64 i,w,h; while (TRUE) { w=Fs->parent_task->pix_width; h=Fs->parent_task->pix_height; @@ -289,7 +347,7 @@ U0 AnimateTask(I64) temps=step_root.next; while (temps!=&step_root) { temps1=temps->next; - if (tS-temps->t0>4.0) { + if (tS-temps->t0>5.0) { QueRem(temps); Free(temps); } @@ -299,7 +357,7 @@ U0 AnimateTask(I64) temps=king_step_root.next; while (temps!=&king_step_root) { temps1=temps->next; - if (tS-temps->t0>4.0) { + if (tS-temps->t0>3.0) { QueRem(temps); Free(temps); } @@ -333,8 +391,8 @@ U0 AnimateTask(I64) tempp->x+=3*Cos(tempp->é)/100; tempp->y+=3*Sin(tempp->é)/100; } - if (!(animate_cnt&511)) - StepNew(Fs->parent_task,tempp->x,tempp->y,tempp->é,FALSE); + if (!animate_mS && animate_phase&1) + StepNew(Fs->parent_task,tempp->x,tempp->y,tempp->é,animate_phase&2,FALSE); not_stopped_cnt++; } } @@ -354,7 +412,18 @@ U0 AnimateTask(I64) snow_x+=RandU16%3-1; snow_y+=1-SignI64(RandU16&3); Sleep(1); - animate_cnt++; + animate_mS++; + if (animate_mS>=250) { + animate_mS=0; + animate_phase=(animate_phase+1)&3; + } + if (tS=250) { + king_mS=0; + king_phase|=1; + } + } } } @@ -384,19 +453,19 @@ U0 Wenceslas() I64 sc; MenuPush( - "File {" - " Abort(,CH_SHIFT_ESC);" - " Exit(,CH_ESC);" - "}" - "Play {" - " Restart(,'\n');" - " BurnTree(,CH_SPACE);" - " Up(,,SC_CURSOR_UP);" - " Down(,,SC_CURSOR_DOWN);" - " Left(,,SC_CURSOR_LEFT);" - " Right(,,SC_CURSOR_RIGHT);" - "}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " BurnTree(,CH_SPACE);" + " Up(,,SC_CURSOR_UP);" + " Down(,,SC_CURSOR_DOWN);" + " Left(,,SC_CURSOR_LEFT);" + " Right(,,SC_CURSOR_RIGHT);" + "}" + ); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; @@ -432,7 +501,7 @@ Through the rude wind's wild lament And the bitter weather "); -PopUpOk(" + PopUpOk(" \"Sire, the night is darker now And the wind blows stronger Fails my heart, I know not how, @@ -452,7 +521,7 @@ Ye who now will bless the poor Shall yourselves find blessing "); -PopUpOk(" + PopUpOk(" $$PURPLE$$$$TX+CX,\"Winceslas Game\"$$$$FG$$ Start fires by pressing $$GREEN$$$$FG$$ @@ -463,7 +532,7 @@ Lead peasants to fires. Init; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); - WordStat; + AutoComplete; DocCursor; DocClear; @@ -483,29 +552,32 @@ Lead peasants to fires. break; case 0: switch (sc.u8[0]) { - case SC_CURSOR_RIGHT: - if (king_x+KING_STEPpix_width-BORDER) - king_x+=KING_STEP; - king_é=0; - StepNew(Fs,king_x,king_y,king_é,TRUE); - break; - case SC_CURSOR_LEFT: - if (king_x-KING_STEP>=BORDER) - king_x-=KING_STEP; - king_é=ã; - StepNew(Fs,king_x,king_y,king_é,TRUE); - break; - case SC_CURSOR_DOWN: - if (king_y+KING_STEPpix_height-BORDER) - king_y+=KING_STEP; - king_é=-ã/2; - StepNew(Fs,king_x,king_y,king_é,TRUE); - break; - case SC_CURSOR_UP: - if (king_y-KING_STEP>=BORDER) - king_y-=KING_STEP; - king_é=ã/2; - StepNew(Fs,king_x,king_y,king_é,TRUE); + sub_switch_start: + case SC_CURSOR_RIGHT: + if (king_x+KING_STEPpix_width-BORDER) + king_x+=KING_STEP; + king_é=0; + break; + case SC_CURSOR_LEFT: + if (king_x-KING_STEP>=BORDER) + king_x-=KING_STEP; + king_é=ã; + break; + case SC_CURSOR_DOWN: + if (king_y+KING_STEPpix_height-BORDER) + king_y+=KING_STEP; + king_é=-ã/2; + break; + case SC_CURSOR_UP: + if (king_y-KING_STEP>=BORDER) + king_y-=KING_STEP; + king_é=ã/2; + break; + sub_switch_end: + king_mS=0; + king_phase=(king_phase+2)&2; + StepNew(Fs,king_x,king_y,king_é,king_phase&2,TRUE); + king_timeout=tS+0.5; break; } } @@ -520,7 +592,7 @@ ws_done: } Wenceslas; -y +y þÿÿÿÚÿÿÿ Êÿÿÿ þÿÿÿÚÿÿÿ äÿÿÿ @@ -544,7 +616,7 @@ Wenceslas; ¶ÿÿÿ Ìÿÿÿ Ìÿÿÿ üÿÿÿÔÿÿÿèÿÿÿÚÿÿÿ -Öÿÿÿ* +Öÿÿÿ * ðÿÿÿüÿÿÿ ðÿÿÿ ðÿÿÿèÿÿÿ @@ -561,14 +633,7 @@ Wenceslas; üÿÿÿèÿÿÿüÿÿÿòÿÿÿ äÿÿÿêÿÿÿ æÿÿÿþÿÿÿîÿÿÿ -ìÿÿÿòÿÿÿx -þÿÿÿèÿÿÿüÿÿÿòÿÿÿ -ðÿÿÿèÿÿÿ -ðÿÿÿüÿÿÿ -ðÿÿÿ -þÿÿÿòÿÿÿüÿÿÿæÿÿÿ -þÿÿÿæÿÿÿàÿÿÿ -æÿÿÿðÿÿÿã +ìÿÿÿòÿÿÿã öÿÿÿðÿÿÿ øÿÿÿ ôÿÿÿ @@ -599,7 +664,7 @@ Wenceslas; üÿÿÿ üÿÿÿøÿÿÿ úÿÿÿøÿÿÿúÿÿÿðÿÿÿ -òÿÿÿìÿÿÿô +òÿÿÿìÿÿÿ ô öÿÿÿðÿÿÿ øÿÿÿ ôÿÿÿ @@ -631,4 +696,35 @@ Wenceslas; øÿÿÿðÿÿÿøÿÿÿ ôÿÿÿ -üÿÿÿÒbŸžÎÿÿÿhÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²-ôÿÿÿÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +üÿÿÿ +ÒbÎÿÿÿhÿÿÿŸžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ²ôÿÿÿÔÿÿÿ-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿâÿÿÿþÿÿÿãÿÿÿÿÿÿÿèÿÿÿéÿÿÿàÿÿÿáÿÿÿçÿÿÿèÿÿÿéÿÿÿêÿÿÿìÿÿÿíÿÿÿæÿÿÿçÿÿÿêÿÿÿëÿÿÿ ìÿÿÿíÿÿÿ íÿÿÿ îÿÿÿ êÿÿÿëÿÿÿ ìÿÿÿ íÿÿÿ ûÿÿÿáÿÿÿÿÿÿÿúÿÿÿáÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿùÿÿÿíÿÿÿøÿÿÿøÿÿÿíÿÿÿùÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿûÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿíÿÿÿúÿÿÿùÿÿÿðÿÿÿøÿÿÿ÷ÿÿÿðÿÿÿøÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿúÿÿÿùÿÿÿñÿÿÿøÿÿÿ÷ÿÿÿñÿÿÿùÿÿÿîÿÿÿÿÿÿÿïÿÿÿÿÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿðÿÿÿñÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿ÷ÿÿÿúÿÿÿóÿÿÿûÿÿÿôÿÿÿÿÿÿÿøÿÿÿøÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿýÿÿÿùÿÿÿýÿÿÿúÿÿÿþÿÿÿñÿÿÿÿÿÿÿüÿÿÿñÿÿÿÿÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿîÿÿÿüÿÿÿîÿÿÿþÿÿÿóÿÿÿûÿÿÿóÿÿÿþÿÿÿõÿÿÿûÿÿÿõÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿôÿÿÿûÿÿÿôÿÿÿýÿÿÿúÿÿÿûÿÿÿúÿÿÿýÿÿÿþÿÿÿûÿÿÿÿÿÿÿýÿÿÿüÿÿÿ úÿÿÿýÿÿÿ ýÿÿÿûÿÿÿûÿÿÿüÿÿÿýÿÿÿùÿÿÿ úÿÿÿúÿÿÿ   + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿâÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿâÿÿÿãÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿ ðÿÿÿøÿÿÿðÿÿÿøÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿ ðÿÿÿùÿÿÿñÿÿÿùÿÿÿûÿÿÿãÿÿÿþÿÿÿúÿÿÿãÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿíÿÿÿøÿÿÿíÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿùÿÿÿêÿÿÿ øÿÿÿêÿÿÿ ùÿÿÿìÿÿÿøÿÿÿìÿÿÿùÿÿÿîÿÿÿ ÷ÿÿÿîÿÿÿ ùÿÿÿëÿÿÿøÿÿÿëÿÿÿùÿÿÿìÿÿÿ ÷ÿÿÿìÿÿÿ ðÿÿÿþÿÿÿñÿÿÿÿÿÿÿõÿÿÿöÿÿÿîÿÿÿïÿÿÿóÿÿÿôÿÿÿõÿÿÿöÿÿÿüÿÿÿýÿÿÿóÿÿÿôÿÿÿúÿÿÿûÿÿÿþÿÿÿþÿÿÿüÿÿÿ üÿÿÿ üÿÿÿüÿÿÿúÿÿÿ úÿÿÿ þÿÿÿïÿÿÿþÿÿÿüÿÿÿïÿÿÿÿÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿýÿÿÿùÿÿÿõÿÿÿûÿÿÿùÿÿÿöÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿýÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿúÿÿÿøÿÿÿýÿÿÿûÿÿÿóÿÿÿûÿÿÿûÿÿÿóÿÿÿýÿÿÿøÿÿÿúÿÿÿøÿÿÿýÿÿÿøÿÿÿõÿÿÿûÿÿÿøÿÿÿõÿÿÿýÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿúÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿþÿÿÿâÿÿÿþÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿáÿÿÿâÿÿÿèÿÿÿéÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿèÿÿÿéÿÿÿïÿÿÿðÿÿÿïÿÿÿÿÿÿÿðÿÿÿÿÿÿÿ òÿÿÿÿÿÿÿóÿÿÿÿÿÿÿïÿÿÿðÿÿÿ òÿÿÿóÿÿÿûÿÿÿâÿÿÿþÿÿÿúÿÿÿâÿÿÿþÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿùÿÿÿïÿÿÿþÿÿÿøÿÿÿïÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿïÿÿÿÿÿÿÿøÿÿÿïÿÿÿÿÿÿÿùÿÿÿòÿÿÿÿÿÿÿ÷ÿÿÿòÿÿÿÿÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿòÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿðÿÿÿöÿÿÿ÷ÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿýÿÿÿýÿÿÿûÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿûÿÿÿÿÿÿÿþÿÿÿýÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿúÿÿÿýÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿâÿÿÿþÿÿÿãÿÿÿÿÿÿÿèÿÿÿéÿÿÿàÿÿÿáÿÿÿçÿÿÿèÿÿÿéÿÿÿêÿÿÿìÿÿÿíÿÿÿæÿÿÿçÿÿÿêÿÿÿëÿÿÿ ìÿÿÿíÿÿÿ íÿÿÿ îÿÿÿ êÿÿÿëÿÿÿ ìÿÿÿ íÿÿÿ ûÿÿÿáÿÿÿÿÿÿÿúÿÿÿáÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿùÿÿÿíÿÿÿøÿÿÿøÿÿÿíÿÿÿùÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿûÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿíÿÿÿúÿÿÿùÿÿÿðÿÿÿøÿÿÿ÷ÿÿÿðÿÿÿøÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿúÿÿÿùÿÿÿñÿÿÿøÿÿÿ÷ÿÿÿñÿÿÿùÿÿÿîÿÿÿÿÿÿÿïÿÿÿÿÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿðÿÿÿñÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿ÷ÿÿÿúÿÿÿóÿÿÿûÿÿÿôÿÿÿÿÿÿÿøÿÿÿøÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿýÿÿÿùÿÿÿýÿÿÿúÿÿÿþÿÿÿñÿÿÿÿÿÿÿüÿÿÿñÿÿÿÿÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿîÿÿÿüÿÿÿîÿÿÿþÿÿÿóÿÿÿûÿÿÿóÿÿÿþÿÿÿõÿÿÿûÿÿÿõÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿôÿÿÿûÿÿÿôÿÿÿýÿÿÿúÿÿÿûÿÿÿúÿÿÿýÿÿÿþÿÿÿûÿÿÿÿÿÿÿýÿÿÿüÿÿÿ úÿÿÿýÿÿÿ ýÿÿÿûÿÿÿûÿÿÿüÿÿÿýÿÿÿùÿÿÿ úÿÿÿúÿÿÿ   + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿþÿÿÿâÿÿÿþÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿáÿÿÿâÿÿÿèÿÿÿéÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿèÿÿÿéÿÿÿïÿÿÿðÿÿÿïÿÿÿÿÿÿÿðÿÿÿÿÿÿÿ òÿÿÿÿÿÿÿóÿÿÿÿÿÿÿïÿÿÿðÿÿÿ òÿÿÿóÿÿÿûÿÿÿâÿÿÿþÿÿÿúÿÿÿâÿÿÿþÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿùÿÿÿïÿÿÿþÿÿÿøÿÿÿïÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿïÿÿÿÿÿÿÿøÿÿÿïÿÿÿÿÿÿÿùÿÿÿòÿÿÿÿÿÿÿ÷ÿÿÿòÿÿÿÿÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿòÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿðÿÿÿöÿÿÿ÷ÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿýÿÿÿýÿÿÿûÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿûÿÿÿÿÿÿÿþÿÿÿýÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿúÿÿÿýÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿâÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿâÿÿÿãÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿ ðÿÿÿøÿÿÿðÿÿÿøÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿ ðÿÿÿùÿÿÿñÿÿÿùÿÿÿûÿÿÿãÿÿÿþÿÿÿúÿÿÿãÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿíÿÿÿøÿÿÿíÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿùÿÿÿêÿÿÿ øÿÿÿêÿÿÿ ùÿÿÿìÿÿÿøÿÿÿìÿÿÿùÿÿÿîÿÿÿ ÷ÿÿÿîÿÿÿ ùÿÿÿëÿÿÿøÿÿÿëÿÿÿùÿÿÿìÿÿÿ ÷ÿÿÿìÿÿÿ ðÿÿÿþÿÿÿñÿÿÿÿÿÿÿõÿÿÿöÿÿÿîÿÿÿïÿÿÿóÿÿÿôÿÿÿõÿÿÿöÿÿÿüÿÿÿýÿÿÿóÿÿÿôÿÿÿúÿÿÿûÿÿÿþÿÿÿþÿÿÿüÿÿÿ üÿÿÿ üÿÿÿüÿÿÿúÿÿÿ úÿÿÿ þÿÿÿïÿÿÿþÿÿÿüÿÿÿïÿÿÿÿÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿýÿÿÿùÿÿÿõÿÿÿûÿÿÿùÿÿÿöÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿýÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿúÿÿÿøÿÿÿýÿÿÿûÿÿÿóÿÿÿûÿÿÿûÿÿÿóÿÿÿýÿÿÿøÿÿÿúÿÿÿøÿÿÿýÿÿÿøÿÿÿõÿÿÿûÿÿÿøÿÿÿõÿÿÿýÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿúÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok \ No newline at end of file diff --git a/Demo/Games/Whap.CPP b/Demo/Games/Whap.CPP index b703a5d..f610194 100644 --- a/Demo/Games/Whap.CPP +++ b/Demo/Games/Whap.CPP @@ -109,7 +109,7 @@ U0 Whap() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; - WordStat; + AutoComplete; Preempt(OFF); MenuPush( diff --git a/Demo/Games/Zing.CPP b/Demo/Games/Zing.CPP index d918541..71b9ea9 100644 Binary files a/Demo/Games/Zing.CPP and b/Demo/Games/Zing.CPP differ diff --git a/Demo/Games/ZoneOut.CPP b/Demo/Games/ZoneOut.CPP index 6c4131f..5336978 100644 Binary files a/Demo/Games/ZoneOut.CPP and b/Demo/Games/ZoneOut.CPP differ diff --git a/Demo/Graphics/Balloon.CPP b/Demo/Graphics/Balloon.CPP index 061a823..490ed22 100644 --- a/Demo/Graphics/Balloon.CPP +++ b/Demo/Graphics/Balloon.CPP @@ -12,12 +12,12 @@ U0 Balloon() CLI - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,0xF); + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,0xF); MemSetI64(0xA0000,0,640*480/64); - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,RED+GREEN+8); + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,RED+GREEN+8); for (k=100;k<150;k++) { for (i=0;i<20;i++) diff --git a/Demo/Graphics/Camp.CPP b/Demo/Graphics/Camp.CPP index 72f668b..88e9a6d 100644 Binary files a/Demo/Graphics/Camp.CPP and b/Demo/Graphics/Camp.CPP differ diff --git a/Demo/Graphics/CaptureScreen.CPP b/Demo/Graphics/CaptureScreen.CPP index 50e7a82..54e09bc 100644 --- a/Demo/Graphics/CaptureScreen.CPP +++ b/Demo/Graphics/CaptureScreen.CPP @@ -13,11 +13,11 @@ U0 Main() { "Capture screen...\n"; PressAKey; - GRACaptureScreen("HOME/ScreenShot"); + GRACaptureScreen("::/Home/ScreenShot"); "View captured screen...\n"; PressAKey; - ViewScreenCapture("HOME/ScreenShot"); + ViewScreenCapture("::/Home/ScreenShot"); PressAKey; DCFill; diff --git a/Demo/Graphics/Collision.CPP b/Demo/Graphics/Collision.CPP index ef59bcb..610d95a 100644 Binary files a/Demo/Graphics/Collision.CPP and b/Demo/Graphics/Collision.CPP differ diff --git a/Demo/Graphics/Doodle.CPP b/Demo/Graphics/Doodle.CPP index 8b0c0a5..10f2216 100644 --- a/Demo/Graphics/Doodle.CPP +++ b/Demo/Graphics/Doodle.CPP @@ -9,7 +9,7 @@ U0 Doodle() Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER; WinMax; - WordStat; + AutoComplete; DCFill; DocClear; diff --git a/Demo/Graphics/EdSprite.CPP b/Demo/Graphics/EdSprite.CPP index 0254324..44afa85 100644 Binary files a/Demo/Graphics/EdSprite.CPP and b/Demo/Graphics/EdSprite.CPP differ diff --git a/Demo/Graphics/Elephant.CPP b/Demo/Graphics/Elephant.CPP index 626c201..cccb109 100644 Binary files a/Demo/Graphics/Elephant.CPP and b/Demo/Graphics/Elephant.CPP differ diff --git a/Demo/Graphics/FontEd.CPP b/Demo/Graphics/FontEd.CPP index bf7c5e7..28047c6 100644 --- a/Demo/Graphics/FontEd.CPP +++ b/Demo/Graphics/FontEd.CPP @@ -8,7 +8,7 @@ You can load it with: If you want to change the system font permanently, save to a file with this font editor program and cut and paste the code into $LK,"::/Kernel/Font8x8.CPP"$. -You will need to recompile Kernel by calling $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). +You will need to recompile Kernel by calling $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). See $LK,"::/Demo/ExtendedChars.CPP"$ and $LK,"::/Demo/ScreenCodes.CPP"$. */ @@ -37,7 +37,7 @@ U0 DrawIt(CTask *task,CDC *dc) k=0; for (i=0;icolor=YELLOW; else dc->color=BLUE; @@ -54,7 +54,7 @@ U0 FESave(Bool pmt) I64 i,j,k=0; for (i=0;i<256;i++) { for (j=0;jwin_inhibit|=WIG_DBL_CLICK; @@ -129,9 +129,9 @@ U0 FontEd() (a1-BLOW_UP_CHAR_X)/FONT_WIDTH; if (0<=kw/2.0-1; + if (w<0) w=0; + dc->color=middle; + GrLine3(dc,t->x+w*Cos(t->é+ã/2),t->y+w*Sin(t->é+ã/2),t->z, + t->x+w*Cos(t->é-ã/2),t->y+w*Sin(t->é-ã/2),t->z); + w=t->w/2.0; + dc->color=edge; + GrPlot3(dc,t->x+w*Cos(t->é+ã/2),t->y+w*Sin(t->é+ã/2),t->z); + GrPlot3(dc,t->x+w*Cos(t->é-ã/2),t->y+w*Sin(t->é-ã/2),t->z); +} + +U0 TurtleMicroMove(Turtle *t,F64 dt) +{ + t->x+=dt*t->speed*Cos(t->é); + t->y+=dt*t->speed*Sin(t->é); + t->é=Wrap(t->é+dt*angles[t->dé_index]); +} + +U0 TurtleEnd(CDC *dc,Turtle *t,CColorROPU16 edge,CColorROPU16 middle,F64 é) +{ + F64 r,x,y2; + Turtle t2; + if (r=t->w) { + MemCpy(&t2,t,sizeof(Turtle)); //Save + x=0; + while (TRUE) { + t->x+=1/r*Cos(é); + t->y+=1/r*Sin(é); + x+=1/r; + y2=r*r-4*x*x; + if (y2>=0) { + t->w=Sqrt(y2); + TurtlePlot(dc,t,edge,middle); + } else + break; + } + MemCpy(t,&t2,sizeof(Turtle)); + } +} + +U0 TurtleMove(CDC *dc,Turtle *t,CColorROPU16 edge,CColorROPU16 middle) +{ + I64 i,l=16*AbsI64(t->w+1)*AbsI64(t->speed+1); + + if (t->ends && t->first) + TurtleEnd(dc,t,edge,middle,t->é+ã); + t->first=FALSE; + + for (i=0;iends) + TurtleEnd(dc,t,edge,middle,t->é); +} + +U0 TurtleInit(Turtle *t) +{ + MemSet(t,0,sizeof(Turtle)); + t->x=Fs->pix_width>>1; + t->y=Fs->pix_height>>1; + t->z=5; + t->edge=BLACK; + t->middle=YELLOW; + t->dé_index=ANGLES/2; + t->first=TRUE; + t->ends=TRUE; +} + +U0 DrawIt(CTask *,CDC *dc) +{ + Turtle t2; + MemCpy(&t2,&tt,sizeof(Turtle)); + GrPrint(dc,0,0,"Layer:%f Speed:%f é:%5.1f dé:%5.1f Width:%f", + tt.z,tt.speed,tt.é*180/ã,angles[tt.dé_index]*180/ã,tt.w); + + TurtleMove(dc,&t2,RED,LTRED); + dc->color=LTRED; + GrLine(dc,t2.x+TURTLE_SIZE*Cos(t2.é+ã/2),t2.y+TURTLE_SIZE*Sin(t2.é+ã/2), + t2.x+TURTLE_SIZE*Cos(t2.é-ã/2),t2.y+TURTLE_SIZE*Sin(t2.é-ã/2)); + GrLine(dc,t2.x+TURTLE_SIZE*Cos(t2.é+ã/2),t2.y+TURTLE_SIZE*Sin(t2.é+ã/2), + t2.x+TURTLE_SIZE*Cos(t2.é), t2.y+TURTLE_SIZE*Sin(t2.é)); + GrLine(dc,t2.x+TURTLE_SIZE*Cos(t2.é-ã/2),t2.y+TURTLE_SIZE*Sin(t2.é-ã/2), + t2.x+TURTLE_SIZE*Cos(t2.é), t2.y+TURTLE_SIZE*Sin(t2.é)); +} + +U0 SetMenu() +{ + I64 i; + U8 buf[64]; + CMenuEntry *tempse; + for (i=0;i<=9;i++) { + StrPrint(buf,"Settings/Layer%d",i); + if (tempse=MenuEntryFind(Fs->cur_menu,buf)) { + if (i==tt.z) + tempse->checked=TRUE; + else + tempse->checked=FALSE; + } + } + if (tempse=MenuEntryFind(Fs->cur_menu,"Settings/Ends")) { + if (tt.ends) + tempse->checked=TRUE; + else + tempse->checked=FALSE; + } +} + +U0 Lattice() +{ + Bool aim=FALSE; + I64 a1,a2; + CDC *dc=DCAlias; + DCAllocDepthBuf(dc); + MenuPush( + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " Step(,CH_SPACE);" + " Accelerator(,,SC_CURSOR_UP);" + " Break(,,SC_CURSOR_DOWN);" + " Left(,,SC_CURSOR_LEFT);" + " Right(,,SC_CURSOR_RIGHT);" + "}" + "Settings {" + " Color(,'c');" + " Wider(,'+');" + " Narrower(,'-');" + " Ends(,'e');" + " Layer0(,'0');" + " Layer1(,'1');" + " Layer2(,'2');" + " Layer3(,'3');" + " Layer4(,'4');" + " Layer5(,'5');" + " Layer6(,'6');" + " Layer7(,'7');" + " Layer8(,'8');" + " Layer9(,'9');" + "}" + ); + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + Preempt(OFF); + WinMax; + AutoComplete; + WinBorder; + DocClear; + DocCursor; + TurtleInit(&tt); + SetMenu; + Fs->win_inhibit=WIG_TASK_DFT-WIF_FOCUS_TASK_MENU-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; + Fs->draw_it=&DrawIt; + try { + while (TRUE) { + switch (GetMsg(&a1,&a2,1<=TURTLE_SPEED_STEP) + tt.speed-=TURTLE_SPEED_STEP; + break; + } + break; + case '0'...'9': + tt.z=a1-'0'; + SetMenu; + break; + case 'c': + tt.middle=PopUpColor("Middle Color\n\n"); + tt.edge =PopUpColor("Edge Color\n\n"); + break; + case 'e': + tt.ends=!tt.ends; + break; + case '+': + tt.w++; + break; + case '-': + if (tt.w) + tt.w--; + break; + case '\n': + DCFill(dc); + TurtleInit(&tt); + SetMenu; + break; + case CH_ESC: + case CH_SHIFT_ESC: + goto lt_done; + case CH_SPACE: + TurtleMove(dc,&tt,tt.edge,tt.middle); + break; + } + } + } +lt_done: + GetMsg(,,1<animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); - WordStat; + AutoComplete; Fs->draw_it=&DrawIt; Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER; - do { - msg_code=GetMsg(&a1,&a2, - 1<pen_width=0.04*ip.speed; GrLine3(dc[cur_dc],x1,y1,0,x2,y2,0); restart=TRUE; - msg_code=GetMsg(&a1,&a2, - 1<color=BLACK; GrLine(dc,OX,0,OX,GR_HEIGHT-FONT_HEIGHT-1); diff --git a/Demo/Graphics/RotateTank.CPP b/Demo/Graphics/RotateTank.CPP index 24426a7..3d58675 100644 Binary files a/Demo/Graphics/RotateTank.CPP and b/Demo/Graphics/RotateTank.CPP differ diff --git a/Demo/Graphics/ScrollBars.CPP b/Demo/Graphics/ScrollBars.CPP index c44471d..fd9512e 100644 Binary files a/Demo/Graphics/ScrollBars.CPP and b/Demo/Graphics/ScrollBars.CPP differ diff --git a/Demo/Graphics/Shading.CPP b/Demo/Graphics/Shading.CPP index b56a0ec..2bb077b 100644 --- a/Demo/Graphics/Shading.CPP +++ b/Demo/Graphics/Shading.CPP @@ -89,7 +89,7 @@ U0 DrawIt(CTask *task,CDC *dc) è = i*ã/2/RINGS; è2=(i+1)*ã/2/RINGS+SLOP; for (j=0;jdraw_it=&DrawIt; try { "\n\nMove mouse to change light source.\n\n"; diff --git a/Demo/Graphics/SliderCtrl.CPP b/Demo/Graphics/Slider.CPP similarity index 95% rename from Demo/Graphics/SliderCtrl.CPP rename to Demo/Graphics/Slider.CPP index d977db3..8f9d28e 100644 --- a/Demo/Graphics/SliderCtrl.CPP +++ b/Demo/Graphics/Slider.CPP @@ -16,7 +16,7 @@ class CSliderState I64 right_pos; } sld; -U0 DrawSliderCtrl(CDC *dc,CCtrl *c) +U0 DrawCtrlSlider(CDC *dc,CCtrl *c) { CSliderState *s=c->state; @@ -44,7 +44,7 @@ U0 DrawSliderCtrl(CDC *dc,CCtrl *c) GrRect(dc,c->left+2*SLIDER_SPACING+1-2,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-1,5,3); } -U0 UpdateDerivedSliderCtrl(CCtrl *c) +U0 UpdateDerivedCtrlSlider(CCtrl *c) { CSliderState *s=c->state; c->left=c->win_task->pix_width/2-(SLIDER_SPACING*3+2)/2; @@ -75,9 +75,9 @@ CCtrl *SliderNew() c->type=CTRLT_GENERIC; c->state=&sld; MemSet(&sld,0,sizeof(CSliderState)); - c->draw_it=&DrawSliderCtrl; + c->draw_it=&DrawCtrlSlider; c->left_click=&LeftClickSlider; - c->update_derived_vals=&UpdateDerivedSliderCtrl; + c->update_derived_vals=&UpdateDerivedCtrlSlider; old_preempt=Preempt(OFF); QueIns(c,Fs->last_ctrl); TaskDerivedValsUpdate; diff --git a/Demo/Graphics/Speedline.CPP b/Demo/Graphics/Speedline.CPP index 99a89af..54d12ec 100644 --- a/Demo/Graphics/Speedline.CPP +++ b/Demo/Graphics/Speedline.CPP @@ -11,7 +11,7 @@ public U0 SpeedLineDemo() WinMax; WinBorder; - WordStat; + AutoComplete; DCFill; DocClear; do { diff --git a/Demo/Graphics/SpritePlot.CPP b/Demo/Graphics/SpritePlot.CPP index 8823f5c..aa34224 100644 Binary files a/Demo/Graphics/SpritePlot.CPP and b/Demo/Graphics/SpritePlot.CPP differ diff --git a/Demo/Graphics/SpritePlot3D.CPP b/Demo/Graphics/SpritePlot3D.CPP index 44d73bf..02899a6 100644 Binary files a/Demo/Graphics/SpritePlot3D.CPP and b/Demo/Graphics/SpritePlot3D.CPP differ diff --git a/Demo/Graphics/SpritePut.CPP b/Demo/Graphics/SpritePut.CPP index 408c467..28054eb 100644 Binary files a/Demo/Graphics/SpritePut.CPP and b/Demo/Graphics/SpritePut.CPP differ diff --git a/Demo/Graphics/SpriteRaw.CPP b/Demo/Graphics/SpriteRaw.CPP new file mode 100644 index 0000000..1a64904 --- /dev/null +++ b/Demo/Graphics/SpriteRaw.CPP @@ -0,0 +1,38 @@ +//Normally, you make sprites with . +//This shows how to build a sprite by hand. +//See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$. + +class MySprite +{ // See $LK,"Sprite Elem Types",A="MN:SPT_LINE"$ + CSpriteColor color; + CSpritePtPt line1; + CSpritePtPt line2; + CSpritePtPt line3; + CSpritePt fill; + CSpriteBase end; +}; + + +U0 SpriteRawDemo() +{ + MySprite s; + + MemSet(&s,0,sizeof(s)); + s.color.type=SPT_COLOR; + s.color.color=GREEN; + s.line1.type=SPT_LINE; + s.line1.x2=100; s.line1.y2=50; + s.line2.type=SPT_LINE; + s.line2.x2=50; s.line2.y2=100; + s.line3.type=SPT_LINE; + s.line3.x1=100; s.line3.y1=50; + s.line3.x2=50; s.line3.y2=100; + s.fill.type=SPT_FLOOD_FILL; + s.fill.x1=20; s.fill.y1=20; + s.end.type=SPT_END; + + Sprite(&s); + "%h13c",'\n'; +} + +SpriteRawDemo; diff --git a/Demo/Graphics/SunMoon.CPP b/Demo/Graphics/SunMoon.CPP index e360c4b..eb726fd 100644 --- a/Demo/Graphics/SunMoon.CPP +++ b/Demo/Graphics/SunMoon.CPP @@ -10,8 +10,8 @@ U0 SunMoon() WinMax; //Maximize window DocClear; //Clear command-line text WinBorder; //No Border - WordStat; //WordStat Off - Fs->text_attr=BLACK<<+WHITE; //Current $LK,"CTask",A="MN:CTask"$ is Fs segment register. + AutoComplete; //AutoComplete Off + Fs->text_attr=BLACK<<4+WHITE; //Current $LK,"CTask",A="MN:CTask"$ is Fs segment register. for (i=0;i<0x8000;i+=0x200) { //Sun @@ -33,7 +33,7 @@ U0 SunMoon() gr.dc->dither_probability_u16=2*i; //U16 can be [0,65535] GrFloodFill(gr.dc,x-0.75*radius,y); - WinMgrSync; //Typically 60 fps or 16.6mS + WinMgrSync; //Typically 30 fps or 33S DCFill; } diff --git a/Demo/Graphics/Transform.CPP b/Demo/Graphics/Transform.CPP index 753b6ae..1d340ee 100644 Binary files a/Demo/Graphics/Transform.CPP and b/Demo/Graphics/Transform.CPP differ diff --git a/Demo/Graphics/WallPaperCtrl.CPP b/Demo/Graphics/WallPaperCtrl.CPP index 7d2c3ad..07a60ce 100644 --- a/Demo/Graphics/WallPaperCtrl.CPP +++ b/Demo/Graphics/WallPaperCtrl.CPP @@ -5,7 +5,7 @@ This is an advanced demo that shows that you can place ctrls on the wall paper. -See $LK,"::/Demo/Graphics/SliderCtrl.CPP"$ +See $LK,"::/Demo/Graphics/Slider.CPP"$ and $LK,"::/Demo/Graphics/WallPaperFish.CPP"$ before messing with this program. @@ -22,7 +22,7 @@ class CSliderState I64 right_pos; }; -U0 DrawSliderCtrl(CDC *dc,CCtrl *c) +U0 DrawCtrlSlider(CDC *dc,CCtrl *c) { CSliderState *s=c->state; @@ -50,7 +50,7 @@ U0 DrawSliderCtrl(CDC *dc,CCtrl *c) GrRect(dc,c->left+2*SLIDER_SPACING+1-2,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-1,5,3); } -U0 UpdateDerivedSliderCtrl(CCtrl *c) +U0 UpdateDerivedCtrlSlider(CCtrl *c) { CSliderState *s=c->state; c->left=c->win_task->pix_width/2-(SLIDER_SPACING*3+2)/2; @@ -86,9 +86,9 @@ CCtrl *SliderNew() c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; c->type=CTRLT_GENERIC; c->state=ACAlloc(sizeof(CSliderState)); - c->draw_it=&DrawSliderCtrl; + c->draw_it=&DrawCtrlSlider; c->left_click=&LeftClickSlider; - c->update_derived_vals=&UpdateDerivedSliderCtrl; + c->update_derived_vals=&UpdateDerivedCtrlSlider; old_preempt=Preempt(OFF); QueIns(c,sys_winmgr_task->last_ctrl); TaskDerivedValsUpdate; diff --git a/Demo/Graphics/WallPaperFish.CPP b/Demo/Graphics/WallPaperFish.CPP index 9605f1d..79abaed 100644 Binary files a/Demo/Graphics/WallPaperFish.CPP and b/Demo/Graphics/WallPaperFish.CPP differ diff --git a/Demo/Lectures/64BitAsmQuiz.TXT b/Demo/Lectures/64BitAsmQuiz.TXT index 8b196b3..2d3b42a 100644 --- a/Demo/Lectures/64BitAsmQuiz.TXT +++ b/Demo/Lectures/64BitAsmQuiz.TXT @@ -70,7 +70,7 @@ ANSWERS: 5) The R13 instruction takes one more byte because it is like $LK,"REG_RBP",A="MN:REG_RBP"$ in the ModR. -6) The RAX instruction has a REX byte prefix to specify 64-bit size. So does the R8 instruction, but in the REX is also a flag to specify upper-8 reg. For EAX, there is no need of REX. +6) The R8 instruction needs a REX byte prefix to specify upper-8 reg. 7) You can access the lowest byte of any reg. You can access AH but not the second-to-lowest byte of ESI. diff --git a/Demo/Lectures/GraphicsCPULoad.CPP b/Demo/Lectures/GraphicsCPULoad.CPP index 021b04d..b25492a 100644 --- a/Demo/Lectures/GraphicsCPULoad.CPP +++ b/Demo/Lectures/GraphicsCPULoad.CPP @@ -6,8 +6,8 @@ F64 VGAPattern(I64 p) F64 start=tS; I64 plane; for (plane=1;plane<0x10;plane<<=1) { - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,plane); + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,plane); MemSetI64(0xA0000,p,640*480/64); } return tS-start; @@ -23,10 +23,10 @@ U0 GrDemo() for (i=0;i<16;i++) { t=VGAPattern(0x5555555555555555); "$$GREEN$$Rate:$$RED$$%5.1f FPS$$FG$$" - " $$GREEN$$Load@60Hz:$$RED$$%5.1f%%$$FG$$\n",1/t,100*t*60.0; + " $$GREEN$$Load@30Hz:$$RED$$%5.1f%%$$FG$$\n",1/t,100*t*30.0; t=VGAPattern(0x3333333333333333); "$$GREEN$$Rate:$$RED$$%5.1f FPS$$FG$$" - " $$GREEN$$Load@60Hz:$$RED$$%5.1f%%$$FG$$\n",1/t,100*t*60.0; + " $$GREEN$$Load@30Hz:$$RED$$%5.1f%%$$FG$$\n",1/t,100*t*30.0; } Preempt(old_preempt); // will flush screen VGA cache. diff --git a/Demo/Lectures/MiniCompiler.CPP b/Demo/Lectures/MiniCompiler.CPP index 5585f28..cd0f27d 100644 --- a/Demo/Lectures/MiniCompiler.CPP +++ b/Demo/Lectures/MiniCompiler.CPP @@ -1,12 +1,12 @@ /*$WW,1$ -$TR,"Main Compiler"$ +$TR-C,"Main Compiler"$ $ID,2$The mini compiler is like the main compiler, except the main compiler's lexical analyser removes comments and does preprocessing. $LK,"Lex",A="MN:Lex"$(),$LK,"Echo",A="MN:Echo"$(ON). -The main compiler generates $LK,"Intermediate Code",A="FF:::/Compiler/CmpDefs.HPP,IC_END"$ at the parser stage. See $LK,"PrsExpression",A="MN:PrsExpression"$(), $LK,"PrsStatement",A="MN:PrsStatement"$(). +The main compiler generates $LK,"Intermediate Code",A="FF:::/Compiler/CompilerA.HPP,IC_END"$ at the parser stage. See $LK,"PrsExpression",A="MN:PrsExpression"$(), $LK,"PrsStatement",A="MN:PrsStatement"$(). -The main compiler optimizes See $LK,"Intermediate Code Attributes",A="FF:D:/Compiler/CmpInit.CPP,ST_INTERMEDIATE_CODE"$, $LK,"Combining Consts",A="FF:::/Compiler/OptPass012.CPP,case IC_MUL"$, $LK,"Choosing Reg Vars",A="FF:::/Compiler/OptPass3.CPP,cmp.num_reg_vars"$. Set $LK,"OTrace",A="MN:OTrace"$(ON) to see the optimization stages. +The main compiler optimizes See $LK,"Intermediate Code Attributes",A="MN:intermediate_code_table"$, $LK,"Combining Consts",A="FF:::/Compiler/OptPass012.CPP,case IC_MUL"$, $LK,"Choosing Reg Vars",A="FF:::/Compiler/OptPass3.CPP,cmp.num_reg_vars"$. Set $LK,"OTrace",A="MN:OTrace"$(ON) to see the optimization stages. -The main compiler makes machine code in the back end. See $LK,"IC Struct",A="MN:CIntermediateCode"$, $LK,"LCCCompile",A="MN:LCCCompile"$ and $LK,"OptPass789",A="FF:::/Compiler/OptPass789.CPP,IC_MUL"$(), $LK,"BackEnd",A="FF:::/Compiler/Back1a.CPP,ICMul"$. Set $LK,"CTrace",A="MN:CTrace"$(ON) to see the output of the backend. +The main compiler makes machine code in the back end. See $LK,"IC Struct",A="MN:CIntermediateCode"$, $LK,"LCCCompile",A="MN:LCCCompile"$ and $LK,"OptPass789A",A="FF:::/Compiler/OptPass789A.CPP,IC_MUL"$(), $LK,"BackEnd",A="FF:::/Compiler/BackA.CPP,ICMul"$. Set $LK,"CTrace",A="MN:CTrace"$(ON) to see the output of the backend. $ID,-2$ $TR,"Mini Compiler"$ $ID,2$For this mini compiler, some things you should know about 64-bit asm: @@ -216,8 +216,8 @@ U0 Main() throw; "$$RED$$This code is not efficient, but the compiler is simple.$$FG$$\n"; Un(code,dst-code); //Unassemble the code we created. -//$LK,"Call",A="MN:Call"$() is a function. See $LK,"_CALL",A="FF:::/Kernel/Utils1a.CPP,_CALL"$:: -//See also $LK,"CallInd",A="MN:CallInd"$(). See $LK,"_CALLIND",A="FF:::/Kernel/Utils1a.CPP,_CALLIND"$:: +//$LK,"Call",A="MN:Call"$() is a function. See $LK,"_CALL",A="FF:::/Kernel/KUtils.CPP,_CALL"$:: +//See also $LK,"CallInd",A="MN:CallInd"$(). See $LK,"_CALLIND",A="FF:::/Kernel/KUtils.CPP,_CALLIND"$:: "$$LTBLUE$$Answer:%d$$FG$$\n",Call(code); } catch { "$$RED$$Error$$FG$$\n"; diff --git a/Demo/Lectures/MiniGrLib.CPP b/Demo/Lectures/MiniGrLib.CPP index a1ca781..7d69a3a 100644 --- a/Demo/Lectures/MiniGrLib.CPP +++ b/Demo/Lectures/MiniGrLib.CPP @@ -19,8 +19,8 @@ U0 MGUpdate() {//Copy image to VGA memory //For better performance we could only write what's changed. //0xA0000 is slower than normal RAM. - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,0xF);//All color planes at once -- Black and White + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,0xF);//All color planes at once -- Black and White MemCpy(0xA0000,image,sizeof(image)); } diff --git a/Demo/Lectures/PageTableEntries1.CPP b/Demo/Lectures/PageTableEntries1.CPP index 57824a5..20c3e2d 100644 --- a/Demo/Lectures/PageTableEntries1.CPP +++ b/Demo/Lectures/PageTableEntries1.CPP @@ -5,12 +5,12 @@ TempleOS keeps a cached copy of VGA memory in $LK,"gr.screen_image",A="MN:CGrGlbls"$. See $LK,"GrUpdateVGAGraphics",A="MN:GrUpdateVGAGraphics"$. TempleOS used 4096 size pages for memory below addr 2 Meg -and 2 Meg pages above two Meg. See $LK,"MemPageSize",A="MN:MemPageSize"$() and $LK,"INIT_MEMORY",A="FF:::/Kernel/Mem1a.CPP,SYS_INIT_MEM"$. +and 2 Meg pages above two Meg. See $LK,"MemPageSize",A="MN:MemPageSize"$() and $LK,"INIT_MEMORY",A="FF:::/Kernel/MemA.CPP,SYS_INIT_MEM"$. */ U0 PageTableDemo1() { - I64 *pte=MemPageTable(VGA_GRAPHIC_MEM_BASE),p0,p1; + I64 *pte=MemPageTable(VGAM_GRAPHICS),p0,p1; "Page table entries for VGA screen memory\n"; DocD(pte); PressAKey; @@ -19,8 +19,8 @@ U0 PageTableDemo1() p1=pte[1]; pte[0]=p1; pte[1]=p0; - InvlPg(VGA_GRAPHIC_MEM_BASE); //Invalidate translation look aside buffer (TLB). - InvlPg(VGA_GRAPHIC_MEM_BASE+0x1000); + InvlPg(VGAM_GRAPHICS); //Invalidate translation look aside buffer (TLB). + InvlPg(VGAM_GRAPHICS+0x1000); //Use this if you wish to change //the page table reg. @@ -34,8 +34,8 @@ U0 PageTableDemo1() pte[0]=p0; pte[1]=p1; - InvlPg(VGA_GRAPHIC_MEM_BASE); - InvlPg(VGA_GRAPHIC_MEM_BASE+0x1000); + InvlPg(VGAM_GRAPHICS); + InvlPg(VGAM_GRAPHICS+0x1000); // will flush screen VGA cache. VGAFlush; @@ -43,6 +43,6 @@ U0 PageTableDemo1() PageTableDemo1; -//See $LK,"MemBlks2MegAlloc",A="MN:MemBlks2MegAlloc"$(), $LK,"MemBlks2MegFree",A="MN:MemBlks2MegFree"$() for page aligned allocations. +//See $LK,"Mem2MegAlloc",A="MN:Mem2MegAlloc"$(), $LK,"Mem2MegFree",A="MN:Mem2MegFree"$() for page aligned allocations. //See $LK,"CBlkPool",A="MN:CBlkPool"$, $LK,"CHeapCtrl",A="MN:CHeapCtrl"$, $LK,"sys_code_bp",A="MN:sys_code_bp"$ and $LK,"sys_data_bp",A="MN:sys_data_bp"$. //See $LK,"Memory Overview",A="FI:::/Doc/MemOverview.TXT"$ and $LK,"Memory Routines",A="HI:Memory"$. diff --git a/Demo/Lectures/PageTableEntries2.CPP b/Demo/Lectures/PageTableEntries2.CPP index c6c5d51..8023d0a 100644 --- a/Demo/Lectures/PageTableEntries2.CPP +++ b/Demo/Lectures/PageTableEntries2.CPP @@ -1,4 +1,4 @@ -I64 *addr=VGA_GRAPHIC_MEM_BASE, +I64 *addr=VGAM_GRAPHICS, *pte_addr=MemPageTable(addr), err_code=0, *reported_fault_addr; diff --git a/Demo/Lectures/ScreenMemory.CPP b/Demo/Lectures/ScreenMemory.CPP index 8918d36..007cc16 100644 --- a/Demo/Lectures/ScreenMemory.CPP +++ b/Demo/Lectures/ScreenMemory.CPP @@ -4,7 +4,7 @@ U0 PlotXY(I64 x,I64 y) { //Screen bits are reversed - LBts(VGA_GRAPHIC_MEM_BASE,y*GR_WIDTH+x^7); + LBts(VGAM_GRAPHICS,y*GR_WIDTH+x^7); } U0 Main() @@ -13,22 +13,22 @@ U0 Main() Bool old_preempt=Preempt(OFF); //This makes all 4 color planes active. - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,WHITE); - MemSet(VGA_GRAPHIC_MEM_BASE,0,GR_WIDTH*GR_HEIGHT/8); + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,WHITE); + MemSet(VGAM_GRAPHICS,0,GR_WIDTH*GR_HEIGHT/8); - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,RED); + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,RED); for (i=0;i<200;i++) PlotXY(i,i); - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,GREEN); + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,GREEN); for (i=0;i<200;i++) PlotXY(100,i); - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,BLUE); + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,BLUE); for (i=0;i<200;i++) PlotXY(200-i,i); /*If you want a mixed color select multiple planes diff --git a/Demo/Lectures/Uncached.CPP b/Demo/Lectures/Uncached.CPP index 25c75ca..b855ca7 100644 --- a/Demo/Lectures/Uncached.CPP +++ b/Demo/Lectures/Uncached.CPP @@ -14,7 +14,7 @@ U0 TimeIns() CPURep; shared_blks=1; - bp=MemBlksUncachedAlloc(&shared_blks); + bp=Mem2MegUncachedAlloc(&shared_blks); hc=HeapCtrlBPInit(bp,shared_blks<<12); uncached_I64=MAlloc(sizeof(I64),hc); @@ -39,7 +39,7 @@ U0 TimeIns() "because the loop overhead was not subtracted.$$FG$$\n\n"; Free(cached_I64); Free(uncached_I64); - MemBlks2MegFree(bp,shared_blks); + Mem2MegFree(bp,shared_blks); Preempt(old_preempt); } diff --git a/Demo/MultiCore/Clouds.CPP b/Demo/MultiCore/Clouds.CPP index 956684e..1b7403c 100644 --- a/Demo/MultiCore/Clouds.CPP +++ b/Demo/MultiCore/Clouds.CPP @@ -182,7 +182,7 @@ U0 CloudScene() DocCursor; WinMax; WinBorder; - WordStat; + AutoComplete; Init; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); @@ -203,6 +203,6 @@ U0 CloudScene() //This is so I can use this file stand alone //or as a component of a program. -#if IncludeDepth<2 +#if __DEPTH__<2 CloudScene; #endif diff --git a/Demo/MultiCore/LoadTest.CPP b/Demo/MultiCore/LoadTest.CPP index 5f9ab14..2bd7a54 100644 --- a/Demo/MultiCore/LoadTest.CPP +++ b/Demo/MultiCore/LoadTest.CPP @@ -4,7 +4,7 @@ I64 app_done_ack; U0 Job1(I64) {//Compile Compiler Preempt(ON); //Off by default - Silent(ON); + Silent; while (!app_done) { Cd("::/Compiler"); Cmp("Compiler"); diff --git a/Demo/MultiCore/Palindrome.CPP b/Demo/MultiCore/Palindrome.CPP index 1087c57..49d87dc 100644 --- a/Demo/MultiCore/Palindrome.CPP +++ b/Demo/MultiCore/Palindrome.CPP @@ -93,4 +93,4 @@ U0 Palindrome(U8 *filename) "Time:%9.5f\n",tS-t0; } -Palindrome(Define("ST_BIBLE_FILE")); +Palindrome(BIBLE_FILENAME); diff --git a/Demo/PhoneNumWords.CPP b/Demo/PhoneNumWords.CPP index e377be8..b46c9f8 100644 --- a/Demo/PhoneNumWords.CPP +++ b/Demo/PhoneNumWords.CPP @@ -2,15 +2,15 @@ U8 char_map[26]="22233344455566677778889999"; /* Fmt of word lst entry: - U8 WSD_WORD_CHAR + U8 ACD_WORD_CHAR U8 word[] with terminating zero - I16 block; //definition offset in ::/Adam/WordStat/WSDefs.DAT + I16 block; //definition offset in ::/Adam/AutoComplete/ACDefs.DAT */ U0 PhoneNumWords(U8 *num) { I64 ch; U8 *_num=StrNew(num),*dst=_num, - *dict=wsd.word_lst,*st,*src; + *dict=acd.word_lst,*st,*src; while (*num) { if ('0'<=*num<='9') *dst++=*num; diff --git a/Demo/Progress.CPP b/Demo/Progress.CPP index cbfd142..698b68f 100644 --- a/Demo/Progress.CPP +++ b/Demo/Progress.CPP @@ -10,9 +10,9 @@ U0 Main1() PressAKey; ProgressBarsRst; StrCpy(progress1_desc,"Progress Demo"); //PROGRESS_DESC_LEN is max - progress1_max=400; + progress1_max=200; while (progress1++!=progress1_max) - Sleep(10); + Sleep(20); progress1_max=0; //hide } @@ -24,9 +24,9 @@ U0 Main2() PressAKey; ProgressBarsRst; //No progress1_desc - progress1_max=400; + progress1_max=200; while (progress1++!=progress1_max) - Sleep(10); + Sleep(20); progress1_max=0; //hide } diff --git a/Demo/RandDemo.CPP b/Demo/RandDemo.CPP new file mode 100644 index 0000000..55b5ef7 --- /dev/null +++ b/Demo/RandDemo.CPP @@ -0,0 +1,60 @@ +U0 RandPts() +{ + F64 t0=tS; + do { + gr.dc->color=RandI16&15; + GrPlot(gr.dc,RandI32%GR_WIDTH,RandI32%GR_HEIGHT); + } while (tS-t0<1); + DCFill; +} + +U0 RandDemo() +{ + I64 i; + + "Seed(0) will do timer randomized random numbers. A task starts with " + "$LK,"Seed(0)",A="FF:::/Kernel/Task.CPP,Seed("$ by dft.\n"; + PressAKey; + Seed; + RandPts; + DCFill; + + "\nSeed(num) will do non-timer starting at specific seed. " + "Non-timer rand is awful. You can run a specific video game by " + "typing Seed(num) at the cmd-line before the game.\n"; + PressAKey; + Seed(1); + RandPts; + DCFill; + + "\n\n\nWatch when we specify specific seeds:"; + + "\n\nSeed(1);\n"; + Seed(1); + for (i=0;i<5;i++) + "%d: %d\n",i,RandI16; + + "\nSeed(2); Different, right?\n"; + Seed(2); + for (i=0;i<5;i++) + "%d: %d\n",i,RandI16; + + "\nSeed(1); Repeats earlier values.\n"; + Seed(1); + for (i=0;i<5;i++) + "%d: %d\n",i,RandI16; + + "\nSeed(0); Zero is special.\n"; + Seed(0); + for (i=0;i<5;i++) + "%d: %d\n",i,RandI16; + + "\nSeed(0); Non-repeating.\n"; + Seed(0); + for (i=0;i<5;i++) + "%d: %d\n",i,RandI16; + + Seed; //Dft should be kept to zero. +} + +RandDemo; diff --git a/Demo/RegistryDemo.CPP b/Demo/RegistryDemo.CPP index 1cb3672..b96a478 100644 --- a/Demo/RegistryDemo.CPP +++ b/Demo/RegistryDemo.CPP @@ -1,4 +1,4 @@ -/*The HOME/Registry.CPP.Z file is HolyC code. +/*The /Home/Registry.CPP.Z file is HolyC code. You can execute a tree branch of it. The Adam branch is executed in the Adam task boot phase. Normally, you will place var declarations diff --git a/Demo/ReverseFileExample/Reverse.CPP b/Demo/ReverseFileExample/Reverse.CPP index 2852aee..f3769ab 100644 --- a/Demo/ReverseFileExample/Reverse.CPP +++ b/Demo/ReverseFileExample/Reverse.CPP @@ -3,6 +3,8 @@ to cut and paste lines to reverse the order of lines in a text file. */ +Cd(__DIR__);; + U0 Reverse(U8 *in_name,U8 *out_name) { CDoc *doc_in =DocRead(in_name), @@ -18,5 +20,4 @@ U0 Reverse(U8 *in_name,U8 *out_name) DocWrite(doc_out); } -Reverse("::/Demo/ReverseFileExample/PoemBackward.TXT.Z", - "::/Demo/ReverseFileExample/PoemForeward.TXT.Z"); +Reverse("PoemBackward.TXT.Z","PoemForeward.TXT.Z"); diff --git a/Demo/Snd/ASCIIOrgan.CPP b/Demo/Snd/ASCIIOrgan.CPP index 2073241..9d174f5 100644 Binary files a/Demo/Snd/ASCIIOrgan.CPP and b/Demo/Snd/ASCIIOrgan.CPP differ diff --git a/Demo/Snd/WaterFowl.CPP b/Demo/Snd/WaterFowl.CPP index a13d3a7..c381cc1 100644 Binary files a/Demo/Snd/WaterFowl.CPP and b/Demo/Snd/WaterFowl.CPP differ diff --git a/Demo/SortFileExample/F64FileGen.CPP b/Demo/SortFileExample/F64FileGen.CPP index 0d5c2ef..851405a 100644 --- a/Demo/SortFileExample/F64FileGen.CPP +++ b/Demo/SortFileExample/F64FileGen.CPP @@ -1,6 +1,8 @@ //This makes a file of N random double values. //$LK,"/Demo/SortFileExample/UnsortedF64.TXT"$ +Cd(__DIR__);; + U0 F64FileGenTXT(U8 *filename,I64 n) { I64 i; @@ -11,7 +13,7 @@ U0 F64FileGenTXT(U8 *filename,I64 n) DocWrite(doc); DocDel(doc); } -F64FileGenTXT("/Demo/SortFileExample/UnsortedF64.TXT.Z",10); +F64FileGenTXT("UnsortedF64.TXT.Z",10); U0 F64FileGenDAT(U8 *filename,I64 n) {//$LK,"File/CFile",A="HI:File/CFile"$, $LK,"::/Demo/Dsk/DataBase.CPP"$ @@ -22,4 +24,4 @@ U0 F64FileGenDAT(U8 *filename,I64 n) FileWrite(filename,a,n*sizeof(F64)); Free(a); } -F64FileGenDAT("/Demo/SortFileExample/UnsortedF64.DAT.Z",10); +F64FileGenDAT("UnsortedF64.DAT.Z",10); diff --git a/Demo/SortFileExample/F64FileSort.CPP b/Demo/SortFileExample/F64FileSort.CPP index 08f487c..e576e8f 100644 --- a/Demo/SortFileExample/F64FileSort.CPP +++ b/Demo/SortFileExample/F64FileSort.CPP @@ -2,6 +2,8 @@ //$LK,"/Demo/SortFileExample/UnsortedF64.TXT"$ //$LK,"/Demo/SortFileExample/SortedF64.TXT"$ +Cd(__DIR__);; + I64 Compare(F64 e1,F64 e2) { return Sign(e1-e2); @@ -44,9 +46,9 @@ U0 F64FileSortTXT(U8 *in_name,U8 *out_name) Free(a); } -F64FileSortTXT("/Demo/SortFileExample/UnsortedF64.TXT.Z","/Demo/SortFileExample/SortedF64.TXT.Z"); -Type("/Demo/SortFileExample/UnsortedF64.TXT.Z"); -Type("/Demo/SortFileExample/SortedF64.TXT.Z"); +F64FileSortTXT("UnsortedF64.TXT.Z","SortedF64.TXT.Z"); +Type("UnsortedF64.TXT.Z"); +Type("SortedF64.TXT.Z"); U0 F64FileSortDAT(U8 *in_name,U8 *out_name) {//$LK,"File/CFile",A="HI:File/CFile"$, $LK,"::/Demo/Dsk/DataBase.CPP"$ @@ -56,7 +58,7 @@ U0 F64FileSortDAT(U8 *in_name,U8 *out_name) FileWrite(out_name,a,size); Free(a); } -F64FileSortDAT("/Demo/SortFileExample/UnsortedF64.DAT.Z","/Demo/SortFileExample/SortedF64.DAT.Z"); +F64FileSortDAT("UnsortedF64.DAT.Z","SortedF64.DAT.Z"); U0 F64FileDumpDAT(U8 *in_name) {//$LK,"File/CFile",A="HI:File/CFile"$, $LK,"::/Demo/Dsk/DataBase.CPP"$ @@ -68,5 +70,5 @@ U0 F64FileDumpDAT(U8 *in_name) "%12.6f\n",a[i]; Free(a); } -F64FileDumpDAT("/Demo/SortFileExample/UnsortedF64.DAT.Z"); -F64FileDumpDAT("/Demo/SortFileExample/SortedF64.DAT.Z"); +F64FileDumpDAT("UnsortedF64.DAT.Z"); +F64FileDumpDAT("SortedF64.DAT.Z"); diff --git a/Demo/SortFileExample/SortedF64.DAT b/Demo/SortFileExample/SortedF64.DAT index 2ed4cbb..11721f2 100644 --- a/Demo/SortFileExample/SortedF64.DAT +++ b/Demo/SortFileExample/SortedF64.DAT @@ -1 +1 @@ - ½[®žOÈ?é¼�ÚMÐ?ŸÔ›$÷\Ú?“ØÃ×�:à?¦uèà?¯³t�¾ä?2Ó»îöç?QØ�6ûë?aÑŸ´Ú í? ·BmËzî? \ No newline at end of file +rºí²æQ¡?mÊw@ˤ?‘±*Œû!§?˜ÙÂþôÿÕ?(ýX w×?ç›¶‹U—â?å6L¼âå?Ää³QAæç?•³Pa0"è?;Y¨­€é? \ No newline at end of file diff --git a/Demo/SortFileExample/SortedF64.TXT b/Demo/SortFileExample/SortedF64.TXT index 73addbf..fd0c33d 100644 --- a/Demo/SortFileExample/SortedF64.TXT +++ b/Demo/SortFileExample/SortedF64.TXT @@ -1,11 +1,11 @@ //This is sorted. - 0.111769 - 0.169010 - 0.171046 - 0.247664 - 0.308198 - 0.335631 - 0.473049 - 0.704792 - 0.887694 - 0.982955 + 0.015695 + 0.069258 + 0.086463 + 0.097748 + 0.217038 + 0.273096 + 0.523637 + 0.712252 + 0.938419 + 0.995018 diff --git a/Demo/SortFileExample/UnsortedF64.DAT b/Demo/SortFileExample/UnsortedF64.DAT index e08bcd2..3537a13 100644 --- a/Demo/SortFileExample/UnsortedF64.DAT +++ b/Demo/SortFileExample/UnsortedF64.DAT @@ -1 +1 @@ -¯³t�¾ä?¦uèà?2Ó»îöç?aÑŸ´Ú í?QØ�6ûë? ·BmËzî?“ØÃ×�:à?é¼�ÚMÐ?ŸÔ›$÷\Ú? ½[®žOÈ? \ No newline at end of file +Ää³QAæç?•³Pa0"è?;Y¨­€é?ç›¶‹U—â?å6L¼âå?‘±*Œû!§?rºí²æQ¡?(ýX w×?mÊw@ˤ?˜ÙÂþôÿÕ? \ No newline at end of file diff --git a/Demo/SortFileExample/UnsortedF64.TXT b/Demo/SortFileExample/UnsortedF64.TXT index 046836a..049c512 100644 --- a/Demo/SortFileExample/UnsortedF64.TXT +++ b/Demo/SortFileExample/UnsortedF64.TXT @@ -1,11 +1,11 @@ //This is unsorted. - 0.473049 - 0.704792 - 0.335631 - 0.247664 - 0.887694 - 0.169010 - 0.982955 - 0.308198 - 0.111769 - 0.171046 + 0.015695 + 0.938419 + 0.523637 + 0.273096 + 0.217038 + 0.097748 + 0.069258 + 0.086463 + 0.712252 + 0.995018 diff --git a/Demo/SubIntAccess.CPP b/Demo/SubIntAccess.CPP index ba5e1a7..66aaa59 100644 --- a/Demo/SubIntAccess.CPP +++ b/Demo/SubIntAccess.CPP @@ -2,7 +2,7 @@ access to bytes and words of larger integers. -See $LK,"U64i union",A="FF:::/Kernel/Adam1a.HPP,U64i union"$. +See $LK,"U64i union",A="FF:::/Kernel/KernelA.HPP,U64i union"$. The versions with "i" are internal data types. Use "I64" instead of "U64i" and you diff --git a/Demo/SuggestSpelling.CPP b/Demo/SuggestSpelling.CPP index 6fe5e17..73c72ec 100644 --- a/Demo/SuggestSpelling.CPP +++ b/Demo/SuggestSpelling.CPP @@ -22,14 +22,14 @@ U8 *SuggestMatchForm(U8 *src) } /*Fmt of word lst entry: - U8 WSD_WORD_CHAR + U8 ACD_WORD_CHAR U8 word[] with terminating zero - I16 block; //definition offset in ::/Adam/WordStat/WSDefs.DAT + I16 block; //definition offset in ::/Adam/AutoComplete/ACDefs.DAT */ U0 SuggestSpelling(U8 *word) { - U8 *dict=wsd.word_lst, + U8 *dict=acd.word_lst, *pf=SuggestMatchForm(word), *wf; I64 len=StrLen(pf), @@ -69,15 +69,15 @@ U0 SuggestSpellingDemo() U0 CtrlAltL(I64) { -//$LK,"ws.cur_word",A="MN:CWordStatGlbls"$ is only set if WordStat +//$LK,"ac.cur_word",A="MN:CAutoCompleteGlbls"$ is only set if AutoComplete //is running. - PopUp("SuggestSpelling(ws.cur_word);View;"); + PopUp("SuggestSpelling(ac.cur_word);View;"); } if (Fs!=adam_task) SuggestSpellingDemo; else { - SetCtrlAltLetCB('L',&CtrlAltL,"Cmd/Suggest Spelling"); + CtrlAltLetCBSet('L',&CtrlAltL,"Cmd/Suggest Spelling"); //Appears in the Adam Task Window " installed\n"; } diff --git a/Demo/TimeIns.CPP b/Demo/TimeIns.CPP index dc915a9..c43fbea 100644 --- a/Demo/TimeIns.CPP +++ b/Demo/TimeIns.CPP @@ -20,7 +20,7 @@ U0 TimeIns() start=GetTSC; for (i=0;iroot.next; @@ -80,6 +80,9 @@ U0 PrsSingleLogFile(LogStruct *root,U8 *name) i=Str2I64(src,10,&src); templg->datetime-=(i/100+i%100/60.0)*CDATE_FREQ*60*60; + if (templg->datetime<*_start) *_start=templg->datetime; + if (templg->datetime>*_end) *_end =templg->datetime; + do if (!*src) throw; while (*src++!=']'); @@ -125,13 +128,13 @@ U0 PrsSingleLogFile(LogStruct *root,U8 *name) DocDel(doc); } -LogStruct *PrsLogFiles(U8 *files_find_mask) +LogStruct *PrsLogFiles(U8 *files_find_mask,CDate *_start,CDate *_end) { LogStruct *root=CAlloc(sizeof(LogStruct)); CDirEntry *tempde=FilesFind(files_find_mask),*tempde1=tempde; QueInit(root); while (tempde) { - PrsSingleLogFile(root,tempde->full_name); + PrsSingleLogFile(root,tempde->full_name,_start,_end); tempde=tempde->next; } DirTreeDel(tempde1); @@ -172,9 +175,10 @@ U0 BlockIPNums(LogStruct *root) LogStruct *templg=root->next,*templg1; QueInit(&blocked_root); - BlockedStructAdd(&blocked_root,68<<24+224<<16+130<<8+96); //Me 68.224.130.96 - BlockedStructAdd(&blocked_root,68<<24+96<<16+100<<8+126); //Me 68.96.100.126 - BlockedStructAdd(&blocked_root,68<<24+96<<16+110<<8+213); //Me 68.96.110.213 + BlockedStructAdd(&blocked_root,68<<24+224<<16+130<<8+96); + BlockedStructAdd(&blocked_root,68<<24+96<<16+100<<8+126); + BlockedStructAdd(&blocked_root,68<<24+96<<16+110<<8+213); + BlockedStructAdd(&blocked_root,68<<24+96<<16+242<<8+108); //pass 1: collect robot lst while (templg!=root) { @@ -211,7 +215,7 @@ Bool IsDownLoad(LogStruct *templg) Bool IsIndex(LogStruct *templg) { if (!StrCmp(templg->file,"/index.html") || - !StrNCmp(templg->file,"/v",2) || + !StrNCmp(templg->file+StrLen(templg->file)-14,"/TempleOS.html",14) || !StrCmp(templg->file,"/")) return TRUE; else @@ -263,6 +267,29 @@ U0 LinkTreeAdd(LinkStruct **_root,LogStruct *templg) } } +U0 FileTreeAdd(LinkStruct **_root,LogStruct *templg) +{ + I64 i; + LinkStruct *root,*templk; + if (UnusedStk<0x200) { + PrintErr("Stk Overflow"); + ThrowBreak; + } + if (root=*_root) { + if (!(i=StrCmp(templg->file,root->file))) + root->cnt++; + else if (i<0) + FileTreeAdd(&root->left,templg); + else + FileTreeAdd(&root->right,templg); + } else { + templk=CAlloc(sizeof(LinkStruct)); + templk->file=templg->file; + templk->cnt=1; + *_root=templk; + } +} + U0 LinkTreeDel(LinkStruct *root) { if (root) { @@ -281,6 +308,24 @@ U0 LinkTreeTraverse(LinkStruct *root) } } +U0 FileTreeDel(LinkStruct *root) +{ + if (root) { + FileTreeDel(root->left); + FileTreeDel(root->right); + Free(root); + } +} + +U0 FileTreeTraverse(LinkStruct *root) +{ + if (root) { + FileTreeTraverse(root->left); + "%3d:%Q\n",root->cnt,root->file; + FileTreeTraverse(root->right); + } +} + U0 DownLoadRep(LogStruct *root,CDate start,CDate end) { I64 i,j,cnt,dups, @@ -350,6 +395,21 @@ U0 DownLoadRep(LogStruct *root,CDate start,CDate end) Free(day_dup_cnts); } +U0 FileRep(LogStruct *root,CDate start,CDate end) +{ + LogStruct *templg=root->next; + LinkStruct *file_root=NULL; + while (templg!=root) { + if (start<=templg->datetime<=end) + FileTreeAdd(&file_root,templg); + templg=templg->next; + } + "\n\nFile Hits\n"; + FileTreeTraverse(file_root); + '\n'; + FileTreeDel(file_root); +} + U0 IndexRep(LogStruct *root,CDate start,CDate end) { I64 i,j,cnt,dups, @@ -422,18 +482,19 @@ U0 IndexRep(LogStruct *root,CDate start,CDate end) U0 WebLogRep(U8 *mask,U8 *output_filename) { LogStruct *root; - CDate start,end; + CDate start=MAX_I64,end=MIN_I64; DocMax; - root=PrsLogFiles(mask); - start=GetDate("Start(%D):",root->next->datetime); - end =GetDate("End (%D):",root->last->datetime); + root=PrsLogFiles(mask,&start,&end); + start=GetDate("Start(%D):",start); + end =GetDate("End (%D):",end); BlockIPNums(root); DocClear; "$$WW,0$$"; IndexRep(root,start,end); + FileRep(root,start,end); DownLoadRep(root,start,end); StrCpy(DocPut->filename.name,output_filename); @@ -443,4 +504,9 @@ U0 WebLogRep(U8 *mask,U8 *output_filename) LogLstDel(root); } -WebLogRep("::/Demo/WebLogExample/*.LOG*","::/Demo/WebLogExample/WebLogRep.TXT.Z"); +//This is so I can use this file stand alone +//or as a component of a program. +#if __DEPTH__<1 +Cd(__DIR__);; +WebLogRep("*.LOG*","WebLogRep.TXT.Z"); +#endif diff --git a/Demo/WebLogExample/WebLogScramble.CPP b/Demo/WebLogExample/WebLogScramble.CPP index fe13c1b..0074a78 100644 --- a/Demo/WebLogExample/WebLogScramble.CPP +++ b/Demo/WebLogExample/WebLogScramble.CPP @@ -53,8 +53,15 @@ U0 WebLogScramble(U8 *files_find_mask) DirTreeDel(tempde1); } -//Danger scrambles all log files in the /TempleOS tree +U0 LogScrambleDemo() +{ + U8 *dirname; + Cd(__DIR__); + dirname=CurDir; + ST_WARN_ST "This will scramble all .LOG files in '%s'.\n\n",dirname; + Free(dirname); + if (AreYouSure) + WebLogScramble("*.LOG*"); +} -ST_WARN_ST "This will scramble all .LOG files in the /Demo Tree.\n\n"; -if (AreYouSure) - WebLogScramble("/Demo/*.LOG*"); +LogScrambleDemo; diff --git a/Demo/WebLogExample/access_090509.LOG b/Demo/WebLogExample/access_090509.LOG deleted file mode 100644 index 93f4123..0000000 --- a/Demo/WebLogExample/access_090509.LOG +++ /dev/null @@ -1,756 +0,0 @@ -233.20.138.227 - - [08/May/2009:01:00:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -63.216.210.246 - - [08/May/2009:01:01:22 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "http://images.google.co.nz/imgres?imgurl=http://www.globalfreeware.com/productImg/4/Stress-Relief-20/stressrelief.gif&imgrefurl=http://www.globalfreeware.com/Stress-Relief-20.html&usg=__TMaplGyjZXrI1U_ZuP5s3DFRM-A=&h=425&w=524&sz=24&hl=en&start=1&um=1&tbnid=U8Pyk5qaun6AtM:&tbnh=107&tbnw=132&prev=/images%3Fq%3Dstress%2Brelief%2Bhammer%26hl%3Den%26safe%3Doff%26sa%3DN%26um%3D1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" "www.templeos.org" -27.233.238.149 - - [08/May/2009:01:02:35 -0700] "GET /robots.txt HTTP/1.0" 404 275 "-" "Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)" "www.templeos.org" -27.233.238.149 - - [08/May/2009:01:02:35 -0700] "GET / HTTP/1.0" 200 81188 "-" "Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)" "www.templeos.org" -63.216.210.246 - - [08/May/2009:01:03:12 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://images.google.co.nz/imgres?imgurl=http://www.globalfreeware.com/productImg/4/Stress-Relief-20/stressrelief.gif&imgrefurl=http://www.globalfreeware.com/Stress-Relief-20.html&usg=__TMaplGyjZXrI1U_ZuP5s3DFRM-A=&h=425&w=524&sz=24&hl=en&start=1&um=1&tbnid=U8Pyk5qaun6AtM:&tbnh=107&tbnw=132&prev=/images%3Fq%3Dstress%2Brelief%2Bhammer%26hl%3Den%26safe%3Doff%26sa%3DN%26um%3D1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" "www.templeos.org" -233.20.138.223 - - [08/May/2009:01:17:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:01:17:59 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.101 - - [08/May/2009:01:34:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -170.179.155.147 - - [08/May/2009:01:43:48 -0700] "GET / HTTP/1.1" 200 81188 "-" "PigFear/0.3.2" "www.templeos.org" -65.179.102.60 - - [08/May/2009:01:51:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -116.83.246.83 - - [08/May/2009:01:51:57 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 655360 "http://www.globalfreeware.com/DVDFab-Decrypter-3096-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -233.13.207.157 - - [08/May/2009:01:53:14 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.13.207.157 - - [08/May/2009:01:54:33 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://www.globalfreeware.com/Windows-Live-OneCare-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.13.207.157 - - [08/May/2009:01:54:47 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://www.globalfreeware.com/Windows-Live-OneCare-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.13.207.157 - - [08/May/2009:01:55:34 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.13.207.157 - - [08/May/2009:01:56:08 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.13.207.157 - - [08/May/2009:01:56:28 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://www.globalfreeware.com/Windows-Live-OneCare-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.13.207.157 - - [08/May/2009:01:56:50 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.13.207.157 - - [08/May/2009:01:57:33 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.20.138.223 - - [08/May/2009:02:00:34 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -54.133.185.72 - - [08/May/2009:02:10:18 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -54.133.185.72 - - [08/May/2009:02:10:18 -0700] "GET / HTTP/1.1" 200 81188 "http://fileforum.betanews.com/detail/1183618683/1" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -54.133.185.72 - - [08/May/2009:02:10:19 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -54.133.185.72 - - [08/May/2009:02:10:20 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "contype" "www.templeos.org" -233.20.138.223 - - [08/May/2009:02:17:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.104.74 - - [08/May/2009:02:19:17 -0700] "GET /contact.html HTTP/1.0" 200 5360 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "templeos.org" -65.181.170.162 - - [08/May/2009:02:23:01 -0700] "GET /v505.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -55.229.82.240 - - [08/May/2009:02:27:48 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -233.20.138.241 - - [08/May/2009:02:34:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -181.56.15.239 - - [08/May/2009:02:36:07 -0700] "GET / HTTP/1.0" 200 81188 "http://www.templeos.org" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061011 Fedora/1.5.0.7-7.fc6 Firefox/1.5.0.7" "www.templeos.org" -84.74.114.58 - - [08/May/2009:02:48:23 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; msn OptimizedIE8;ENMY)" "www.templeos.org" -84.74.114.58 - - [08/May/2009:02:49:26 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 233964 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; msn OptimizedIE8;ENMY)" "www.templeos.org" -84.74.114.58 - - [08/May/2009:02:49:51 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "http://www.globalfreeware.com/AutoClick-21-download.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; msn OptimizedIE8;ENMY)" "www.templeos.org" -65.179.102.241 - - [08/May/2009:02:51:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.179.102.199 - - [08/May/2009:03:00:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -30.144.93.55 - - [08/May/2009:03:14:42 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.co.in/search?hl=en&ei=yQUEStuJJZKG6AO82PWSAw&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=free+full+version+operating+system&spell=1" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -30.144.93.55 - - [08/May/2009:03:14:49 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -30.144.93.55 - - [08/May/2009:03:14:58 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/11.0.5721.5145" "www.templeos.org" -30.144.93.55 - - [08/May/2009:03:16:35 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 917504 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -30.144.93.55 - - [08/May/2009:03:16:37 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -30.144.93.55 - - [08/May/2009:03:16:41 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -30.144.93.55 - - [08/May/2009:03:16:42 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 851968 "-" "NSPlayer/11.0.5721.5145 WMFSDK/11.0" "www.templeos.org" -233.20.138.101 - - [08/May/2009:03:17:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -179.151.186.60 - - [08/May/2009:03:21:47 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&q=64+bit+operating+systems+open+source&btnG=Search" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -179.151.186.60 - - [08/May/2009:03:21:47 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -179.151.186.60 - - [08/May/2009:03:21:50 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 262144 "-" "NSPlayer/11.0.5721.5251" "www.templeos.org" -167.102.230.57 - - [08/May/2009:03:22:16 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)" "www.templeos.org" -167.102.230.57 - - [08/May/2009:03:22:17 -0700] "GET /v505.html HTTP/1.1" 404 275 "-" "Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)" "www.templeos.org" -179.151.186.60 - - [08/May/2009:03:22:30 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -179.151.186.60 - - [08/May/2009:03:22:30 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 4653056 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -179.151.186.60 - - [08/May/2009:03:22:30 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 4325376 "-" "NSPlayer/11.0.5721.5251 WMFSDK/11.0" "www.templeos.org" -65.181.170.162 - - [08/May/2009:03:23:01 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -167.102.230.16 - - [08/May/2009:03:31:42 -0700] "GET /ai.html HTTP/1.1" 404 275 "-" "Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)" "www.templeos.org" -167.102.230.155 - - [08/May/2009:03:32:10 -0700] "GET /demo6.html HTTP/1.1" 404 275 "-" "Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)" "www.templeos.org" -167.102.230.80 - - [08/May/2009:03:32:51 -0700] "GET /demo1.html HTTP/1.1" 404 275 "-" "Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)" "www.templeos.org" -167.102.230.80 - - [08/May/2009:03:33:16 -0700] "GET /v500.html HTTP/1.1" 404 275 "-" "Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)" "www.templeos.org" -65.179.102.241 - - [08/May/2009:03:34:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.179.102.60 - - [08/May/2009:03:51:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.179.102.60 - - [08/May/2009:04:00:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:07:32 -0700] "GET / HTTP/1.1" 304 - "http://www.google.ca/search?rlz=1C1GGLS_enCA322CA324&sourceid=chrome&ie=UTF-8&q=64+bit+OS" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:07:32 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:08:25 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 66292058 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:03 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -131.31.0.73 - - [08/May/2009:04:12:04 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8" "www.templeos.org" -65.179.102.199 - - [08/May/2009:04:17:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:13 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.se/search?q=templeos&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:sv-SE:official&client=firefox-a" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:14 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:15 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:15 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:16 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:16 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:17 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:17 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:17 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:17 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:17 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:17 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:17 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:18 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:18 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:18 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:18 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:18 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:18:18 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:04:20:10 -0700] "GET /tiny.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:36 -0700] "GET /demo.html HTTP/1.1" 200 6327 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:37 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/demo.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:37 -0700] "GET /media/MakeOSPrtBootInstall.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/demo.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:42 -0700] "GET /detailedlinfo.html HTTP/1.1" 200 4005 "http://www.templeos.org/demo.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:42 -0700] "GET /sitebuilder/images/SCRN0001a-640x480.png HTTP/1.1" 200 20313 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:42 -0700] "GET /sitebuilder/images/SCRN0000a-640x480.png HTTP/1.1" 200 15512 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:42 -0700] "GET /sitebuilder/images/SCRN0002a-640x480.png HTTP/1.1" 200 11969 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:42 -0700] "GET /images/Promises.jpg HTTP/1.1" 200 76295 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:48 -0700] "GET /index.html HTTP/1.1" 200 81188 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:48 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:50 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -181.162.40.141 - - [08/May/2009:04:20:57 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -209.47.184.133 - - [08/May/2009:04:27:13 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -54.211.115.173 - - [08/May/2009:04:30:22 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.globalfreeware.com/OpenOfficeorg-241-Final-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB5)" "www.templeos.org" -54.211.115.173 - - [08/May/2009:04:31:15 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 343296 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB5)" "www.templeos.org" -233.20.138.241 - - [08/May/2009:04:34:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.179.102.88 - - [08/May/2009:04:51:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -236.83.106.223 - - [08/May/2009:04:59:54 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com.au/search?hl=en&q=is+it+possible+to+run+64+bit+iso+image+on+32+bit+os&btnG=Google+Search&meta=&aq=o&oq=" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.64 Safari/525.19" "www.templeos.org" -236.83.106.223 - - [08/May/2009:04:59:55 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.64 Safari/525.19" "www.templeos.org" -236.83.106.223 - - [08/May/2009:05:00:02 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.64 Safari/525.19" "www.templeos.org" -236.83.106.223 - - [08/May/2009:05:00:22 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 1048576 "-" "NSPlayer/12.00.7000.7000 WMFSDK/12.00.7000.7000" "www.templeos.org" -233.20.138.199 - - [08/May/2009:05:00:40 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:05:02:33 -0700] "GET /hdaudio.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:05:03:17 -0700] "GET /requirements.html HTTP/1.0" 200 3333 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:03:52 -0700] "GET /v505.html HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:03:53 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:03:56 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:03:56 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:03:56 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:03:57 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 131072 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:04:46 -0700] "GET /contact.html HTTP/1.1" 200 5360 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:05 -0700] "GET /requirements.html HTTP/1.1" 200 3333 "http://www.templeos.org/contact.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:05 -0700] "GET /images/Requirements.jpg HTTP/1.1" 200 29287 "http://www.templeos.org/requirements.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:55 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.templeos.org/requirements.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:55 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:55 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:55 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:55 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:55 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:55 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:57 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:57 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:58 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:59 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:05:59 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:06:00 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:06:00 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:07:38 -0700] "GET /detailedlinfo.html HTTP/1.1" 200 4005 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:07:39 -0700] "GET /sitebuilder/images/SCRN0000a-640x480.png HTTP/1.1" 200 15512 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:07:39 -0700] "GET /sitebuilder/images/SCRN0002a-640x480.png HTTP/1.1" 200 11969 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:07:39 -0700] "GET /sitebuilder/images/SCRN0001a-640x480.png HTTP/1.1" 200 20313 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:07:39 -0700] "GET /images/Promises.jpg HTTP/1.1" 200 76295 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:09:06 -0700] "GET /index.html HTTP/1.1" 200 81188 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:09:06 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/index.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -66.168.159.245 - - [08/May/2009:05:09:42 -0700] "GET / HTTP/1.1" 200 81188 "http://www.addfree100links.com/valuesite/templeos.org.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" "templeos.org" -66.168.159.245 - - [08/May/2009:05:09:45 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" "templeos.org" -66.168.159.245 - - [08/May/2009:05:09:50 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 720896 "-" "NSPlayer/9.0.0.3250" "templeos.org" -66.168.159.245 - - [08/May/2009:05:09:53 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 917504 "-" "NSPlayer/9.0.0.3250 WMFSDK/9.0" "templeos.org" -32.251.68.101 - - [08/May/2009:05:14:36 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -32.251.68.101 - - [08/May/2009:05:14:36 -0700] "GET /tanks.html HTTP/1.1" 200 3917 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -215.153.183.132 - - [08/May/2009:05:14:57 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.templeos.org/index.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803 Iceweasel/3.0.6 (Debian-3.0.6-1)" "www.templeos.org" -32.251.68.101 - - [08/May/2009:05:16:30 -0700] "GET /x-caliber.html HTTP/1.1" 200 3934 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -65.179.102.60 - - [08/May/2009:05:17:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -32.251.68.101 - - [08/May/2009:05:18:46 -0700] "GET /flightsim.html HTTP/1.1" 200 50990 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -47.40.51.172 - - [08/May/2009:05:18:48 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FDM; .NET CLR 2.0.50727)" "www.templeos.org" -47.40.51.172 - - [08/May/2009:05:19:04 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FDM; .NET CLR 2.0.50727)" "www.templeos.org" -47.40.51.172 - - [08/May/2009:05:19:33 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 206 196608 "http://www.templeos.org/" "FDM 1.x" "www.templeos.org" -47.40.51.172 - - [08/May/2009:05:19:33 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 524288 "http://www.templeos.org/" "FDM 1.x" "www.templeos.org" -47.40.51.172 - - [08/May/2009:05:19:33 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 206 327680 "http://www.templeos.org/" "FDM 1.x" "www.templeos.org" -47.40.51.172 - - [08/May/2009:05:19:33 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 206 393216 "http://www.templeos.org/" "FDM 1.x" "www.templeos.org" -32.251.68.101 - - [08/May/2009:05:20:43 -0700] "GET /fps.html HTTP/1.1" 200 33359 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:21:02 -0700] "GET /images/TempleOS421.JPG HTTP/1.1" 404 275 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:11 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:12 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:12 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:12 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:12 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:12 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:12 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:12 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -6.101.117.245 - - [08/May/2009:05:22:13 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [08/May/2009:05:22:13 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:14 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:14 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:15 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:15 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:15 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:15 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:15 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -78.18.63.10 - - [08/May/2009:05:22:20 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -6.101.117.245 - - [08/May/2009:05:22:22 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 3342336 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -32.251.68.101 - - [08/May/2009:05:22:54 -0700] "GET /span.html HTTP/1.1" 200 3929 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -32.251.68.101 - - [08/May/2009:05:24:57 -0700] "GET /squirt.html HTTP/1.1" 200 33028 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:05:25:47 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -32.251.68.101 - - [08/May/2009:05:27:35 -0700] "GET /organ.html HTTP/1.1" 200 3938 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:05:30:24 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mediapartners-Google" "www.templeos.org" -22.177.40.19 - - [08/May/2009:05:30:40 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Win64; x64; SV1)" "www.templeos.org" -65.179.102.241 - - [08/May/2009:05:34:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -146.163.193.67 - - [08/May/2009:05:36:21 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 2949120 "http://www.globalfreeware.com/TempleOS-503-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17" "www.templeos.org" -146.163.193.67 - - [08/May/2009:05:36:38 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 655360 "http://www.globalfreeware.com/Any-Video-Converter-Free-Edition-259-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17" "www.templeos.org" -18.17.74.247 - - [08/May/2009:05:50:17 -0700] "GET /robots.txt HTTP/1.0" 404 275 "-" "Gaisbot/3.0+(robot06@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)" "www.templeos.org" -233.20.138.199 - - [08/May/2009:05:51:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:05:53:08 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -32.197.106.21 - - [08/May/2009:05:53:25 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.globalfreeware.com/tb-exe-maker-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -233.20.138.101 - - [08/May/2009:06:00:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:06:06:54 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -209.50.52.113 - - [08/May/2009:06:07:28 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -22.177.40.19 - - [08/May/2009:06:09:44 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 200 0 "http://fileforum.betanews.com/sendfile/1183618683/1/1241785810.5c969ec306d9c2484851a1e4f778d66b66f7bae7/" "Download Master" "www.templeos.org" -171.94.157.191 - - [08/May/2009:06:14:51 -0700] "GET / HTTP/1.1" 200 81188 "http://cplus.about.com/b/2008/11/20/amazing-home-brew-operating-system.htm" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15" "templeos.org" -171.94.157.191 - - [08/May/2009:06:14:51 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15" "templeos.org" -171.94.157.191 - - [08/May/2009:06:14:52 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15" "templeos.org" -171.94.157.191 - - [08/May/2009:06:14:52 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 1114112 "http://templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15" "templeos.org" -171.94.157.191 - - [08/May/2009:06:15:22 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 17760256 "-" "QuickTime/7.6 (qtver=7.6;cpu=IA32;os=Mac 10.5.6)" "templeos.org" -233.20.138.101 - - [08/May/2009:06:17:42 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -251.75.185.90 - - [08/May/2009:06:19:32 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?q=bible+libraray+64+bit+downloads&rls=com.microsoft:en-us:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&rlz=1I7GZAZ_en" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; Media Center PC 5.1; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET CLR 1.1.4322; InfoPath.2)" "www.templeos.org" -251.75.185.90 - - [08/May/2009:06:19:32 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; Media Center PC 5.1; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET CLR 1.1.4322; InfoPath.2)" "www.templeos.org" -251.75.185.90 - - [08/May/2009:06:19:34 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "contype" "www.templeos.org" -251.75.185.90 - - [08/May/2009:06:19:47 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; Media Center PC 5.1; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET CLR 1.1.4322; InfoPath.2)" "www.templeos.org" -251.75.185.90 - - [08/May/2009:06:20:05 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; Media Center PC 5.1; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET CLR 1.1.4322; InfoPath.2)" "www.templeos.org" -251.75.185.90 - - [08/May/2009:06:20:07 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 720896 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -18.17.74.96 - - [08/May/2009:06:27:26 -0700] "GET /flightsim.html HTTP/1.0" 200 50990 "-" "Gaisbot/3.0+(robot06@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)" "www.templeos.org" -18.17.74.18 - - [08/May/2009:06:27:29 -0700] "GET /squirt.html HTTP/1.0" 200 33028 "-" "Gaisbot/3.0+(robot06@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)" "www.templeos.org" -18.17.74.147 - - [08/May/2009:06:27:38 -0700] "GET /tanks.html HTTP/1.0" 200 3917 "-" "Gaisbot/3.0+(robot06@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)" "www.templeos.org" -18.17.74.122 - - [08/May/2009:06:27:50 -0700] "GET /fps.html HTTP/1.0" 200 33359 "-" "Gaisbot/3.0+(robot06@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)" "www.templeos.org" -233.20.138.227 - - [08/May/2009:06:34:35 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.227 - - [08/May/2009:06:51:36 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.56.100 - - [08/May/2009:06:55:57 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240; MSNBOT-MOBILE/1.1; +http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.56.100 - - [08/May/2009:06:55:58 -0700] "GET / HTTP/1.1" 200 81188 "-" "T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240; MSNBOT-MOBILE/1.1; +http://search.msn.com/msnbot.htm)" "www.templeos.org" -6.101.117.245 - - [08/May/2009:07:00:20 -0700] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [08/May/2009:07:00:20 -0700] "GET /images/Header.JPG HTTP/1.1" 304 - "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -65.179.102.199 - - [08/May/2009:07:00:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -6.101.117.245 - - [08/May/2009:07:00:44 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 7471104 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -209.50.52.113 - - [08/May/2009:07:07:17 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -160.87.212.223 - - [08/May/2009:07:07:25 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.87.212.223 - - [08/May/2009:07:08:01 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -55.229.238.191 - - [08/May/2009:07:13:11 -0700] "GET /screenshots.html HTTP/1.0" 304 - "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -174.144.254.2 - - [08/May/2009:07:13:43 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?source=ig&hl=en&rlz=1G1GGLQ_ENUS274&q=64+bit+operating+system&aq=f&oq=" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; DHSI60SP1001; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 1.1.4322)" "www.templeos.org" -174.144.254.2 - - [08/May/2009:07:13:43 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; DHSI60SP1001; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 1.1.4322)" "www.templeos.org" -174.144.254.2 - - [08/May/2009:07:14:43 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 66292058 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; DHSI60SP1001; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 1.1.4322)" "www.templeos.org" -233.20.138.227 - - [08/May/2009:07:17:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -32.251.68.101 - - [08/May/2009:07:19:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:07:28:34 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.223 - - [08/May/2009:07:34:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -238.72.115.95 - - [08/May/2009:07:39:10 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "http://www.globalfreeware.com/Freeware-PDF-Unlocker-v104-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)" "www.templeos.org" -22.177.40.19 - - [08/May/2009:07:49:24 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://fileforum.betanews.com/sendfile/1183618683/1/1241785810.5c969ec306d9c2484851a1e4f778d66b66f7bae7/" "Download Master" "www.templeos.org" -65.179.102.141 - - [08/May/2009:07:51:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.64.102.137 - - [08/May/2009:07:58:18 -0700] "GET /index.html HTTP/1.1" 200 81188 "http://search.yahoo.com/search?p=download+c+source+files&ei=UTF-8&fr=yfp-t-501&fr2=rs-bottom&rs=0&xargs=0&pstart=1&b=11&xa=QbssPtUmwXWKlURq0.LOMA--,1241880988" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "templeos.org" -209.64.102.137 - - [08/May/2009:07:58:18 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "templeos.org" -209.64.102.137 - - [08/May/2009:07:58:22 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 1310720 "http://templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "templeos.org" -209.64.102.137 - - [08/May/2009:07:58:22 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "templeos.org" -209.64.102.137 - - [08/May/2009:07:58:23 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 786432 "-" "NSPlayer/11.0.5721.5251" "templeos.org" -209.64.102.137 - - [08/May/2009:07:58:25 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "templeos.org" -233.20.138.241 - - [08/May/2009:08:00:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -165.58.160.227 - - [08/May/2009:08:06:49 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 GTB5" "www.templeos.org" -65.78.92.131 - - [08/May/2009:08:12:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:08:16:40 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -146.164.123.66 - - [08/May/2009:08:16:58 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 3211264 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; sk; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -65.179.102.141 - - [08/May/2009:08:17:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -104.111.44.125 - - [08/May/2009:08:19:11 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 1114112 "http://www.globalfreeware.com/NETEagle-550-download.html" "Mozilla/4.0 WebTV/2.6 (compatible; MSIE 4.0)" "www.templeos.org" -65.179.102.241 - - [08/May/2009:08:34:35 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:08:34:39 -0700] "GET /logs/access_081111.log HTTP/1.0" 401 395 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:27 -0700] "GET / HTTP/1.0" 200 81188 "http://www.google.de/search?q=64+bit+opensource+kernel&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:de:official&client=firefox-a" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:29 -0700] "GET /images/Header.JPG HTTP/1.0" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:34 -0700] "GET /favicon.ico HTTP/1.0" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:36 -0700] "GET /screenshots.html HTTP/1.0" 200 11591 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:36 -0700] "GET /images/Collision.JPG HTTP/1.0" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:36 -0700] "GET /images/CTrace.JPG HTTP/1.0" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:36 -0700] "GET /images/Dollar.JPG HTTP/1.0" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:36 -0700] "GET /images/NetOfDots.JPG HTTP/1.0" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:38 -0700] "GET /images/Rocks.JPG HTTP/1.0" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:38 -0700] "GET /images/Tanks.JPG HTTP/1.0" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:39 -0700] "GET /images/FlightSim2.JPG HTTP/1.0" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:39 -0700] "GET /images/FPS.JPG HTTP/1.0" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:39 -0700] "GET /images/Span.JPG HTTP/1.0" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:40 -0700] "GET /images/Squirt.JPG HTTP/1.0" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:40 -0700] "GET /images/XCaliber.jpg HTTP/1.0" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:40 -0700] "GET /images/Organ.jpg HTTP/1.0" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:44:40 -0700] "GET /images/TempleOSV505.jpg HTTP/1.0" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -146.63.0.242 - - [08/May/2009:08:45:08 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 7995392 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -239.221.165.251 - - [08/May/2009:08:48:37 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 GTB5 (.NET CLR 3.5.30729)" "templeos.org" -233.20.138.241 - - [08/May/2009:08:51:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:08:52:26 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -49.214.219.204 - - [08/May/2009:08:53:18 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 1310720 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko/2008052906 Firefox/3.0" "www.templeos.org" -55.229.238.33 - - [08/May/2009:08:56:50 -0700] "GET /codesamples.html HTTP/1.0" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -233.20.138.101 - - [08/May/2009:09:00:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:09:01:25 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -179.203.182.229 - - [08/May/2009:09:01:32 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; MSN Optimized;US)" "www.templeos.org" -179.203.182.229 - - [08/May/2009:09:02:25 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.globalfreeware.com/ChemBalance-Wizard-32--v10-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; MSN Optimized;US)" "www.templeos.org" -124.84.164.161 - - [08/May/2009:09:08:10 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.globalfreeware.com/DEV-C-4992-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -203.248.53.15 - - [08/May/2009:09:08:23 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://74.125.39.132/translate_c?hl=ru&ie=UTF-8&sl=en&tl=ru&u=http://fileforum.betanews.com/download/1183618683/1&prev=_t&rurl=translate.google.ru&usg=ALkJrhj8elHUBMktUUuK-DaW0dLVkRJ9og" "Opera/9.64 (Windows NT 6.1; U; ru) Presto/2.1.1" "www.templeos.org" -65.179.102.60 - - [08/May/2009:09:17:34 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -236.173.255.192 - - [08/May/2009:09:19:00 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -65.179.102.88 - - [08/May/2009:09:34:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -135.185.119.63 - - [08/May/2009:09:36:04 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.sk/search?hl=sk&q=PC+64bit+operating+system&btnG=H%C4%BEada%C5%A5+v+Google&meta=&aq=o&oq=" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -135.185.119.63 - - [08/May/2009:09:38:00 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -48.224.104.183 - - [08/May/2009:09:38:00 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.globalfreeware.com/DirectX-90c-Redistributable-March-2009-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -135.185.119.63 - - [08/May/2009:09:38:06 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 458752 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -135.185.119.63 - - [08/May/2009:09:38:34 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -65.181.170.162 - - [08/May/2009:09:40:29 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -135.185.119.63 - - [08/May/2009:09:43:39 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -135.185.119.63 - - [08/May/2009:09:48:27 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -249.213.23.113 - - [08/May/2009:09:49:52 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -233.20.138.223 - - [08/May/2009:09:51:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -82.152.113.223 - - [08/May/2009:09:55:32 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; GoogleToolbar 5.0.2000.5344-big; Windows 6.0; MSIE 7.0.6001.18000)" "www.templeos.org" -82.152.113.223 - - [08/May/2009:09:55:32 -0700] "GET /favicon.gif HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; GoogleToolbar 5.0.2000.5344-big; Windows 6.0; MSIE 7.0.6001.18000)" "www.templeos.org" -198.243.225.29 - - [08/May/2009:10:00:03 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "S2Bot/1.0 (http://search2.net; bot[at]search2[dot]net)" "www.templeos.org" -198.243.225.29 - - [08/May/2009:10:00:05 -0700] "GET / HTTP/1.1" 200 81188 "-" "S2Bot/1.0 (http://search2.net; bot[at]search2[dot]net)" "www.templeos.org" -233.20.138.223 - - [08/May/2009:10:00:34 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.238.93 - - [08/May/2009:10:10:26 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:10:14:53 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -51.253.16.191 - - [08/May/2009:10:15:33 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" "www.templeos.org" -51.253.16.191 - - [08/May/2009:10:16:16 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 458752 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" "www.templeos.org" -51.253.16.191 - - [08/May/2009:10:17:06 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" "www.templeos.org" -65.179.102.60 - - [08/May/2009:10:17:43 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.221.207.7 - - [08/May/2009:10:22:08 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MSN 9.0;MSN 9.1;MSN 9.6; MSNbMSNI; MSNmen-us; MSNcIA)" "www.templeos.org" -51.253.16.191 - - [08/May/2009:10:22:56 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:10:29:21 -0700] "GET /v316.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.60 - - [08/May/2009:10:34:41 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -251.255.56.52 - - [08/May/2009:10:36:46 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; yie8)" "www.templeos.org" -251.255.56.52 - - [08/May/2009:10:37:14 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; yie8)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:10:38:12 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -251.255.56.52 - - [08/May/2009:10:38:15 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; yie8)" "www.templeos.org" -251.255.56.52 - - [08/May/2009:10:38:23 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; yie8)" "www.templeos.org" -82.152.113.223 - - [08/May/2009:10:48:59 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; GoogleToolbar 5.0.2000.5344-big; Windows 6.0; MSIE 7.0.6001.18000)" "www.templeos.org" -82.152.113.223 - - [08/May/2009:10:49:00 -0700] "GET /favicon.gif HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; GoogleToolbar 5.0.2000.5344-big; Windows 6.0; MSIE 7.0.6001.18000)" "www.templeos.org" -233.20.138.227 - - [08/May/2009:10:51:36 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.199 - - [08/May/2009:11:00:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -131.98.85.64 - - [08/May/2009:11:07:26 -0700] "GET /images/TempleOS421.JPG HTTP/1.1" 404 275 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)" "www.templeos.org" -166.241.48.100 - - [08/May/2009:11:09:10 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.co.uk/search?q=64bit+file+browser+open+source&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-GB:official&client=firefox-a" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -166.241.48.100 - - [08/May/2009:11:09:11 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -166.241.48.100 - - [08/May/2009:11:09:11 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -166.241.48.100 - - [08/May/2009:11:09:12 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -166.241.48.100 - - [08/May/2009:11:09:15 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -233.20.138.199 - - [08/May/2009:11:17:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:11:21:59 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -223.173.214.11 - - [08/May/2009:11:22:08 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) )" "www.templeos.org" -55.229.56.100 - - [08/May/2009:11:22:16 -0700] "GET /trouble.html HTTP/1.1" 200 25395 "-" "T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240; MSNBOT-MOBILE/1.1; +http://search.msn.com/msnbot.htm)" "www.templeos.org" -223.173.214.11 - - [08/May/2009:11:22:41 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) )" "www.templeos.org" -55.229.2.242 - - [08/May/2009:11:22:59 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.2.242 - - [08/May/2009:11:22:59 -0700] "GET /v505.html HTTP/1.1" 404 275 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -233.20.138.199 - - [08/May/2009:11:34:37 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:11:34:54 -0700] "GET /v503a.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:11:48:23 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -41.124.66.161 - - [08/May/2009:11:49:17 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.co.uk/search?q=free+cd+operating+systems&hl=en&start=10&sa=N" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10" "www.templeos.org" -41.124.66.161 - - [08/May/2009:11:49:17 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10" "www.templeos.org" -41.124.66.161 - - [08/May/2009:11:49:18 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10" "www.templeos.org" -41.124.66.161 - - [08/May/2009:11:49:19 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10" "www.templeos.org" -41.124.66.161 - - [08/May/2009:11:49:22 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10" "www.templeos.org" -209.50.52.113 - - [08/May/2009:11:50:59 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -220.164.80.170 - - [08/May/2009:11:51:07 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -220.164.80.170 - - [08/May/2009:11:51:16 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://www.globalfreeware.com/SynthFont-1081-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -65.179.102.141 - - [08/May/2009:11:51:35 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:52:00 -0700] "GET /images/TempleOS421.JPG HTTP/1.1" 404 275 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:38 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:38 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:39 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:39 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:39 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:39 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:40 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:40 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:40 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:40 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:41 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:41 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:41 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:41 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:42 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:43 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -203.126.208.225 - - [08/May/2009:11:56:46 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -167.90.124.172 - - [08/May/2009:11:59:56 -0700] "GET /index.html HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )" "www.templeos.org" -233.20.138.227 - - [08/May/2009:12:00:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.227 - - [08/May/2009:12:17:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -120.28.227.23 - - [08/May/2009:12:18:12 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.globalfreeware.com/TempleOS-503-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.8 (KHTML, like Gecko) Chrome/2.0.156.1 Safari/528.8" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:23 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.qr.cz/index.php?recordStart=7" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:23 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:23 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:24 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:25 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:25 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:27 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:27 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:28 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:29 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:29 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:30 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:31 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:32 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:32 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -142.243.149.50 - - [08/May/2009:12:25:40 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAXTHON 2.0)" "www.templeos.org" -55.229.126.10 - - [08/May/2009:12:26:51 -0700] "GET /organ.html HTTP/1.1" 200 3938 "-" "WinHttp" "www.templeos.org" -132.253.125.13 - - [08/May/2009:12:27:21 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -132.253.125.13 - - [08/May/2009:12:27:22 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/custom?hl=en&safe=off&client=pub-3646272212055959&cof=FORID%3A1%3BGL%3A1%3BS%3Ahttp%3A%2F%2Fwww.googlelightoff.com%2F%3BL%3Ahttp%3A%2F%2Fwww.googlelightoff.com%2Flogo2.gif%3BLH%3A100%3BLW%3A490%3BLBGC%3A000000%3BLP%3A1%3BBGC%3A%23000000%3BT%3A%23a9a15c%3BLC%3A%23ffffff%3BVLC%3A%23fcf190%3BALC%3A%23caf192%3BGALT%3A%23F8DF0C%3B&q=os+64+bits" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -132.253.125.13 - - [08/May/2009:12:27:23 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -132.253.125.13 - - [08/May/2009:12:28:58 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 8192000 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -167.90.126.126 - - [08/May/2009:12:32:44 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )" "www.templeos.org" -167.90.126.126 - - [08/May/2009:12:32:44 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 512 "-" "Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )" "www.templeos.org" -167.90.126.126 - - [08/May/2009:12:32:49 -0700] "HEAD /media/Demo1.wmv HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )" "www.templeos.org" -125.33.144.39 - - [08/May/2009:12:33:18 -0700] "GET / HTTP/1.1" 200 81188 "http://www.cs.toronto.edu/~ad/news/item?id=116" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -125.33.144.39 - - [08/May/2009:12:33:18 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -125.33.144.39 - - [08/May/2009:12:33:19 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -125.33.144.39 - - [08/May/2009:12:33:20 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "Safari5525.27.1 CFNetwork/422.15.2 Darwin/9.6.0 (i386) (MacPro1%2C1)" "www.templeos.org" -125.33.144.39 - - [08/May/2009:12:34:02 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 66292058 "-" "QuickTime/7.6 (qtver=7.6;cpu=IA32;os=Mac 10.5.6)" "www.templeos.org" -233.20.138.223 - - [08/May/2009:12:34:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -111.105.174.60 - - [08/May/2009:12:50:02 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 196608 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7" "www.templeos.org" -233.20.138.227 - - [08/May/2009:12:51:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -142.245.98.183 - - [08/May/2009:12:52:16 -0700] "GET /files/TempleOSCDV305.ISO HTTP/1.1" 401 395 "http://www.all-freeware.com/download/38114/the-templeos-operating-system.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; eSobiSubscriber 2.0.4.16; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -142.245.98.183 - "" [08/May/2009:12:52:24 -0700] "GET /files/TempleOSCDV305.ISO HTTP/1.1" 401 395 "http://www.all-freeware.com/download/38114/the-templeos-operating-system.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; eSobiSubscriber 2.0.4.16; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -142.245.98.183 - - [08/May/2009:12:52:27 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; eSobiSubscriber 2.0.4.16; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -142.245.98.183 - - [08/May/2009:12:52:39 -0700] "GET /files/TempleOSCDV305.ISO HTTP/1.1" 401 395 "http://www.all-freeware.com/download/38114/the-templeos-operating-system.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; eSobiSubscriber 2.0.4.16; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -142.245.98.183 - "" [08/May/2009:12:52:40 -0700] "GET /files/TempleOSCDV305.ISO HTTP/1.1" 401 395 "http://www.all-freeware.com/download/38114/the-templeos-operating-system.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; eSobiSubscriber 2.0.4.16; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -142.245.98.183 - admin [08/May/2009:12:52:51 -0700] "GET /files/TempleOSCDV305.ISO HTTP/1.1" 401 395 "http://www.all-freeware.com/download/38114/the-templeos-operating-system.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; eSobiSubscriber 2.0.4.16; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -142.245.98.183 - user [08/May/2009:12:53:06 -0700] "GET /files/TempleOSCDV305.ISO HTTP/1.1" 401 395 "http://www.all-freeware.com/download/38114/the-templeos-operating-system.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; eSobiSubscriber 2.0.4.16; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -142.245.98.183 - - [08/May/2009:12:53:09 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; eSobiSubscriber 2.0.4.16; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:07 -0700] "GET / HTTP/1.1" 200 81188 "http://royal.pingdom.com/2008/09/26/10-amazingly-alternative-operating-systems-and-what-they-could-mean-for-the-future/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:07 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:09 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 262144 "-" "NSPlayer/11.0.5721.5251" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 1441792 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:12 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:13 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:13 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:13 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:13 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:13 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 458752 "-" "NSPlayer/11.0.5721.5251 WMFSDK/11.0" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:14 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:15 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.175.142.224 - - [08/May/2009:12:58:15 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -80.140.42.93 - - [08/May/2009:12:59:58 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:00:00 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:00:06 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:00:08 -0700] "GET /media/Demo1.smi HTTP/1.1" 404 275 "http://www.templeos.org/" "Windows-Media-Player/11.0.5721.5260" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:00:11 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 458752 "-" "NSPlayer/11.0.5721.5251" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:00:11 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 458752 "-" "NSPlayer/11.0.5721.5251 WMFSDK/11.0" "www.templeos.org" -65.179.102.141 - - [08/May/2009:13:00:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:13:01:51 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -10.154.0.212 - - [08/May/2009:13:02:07 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2; MS-RTC LM 8; .NET CLR 3.5.21022)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:34 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:40 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:40 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:41 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:41 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:41 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:42 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:43 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:43 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:43 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:02:43 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -80.140.42.93 - - [08/May/2009:13:03:12 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 489728 "-" "NSPlayer/11.0.5721.5251 WMFSDK/11.0" "www.templeos.org" -27.208.185.160 - - [08/May/2009:13:12:49 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)" "www.templeos.org" -27.208.185.160 - - [08/May/2009:13:12:50 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)" "www.templeos.org" -27.208.185.160 - - [08/May/2009:13:12:51 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)" "www.templeos.org" -27.208.185.160 - - [08/May/2009:13:12:51 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)" "www.templeos.org" -124.11.44.248 - - [08/May/2009:13:15:40 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.1)" "www.templeos.org" -124.11.44.248 - - [08/May/2009:13:16:12 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.1)" "www.templeos.org" -233.20.138.101 - - [08/May/2009:13:17:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -27.208.185.160 - - [08/May/2009:13:25:21 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)" "www.templeos.org" -27.208.185.160 - - [08/May/2009:13:27:39 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)" "www.templeos.org" -27.208.185.160 - - [08/May/2009:13:27:42 -0700] "GET /LTsrc.zip HTTP/1.1" 200 942074 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)" "www.templeos.org" -233.20.138.227 - - [08/May/2009:13:34:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:13:46:29 -0700] "GET /files/?S=A HTTP/1.0" 401 395 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.101 - - [08/May/2009:13:51:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:13:55:48 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.141 - - [08/May/2009:14:00:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -57.74.41.212 - - [08/May/2009:14:02:02 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.1)" "www.templeos.org" -57.74.41.212 - - [08/May/2009:14:05:15 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.1)" "www.templeos.org" -57.74.41.212 - - [08/May/2009:14:08:06 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.1)" "www.templeos.org" -106.10.21.137 - - [08/May/2009:14:09:41 -0700] "GET /robots.txt HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Butterfly/1.0; +http://labs.topsy.com/butterfly.html) Gecko/2009032608 Firefox/3.0.8" "www.templeos.org" -106.10.21.137 - - [08/May/2009:14:09:41 -0700] "GET /v502.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Butterfly/1.0; +http://labs.topsy.com/butterfly.html) Gecko/2009032608 Firefox/3.0.8" "www.templeos.org" -233.20.138.223 - - [08/May/2009:14:17:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -57.74.41.212 - - [08/May/2009:14:21:38 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "http://www.globalfreeware.com/Stress-Relief-20-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.1)" "www.templeos.org" -57.74.41.212 - - [08/May/2009:14:23:41 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.1)" "www.templeos.org" -57.74.41.212 - - [08/May/2009:14:24:40 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.1)" "www.templeos.org" -233.20.138.223 - - [08/May/2009:14:34:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.92.64 - - [08/May/2009:14:46:09 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.92.64 - - [08/May/2009:14:46:09 -0700] "GET /detailedlinfo.html HTTP/1.1" 200 4005 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.92.64 - - [08/May/2009:14:46:09 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.92.64 - - [08/May/2009:14:46:10 -0700] "GET /index.html HTTP/1.1" 200 81188 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -199.76.177.96 - - [08/May/2009:14:47:36 -0700] "GET /V421.html HTTP/1.1" 404 275 "http://www.templeos.org/V421.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -233.20.138.223 - - [08/May/2009:14:51:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:54:39 -0700] "GET / HTTP/1.1" 200 81188 "http://royal.pingdom.com/2008/09/26/10-amazingly-alternative-operating-systems-and-what-they-could-mean-for-the-future/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4) Gecko/20090427 Fedora/3.5-0.20.beta4.fc11 Firefox/3.5b4" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:54:40 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4) Gecko/20090427 Fedora/3.5-0.20.beta4.fc11 Firefox/3.5b4" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:54:42 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4) Gecko/20090427 Fedora/3.5-0.20.beta4.fc11 Firefox/3.5b4" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:54:43 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4) Gecko/20090427 Fedora/3.5-0.20.beta4.fc11 Firefox/3.5b4" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:54:44 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "gvfs/1.2.2" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:54:44 -0700] "HEAD /media/Demo1.wmv HTTP/1.1" 200 0 "-" "gvfs/1.2.2" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:54:46 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4) Gecko/20090427 Fedora/3.5-0.20.beta4.fc11 Firefox/3.5b4" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:54:47 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "GStreamer souphttpsrc libsoup/2.26.1" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:54:49 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4) Gecko/20090427 Fedora/3.5-0.20.beta4.fc11 Firefox/3.5b4" "www.templeos.org" -171.177.242.132 - - [08/May/2009:14:57:21 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4) Gecko/20090427 Fedora/3.5-0.20.beta4.fc11 Firefox/3.5b4" "www.templeos.org" -65.179.102.241 - - [08/May/2009:15:00:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -142.111.16.173 - - [08/May/2009:15:06:46 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -142.111.16.173 - - [08/May/2009:15:07:10 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 458752 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -142.111.16.173 - - [08/May/2009:15:07:32 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -106.205.58.41 - - [08/May/2009:15:16:59 -0700] "GET / HTTP/1.0" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.20.138.227 - - [08/May/2009:15:17:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -106.205.58.20 - - [08/May/2009:15:20:55 -0700] "GET /trouble.html HTTP/1.0" 200 25395 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -106.205.58.41 - - [08/May/2009:15:21:34 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -106.205.58.216 - - [08/May/2009:15:22:22 -0700] "GET /demo.html HTTP/1.0" 200 6327 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -106.205.58.41 - - [08/May/2009:15:22:24 -0700] "GET /requirements.html HTTP/1.0" 200 3333 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -173.37.27.66 - - [08/May/2009:15:22:50 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.171.044921875" "www.templeos.org" -106.205.58.41 - - [08/May/2009:15:23:01 -0700] "GET /detailedlinfo.html HTTP/1.0" 200 4005 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -106.205.58.216 - - [08/May/2009:15:23:23 -0700] "GET /contact.html HTTP/1.0" 200 5360 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -106.205.58.20 - - [08/May/2009:15:23:32 -0700] "GET /screenshots.html HTTP/1.0" 200 11591 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -106.205.58.20 - - [08/May/2009:15:23:51 -0700] "GET /index.html HTTP/1.0" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -233.55.99.213 - - [08/May/2009:15:30:25 -0700] "GET / HTTP/1.1" 200 81188 "http://filext.com/file-extension/iso" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "templeos.org" -233.55.99.213 - - [08/May/2009:15:30:25 -0700] "GET /notified-PW_Notify_Time?aHR0cDovL2xvc2V0aG9zLmNvbS8= HTTP/1.1" 404 275 "http://filext.com/file-extension/iso" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "templeos.org" -233.55.99.213 - - [08/May/2009:15:30:25 -0700] "GET /verify-PW_Notify_Time?aHR0cDovL2xvc2V0aG9zLmNvbS8= HTTP/1.1" 404 275 "http://filext.com/file-extension/iso" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "templeos.org" -233.55.99.213 - - [08/May/2009:15:30:25 -0700] "GET / HTTP/1.1" 200 81188 "http://filext.com/file-extension/iso" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "templeos.org" -233.55.99.213 - - [08/May/2009:15:30:26 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "templeos.org" -233.55.99.213 - - [08/May/2009:15:30:29 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "templeos.org" -233.55.99.213 - - [08/May/2009:15:30:29 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 786432 "-" "contype" "templeos.org" -209.50.52.113 - - [08/May/2009:15:33:50 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -179.88.211.53 - - [08/May/2009:15:33:55 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -179.88.211.53 - - [08/May/2009:15:34:17 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -233.20.138.241 - - [08/May/2009:15:34:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.19.252.250 - - [08/May/2009:15:49:24 -0700] "GET / HTTP/1.1" 200 81188 "-" "FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)" "www.templeos.org" -167.102.230.57 - - [08/May/2009:15:50:36 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)" "www.templeos.org" -167.102.230.57 - - [08/May/2009:15:50:36 -0700] "GET /demo4.html HTTP/1.1" 404 275 "-" "Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)" "www.templeos.org" -65.179.102.141 - - [08/May/2009:15:51:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -8.130.83.255 - - [08/May/2009:16:00:03 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:16:00:10 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.141 - - [08/May/2009:16:00:44 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -106.205.58.123 - - [08/May/2009:16:00:45 -0700] "GET /x-caliber.html HTTP/1.0" 200 3934 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" "www.templeos.org" -27.236.229.179 - - [08/May/2009:16:14:32 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; tr; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -233.20.138.223 - - [08/May/2009:16:17:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -131.184.191.42 - - [08/May/2009:16:23:08 -0700] "GET / HTTP/1.1" 200 81188 "http://www.trivialsolutions.biz/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b5pre) Gecko/20090507 Shiretoko/3.5b5pre" "www.templeos.org" -131.184.191.42 - - [08/May/2009:16:23:08 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b5pre) Gecko/20090507 Shiretoko/3.5b5pre" "www.templeos.org" -131.184.191.42 - - [08/May/2009:16:23:09 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b5pre) Gecko/20090507 Shiretoko/3.5b5pre" "www.templeos.org" -131.184.191.42 - - [08/May/2009:16:23:12 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b5pre) Gecko/20090507 Shiretoko/3.5b5pre" "www.templeos.org" -181.56.15.239 - - [08/May/2009:16:32:45 -0700] "GET / HTTP/1.0" 200 81188 "http://www.templeos.org" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061011 Fedora/1.5.0.7-7.fc6 Firefox/1.5.0.7" "www.templeos.org" -233.20.138.241 - - [08/May/2009:16:34:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:16:45:21 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mediapartners-Google" "www.templeos.org" -205.37.218.149 - - [08/May/2009:16:45:33 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -205.37.218.149 - - [08/May/2009:16:45:52 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 458752 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -204.101.40.19 - - [08/May/2009:16:50:59 -0700] "GET / HTTP/1.1" 200 81188 "http://www.freeware-guide.com/dir/softdev/codeutil/TempleOS.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -204.101.40.19 - - [08/May/2009:16:51:00 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -204.101.40.19 - - [08/May/2009:16:51:13 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3703" "www.templeos.org" -233.20.138.223 - - [08/May/2009:16:51:21 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -84.80.125.249 - - [08/May/2009:16:54:31 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)" "www.templeos.org" -204.101.40.19 - - [08/May/2009:16:57:03 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 1048576 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -204.101.40.19 - - [08/May/2009:16:57:04 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 983040 "-" "NSPlayer/10.0.0.3703 WMFSDK/10.0" "www.templeos.org" -238.128.184.198 - - [08/May/2009:16:57:42 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?source=ig&hl=en&rlz=&q=64+bit+operating+system&btnG=Google+Search&aq=f&oq=" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -238.128.184.198 - - [08/May/2009:16:57:42 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -238.128.184.198 - - [08/May/2009:16:57:44 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -233.20.138.241 - - [08/May/2009:17:00:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -238.128.184.198 - - [08/May/2009:17:01:21 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 66292058 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -65.179.102.60 - - [08/May/2009:17:17:35 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -173.37.27.66 - - [08/May/2009:17:22:28 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.125.4150390625" "www.templeos.org" -55.229.238.87 - - [08/May/2009:17:26:45 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -231.46.90.109 - - [08/May/2009:17:30:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.globalfreeware.com/Xoology-Coda-v251-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19" "www.templeos.org" -114.131.28.142 - - [08/May/2009:17:33:52 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)" "www.templeos.org" -65.179.102.60 - - [08/May/2009:17:34:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.252.65.161 - - [08/May/2009:17:35:14 -0700] "GET / HTTP/1.1" 200 81188 "http://cplus.about.com/b/2008/11/20/amazing-home-brew-operating-system.htm" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FunWebProducts; GTB6; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.1; yie8)" "templeos.org" -65.252.65.161 - - [08/May/2009:17:35:14 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://templeos.org/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FunWebProducts; GTB6; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.1; yie8)" "templeos.org" -65.252.65.161 - - [08/May/2009:17:35:17 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 786432 "-" "contype" "templeos.org" -65.252.65.161 - - [08/May/2009:17:35:18 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FunWebProducts; GTB6; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.1; yie8)" "templeos.org" -15.32.74.83 - - [08/May/2009:17:49:48 -0700] "HEAD /media/X-Caliber.wmv HTTP/1.1" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "templeos.org" -15.32.74.83 - - [08/May/2009:17:51:00 -0700] "HEAD /media/MultiCore.wmv HTTP/1.1" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "templeos.org" -65.179.102.241 - - [08/May/2009:17:51:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -15.32.74.83 - - [08/May/2009:17:51:32 -0700] "HEAD /media/Tanks.wmv HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "templeos.org" -15.32.74.83 - - [08/May/2009:17:55:48 -0700] "HEAD /media/Demo2c.wmv HTTP/1.1" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "templeos.org" -15.32.74.83 - - [08/May/2009:17:57:42 -0700] "HEAD /media/Demo1.wmv HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "templeos.org" -15.32.74.83 - - [08/May/2009:17:58:59 -0700] "HEAD /media/BugBird.wmv HTTP/1.1" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "templeos.org" -233.20.138.223 - - [08/May/2009:18:00:33 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -153.214.75.214 - - [08/May/2009:18:00:46 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?q=64-bit+operating+systems&rls=com.microsoft:en-us:IE-Address&ie=UTF-8&oe=UTF-8&sourceid=ie7&rlz=1I7GPCK_enUS320" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC1; Media Center PC 5.0; MDDC; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -153.214.75.214 - - [08/May/2009:18:00:46 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC1; Media Center PC 5.0; MDDC; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -153.214.75.214 - - [08/May/2009:18:00:47 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "contype" "www.templeos.org" -153.214.75.214 - - [08/May/2009:18:00:59 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC1; Media Center PC 5.0; MDDC; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:18:03:37 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -153.214.75.214 - - [08/May/2009:18:05:31 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC1; Media Center PC 5.0; MDDC; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -223.26.160.51 - - [08/May/2009:18:06:35 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Privoxy/1.0" "www.templeos.org" -223.26.160.51 - - [08/May/2009:18:06:42 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Privoxy/1.0" "www.templeos.org" -173.37.27.66 - - [08/May/2009:18:06:43 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.195.73974609375" "www.templeos.org" -223.26.160.51 - - [08/May/2009:18:06:44 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 589824 "http://www.templeos.org/" "Privoxy/1.0" "www.templeos.org" -106.162.223.25 - - [08/May/2009:18:06:48 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.dotnetdotcom.org/, crawler@dotnetdotcom.org)" "www.templeos.org" -174.184.199.147 - - [08/May/2009:18:08:09 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Privoxy/1.0" "www.templeos.org" -174.184.199.147 - - [08/May/2009:18:08:11 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Privoxy/1.0" "www.templeos.org" -65.181.170.162 - - [08/May/2009:18:08:14 -0700] "GET /flightsim.html HTTP/1.0" 200 50990 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:18:08:19 -0700] "GET /media/Flightsim.wmv HTTP/1.0" 200 8192000 "http://www.templeos.org/flightsim.html" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -174.184.199.147 - - [08/May/2009:18:13:48 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Privoxy/1.0" "www.templeos.org" -144.55.84.65 - - [08/May/2009:18:16:55 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Privoxy/1.0" "www.templeos.org" -65.179.102.199 - - [08/May/2009:18:17:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -167.90.126.192 - - [08/May/2009:18:23:57 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 (FoxPlus) Firefox/2.0.0.14" "www.templeos.org" -167.90.126.192 - - [08/May/2009:18:23:58 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)" "www.templeos.org" -167.90.126.192 - - [08/May/2009:18:23:58 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3646" "www.templeos.org" -167.90.126.192 - - [08/May/2009:18:23:59 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )" "www.templeos.org" -167.90.126.192 - - [08/May/2009:18:23:59 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://youdao.com/search" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)" "www.templeos.org" -167.90.126.192 - - [08/May/2009:18:23:59 -0700] "HEAD /media/Demo1.wmv HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )" "www.templeos.org" -167.90.126.192 - - [08/May/2009:18:24:00 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 128 "-" "NSPlayer/10.0.0.3646" "www.templeos.org" -233.20.138.199 - - [08/May/2009:18:34:33 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -205.40.74.226 - - [08/May/2009:18:36:33 -0700] "GET /v422.html HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) NetNewsWire/3.1.7" "www.templeos.org" -205.40.74.226 - - [08/May/2009:18:36:33 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/v422.html" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) NetNewsWire/3.1.7" "www.templeos.org" -205.40.74.226 - - [08/May/2009:18:36:50 -0700] "GET /v422.html HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -205.40.74.226 - - [08/May/2009:18:36:50 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/v422.html" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -106.16.236.157 - - [08/May/2009:18:42:43 -0700] "GET / HTTP/1.0" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FunWebProducts; .NET CLR 1.1.4322; SpamBlockerUtility 4.7.7; PeoplePal 3.0)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:18:47:53 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Googlebot-Image/1.0" "www.templeos.org" -209.50.52.113 - - [08/May/2009:18:47:53 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 304 - "-" "Googlebot-Image/1.0" "www.templeos.org" -233.20.138.223 - - [08/May/2009:18:51:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:18:53:45 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org" -106.10.21.137 - - [08/May/2009:18:57:44 -0700] "GET /robots.txt HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Butterfly/1.0; +http://labs.topsy.com/butterfly.html) Gecko/2009032608 Firefox/3.0.8" "www.templeos.org" -106.10.21.137 - - [08/May/2009:18:57:44 -0700] "GET /v501.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Butterfly/1.0; +http://labs.topsy.com/butterfly.html) Gecko/2009032608 Firefox/3.0.8" "www.templeos.org" -209.50.52.113 - - [08/May/2009:18:57:47 -0700] "GET /index.html HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org" -233.20.138.227 - - [08/May/2009:19:00:23 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:19:09:18 -0700] "GET /index.html HTTP/1.0" 200 81188 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:19:09:19 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 196608 "http://www.templeos.org/index.html" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -173.37.27.66 - - [08/May/2009:19:09:49 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.179.437255859375" "www.templeos.org" -233.20.138.241 - - [08/May/2009:19:17:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:19:22:01 -0700] "GET /sitebuilder/?N=A HTTP/1.0" 200 796 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.199 - - [08/May/2009:19:34:34 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -124.143.108.1 - - [08/May/2009:19:38:24 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "http://www.globalfreeware.com/Game-Maker-61-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" "www.templeos.org" -124.143.108.1 - - [08/May/2009:19:38:51 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" "www.templeos.org" -124.143.108.1 - - [08/May/2009:19:45:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" "www.templeos.org" -233.20.138.223 - - [08/May/2009:19:51:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.227 - - [08/May/2009:20:00:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -132.234.23.29 - - [08/May/2009:20:06:26 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -132.234.23.29 - - [08/May/2009:20:06:26 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -132.234.23.29 - - [08/May/2009:20:06:35 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "http://www.globalfreeware.com/Youtube-Grabber-1001-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -206.21.19.74 - - [08/May/2009:20:07:17 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -37.238.27.191 - - [08/May/2009:20:08:12 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://www.freewarefiles.com/downloads_counter.php?programid=26778" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -236.162.138.97 - - [08/May/2009:20:09:33 -0700] "GET /media/Demo1.wmv HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible;)" "www.templeos.org" -233.20.138.241 - - [08/May/2009:20:17:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:20:26:42 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -251.213.201.23 - - [08/May/2009:20:32:03 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -215.46.56.199 - - [08/May/2009:20:34:25 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?hl=en&client=safari&rls=en-us&q=64+bit+operating+systems&btnG=Search" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -215.46.56.199 - - [08/May/2009:20:34:25 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -233.20.138.241 - - [08/May/2009:20:34:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -215.46.56.199 - - [08/May/2009:20:34:26 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -215.46.56.199 - - [08/May/2009:20:35:07 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 40173568 "-" "QuickTime/7.6 (qtver=7.6;cpu=IA32;os=Mac 10.5.6)" "www.templeos.org" -215.46.56.199 - - [08/May/2009:20:36:08 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 233913 "-" "Safari5525.27.1 CFNetwork/422.15.2 Darwin/9.6.0 (i386) (MacBook2%2C1)" "www.templeos.org" -223.231.184.207 - - [08/May/2009:20:39:11 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -171.111.50.33 - - [08/May/2009:20:40:38 -0700] "GET / HTTP/1.0" 200 81188 "http://fileforum.betanews.com/detail/1183618683/1" "Opera/9.64 (Windows NT 6.0; U; en) Presto/2.1.1" "www.templeos.org" -171.111.50.33 - - [08/May/2009:20:40:39 -0700] "GET /images/Header.JPG HTTP/1.0" 200 2982 "http://www.templeos.org/" "Opera/9.64 (Windows NT 6.0; U; en) Presto/2.1.1" "www.templeos.org" -171.111.50.33 - - [08/May/2009:20:40:39 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 196608 "http://www.templeos.org/" "Opera/9.64 (Windows NT 6.0; U; en) Presto/2.1.1" "www.templeos.org" -173.37.27.66 - - [08/May/2009:20:49:57 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.194.415283203125" "www.templeos.org" -65.179.102.241 - - [08/May/2009:20:51:33 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -125.104.132.198 - - [08/May/2009:20:53:21 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)" "www.templeos.org" -233.20.138.199 - - [08/May/2009:21:00:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -165.179.171.192 - - [08/May/2009:21:12:21 -0700] "GET / HTTP/1.1" 200 81188 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)" "www.templeos.org" -55.229.92.64 - - [08/May/2009:21:12:43 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.92.64 - - [08/May/2009:21:12:43 -0700] "GET /instruct.html HTTP/1.1" 404 275 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -65.179.102.241 - - [08/May/2009:21:17:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -6.194.190.184 - - [08/May/2009:21:28:23 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&q=operating.system++64.bit&btnG=Search" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" "www.templeos.org" -6.194.190.184 - - [08/May/2009:21:28:23 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" "www.templeos.org" -6.194.190.184 - - [08/May/2009:21:29:06 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 66292058 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" "www.templeos.org" -6.194.190.184 - - [08/May/2009:21:29:06 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" "www.templeos.org" -6.194.190.184 - - [08/May/2009:21:29:09 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" "www.templeos.org" -51.49.23.139 - - [08/May/2009:21:29:25 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -6.194.190.184 - - [08/May/2009:21:29:58 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" "www.templeos.org" -51.49.23.139 - - [08/May/2009:21:30:13 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -51.49.23.139 - - [08/May/2009:21:30:27 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "http://www.globalfreeware.com/TempleOS-503-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -51.49.23.139 - - [08/May/2009:21:30:37 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 262144 "http://www.globalfreeware.com/TempleOS-503-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SBUA)" "www.templeos.org" -132.74.10.13 - - [08/May/2009:21:33:13 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -132.74.10.13 - - [08/May/2009:21:33:49 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 524288 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -65.179.102.60 - - [08/May/2009:21:34:23 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:14 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.freeware-guide.com/dir/softdev/codeutil/TempleOS.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:14 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:15 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:15 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:15 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:16 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:16 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:17 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:17 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:18 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:18 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:18 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:18 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:19 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -142.19.183.141 - - [08/May/2009:21:35:19 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -236.162.138.97 - - [08/May/2009:21:46:50 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible;)" "www.templeos.org" -236.162.138.97 - - [08/May/2009:21:47:06 -0700] "GET /images/CTrace.JPG HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible;)" "www.templeos.org" -236.162.138.97 - - [08/May/2009:21:47:07 -0700] "GET /images/Dollar.JPG HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible;)" "www.templeos.org" -236.162.138.97 - - [08/May/2009:21:47:13 -0700] "GET /images/Collision.JPG HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible;)" "www.templeos.org" -233.20.138.241 - - [08/May/2009:21:51:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -177.73.20.186 - - [08/May/2009:21:59:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "http://www.globalfreeware.com/PHP-525-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -233.20.138.199 - - [08/May/2009:22:00:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.179.102.60 - - [08/May/2009:22:17:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -199.76.177.49 - - [08/May/2009:22:22:37 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -199.76.177.49 - - [08/May/2009:22:25:19 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -199.76.177.96 - - [08/May/2009:22:28:23 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -84.162.158.89 - - [08/May/2009:22:31:27 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -233.20.138.101 - - [08/May/2009:22:34:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.238.122 - - [08/May/2009:22:41:07 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -65.181.170.162 - - [08/May/2009:22:43:17 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -49.9.6.4 - - [08/May/2009:22:48:39 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.brothersoft.com/the-templeos-operating-system-download-67591.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; GTB6)" "www.templeos.org" -65.179.102.241 - - [08/May/2009:22:51:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [08/May/2009:22:53:57 -0700] "GET /index.html HTTP/1.1" 200 81188 "-" "DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org" -84.162.158.48 - - [08/May/2009:22:54:40 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -114.76.241.90 - - [08/May/2009:22:55:42 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; InfoPath.2)" "www.templeos.org" -114.76.241.90 - - [08/May/2009:22:55:42 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; InfoPath.2)" "www.templeos.org" -114.76.241.90 - - [08/May/2009:22:55:44 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; InfoPath.2)" "www.templeos.org" -114.76.241.90 - - [08/May/2009:22:56:24 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 12713984 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -199.76.177.70 - - [08/May/2009:22:57:34 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -94.239.36.148 - - [08/May/2009:22:57:46 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -94.239.36.148 - - [08/May/2009:22:57:46 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.179.102.88 - - [08/May/2009:23:00:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -186.215.242.190 - - [08/May/2009:23:07:06 -0700] "GET / HTTP/1.1" 200 81188 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" "www.templeos.org" -160.17.198.101 - - [08/May/2009:23:11:01 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" "www.templeos.org" -171.219.104.145 - - [08/May/2009:23:11:57 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4704256 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -169.121.37.248 - - [08/May/2009:23:17:44 -0700] "GET / HTTP/1.1" 200 81188 "-" "Baiduspider+(+http://www.baidu.jp/spider/)" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:28:26 -0700] "GET / HTTP/1.0" 200 81188 "http://www.google.com/search?q=http%3A%2F%2Fwww.templeos.org&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:30:25 -0700] "GET /images/Header.JPG HTTP/1.0" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:30:26 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:30:27 -0700] "GET /favicon.ico HTTP/1.0" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:17 -0700] "GET /screenshots.html HTTP/1.0" 200 11591 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:17 -0700] "GET /images/Collision.JPG HTTP/1.0" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:17 -0700] "GET /images/CTrace.JPG HTTP/1.0" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:17 -0700] "GET /images/Rocks.JPG HTTP/1.0" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:17 -0700] "GET /images/Dollar.JPG HTTP/1.0" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:17 -0700] "GET /images/NetOfDots.JPG HTTP/1.0" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:18 -0700] "GET /images/FlightSim2.JPG HTTP/1.0" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:18 -0700] "GET /images/Tanks.JPG HTTP/1.0" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:18 -0700] "GET /images/FPS.JPG HTTP/1.0" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:18 -0700] "GET /images/Squirt.JPG HTTP/1.0" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:18 -0700] "GET /images/Span.JPG HTTP/1.0" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:18 -0700] "GET /images/XCaliber.jpg HTTP/1.0" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:18 -0700] "GET /images/Organ.jpg HTTP/1.0" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:18 -0700] "GET /images/TempleOSV505.jpg HTTP/1.0" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -233.20.138.241 - - [08/May/2009:23:34:34 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:41 -0700] "GET /index.html HTTP/1.0" 200 81188 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:34:43 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 327680 "http://www.templeos.org/index.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -125.47.198.224 - - [08/May/2009:23:36:59 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 3034368 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5" "www.templeos.org" -65.181.170.162 - - [08/May/2009:23:49:58 -0700] "GET /history.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.241 - - [08/May/2009:23:51:50 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -215.61.1.157 - - [08/May/2009:23:56:31 -0700] "GET / HTTP/1.1" 200 81188 "-" ".NET Framework Test Client" "www.templeos.org" -215.61.1.157 - - [08/May/2009:23:56:32 -0700] "GET / HTTP/1.1" 200 81188 "-" ".NET Framework Test Client" "www.templeos.org" -65.179.102.241 - - [09/May/2009:00:00:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -59.43.103.214 - - [09/May/2009:00:02:03 -0700] "GET / HTTP/1.0" 200 81188 "-" "Wget/1.10.2" "templeos.org" -65.180.4.125 - - [09/May/2009:00:12:55 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "templeos.org" -233.20.138.241 - - [09/May/2009:00:17:41 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.179.102.241 - - [09/May/2009:00:34:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.170.162 - - [09/May/2009:00:38:48 -0700] "GET /sitebuilder/?S=A HTTP/1.0" 200 796 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:00:46:31 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4704256 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:49:34 -0700] "GET / HTTP/1.1" 200 81188 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:49:53 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:49:54 -0700] "GET /contact.html HTTP/1.1" 200 5360 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:49:54 -0700] "GET /demo.html HTTP/1.1" 200 6327 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:49:55 -0700] "GET /detailedlinfo.html HTTP/1.1" 200 4005 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:49:56 -0700] "GET /index.html HTTP/1.1" 200 81188 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:50:00 -0700] "GET /requirements.html HTTP/1.1" 200 3333 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:50:01 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:50:02 -0700] "GET /trouble.html HTTP/1.1" 200 25395 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:50:06 -0700] "GET /flightsim.html HTTP/1.1" 200 50990 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:50:08 -0700] "GET /fps.html HTTP/1.1" 200 33359 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:50:11 -0700] "GET /organ.html HTTP/1.1" 200 3938 "-" "Java/1.6.0_04" "www.templeos.org" -173.37.67.242 - - [09/May/2009:00:50:12 -0700] "GET /span.html HTTP/1.1" 200 3929 "-" "Java/1.6.0_04" "www.templeos.org" -233.20.138.241 - - [09/May/2009:00:51:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:00:52:07 -0700] "GET /v505.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" diff --git a/Demo/WebLogExample/access_090510.LOG b/Demo/WebLogExample/access_090510.LOG deleted file mode 100644 index fa0566c..0000000 --- a/Demo/WebLogExample/access_090510.LOG +++ /dev/null @@ -1,788 +0,0 @@ -233.20.138.241 - - [09/May/2009:01:00:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:01:17:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -25.145.140.197 - - [09/May/2009:01:20:38 -0700] "GET / HTTP/1.1" 200 81188 "http://sourceforge.net/projects/templeos4/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -25.145.140.197 - - [09/May/2009:01:20:48 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 393216 "-" "NSPlayer/10.0.0.4066" "www.templeos.org" -25.145.140.197 - - [09/May/2009:01:21:02 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -171.219.143.228 - - [09/May/2009:01:22:07 -0700] "GET /SlurpConfirm404/briefs.htm HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -25.145.140.197 - - [09/May/2009:01:24:29 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 37814272 "-" "NSPlayer/10.0.0.4066 WMFSDK/10.0" "www.templeos.org" -25.145.140.197 - - [09/May/2009:01:24:29 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 35323904 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -171.219.143.228 - - [09/May/2009:01:31:55 -0700] "GET /files/?M=D HTTP/1.0" 401 395 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.141 - - [09/May/2009:01:34:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -63.5.155.196 - - [09/May/2009:01:41:46 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.50.52.113 - - [09/May/2009:01:42:02 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mediapartners-Google" "www.templeos.org" -51.49.128.66 - - [09/May/2009:01:42:08 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.brothersoft.com/the-templeos-operating-system-download-67591.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6; HbTools 4.7.2)" "www.templeos.org" -223.19.223.4 - - [09/May/2009:01:42:20 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -186.215.242.85 - - [09/May/2009:01:47:46 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "-" "www.templeos.org" -171.219.143.228 - - [09/May/2009:01:50:25 -0700] "GET /sitebuilder/?M=A HTTP/1.0" 200 796 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.101 - - [09/May/2009:01:51:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -179.80.169.72 - - [09/May/2009:01:59:12 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:02:00:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -165.179.21.110 - - [09/May/2009:02:08:01 -0700] "GET / HTTP/1.1" 304 - "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)" "www.templeos.org" -49.148.97.63 - - [09/May/2009:02:09:07 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.co.in/search?hl=en&q=C%2B%2B+for+64+bit+operating+system&btnG=Google+Search&meta=&aq=f&oq=" "Opera/9.27 (Windows NT 6.0; U; en)" "www.templeos.org" -49.148.97.63 - - [09/May/2009:02:09:09 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Opera/9.27 (Windows NT 6.0; U; en)" "www.templeos.org" -49.148.97.63 - - [09/May/2009:02:09:11 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 262144 "http://www.templeos.org/" "Opera/9.27 (Windows NT 6.0; U; en)" "www.templeos.org" -49.148.97.63 - - [09/May/2009:02:09:12 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/" "Opera/9.27 (Windows NT 6.0; U; en)" "www.templeos.org" -114.7.42.247 - - [09/May/2009:02:10:26 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)" "templeos.org" -114.7.42.247 - - [09/May/2009:02:10:26 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)" "templeos.org" -114.7.42.247 - - [09/May/2009:02:10:27 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)" "www.templeos.org" -49.148.97.63 - - [09/May/2009:02:11:03 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 262144 "http://www.templeos.org/" "Opera/9.27 (Windows NT 6.0; U; en)" "www.templeos.org" -49.148.97.63 - - [09/May/2009:02:11:03 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/" "Opera/9.27 (Windows NT 6.0; U; en)" "www.templeos.org" -65.179.102.241 - - [09/May/2009:02:17:23 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.31.76 - - [09/May/2009:02:26:24 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240; MSNBOT-MOBILE/1.1; +http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.31.76 - - [09/May/2009:02:26:25 -0700] "GET /contact.html HTTP/1.1" 200 5360 "-" "T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240; MSNBOT-MOBILE/1.1; +http://search.msn.com/msnbot.htm)" "www.templeos.org" -65.179.102.241 - - [09/May/2009:02:34:23 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -179.142.254.170 - - [09/May/2009:02:49:52 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?sourceid=navclient&ie=UTF-8&rlz=1T4GGLL_enUS323US323&q=64bit+operating+system+free+download" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; MySpace;; MySpace;)" "www.templeos.org" -179.142.254.170 - - [09/May/2009:02:49:54 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; MySpace;; MySpace;)" "www.templeos.org" -179.142.254.170 - - [09/May/2009:02:49:59 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "contype" "www.templeos.org" -179.142.254.170 - - [09/May/2009:02:50:15 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; MySpace;; MySpace;)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:02:50:36 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.141 - - [09/May/2009:02:51:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -84.122.249.249 - - [09/May/2009:02:51:41 -0700] "GET / HTTP/1.1" 200 81188 "http://sourceforge.net/projects/templeos4/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -84.122.249.249 - - [09/May/2009:02:51:42 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -84.122.249.249 - - [09/May/2009:02:51:44 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 196608 "-" "NSPlayer/10.0.0.4066" "www.templeos.org" -84.122.249.249 - - [09/May/2009:02:52:54 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 10354688 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -84.122.249.249 - - [09/May/2009:02:52:54 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 42926080 "-" "NSPlayer/10.0.0.4066 WMFSDK/10.0" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:53:50 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.be/search?hl=nl&ei=UVIFStXTO4LE-Ab_ooSSAw&sa=X&oi=spell&resnum=1&ct=result&cd=1&q=64+bit+os&spell=1" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:53:50 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:53:59 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/11.0.5721.5251" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:02 -0700] "GET /media/Demo1.smi HTTP/1.1" 404 275 "-" "Windows-Media-Player/11.0.5721.5260" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:08 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 7929856 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:09 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:09 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:09 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:10 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 4521984 "-" "NSPlayer/11.0.5721.5251 WMFSDK/11.0" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:10 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:10 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:10 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:11 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:11 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:11 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:11 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:12 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:12 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:13 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:13 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:48 -0700] "GET /index.html HTTP/1.1" 200 81188 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:49 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/11.0.5721.5251" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:54:50 -0700] "GET /media/Demo1.smi HTTP/1.1" 404 275 "-" "Windows-Media-Player/11.0.5721.5260" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:55:34 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 23658496 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2" "www.templeos.org" -135.35.91.54 - - [09/May/2009:02:55:34 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 22151168 "-" "NSPlayer/11.0.5721.5251 WMFSDK/11.0" "www.templeos.org" -6.101.117.245 - - [09/May/2009:02:58:30 -0700] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:02:58:30 -0700] "GET /images/Header.JPG HTTP/1.1" 304 - "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:02:58:36 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 2359296 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -65.179.102.199 - - [09/May/2009:03:00:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:03:03:16 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 2359296 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -66.111.99.108 - - [09/May/2009:03:11:15 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 1572864 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -65.179.102.241 - - [09/May/2009:03:17:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.179.102.241 - - [09/May/2009:03:34:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -146.164.114.241 - - [09/May/2009:03:39:15 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -55.229.31.76 - - [09/May/2009:03:44:05 -0700] "GET /flightsim.html HTTP/1.1" 200 50990 "-" "T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240; MSNBOT-MOBILE/1.1; +http://search.msn.com/msnbot.htm)" "www.templeos.org" -149.179.50.34 - - [09/May/2009:03:45:47 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mozilla/5.0 (compatible; MSIE or Firefox mutant; not on Windows server; +http://ws.daum.net/aboutWebSearch.html) Daumoa/2.0" "www.templeos.org" -149.179.50.34 - - [09/May/2009:03:45:47 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org" "Mozilla/5.0 (compatible; Firefox compatible; MS IE compatible; not on Windows server; +http://cs.daum.net/faq/site/15.html) Daumoa-feedfetcher/2.0" "www.templeos.org" -55.229.31.76 - - [09/May/2009:03:46:10 -0700] "GET / HTTP/1.1" 200 81188 "-" "T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240; MSNBOT-MOBILE/1.1; +http://search.msn.com/msnbot.htm)" "www.templeos.org" -200.155.160.228 - - [09/May/2009:03:49:53 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "SeznamBot/2.0 (+http://fulltext.sblog.cz/robot/)" "www.templeos.org" -200.155.160.228 - - [09/May/2009:03:49:54 -0700] "GET / HTTP/1.1" 200 81188 "-" "SeznamBot/2.0 (+http://fulltext.sblog.cz/robot/)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:03:51:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -165.94.246.65 - - [09/May/2009:03:54:45 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -65.179.102.199 - - [09/May/2009:04:00:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:02:55 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 520678 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:02:56 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 917504 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:02:56 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 193841 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:02:58 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 511644 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:02:59 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 562286 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:03:03 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 786432 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:03:04 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 851968 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:03:06 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 550985 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:03:08 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 39622 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -34.175.253.82 - - [09/May/2009:04:03:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 720896 "http://www.globalfreeware.com/LimeWire-4180-Beta--4167-download.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.1)" "www.templeos.org" -32.251.68.101 - - [09/May/2009:04:05:28 -0700] "GET /V421.html HTTP/1.1" 404 275 "-" "Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)" "www.templeos.org" -55.229.238.111 - - [09/May/2009:04:09:51 -0700] "GET /requirements.html HTTP/1.0" 304 - "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -160.184.18.26 - - [09/May/2009:04:14:35 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6" "www.templeos.org" -171.219.143.228 - - [09/May/2009:04:15:28 -0700] "GET /sitebuilder/images/?S=A HTTP/1.0" 200 3273 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:04:17:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.241 - - [09/May/2009:04:34:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -41.163.98.5 - - [09/May/2009:04:35:46 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.co.uk/search?q=operating+systems+free+request+cd&hl=en&start=10&sa=N" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10" "www.templeos.org" -41.163.98.5 - - [09/May/2009:04:35:52 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10" "www.templeos.org" -41.163.98.5 - - [09/May/2009:04:35:57 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10" "www.templeos.org" -160.59.249.145 - - [09/May/2009:04:36:48 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 996583 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -160.59.249.74 - - [09/May/2009:04:36:48 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 245291 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -160.59.249.145 - - [09/May/2009:04:36:49 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 294711 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -41.163.98.5 - - [09/May/2009:04:36:50 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10" "www.templeos.org" -160.59.249.221 - - [09/May/2009:04:36:52 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 126496 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -160.59.249.246 - - [09/May/2009:04:36:53 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 620324 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -160.59.249.145 - - [09/May/2009:04:36:55 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 1572864 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -160.59.249.71 - - [09/May/2009:04:36:55 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 63249 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -160.59.249.145 - - [09/May/2009:04:36:57 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 2097152 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -160.59.249.145 - - [09/May/2009:04:36:58 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 31705 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -160.59.249.145 - - [09/May/2009:04:36:58 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 21376 "http://www.globalfreeware.com/CPU-Z-1442-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -186.215.242.85 - - [09/May/2009:04:38:13 -0700] "GET /index.html HTTP/1.1" 304 - "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:04:46:37 -0700] "GET /sitebuilder/?S=D HTTP/1.0" 200 796 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -18.209.144.199 - - [09/May/2009:04:50:23 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -233.20.138.241 - - [09/May/2009:04:51:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.82.210 - - [09/May/2009:04:56:15 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.82.210 - - [09/May/2009:04:58:20 -0700] "GET /contact.html HTTP/1.0" 304 - "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -233.20.138.101 - - [09/May/2009:05:00:34 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.238.22 - - [09/May/2009:05:01:19 -0700] "GET /history.html HTTP/1.0" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:05:03:38 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -215.1.77.113 - - [09/May/2009:05:06:53 -0700] "GET /v505.html HTTP/1.1" 404 275 "-" "Mozilla/5.0 (compatible; woriobot support [at] worio [dot] com +http://worio.com)" "www.templeos.org" -41.170.30.194 - - [09/May/2009:05:12:04 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://images.google.ro/imgres?imgurl=http://www.globalfreeware.com/productImg/39/YouTube-Downloader-216/youtubednldr11.gif&imgrefurl=http://www.globalfreeware.com/YouTube-Downloader-216.html&usg=__oTEVmin8KCl46ET7llSU7NxmGFU=&h=326&w=378&sz=11&hl=ro&start=2&um=1&tbnid=q04pwDLVt9sGgM:&tbnh=105&tbnw=122&prev=/images%3Fq%3Ddownload%2Bfree%2Byoutube%2Bdownloader%26hl%3Dro%26sa%3DN%26um%3D1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -173.37.27.66 - - [09/May/2009:05:15:44 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.174.5361328125" "www.templeos.org" -65.179.102.141 - - [09/May/2009:05:17:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:05:34:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -20.213.18.107 - - [09/May/2009:05:45:22 -0700] "GET /robots.txt HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)" "www.templeos.org" -20.213.168.230 - - [09/May/2009:05:46:10 -0700] "GET / HTTP/1.0" 200 81188 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)" "www.templeos.org" -233.20.138.88 - - [09/May/2009:05:51:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -236.162.138.97 - - [09/May/2009:05:57:41 -0700] "GET /images/Span.JPG HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible;)" "www.templeos.org" -54.211.99.239 - - [09/May/2009:05:57:43 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; (R1 1.6); .NET CLR 2.0.50727)" "www.templeos.org" -236.162.138.97 - - [09/May/2009:05:57:45 -0700] "GET /images/Squirt.JPG HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible;)" "www.templeos.org" -236.162.138.97 - - [09/May/2009:05:58:09 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "-" "Mozilla/4.0 (compatible;)" "www.templeos.org" -236.162.138.97 - - [09/May/2009:05:58:37 -0700] "GET /images/FPS.JPG HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible;)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:06:00:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -54.211.99.239 - - [09/May/2009:06:00:34 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 358656 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; (R1 1.6); .NET CLR 2.0.50727)" "www.templeos.org" -54.211.99.239 - - [09/May/2009:06:01:01 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 254896 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; (R1 1.6); .NET CLR 2.0.50727)" "www.templeos.org" -54.211.99.239 - - [09/May/2009:06:01:25 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 530688 "http://www.globalfreeware.com/Nlite-Add-on-Maker-124-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; (R1 1.6); .NET CLR 2.0.50727)" "www.templeos.org" -209.51.1.233 - - [09/May/2009:06:07:27 -0700] "GET / HTTP/1.1" 200 81188 "http://www.cs.toronto.edu/~ad/news/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.51.1.233 - - [09/May/2009:06:07:27 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.51.1.233 - - [09/May/2009:06:07:28 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 655360 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.51.1.233 - - [09/May/2009:06:07:28 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -209.51.1.233 - - [09/May/2009:06:07:31 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -233.20.138.101 - - [09/May/2009:06:17:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -54.95.60.121 - - [09/May/2009:06:30:41 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com.kw/search?hl=ar&client=firefox-a&rls=org.mozilla:en-US:official&hs=nxm&ei=S4UFSvy6FMOR_QaPl5GlBw&sa=X&oi=spell&resnum=1&ct=result&cd=1&q=in+32+bit+os+i+want+to+use+virtual+64+bit+os&spell=1" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -54.95.60.121 - - [09/May/2009:06:30:42 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -54.95.60.121 - - [09/May/2009:06:30:43 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -54.95.60.121 - - [09/May/2009:06:30:45 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -54.95.60.121 - - [09/May/2009:06:30:48 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -233.20.138.241 - - [09/May/2009:06:34:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:06:51:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -146.242.104.143 - - [09/May/2009:06:54:36 -0700] "GET / HTTP/1.1" 200 81188 "-" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -146.242.104.143 - - [09/May/2009:06:54:37 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -146.242.104.143 - - [09/May/2009:06:54:38 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -146.242.104.143 - - [09/May/2009:06:54:40 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:56:19 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:56:19 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.54.109.191 - - [09/May/2009:06:56:27 -0700] "GET / HTTP/1.1" 200 81188 "-" "Java/1.6.0-beta2" "www.templeos.org" -9.142.199.183 - - [09/May/2009:06:57:06 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -9.142.199.183 - - [09/May/2009:06:57:07 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -9.142.199.183 - - [09/May/2009:06:57:07 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -9.142.199.183 - - [09/May/2009:06:57:08 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -9.142.199.183 - - [09/May/2009:06:57:11 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:57:17 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:57:17 -0700] "GET /requirements.html HTTP/1.1" 200 3333 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:57:17 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 4653056 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:57:17 -0700] "GET /images/Requirements.jpg HTTP/1.1" 200 29287 "http://www.templeos.org/requirements.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:57:20 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:57:21 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:16 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.templeos.org/requirements.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:17 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:17 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:17 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:17 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:17 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:17 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:18 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:19 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:20 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:20 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:20 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:20 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -223.226.83.41 - - [09/May/2009:06:59:20 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -233.20.138.227 - - [09/May/2009:07:00:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:07:08:58 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -9.142.225.207 - - [09/May/2009:07:10:13 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -9.142.225.207 - - [09/May/2009:07:10:13 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -9.142.225.207 - - [09/May/2009:07:10:14 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -9.142.225.207 - - [09/May/2009:07:10:15 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -9.142.225.207 - - [09/May/2009:07:10:18 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -41.183.222.7 - - [09/May/2009:07:11:26 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; MSN Optimized;US)" "www.templeos.org" -209.50.52.113 - - [09/May/2009:07:11:55 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mediapartners-Google" "www.templeos.org" -15.4.251.124 - - [09/May/2009:07:12:07 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; ro; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -15.4.251.124 - - [09/May/2009:07:12:12 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 327680 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; ro; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -41.183.222.7 - - [09/May/2009:07:13:23 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; MSN Optimized;US)" "www.templeos.org" -41.183.222.7 - - [09/May/2009:07:13:58 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; MSN Optimized;US)" "www.templeos.org" -41.183.222.7 - - [09/May/2009:07:14:22 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; MSN Optimized;US)" "www.templeos.org" -41.183.222.7 - - [09/May/2009:07:16:05 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; MSN Optimized;US)" "www.templeos.org" -65.179.102.88 - - [09/May/2009:07:17:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -9.142.225.207 - - [09/May/2009:07:23:32 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 1063680 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -65.246.166.82 - - [09/May/2009:07:24:05 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -65.246.166.82 - - [09/May/2009:07:24:05 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -65.246.166.82 - - [09/May/2009:07:24:05 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -65.246.166.82 - - [09/May/2009:07:24:06 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -65.246.166.82 - - [09/May/2009:07:24:09 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -233.20.138.241 - - [09/May/2009:07:34:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -166.205.54.255 - - [09/May/2009:07:48:15 -0700] "GET /media/FlightSim.wmv HTTP/1.0" 404 275 "http://www.templeos.org/flightsim.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.255 - - [09/May/2009:07:48:16 -0700] "GET /media/FlightSim.wmv HTTP/1.0" 404 275 "http://www.templeos.org/flightsim.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -233.20.138.199 - - [09/May/2009:07:51:23 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:56:04 -0700] "GET /images/TempleOS421.JPG HTTP/1.1" 404 275 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:16 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:16 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:16 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:16 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:16 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:16 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:17 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:17 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:17 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:17 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:17 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:18 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:18 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:18 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:18 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:19 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:07:59:20 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -65.179.102.241 - - [09/May/2009:08:00:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -146.40.136.180 - - [09/May/2009:08:00:38 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.14 (de) (TL-FF) (.NET CLR 3.5.30729)" "www.templeos.org" -114.235.156.111 - - [09/May/2009:08:14:20 -0700] "GET / HTTP/1.1" 200 81188 "-" "..." "www.templeos.org" -233.20.138.199 - - [09/May/2009:08:17:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:08:21:06 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:08:21:07 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -34.199.12.136 - - [09/May/2009:08:21:32 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)" "www.templeos.org" -34.199.12.136 - - [09/May/2009:08:21:38 -0700] "GET /files/LTTAD.ISO HTTP/1.1" 401 395 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:08:23:18 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 39976960 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -6.186.219.118 - - [09/May/2009:08:25:09 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?hl=en&ei=N6AFSvijJ43SNOmH4aID&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=64+BIT+OPERATING+SYSTEM&spell=1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -6.186.219.118 - - [09/May/2009:08:25:10 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -6.186.219.118 - - [09/May/2009:08:25:12 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/9.0.0.3268" "www.templeos.org" -6.186.219.118 - - [09/May/2009:08:25:14 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 262144 "-" "NSPlayer/9.0.0.3268 WMFSDK/9.0" "www.templeos.org" -166.205.54.41 - - [09/May/2009:08:25:25 -0700] "GET /media/Demo2c.wmv HTTP/1.0" 404 275 "http://www.templeos.org/demo1.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.41 - - [09/May/2009:08:25:25 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 196608 "http://www.templeos.org/demo1.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.41 - - [09/May/2009:08:25:25 -0700] "GET /media/Demo2c.wmv HTTP/1.0" 404 275 "http://www.templeos.org/demo1.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -55.229.49.24 - - [09/May/2009:08:27:57 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.49.24 - - [09/May/2009:08:27:57 -0700] "GET /TempleOSCD2.ISO HTTP/1.1" 200 131072 "-" "msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -6.186.219.118 - - [09/May/2009:08:28:06 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 62717952 "-" "NSPlayer/9.0.0.3268 WMFSDK/9.0" "www.templeos.org" -65.179.102.28 - - [09/May/2009:08:34:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -135.84.47.19 - - [09/May/2009:08:37:28 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.brothersoft.com/the-templeos-operating-system-download-67591.html" "Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -55.229.238.108 - - [09/May/2009:08:41:57 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -65.74.31.47 - - [09/May/2009:08:44:48 -0700] "GET /(null) HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SU 3.22; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)" "www.templeos.org" -65.179.102.28 - - [09/May/2009:08:51:39 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -125.131.46.175 - - [09/May/2009:08:59:27 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042513 Ubuntu/8.04 (hardy) Firefox/3.0.10 GTB5" "www.templeos.org" -233.20.138.101 - - [09/May/2009:09:00:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:09:10:33 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4704256 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -55.229.126.192 - - [09/May/2009:09:15:41 -0700] "GET /timeout.html HTTP/1.1" 404 275 "-" "WinHttp" "www.templeos.org" -65.179.102.141 - - [09/May/2009:09:17:40 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -135.176.4.115 - - [09/May/2009:09:18:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 196608 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)" "www.templeos.org" -169.121.37.248 - - [09/May/2009:09:25:48 -0700] "GET /detailedlinfo.html HTTP/1.1" 200 4005 "-" "Baiduspider+(+http://www.baidu.jp/spider/)" "templeos.org" -65.179.102.141 - - [09/May/2009:09:34:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -169.121.72.161 - - [09/May/2009:09:35:47 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Baiduspider+(+http://www.baidu.jp/spider/)" "templeos.org" -6.101.117.245 - - [09/May/2009:09:39:30 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:09:39:31 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:09:40:01 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 9699328 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -233.20.138.88 - - [09/May/2009:09:51:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.199 - - [09/May/2009:10:00:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.238.214 - - [09/May/2009:10:08:43 -0700] "GET /flightsim.html HTTP/1.0" 304 - "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -209.50.52.113 - - [09/May/2009:10:15:39 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mediapartners-Google" "www.templeos.org" -251.6.133.142 - - [09/May/2009:10:15:59 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 2031616 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -55.229.238.147 - - [09/May/2009:10:16:15 -0700] "GET /index.html HTTP/1.0" 200 81188 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -233.20.138.88 - - [09/May/2009:10:17:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -205.125.202.39 - - [09/May/2009:10:17:33 -0700] "GET /images/TempleOS421.JPG HTTP/1.1" 404 275 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -167.232.177.92 - - [09/May/2009:10:17:52 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "http://www.globalfreeware.com/YouTube-Downloader-216-download.html" "Opera/9.60 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -167.232.177.92 - - [09/May/2009:10:24:29 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://www.globalfreeware.com/YouTube-Downloader-216-download.html" "Opera/9.60 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -167.232.177.92 - - [09/May/2009:10:29:03 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 305920 "http://www.globalfreeware.com/YouTube-Downloader-216-download.html" "Opera/9.60 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -167.232.177.226 - - [09/May/2009:10:31:26 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 524288 "http://www.globalfreeware.com/YouTube-Downloader-216-download.html" "Opera/9.60 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -233.20.138.241 - - [09/May/2009:10:34:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -167.232.177.250 - - [09/May/2009:10:40:11 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 703846 "-" "Opera/9.60 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -171.219.143.228 - - [09/May/2009:10:42:31 -0700] "GET /songs.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.88 - - [09/May/2009:10:51:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -153.70.176.101 - - [09/May/2009:10:54:35 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -153.70.176.101 - - [09/May/2009:10:54:36 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -153.70.176.101 - - [09/May/2009:10:54:37 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/11.0.5721.5251" "www.templeos.org" -153.70.176.101 - - [09/May/2009:10:55:36 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 20054016 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -153.70.176.101 - - [09/May/2009:10:55:36 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 18087936 "-" "NSPlayer/11.0.5721.5251 WMFSDK/11.0" "www.templeos.org" -65.179.102.28 - - [09/May/2009:11:00:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -167.232.177.108 - - [09/May/2009:11:02:19 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 2217534 "-" "Opera/9.60 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -233.20.138.241 - - [09/May/2009:11:17:42 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:11:19:22 -0700] "GET /sitebuilder/images/?N=A HTTP/1.0" 200 3273 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -166.110.102.147 - - [09/May/2009:11:20:32 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 2162688 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9" "www.templeos.org" -171.219.143.228 - - [09/May/2009:11:21:38 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -37.244.252.181 - - [09/May/2009:11:31:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB5)" "www.templeos.org" -233.20.138.199 - - [09/May/2009:11:34:34 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -37.244.252.181 - - [09/May/2009:11:36:03 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB5)" "www.templeos.org" -37.244.252.181 - - [09/May/2009:11:37:16 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 1310720 "http://www.globalfreeware.com/TempleOS-503-download.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB5)" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:20 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "-" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:24 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:27 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:32 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:35 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:36 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:37 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:38 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:38 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:39 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:40 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:40 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:41 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:42 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:43 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -6.237.27.92 - - [09/May/2009:11:41:44 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/screenshots.html" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -231.59.142.13 - - [09/May/2009:11:45:36 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "http://images.google.it/imgres?imgurl=http://www.globalfreeware.com/productImg/145/SkyCar-3D-Desktop-Toy/skycar.jpg&imgrefurl=http://www.globalfreeware.com/SkyCar-3D-Desktop-Toy.html&usg=__OCAndmkoTsh0GKdnYjHNVEqG5As=&h=371&w=437&sz=76&hl=it&start=13&tbnid=2LGsIT1UyluCnM:&tbnh=107&tbnw=126&prev=/images%3Fq%3DSkycar%26gbv%3D2%26hl%3Dit%26sa%3DG" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -41.191.234.161 - - [09/May/2009:11:46:01 -0700] "GET /images/TempleOS421.JPG HTTP/1.1" 404 275 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/525.18 (KHTML, like Gecko, Safari/525.20) OmniWeb/v622.6.0.109966" "www.templeos.org" -65.179.102.60 - - [09/May/2009:11:51:38 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -106.16.236.188 - - [09/May/2009:11:52:10 -0700] "GET / HTTP/1.0" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {704A62EA-B19E-0D54-180C-2A8A4141BDFA})" "templeos.org" -55.229.49.19 - - [09/May/2009:11:54:11 -0700] "GET /organ.html HTTP/1.1" 200 3938 "-" "WinHttp" "www.templeos.org" -55.229.238.24 - - [09/May/2009:11:57:55 -0700] "GET /tanks.html HTTP/1.0" 200 3917 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -32.170.177.184 - - [09/May/2009:11:58:53 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.1)" "www.templeos.org" -32.170.177.184 - - [09/May/2009:11:59:14 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "http://www.globalfreeware.com/TempleOS-503-download.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.1)" "www.templeos.org" -32.170.177.184 - - [09/May/2009:11:59:33 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "http://www.globalfreeware.com/Easy-Media-Cover-160-download.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.1)" "www.templeos.org" -233.20.138.199 - - [09/May/2009:12:00:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -179.26.127.93 - - [09/May/2009:12:04:44 -0700] "GET / HTTP/1.1" 200 81188 "http://royal.pingdom.com/2008/09/26/10-amazingly-alternative-operating-systems-and-what-they-could-mean-for-the-future/" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -179.26.127.93 - - [09/May/2009:12:04:45 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -179.26.127.93 - - [09/May/2009:12:04:45 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -179.26.127.93 - - [09/May/2009:12:04:45 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -179.26.127.93 - - [09/May/2009:12:04:48 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -179.26.127.93 - - [09/May/2009:12:06:58 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 872192 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -223.144.27.213 - - [09/May/2009:12:15:19 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://www.globalfreeware.com/IrfanView32-v410-download.html" "Opera/9.64 (Windows NT 5.1; U; hu) Presto/2.1.1" "www.templeos.org" -65.179.102.199 - - [09/May/2009:12:17:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:12:34:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -220.237.99.39 - - [09/May/2009:12:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 1048576 "http://www.globalfreeware.com/Super-2008-Build-33-download.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19" "www.templeos.org" -27.137.22.211 - - [09/May/2009:12:50:05 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.freewarefree.net/utility/3955/templeos-503/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6)" "www.templeos.org" -65.179.102.28 - - [09/May/2009:12:51:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -107.188.223.56 - - [09/May/2009:12:54:49 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10" "www.templeos.org" -107.188.223.56 - - [09/May/2009:12:54:50 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10" "www.templeos.org" -107.188.223.56 - - [09/May/2009:12:54:52 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10" "www.templeos.org" -107.188.223.56 - - [09/May/2009:12:54:55 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10" "www.templeos.org" -107.188.223.56 - - [09/May/2009:12:56:31 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 233913 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10" "www.templeos.org" -166.205.54.236 - - [09/May/2009:13:00:27 -0700] "GET /media/FPS.wmv HTTP/1.0" 200 196608 "http://www.templeos.org/fps.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -65.179.102.241 - - [09/May/2009:13:00:28 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -237.240.13.237 - - [09/May/2009:13:02:32 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -104.111.44.134 - - [09/May/2009:13:10:06 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 917504 "http://www.globalfreeware.com/NETEagle-550-download.html" "Mozilla/4.0 WebTV/2.6 (compatible; MSIE 4.0)" "www.templeos.org" -166.205.54.135 - - [09/May/2009:13:11:25 -0700] "GET /media/BigGuns.wmv HTTP/1.0" 404 275 "http://www.templeos.org/bigguns.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.135 - - [09/May/2009:13:11:26 -0700] "GET /media/BigGuns.wmv HTTP/1.0" 404 275 "http://www.templeos.org/bigguns.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -6.54.62.197 - - [09/May/2009:13:16:05 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 GTB5 (.NET CLR 3.5.30729)" "templeos.org" -65.179.102.241 - - [09/May/2009:13:17:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.238.131 - - [09/May/2009:13:22:13 -0700] "GET /detailedlinfo.html HTTP/1.0" 304 - "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:13:26:59 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.60 - - [09/May/2009:13:34:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.56.100 - - [09/May/2009:13:37:27 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240; MSNBOT-MOBILE/1.1; +http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.56.100 - - [09/May/2009:13:37:27 -0700] "GET / HTTP/1.1" 200 81188 "-" "T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240; MSNBOT-MOBILE/1.1; +http://search.msn.com/msnbot.htm)" "www.templeos.org" -32.234.44.195 - - [09/May/2009:13:38:01 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sk; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -32.234.44.195 - - [09/May/2009:13:38:01 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sk; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -32.234.44.195 - - [09/May/2009:13:38:08 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 6619136 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; sk; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -94.131.56.134 - - [09/May/2009:13:43:01 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.it/search?q=windows+cpp+microseconds+delay+function+RDTSC&hl=it&safe=off&client=firefox-a&rls=org.mozilla:it:official&start=10&sa=N" "Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -94.131.56.134 - - [09/May/2009:13:43:03 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -94.131.56.134 - - [09/May/2009:13:43:10 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/9.0.0.3250" "www.templeos.org" -94.131.56.134 - - [09/May/2009:13:45:40 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 917504 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -94.131.56.134 - - [09/May/2009:13:45:40 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 917504 "-" "NSPlayer/9.0.0.3267 WMFSDK/9.0" "www.templeos.org" -166.205.54.80 - - [09/May/2009:13:47:24 -0700] "GET /media/Span.wmv HTTP/1.0" 404 275 "http://www.templeos.org/span.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.80 - - [09/May/2009:13:47:24 -0700] "GET /media/Span.wmv HTTP/1.0" 404 275 "http://www.templeos.org/span.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -54.211.22.127 - - [09/May/2009:13:49:44 -0700] "GET / HTTP/1.1" 200 81188 "-" "-" "templeos.org" -54.211.22.127 - - [09/May/2009:13:49:56 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 1114112 "http://www.globalfreeware.com/Google-Translator-Boomerang-10301-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -54.211.22.127 - - [09/May/2009:13:49:56 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 851968 "http://www.globalfreeware.com/Google-Translator-Boomerang-10301-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -54.211.22.127 - - [09/May/2009:13:49:56 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 786432 "http://www.globalfreeware.com/Google-Translator-Boomerang-10301-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -54.211.22.127 - - [09/May/2009:13:49:56 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 720896 "http://www.globalfreeware.com/Google-Translator-Boomerang-10301-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -54.211.22.127 - - [09/May/2009:13:49:56 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 544477 "http://www.globalfreeware.com/Google-Translator-Boomerang-10301-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -233.20.138.241 - - [09/May/2009:13:51:36 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -173.37.27.66 - - [09/May/2009:13:58:51 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.16.77490234375" "www.templeos.org" -139.169.19.226 - - [09/May/2009:13:59:05 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?q=free+operating+system&hl=en&start=10&sa=N" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19" "www.templeos.org" -139.169.19.226 - - [09/May/2009:13:59:09 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19" "www.templeos.org" -139.169.19.226 - - [09/May/2009:13:59:16 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19" "www.templeos.org" -139.169.19.226 - - [09/May/2009:13:59:21 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 655360 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -233.20.138.241 - - [09/May/2009:14:00:38 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -205.158.29.7 - - [09/May/2009:14:02:28 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 284928 "http://wareseeker.com/download/the-templeos-operating-system-4.17.rar/214b89883" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)" "www.templeos.org" -174.78.124.76 - - [09/May/2009:14:05:22 -0700] "GET /index.html HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -174.78.124.76 - - [09/May/2009:14:05:23 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/index.html" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -174.78.124.76 - - [09/May/2009:14:05:23 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 327680 "http://www.templeos.org/index.html" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -174.78.124.76 - - [09/May/2009:14:05:28 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -174.78.124.76 - - [09/May/2009:14:05:34 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "www.templeos.org" -97.27.133.28 - - [09/May/2009:14:13:43 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Python-urllib/2.5" "www.templeos.org" -97.27.133.28 - - [09/May/2009:14:13:45 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 1048576 "-" "Mozilla/4.0" "www.templeos.org" -97.27.133.28 - - [09/May/2009:14:13:54 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 3655680 "-" "Mozilla/4.0" "www.templeos.org" -205.17.254.143 - - [09/May/2009:14:16:41 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090508 Minefield/3.6a1pre" "www.templeos.org" -205.17.254.143 - - [09/May/2009:14:16:41 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090508 Minefield/3.6a1pre" "www.templeos.org" -205.17.254.143 - - [09/May/2009:14:16:42 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090508 Minefield/3.6a1pre" "www.templeos.org" -205.17.254.143 - - [09/May/2009:14:16:44 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090508 Minefield/3.6a1pre" "www.templeos.org" -205.17.254.143 - - [09/May/2009:14:16:44 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090508 Minefield/3.6a1pre" "www.templeos.org" -205.17.254.143 - - [09/May/2009:14:16:51 -0700] "GET /index.html HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090508 Minefield/3.6a1pre" "www.templeos.org" -205.17.254.143 - - [09/May/2009:14:16:52 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 262144 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090508 Minefield/3.6a1pre" "www.templeos.org" -205.17.254.143 - - [09/May/2009:14:16:54 -0700] "GET /contact.html HTTP/1.1" 200 5360 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090508 Minefield/3.6a1pre" "www.templeos.org" -233.20.138.101 - - [09/May/2009:14:17:22 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -166.205.54.51 - - [09/May/2009:14:19:55 -0700] "GET /media/MultiCore.wmv HTTP/1.0" 404 275 "http://www.templeos.org/multicore1.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.51 - - [09/May/2009:14:19:55 -0700] "GET /media/MultiCore.wmv HTTP/1.0" 404 275 "http://www.templeos.org/multicore1.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.218.33.19 - - [09/May/2009:14:21:10 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "http://www.globalfreeware.com/The-GIMP-246-download.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19" "www.templeos.org" -125.240.243.157 - - [09/May/2009:14:30:38 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" -233.20.138.227 - - [09/May/2009:14:34:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:14:39:38 -0700] "GET /logs/?D=D HTTP/1.0" 401 395 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -166.205.54.101 - - [09/May/2009:14:39:57 -0700] "GET /media/BugBird.wmv HTTP/1.0" 404 275 "http://www.templeos.org/birdland.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.101 - - [09/May/2009:14:39:58 -0700] "GET /media/BugBird.wmv HTTP/1.0" 404 275 "http://www.templeos.org/birdland.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.155.53.189 - - [09/May/2009:14:42:04 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.1.3)" "www.templeos.org" -166.155.53.189 - - [09/May/2009:14:42:27 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.1.3)" "www.templeos.org" -199.76.177.96 - - [09/May/2009:14:42:55 -0700] "GET /V421.html HTTP/1.1" 404 275 "http://www.templeos.org/V421.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.155.53.189 - - [09/May/2009:14:43:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4704256 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.1.3)" "www.templeos.org" -233.20.138.199 - - [09/May/2009:14:51:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.143.228 - - [09/May/2009:14:51:50 -0700] "GET /tmp/?N=A HTTP/1.0" 200 504 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -37.236.98.97 - - [09/May/2009:14:59:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727)" "www.templeos.org" -238.93.195.214 - - [09/May/2009:14:59:37 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4708352 "http://www.globalfreeware.com/TempleOS-503-download.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.236.98.97 - - [09/May/2009:14:59:51 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 1376256 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727)" "www.templeos.org" -37.236.98.97 - - [09/May/2009:15:00:13 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727)" "www.templeos.org" -233.20.138.101 - - [09/May/2009:15:00:30 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -238.93.195.214 - - [09/May/2009:15:00:46 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -8.70.41.188 - - [09/May/2009:15:06:56 -0700] "GET / HTTP/1.1" 200 81188 "http://qr.cz/index.php?recordStart=7" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -8.70.41.188 - - [09/May/2009:15:06:57 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -8.70.41.188 - - [09/May/2009:15:06:59 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -8.70.41.188 - - [09/May/2009:15:07:01 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -8.70.41.188 - - [09/May/2009:15:07:04 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -8.75.167.231 - - [09/May/2009:15:11:44 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)" "www.templeos.org" -8.75.167.231 - - [09/May/2009:15:11:46 -0700] "GET /contact.html HTTP/1.1" 200 5360 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:15:17:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.104.61 - - [09/May/2009:15:21:48 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -6.54.62.197 - - [09/May/2009:15:30:08 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 GTB5 (.NET CLR 3.5.30729)" "templeos.org" -65.179.102.241 - - [09/May/2009:15:34:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -215.230.80.120 - - [09/May/2009:15:39:15 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -215.230.80.120 - - [09/May/2009:15:40:02 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://www.globalfreeware.com/Shock-4Way-3D-v121-download.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -215.230.80.120 - - [09/May/2009:15:42:00 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -215.230.80.120 - - [09/May/2009:15:43:33 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 1305344 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:09 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://qr.cz/index.php?recordStart=7" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:10 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:13 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:15:44:14 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -233.20.138.223 - - [09/May/2009:15:51:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:16:00:23 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -125.234.213.133 - - [09/May/2009:16:01:59 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; MSN Optimized;US)" "www.templeos.org" -125.234.213.133 - - [09/May/2009:16:02:48 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 2621440 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; MSN Optimized;US)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:03:39 -0700] "GET /index.html HTTP/1.1" 200 81188 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:03:49 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -106.162.223.25 - - [09/May/2009:16:13:46 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.dotnetdotcom.org/, crawler@dotnetdotcom.org)" "www.templeos.org" -171.219.104.61 - - [09/May/2009:16:14:56 -0700] "GET /demo.html HTTP/1.0" 200 6327 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -171.219.104.61 - - [09/May/2009:16:15:00 -0700] "GET /media/Flightsim.wmv HTTP/1.0" 200 9961472 "http://www.templeos.org/demo.html" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -171.219.104.61 - - [09/May/2009:16:15:00 -0700] "GET /media/MakeOSPrtBootInstall.wmv HTTP/1.0" 200 8323072 "http://www.templeos.org/demo.html" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.223 - - [09/May/2009:16:17:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:08 -0700] "GET /detailedlinfo.html HTTP/1.1" 200 4005 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:08 -0700] "GET /sitebuilder/images/SCRN0002a-640x480.png HTTP/1.1" 200 11969 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:08 -0700] "GET /sitebuilder/images/SCRN0000a-640x480.png HTTP/1.1" 200 15512 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:08 -0700] "GET /sitebuilder/images/SCRN0001a-640x480.png HTTP/1.1" 200 20313 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:08 -0700] "GET /images/Promises.jpg HTTP/1.1" 200 76295 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:14 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:37 -0700] "GET /flightsim.html HTTP/1.1" 200 50990 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:40 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 262144 "http://www.templeos.org/flightsim.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:45 -0700] "GET /flightsim.html HTTP/1.1" 304 - "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:45 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/flightsim.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:23:46 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/flightsim.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:24:05 -0700] "GET /span.html HTTP/1.1" 200 3929 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:24:06 -0700] "GET /media/Span2.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/span.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:24:42 -0700] "GET /flightsim.html HTTP/1.1" 200 50990 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:24:42 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/flightsim.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:24:48 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3802" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:24:48 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3802 WMFSDK/10.0" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:24:50 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 262144 "-" "NSPlayer/10.0.0.3802 WMFSDK/10.0" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:27:38 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 15532032 "-" "NSPlayer/10.0.0.3802 WMFSDK/10.0" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:28:16 -0700] "GET /demo.html HTTP/1.1" 200 6327 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:28:17 -0700] "GET /media/MakeOSPrtBootInstall.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/demo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:28:17 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/demo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:28:20 -0700] "GET /requirements.html HTTP/1.1" 200 3333 "http://www.templeos.org/demo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:28:20 -0700] "GET /images/Requirements.jpg HTTP/1.1" 200 29287 "http://www.templeos.org/requirements.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:29:20 -0700] "GET /trouble.html HTTP/1.1" 200 25395 "http://www.templeos.org/requirements.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:29:21 -0700] "GET /images/BootFlow.jpg HTTP/1.1" 200 20514 "http://www.templeos.org/trouble.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:29:21 -0700] "GET /media/MakeOSPrtBootInstall.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/trouble.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -66.111.91.71 - - [09/May/2009:16:30:44 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729)" "www.templeos.org" -65.181.116.203 - - [09/May/2009:16:31:34 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.88 - - [09/May/2009:16:34:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -37.81.92.243 - - [09/May/2009:16:37:50 -0700] "GET /files/TempleOSCD.ISO HTTP/1.1" 401 395 "http://www.programas-gratis.net/css/descargar_pop.php?programa=the-templeos-operating-system" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -37.81.92.243 - "" [09/May/2009:16:38:07 -0700] "GET /files/TempleOSCD.ISO HTTP/1.1" 401 395 "http://www.programas-gratis.net/css/descargar_pop.php?programa=the-templeos-operating-system" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -37.81.92.243 - "" [09/May/2009:16:38:09 -0700] "GET /files/TempleOSCD.ISO HTTP/1.1" 401 395 "http://www.programas-gratis.net/css/descargar_pop.php?programa=the-templeos-operating-system" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -37.81.92.243 - - [09/May/2009:16:38:10 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -37.81.92.243 - - [09/May/2009:16:39:44 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -233.20.138.241 - - [09/May/2009:16:51:23 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.88 - - [09/May/2009:17:00:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.223 - - [09/May/2009:17:17:22 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -238.225.5.252 - - [09/May/2009:17:31:08 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "http://www.brothersoft.com/the-templeos-operating-system-download-67591.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:17:34:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -173.37.27.66 - - [09/May/2009:17:35:34 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.185.5621337890625" "www.templeos.org" -171.219.104.246 - - [09/May/2009:17:37:58 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -55.229.238.93 - - [09/May/2009:17:40:09 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.238.93 - - [09/May/2009:17:41:13 -0700] "GET /tanks.html HTTP/1.0" 200 3917 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -171.219.104.61 - - [09/May/2009:17:42:42 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 304 - "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.181.116.132 - - [09/May/2009:17:47:03 -0700] "GET /sites.html HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "templeos.org" -65.165.107.20 - - [09/May/2009:17:50:23 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?q=64+bit+operating+system&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.165.107.20 - - [09/May/2009:17:50:23 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.165.107.20 - - [09/May/2009:17:51:18 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 66292058 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.165.107.20 - - [09/May/2009:17:51:18 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -233.20.138.223 - - [09/May/2009:17:51:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.80.246.141 - - [09/May/2009:17:56:01 -0700] "GET / HTTP/1.0" 200 81188 "-" "PRCrawler/Nutch-0.9 (data mining development project; crawler@projectrialto.com)" "www.templeos.org" -65.80.246.141 - - [09/May/2009:17:56:33 -0700] "GET /tiny.html HTTP/1.0" 404 275 "-" "PRCrawler/Nutch-0.9 (data mining development project; crawler@projectrialto.com)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:18:00:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -173.37.27.66 - - [09/May/2009:18:09:54 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.117.9412841796875" "www.templeos.org" -65.179.102.60 - - [09/May/2009:18:17:35 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.192.33 - - [09/May/2009:18:24:11 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.241 - - [09/May/2009:18:34:23 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:41:41 -0700] "GET / HTTP/1.1" 200 81188 "http://forum.osdev.org/viewtopic.php?f=1&t=18653&hilit=Multicore" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:41:42 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:41:48 -0700] "GET /media/Demo1.smi HTTP/1.1" 404 275 "-" "Windows-Media-Player/10.00.00.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:41:49 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:10 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:12 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:15 -0700] "GET /index.html HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:17 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 8585216 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:18 -0700] "GET /media/Demo1.smi HTTP/1.1" 404 275 "-" "Windows-Media-Player/10.00.00.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:18 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:24 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 19202048 "-" "NSPlayer/10.0.0.3700 WMFSDK/10.0" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:56 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:56 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 4128768 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:56 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 3997696 "-" "NSPlayer/10.0.0.3700 WMFSDK/10.0" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:57 -0700] "GET /media/Demo1.wmv HTTP/1.0" 200 196608 "-" "NSPlayer/8.0.0.4477" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:58 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 262144 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:58 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:43:58 -0700] "GET /media/Demo1.smi HTTP/1.1" 404 275 "-" "Windows-Media-Player/10.00.00.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:05 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3700 WMFSDK/10.0" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:35 -0700] "GET /detailedlinfo.html HTTP/1.1" 200 4005 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:35 -0700] "GET /sitebuilder/images/SCRN0001a-640x480.png HTTP/1.1" 200 20313 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:35 -0700] "GET /sitebuilder/images/SCRN0000a-640x480.png HTTP/1.1" 200 15512 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:35 -0700] "GET /sitebuilder/images/SCRN0002a-640x480.png HTTP/1.1" 200 11969 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:35 -0700] "GET /images/Promises.jpg HTTP/1.1" 200 76295 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:36 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 3932160 "-" "NSPlayer/10.0.0.3700 WMFSDK/10.0" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:36 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 3801088 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:42 -0700] "GET /demo.html HTTP/1.1" 200 6327 "http://www.templeos.org/detailedlinfo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:43 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/demo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:45 -0700] "GET /media/MakeOSPrtBootInstall.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:45 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:45 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 327680 "-" "NSPlayer/10.0.0.3700 WMFSDK/10.0" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:46 -0700] "GET /media/Flightsim.smi HTTP/1.1" 404 275 "-" "Windows-Media-Player/10.00.00.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:47 -0700] "GET /media/Flightsim.wmv HTTP/1.1" 200 327680 "http://www.templeos.org/demo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:47 -0700] "GET /media/MakeOSPrtBootInstall.wmv HTTP/1.1" 200 393216 "http://www.templeos.org/demo.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:47 -0700] "GET /media/MakeOSPrtBootInstall.wmv HTTP/1.1" 200 262144 "-" "NSPlayer/10.0.0.3700 WMFSDK/10.0" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:47 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:48 -0700] "GET /media/Demo1.smi HTTP/1.1" 404 275 "-" "Windows-Media-Player/10.00.00.3700" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:44:52 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 589824 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -173.37.27.66 - - [09/May/2009:18:45:08 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.179.38232421875" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:45:36 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4708352 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:47:36 -0700] "GET /LTsrc.zip HTTP/1.1" 200 942074 "http://www.templeos.org/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" "www.templeos.org" -37.188.33.249 - - [09/May/2009:18:47:47 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 54788096 "-" "NSPlayer/10.0.0.3700 WMFSDK/10.0" "www.templeos.org" -233.20.138.227 - - [09/May/2009:18:51:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -160.59.249.74 - - [09/May/2009:18:54:43 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:19:00:34 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -30.151.125.9 - - [09/May/2009:19:15:00 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com.sg/search?hl=zh-CN&q=64+bit+os+&meta=&aq=f&oq=" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GreenBrowser)" "www.templeos.org" -30.151.125.251 - - [09/May/2009:19:15:00 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GreenBrowser)" "www.templeos.org" -30.151.125.9 - - [09/May/2009:19:15:02 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/10.0.0.3802" "www.templeos.org" -30.151.125.251 - - [09/May/2009:19:15:05 -0700] "GET /media/Demo1.smi HTTP/1.1" 404 275 "http://www.templeos.org/" "Windows-Media-Player/10.00.00.4058" "www.templeos.org" -30.151.125.9 - - [09/May/2009:19:15:05 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 262144 "-" "NSPlayer/10.0.0.4054 WMFSDK/10.0" "www.templeos.org" -48.1.148.40 - - [09/May/2009:19:16:33 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com.my/search?q=Example+of+Open+Source+OS&hl=en&client=firefox-a&rls=org.mozilla:en-US:official&start=20&sa=N" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0" "www.templeos.org" -48.1.148.40 - - [09/May/2009:19:16:40 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0" "www.templeos.org" -65.181.85.152 - - [09/May/2009:19:16:46 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 2279680 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -48.1.148.40 - - [09/May/2009:19:16:49 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 327680 "-" "NSPlayer/11.0.5358.4826" "www.templeos.org" -30.151.125.9 - - [09/May/2009:19:17:10 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "GreenBrowser" "www.templeos.org" -233.20.138.227 - - [09/May/2009:19:17:22 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -48.1.148.40 - - [09/May/2009:19:18:04 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0" "www.templeos.org" -48.1.148.40 - - [09/May/2009:19:18:38 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 497664 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0" "www.templeos.org" -48.1.148.40 - - [09/May/2009:19:18:39 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 393216 "-" "NSPlayer/11.0.5358.4826 WMFSDK/11.0" "www.templeos.org" -106.16.236.222 - - [09/May/2009:19:20:37 -0700] "GET / HTTP/1.0" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; BT Openworld BB; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" "www.templeos.org" -55.229.238.30 - - [09/May/2009:19:21:04 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "templeos.org" -55.229.238.30 - - [09/May/2009:19:22:16 -0700] "GET / HTTP/1.0" 200 81188 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "templeos.org" -65.181.85.152 - - [09/May/2009:19:23:21 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.60 - - [09/May/2009:19:34:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.116.232 - - [09/May/2009:19:37:31 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -171.120.147.211 - - [09/May/2009:19:37:54 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?q=64+bit+operating+system&rls=com.microsoft:en-us:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&rlz=1I7GGLJ_en" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Comcast Install 1.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -171.120.147.211 - - [09/May/2009:19:37:54 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Comcast Install 1.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -171.120.147.211 - - [09/May/2009:19:37:54 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "contype" "www.templeos.org" -171.120.147.211 - - [09/May/2009:19:37:56 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Comcast Install 1.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" "www.templeos.org" -209.50.52.113 - - [09/May/2009:19:38:22 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mediapartners-Google" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:38:32 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:38:32 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 327680 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:38:32 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 327680 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:38:32 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 262144 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:07 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 327680 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:07 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 393216 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:07 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 393216 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:07 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 393216 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:08 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 327680 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:08 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 327680 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:08 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 327680 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 262127 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 262127 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 393216 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 276708 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 263168 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 262144 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 262144 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 262144 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -160.243.187.247 - - [09/May/2009:19:39:09 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 262144 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -65.181.116.232 - - [09/May/2009:19:46:53 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -233.20.138.227 - - [09/May/2009:19:51:36 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.179.102.141 - - [09/May/2009:20:00:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -37.99.42.143 - - [09/May/2009:20:01:43 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10" "www.templeos.org" -65.181.116.232 - - [09/May/2009:20:11:10 -0700] "GET /organ.html HTTP/1.0" 200 3938 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -173.37.27.66 - - [09/May/2009:20:14:49 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.122.113037109375" "www.templeos.org" -233.20.138.199 - - [09/May/2009:20:17:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -173.37.27.66 - - [09/May/2009:20:19:52 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.126.446533203125" "www.templeos.org" -65.179.102.141 - - [09/May/2009:20:34:32 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.179.102.241 - - [09/May/2009:20:51:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.50.52.113 - - [09/May/2009:21:00:15 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mediapartners-Google" "www.templeos.org" -205.131.218.229 - - [09/May/2009:21:00:26 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4708352 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3" "www.templeos.org" -65.179.102.60 - - [09/May/2009:21:00:29 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -15.32.74.55 - - [09/May/2009:21:00:59 -0700] "HEAD /media/Demo8.wmv HTTP/1.1" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "templeos.org" -15.32.74.55 - - [09/May/2009:21:00:59 -0700] "GET /media/Demo8.wmv HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "templeos.org" -205.131.218.229 - - [09/May/2009:21:01:15 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 1786724 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3" "www.templeos.org" -233.191.218.65 - - [09/May/2009:21:06:02 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/url?sa=t&source=web&ct=res&cd=30&url=http%3A%2F%2Fwww.templeos.org%2F&ei=elEGSu3UF5WOMtmwkM8N&rct=j&q=open+source+operating+system&usg=AFQjCNHtcMmLrLaSdilrJ1OUqGvEZC49XA" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)" "www.templeos.org" -233.191.218.65 - - [09/May/2009:21:06:02 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)" "www.templeos.org" -233.191.218.65 - - [09/May/2009:21:06:08 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)" "www.templeos.org" -233.191.218.65 - - [09/May/2009:21:06:11 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)" "www.templeos.org" -55.229.3.41 - - [09/May/2009:21:11:46 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.3.41 - - [09/May/2009:21:11:52 -0700] "GET /fps.html HTTP/1.1" 200 33359 "-" "msnbot/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -166.205.54.255 - - [09/May/2009:21:13:39 -0700] "GET /media/CtrlR1.wmv HTTP/1.0" 404 275 "http://www.templeos.org/ctrlr1.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.255 - - [09/May/2009:21:13:40 -0700] "GET /media/CtrlR1.wmv HTTP/1.0" 404 275 "http://www.templeos.org/ctrlr1.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -65.179.102.28 - - [09/May/2009:21:17:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -171.219.101.211 - - [09/May/2009:21:18:21 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -215.76.42.192 - - [09/May/2009:21:22:22 -0700] "GET / HTTP/1.1" 200 81188 "-" "Opera/9.64 (Macintosh; PPC Mac OS X; U; en) Presto/2.1.1" "www.templeos.org" -215.76.42.192 - - [09/May/2009:21:22:22 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "-" "Opera/9.64 (Macintosh; PPC Mac OS X; U; en) Presto/2.1.1" "www.templeos.org" -173.37.27.66 - - [09/May/2009:21:22:23 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.166.4398193359375" "www.templeos.org" -249.123.33.240 - - [09/May/2009:21:23:02 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -249.123.33.240 - - [09/May/2009:21:23:09 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -249.123.33.240 - - [09/May/2009:21:23:09 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -215.76.42.192 - - [09/May/2009:21:24:51 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 66292058 "-" "Opera/9.64 (Macintosh; PPC Mac OS X; U; en) Presto/2.1.1" "www.templeos.org" -215.76.42.192 - - [09/May/2009:21:24:52 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Opera/9.64 (Macintosh; PPC Mac OS X; U; en) Presto/2.1.1" "www.templeos.org" -249.123.33.240 - - [09/May/2009:21:25:15 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -249.123.33.240 - - [09/May/2009:21:25:15 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10" "www.templeos.org" -215.76.42.192 - - [09/May/2009:21:28:20 -0700] "GET / HTTP/1.1" 304 - "-" "Opera/9.64 (Macintosh; PPC Mac OS X; U; en) Presto/2.1.1" "www.templeos.org" -65.179.102.241 - - [09/May/2009:21:34:22 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -166.205.54.223 - - [09/May/2009:21:48:43 -0700] "GET /media/TimeOut.wmv HTTP/1.0" 404 275 "http://www.templeos.org/timeout.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.223 - - [09/May/2009:21:48:43 -0700] "GET /media/TimeOut.wmv HTTP/1.0" 404 275 "http://www.templeos.org/timeout.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -97.27.133.28 - - [09/May/2009:21:51:21 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 196608 "-" "Python-urllib/2.5" "www.templeos.org" -97.27.133.28 - - [09/May/2009:21:51:24 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 1048576 "-" "Mozilla/4.0" "www.templeos.org" -65.179.102.60 - - [09/May/2009:21:51:31 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -97.27.133.28 - - [09/May/2009:21:51:33 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 206 3659776 "-" "Mozilla/4.0" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:04 -0700] "GET /images/TempleOS421.JPG HTTP/1.1" 404 275 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:54 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://forum.osdev.org/viewtopic.php?f=1&t=12087&start=255" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:54 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:54 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:54 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:55 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:55 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:55 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:55 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:55:56 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:56:01 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:56:01 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:56:01 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:56:01 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:56:01 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:56:02 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:56:04 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -66.124.159.205 - - [09/May/2009:21:56:07 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -233.178.161.226 - - [09/May/2009:21:56:53 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" "www.templeos.org" -65.179.102.60 - - [09/May/2009:22:00:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -84.162.158.89 - - [09/May/2009:22:00:45 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -171.219.101.146 - - [09/May/2009:22:06:24 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -199.76.177.49 - - [09/May/2009:22:06:40 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -199.76.177.49 - - [09/May/2009:22:11:58 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:22:13:10 -0700] "GET /files/TempleOSCD.ISO HTTP/1.1" 200 262144 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:22:13:25 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:22:13:25 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:22:13:30 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 262144 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SU 3.21; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)" "www.templeos.org" -6.101.117.245 - - [09/May/2009:22:13:31 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 2031616 "-" "NSPlayer/11.00.6001.7001 WMFSDK/11.00.6001.7001" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:15:33 -0700] "GET / HTTP/1.1" 200 81223 "http://www.google.com/search?hl=en&q=64-bit+open+source" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:15:36 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:15:39 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 131072 "-" "contype" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:15:47 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -233.20.138.199 - - [09/May/2009:22:17:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -84.162.158.48 - - [09/May/2009:22:19:52 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -65.200.47.66 - - [09/May/2009:22:25:25 -0700] "GET / HTTP/1.1" 200 81188 "http://en.wikipedia.org/wiki/TempleOS" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.200.47.66 - - [09/May/2009:22:25:25 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.200.47.66 - - [09/May/2009:22:25:25 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.200.47.66 - - [09/May/2009:22:25:47 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.200.47.66 - - [09/May/2009:22:25:50 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:26:12 -0700] "GET /contact.html HTTP/1.1" 200 5360 "http://www.reddit.com/r/programming/comments/7e8hp/new_64bit_free_open_source_operating_system_not_a/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:26:17 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:26:35 -0700] "GET /detailedlinfo.html HTTP/1.1" 200 4005 "http://www.templeos.org/contact.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:26:37 -0700] "GET /sitebuilder/images/SCRN0000a-640x480.png HTTP/1.1" 200 15512 "http://www.templeos.org/detailedlinfo.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:26:37 -0700] "GET /sitebuilder/images/SCRN0001a-640x480.png HTTP/1.1" 200 20313 "http://www.templeos.org/detailedlinfo.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:26:37 -0700] "GET /images/Promises.jpg HTTP/1.1" 200 76295 "http://www.templeos.org/detailedlinfo.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -171.33.197.194 - - [09/May/2009:22:26:37 -0700] "GET /sitebuilder/images/SCRN0002a-640x480.png HTTP/1.1" 200 11969 "http://www.templeos.org/detailedlinfo.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" -206.16.250.236 - - [09/May/2009:22:29:29 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -16.241.135.138 - - [09/May/2009:22:29:51 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.mu/search?hl=en&q=64+bit+operating+system&btnG=Google+Search&meta=&aq=f&oq=" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.13;MEGAUPLOAD 1.0" "www.templeos.org" -16.241.135.138 - - [09/May/2009:22:29:52 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.13;MEGAUPLOAD 1.0" "www.templeos.org" -16.241.135.138 - - [09/May/2009:22:30:00 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/11.0.5721.5145" "www.templeos.org" -16.241.135.138 - - [09/May/2009:22:30:11 -0700] "GET /media/Demo1.smi HTTP/1.1" 404 275 "-" "Windows-Media-Player/11.0.5721.5145" "www.templeos.org" -27.233.238.149 - - [09/May/2009:22:31:22 -0700] "GET /robots.txt HTTP/1.0" 404 275 "-" "Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)" "www.templeos.org" -27.233.238.149 - - [09/May/2009:22:32:20 -0700] "GET / HTTP/1.0" 200 81188 "-" "Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)" "www.templeos.org" -199.76.177.70 - - [09/May/2009:22:34:12 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -233.20.138.88 - - [09/May/2009:22:34:33 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -16.241.135.138 - - [09/May/2009:22:34:34 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 5767168 "-" "NSPlayer/11.0.5721.5145 WMFSDK/11.0" "www.templeos.org" -16.241.135.138 - - [09/May/2009:22:34:37 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 6160384 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/2.0.0.13;MEGAUPLOAD 1.0" "www.templeos.org" -199.76.177.96 - - [09/May/2009:22:36:20 -0700] "GET / HTTP/1.1" 200 81188 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.50 - - [09/May/2009:22:47:46 -0700] "GET /media/Squirt.wmv HTTP/1.0" 200 196608 "http://www.templeos.org/squirt.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -65.179.102.241 - - [09/May/2009:22:51:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -209.168.68.21 - - [09/May/2009:22:57:41 -0700] "GET /robots.txt HTTP/1.0" 404 275 "-" "Mozilla/5.0 (compatible; Ask Jeeves/Teoma; +http://about.ask.com/en/docs/about/webmasters.shtml)" "www.templeos.org" -209.168.68.21 - - [09/May/2009:22:57:41 -0700] "GET / HTTP/1.0" 200 81188 "-" "Mozilla/5.0 (compatible; Ask Jeeves/Teoma; +http://about.ask.com/en/docs/about/webmasters.shtml)" "www.templeos.org" -65.179.102.241 - - [09/May/2009:23:00:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -233.20.138.223 - - [09/May/2009:23:17:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -166.205.54.39 - - [09/May/2009:23:22:25 -0700] "GET /media/X-Caliber.wmv HTTP/1.0" 404 275 "http://www.templeos.org/x-caliber.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -166.205.54.39 - - [09/May/2009:23:22:25 -0700] "GET /media/X-Caliber.wmv HTTP/1.0" 404 275 "http://www.templeos.org/x-caliber.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "www.templeos.org" -27.129.226.181 - - [09/May/2009:23:24:19 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 2031616 "http://www.globalfreeware.com/DcatGUI-download.html" "Opera/10.00 (Windows NT 5.1; U; Edition Turbo; en) Presto/2.2.0" "www.templeos.org" -65.179.102.60 - - [09/May/2009:23:34:26 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -84.186.190.142 - - [09/May/2009:23:35:04 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4708352 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -215.223.50.141 - - [09/May/2009:23:42:27 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 983040 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.179.102.28 - - [09/May/2009:23:51:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -114.43.223.204 - - [09/May/2009:23:55:03 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -153.12.151.161 - - [09/May/2009:23:59:17 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -153.12.151.161 - - [09/May/2009:23:59:17 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -153.12.151.161 - - [09/May/2009:23:59:18 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1" "www.templeos.org" -153.12.151.161 - - [09/May/2009:23:59:18 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "Safari5525.27.1 CFNetwork/422.15.2 Darwin/9.6.0 (i386) (MacBookPro3%2C1)" "www.templeos.org" -153.12.151.161 - - [09/May/2009:23:59:27 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 1114112 "-" "QuickTime/7.6 (qtver=7.6;cpu=IA32;os=Mac 10.5.6)" "www.templeos.org" -41.18.246.140 - - [09/May/2009:23:59:38 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -41.18.246.140 - - [09/May/2009:23:59:38 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -41.18.246.140 - - [09/May/2009:23:59:38 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -41.18.246.140 - - [09/May/2009:23:59:39 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -41.18.246.140 - - [09/May/2009:23:59:42 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -166.201.174.17 - - [10/May/2009:00:00:05 -0700] "GET / HTTP/1.1" 200 81188 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -166.201.174.17 - - [10/May/2009:00:00:06 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -41.18.246.140 - - [10/May/2009:00:00:09 -0700] "GET /media/Demo1.wmv HTTP/1.1" 206 196608 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -166.201.174.17 - - [10/May/2009:00:00:18 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 196608 "-" "NSPlayer/11.0.5721.5145" "www.templeos.org" -233.20.138.101 - - [10/May/2009:00:00:27 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -173.37.27.66 - - [10/May/2009:00:01:15 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.122.113037109375" "www.templeos.org" -238.252.153.74 - - [10/May/2009:00:02:15 -0700] "GET / HTTP/1.1" 200 81188 "http://en.wikipedia.org/wiki/TempleOS" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -238.252.153.74 - - [10/May/2009:00:02:17 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -153.12.151.161 - - [10/May/2009:00:02:50 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 458752 "-" "QuickTime/7.6 (qtver=7.6;cpu=IA32;os=Mac 10.5.6)" "www.templeos.org" -238.252.153.74 - - [10/May/2009:00:03:28 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 720896 "http://www.templeos.org/" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -238.252.153.74 - - [10/May/2009:00:03:35 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "http://www.templeos.org/" "Opera/9.64 (Windows NT 5.1; U; en) Presto/2.1.1" "www.templeos.org" -238.252.153.74 - - [10/May/2009:00:03:41 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 262144 "-" "NSPlayer/11.0.5721.5251" "www.templeos.org" -166.201.174.17 - - [10/May/2009:00:04:07 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 32309248 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -166.201.174.17 - - [10/May/2009:00:04:09 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 25559040 "-" "NSPlayer/11.0.5721.5145 WMFSDK/11.0" "www.templeos.org" -153.12.151.161 - - [10/May/2009:00:04:28 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 229817 "-" "Safari5525.27.1 CFNetwork/422.15.2 Darwin/9.6.0 (i386) (MacBookPro3%2C1)" "www.templeos.org" -238.252.153.74 - - [10/May/2009:00:05:24 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 66292058 "-" "NSPlayer/11.0.5721.5251 WMFSDK/11.0" "www.templeos.org" -65.181.97.191 - - [10/May/2009:00:12:32 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.181.97.191 - - [10/May/2009:00:13:10 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -171.198.177.0 - - [10/May/2009:00:14:57 -0700] "GET / HTTP/1.1" 200 81188 "http://www.google.com/search?q=IBM+pc+operating+system&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 FBSMTWB" "www.templeos.org" -171.198.177.0 - - [10/May/2009:00:14:57 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 FBSMTWB" "www.templeos.org" -171.198.177.0 - - [10/May/2009:00:15:29 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 5505024 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 FBSMTWB" "www.templeos.org" -171.198.177.0 - - [10/May/2009:00:15:32 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 FBSMTWB" "www.templeos.org" -233.20.138.227 - - [10/May/2009:00:17:25 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -173.37.27.66 - - [10/May/2009:00:17:54 -0700] "HEAD /TempleOSCD.ISO HTTP/1.1" 206 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.165.2801513671875" "www.templeos.org" -65.181.97.191 - - [10/May/2009:00:20:49 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -142.117.196.177 - - [10/May/2009:00:21:33 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2)" "www.templeos.org" -142.117.196.177 - - [10/May/2009:00:21:56 -0700] "GET /TempleOSCD.ISO HTTP/1.1" 200 4708352 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:23:46 -0700] "GET / HTTP/1.1" 200 81188 "http://www.linuxhaxor.net/page/14/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:23:47 -0700] "GET /images/Header.JPG HTTP/1.1" 200 2982 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:23:48 -0700] "GET /media/Demo1.wmv HTTP/1.1" 200 262144 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:23:49 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:23:51 -0700] "GET /favicon.ico HTTP/1.1" 404 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:02 -0700] "GET /screenshots.html HTTP/1.1" 200 11591 "http://www.templeos.org/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:03 -0700] "GET /images/CTrace.JPG HTTP/1.1" 200 72254 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:03 -0700] "GET /images/Collision.JPG HTTP/1.1" 200 77496 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:03 -0700] "GET /images/Rocks.JPG HTTP/1.1" 200 38304 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:03 -0700] "GET /images/NetOfDots.JPG HTTP/1.1" 200 77806 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:03 -0700] "GET /images/Dollar.JPG HTTP/1.1" 200 92536 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:03 -0700] "GET /images/Tanks.JPG HTTP/1.1" 200 110155 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:05 -0700] "GET /images/FlightSim2.JPG HTTP/1.1" 200 58066 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:05 -0700] "GET /images/FPS.JPG HTTP/1.1" 200 18883 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:06 -0700] "GET /images/Span.JPG HTTP/1.1" 200 30960 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:06 -0700] "GET /images/Squirt.JPG HTTP/1.1" 200 17481 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:06 -0700] "GET /images/XCaliber.jpg HTTP/1.1" 200 20758 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:07 -0700] "GET /images/Organ.jpg HTTP/1.1" 200 38835 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -37.207.27.218 - - [10/May/2009:00:24:07 -0700] "GET /images/TempleOSV505.jpg HTTP/1.1" 200 80248 "http://www.templeos.org/screenshots.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)" "www.templeos.org" -65.181.97.191 - - [10/May/2009:00:29:54 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 534784 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.181.97.191 - - [10/May/2009:00:31:11 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.181.97.191 - - [10/May/2009:00:31:29 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -65.179.102.241 - - [10/May/2009:00:34:24 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -65.181.97.191 - - [10/May/2009:00:36:14 -0700] "GET /TempleOSCD.ISO HTTP/1.0" 200 4708352 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" -55.229.49.185 - - [10/May/2009:00:51:09 -0700] "GET /robots.txt HTTP/1.1" 404 275 "-" "msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -55.229.49.185 - - [10/May/2009:00:51:09 -0700] "GET /span.html HTTP/1.1" 200 3929 "-" "msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)" "www.templeos.org" -233.20.138.223 - - [10/May/2009:00:51:23 -0700] "GET /v502.html HTTP/1.1" 404 275 "http://www.semantic.hn/" "AppEngine-Google; (+http://code.google.com/appengine)" "www.templeos.org" -55.229.238.6 - - [10/May/2009:00:58:41 -0700] "GET /contact.html HTTP/1.0" 304 - "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" "www.templeos.org" diff --git a/Demo/WebLogExample/access_150211.LOG b/Demo/WebLogExample/access_150211.LOG new file mode 100644 index 0000000..edf5f8d --- /dev/null +++ b/Demo/WebLogExample/access_150211.LOG @@ -0,0 +1,946 @@ +131.8.134.171 - - [10/Feb/2015:00:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +27.241.156.119 - - [10/Feb/2015:00:00:52 -0800] "GET /Wb/Demo/DolDoc/CursorMove.html HTTP/1.1" 200 21966 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +119.225.151.201 - - [10/Feb/2015:00:09:21 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0216A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +119.225.151.220 - - [10/Feb/2015:00:09:22 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0216A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +229.137.198.53 - - [10/Feb/2015:00:09:22 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +229.137.198.53 - - [10/Feb/2015:00:09:23 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +18.64.226.175 - - [10/Feb/2015:00:13:33 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5" "www.templeos.org" +89.24.104.239 - - [10/Feb/2015:00:13:39 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +233.185.113.70 - - [10/Feb/2015:00:16:14 -0800] "GET / HTTP/1.1" 200 6345 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +233.185.113.70 - - [10/Feb/2015:00:16:17 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +106.144.211.78 - - [10/Feb/2015:00:16:29 -0800] "GET /Wb/Misc/MakeDistro.html HTTP/1.1" 200 32860 "-" "Mozilla/5.0 (compatible; SeznamBot/3.2; +http://fulltext.sblog.cz/)" "www.templeos.org" +233.185.113.70 - - [10/Feb/2015:00:17:35 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7102 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +236.90.11.105 - - [10/Feb/2015:00:19:02 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140924 Firefox/24.0 Iceweasel/24.8.1" "www.templeos.org" +111.125.242.45 - - [10/Feb/2015:00:24:26 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +223.88.111.189 - - [10/Feb/2015:00:24:35 -0800] "GET /Wb/Apps/Psalmody/Examples/scriptures.html HTTP/1.1" 200 15604 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:00:24:57 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12685 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:00:25:11 -0800] "GET /Wb/Kernel/Dsk/FileSysRedSea.html HTTP/1.1" 200 342623 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.53.176.46 - - [10/Feb/2015:00:26:18 -0800] "GET /Wb/Demo/Graphics/LowPassFilter.html HTTP/1.1" 200 31098 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +253.34.254.105 - - [10/Feb/2015:00:27:41 -0800] "HEAD /robots.txt HTTP/1.1" 404 0 "-" "creepyCrawler" "www.templeos.org" +253.34.254.105 - - [10/Feb/2015:00:29:43 -0800] "HEAD /robots.txt HTTP/1.1" 404 0 "-" "creepyCrawler" "www.templeos.org" +143.18.179.40 - - [10/Feb/2015:00:33:28 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "http://www.templeos.org/Wb/Misc/PCIDevices.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 OPR/23.0.1522.77 (Edition Campaign 37)" "www.templeos.org" +126.186.164.170 - - [10/Feb/2015:00:33:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +126.186.164.170 - - [10/Feb/2015:00:33:50 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +126.186.164.170 - - [10/Feb/2015:00:37:33 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com.sg/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +222.252.35.22 - - [10/Feb/2015:00:39:10 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://dotat.at/" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16" "www.templeos.org" +74.51.144.36 - - [10/Feb/2015:00:45:45 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/03/Rant140311.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:00:46:17 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Img030.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:00:48:19 -0800] "GET /Certs/virtual-notary-cert-randomnum-34325.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +74.51.144.148 - - [10/Feb/2015:00:48:52 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/03/Rant140315.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +87.177.35.128 - - [10/Feb/2015:00:49:02 -0800] "GET /Wb/Accts/TS/Wb2/Hymns.html HTTP/1.1" 404 89 "http://444.hu/2014/11/26/a-skizofren-programozo-aki-10-even-at-irt-egy-operacios-rendszert-istennek/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +225.87.3.137 - - [10/Feb/2015:00:51:21 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.fi/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=hsbZVNCiLYTWPPKsgXA&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=7eCjIh6Ty27MDMpx6g9wsA" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "www.templeos.org" +225.87.3.137 - - [10/Feb/2015:00:51:22 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "www.templeos.org" +10.182.160.183 - - [10/Feb/2015:00:51:31 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +10.182.160.183 - - [10/Feb/2015:00:51:32 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +97.6.30.77 - - [10/Feb/2015:00:51:44 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +97.6.30.77 - - [10/Feb/2015:00:51:45 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +164.176.164.50 - - [10/Feb/2015:00:52:46 -0800] "HEAD / HTTP/1.1" 200 0 "-" "-" "www.templeos.org" +164.176.164.50 - - [10/Feb/2015:00:52:46 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +164.176.164.50 - - [10/Feb/2015:00:52:48 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +164.176.164.50 - - [10/Feb/2015:00:52:56 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +210.31.197.154 - - [10/Feb/2015:00:53:04 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.fi/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +210.31.197.154 - - [10/Feb/2015:00:53:11 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.32 - - [10/Feb/2015:00:54:26 -0800] "GET /Wb/Compiler/CmpAsm.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +114.239.103.17 - - [10/Feb/2015:00:54:35 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +114.239.103.17 - - [10/Feb/2015:00:54:35 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:00:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:01:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +225.87.79.148 - - [10/Feb/2015:01:00:34 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org" +225.87.79.148 - - [10/Feb/2015:01:00:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org" +52.53.176.173 - - [10/Feb/2015:01:00:37 -0800] "GET /Wb/Apps/Psalmody/Examples/valued.CPP.Z HTTP/1.1" 200 766 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +225.87.79.148 - - [10/Feb/2015:01:00:54 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org" +217.132.100.186 - - [10/Feb/2015:01:02:19 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +217.132.100.186 - - [10/Feb/2015:01:02:20 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +150.17.46.179 - - [10/Feb/2015:01:03:41 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +150.17.46.179 - - [10/Feb/2015:01:03:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +233.8.61.178 - - [10/Feb/2015:01:04:08 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "www.templeos.org" +175.224.63.10 - - [10/Feb/2015:01:05:03 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +175.224.63.10 - - [10/Feb/2015:01:05:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +106.52.123.208 - - [10/Feb/2015:01:05:31 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +233.8.61.178 - - [10/Feb/2015:01:07:54 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "www.templeos.org" +175.224.63.10 - - [10/Feb/2015:01:08:07 -0800] "GET /Wb/Doc/Features.html HTTP/1.1" 200 8597 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +213.122.16.135 - - [10/Feb/2015:01:08:45 -0800] "GET /Wb/Kernel/Compress.html HTTP/1.1" 200 169770 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=erenyagdiran&t_u=http%3A%2F%2Ferenyagdiran.github.io%2FI-was-just-asked-to-crack-a-program-Part-1%2F%3Futm_source%3Dhackernewsletter%26utm_medium%3Demail%26utm_term%3Dfav&t_d=I%20was%20just%20asked%20to%20crack%20a%20program%20in%20a%20job%20interview%20!&t_t=I%20was%20just%20asked%20to%20crack%20a%20program%20in%20a%20job%20interview%20!&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +213.122.16.135 - - [10/Feb/2015:01:08:49 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +82.6.103.48 - - [10/Feb/2015:01:09:19 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +253.34.254.200 - - [10/Feb/2015:01:09:44 -0800] "HEAD /robots.txt HTTP/1.1" 404 0 "-" "creepyCrawler" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:01:10:30 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 11519 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:01:10:58 -0800] "GET /Wb/Accts/TOS/Wb2/TADRant.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +88.131.102.41 - - [10/Feb/2015:01:13:03 -0800] "GET /Wb/Doc/Features.html HTTP/1.1" 200 8597 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +88.131.102.41 - - [10/Feb/2015:01:13:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +74.51.144.167 - - [10/Feb/2015:01:13:57 -0800] "GET / HTTP/1.1" 200 6329 "-" "DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +213.154.34.100 - - [10/Feb/2015:01:16:59 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru01.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7" "www.templeos.org" +219.102.29.240 - - [10/Feb/2015:01:17:55 -0800] "GET / HTTP/1.1" 200 6329 "http://badmin.dy.fi:7778/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +219.102.29.240 - - [10/Feb/2015:01:17:56 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +148.74.246.188 - - [10/Feb/2015:01:22:01 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&ved=0CFsQFjAH&url=http%3A%2F%2Fwww.templeos.org%2FWb%2FMisc%2FPCIDevices.html&ei=rs3ZVNunEIjxULawhIAL&usg=AFQjCNEY7xTA_W-Qwtbuh2jjy9sAILixkQ&bvm=bv.85464276,d.d24&cad=rja" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +148.74.246.188 - - [10/Feb/2015:01:22:02 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:01:22:14 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 13061 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +75.161.19.185 - - [10/Feb/2015:01:25:26 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +225.132.82.84 - - [10/Feb/2015:01:28:07 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.51.133.20 - - [10/Feb/2015:01:31:01 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "templeos.org" +101.50.249.189 - - [10/Feb/2015:01:38:00 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.53.176.53 - - [10/Feb/2015:01:40:52 -0800] "GET /Wb/Apps/ToTheFront/AIs/?S=A HTTP/1.1" 200 1141 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:01:42:42 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:01:43:10 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:01:43:36 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:01:44:07 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +246.2.100.228 - - [10/Feb/2015:01:44:25 -0800] "GET /Temple HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:01:48:32 -0800] "GET /beacon.nist.gov/rest/record/1415892900 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:01:48:41 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 18731 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +127.156.224.254 - - [10/Feb/2015:01:49:54 -0800] "GET / HTTP/1.1" 200 6345 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +127.156.224.254 - - [10/Feb/2015:01:49:55 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +106.52.123.129 - - [10/Feb/2015:01:50:19 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +106.52.123.208 - - [10/Feb/2015:01:50:22 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +106.52.123.208 - - [10/Feb/2015:01:50:22 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +106.52.123.208 - - [10/Feb/2015:01:50:28 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +106.52.123.208 - - [10/Feb/2015:01:51:21 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +106.52.123.208 - - [10/Feb/2015:01:51:23 -0800] "GET /Wb/Accts/TS/Wb2/TAD/TADRants2014.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +130.98.70.92 - - [10/Feb/2015:01:53:47 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/10/Rant141010.html HTTP/1.1" 404 89 "http://www.templeos.org/Wb/Accts/TS/Wb2/TAD/2014/10/Rant141010.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRA 5.10 (build 5339); GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)" "www.templeos.org" +151.190.39.120 - - [10/Feb/2015:01:53:52 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3" "www.templeos.org" +31.28.244.154 - - [10/Feb/2015:01:54:27 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?url=http://www.templeos.org/&rct=j&frm=1&q=&esrc=s&sa=U&ei=T9XZVMKfDcytPLv8gKgB&ved=0CBQQFjAA&usg=AFQjCNGE6bW93Hv9DZ0KcAYVUpQAPcF_aA" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB0.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF; InfoPath.3)" "www.templeos.org" +31.28.244.154 - - [10/Feb/2015:01:54:30 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB0.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF; InfoPath.3)" "www.templeos.org" +82.153.251.69 - - [10/Feb/2015:01:59:33 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +78.73.194.7 - - [10/Feb/2015:01:59:51 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +75.167.213.20 - - [10/Feb/2015:02:01:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Rant131004.html HTTP/1.1" 404 89 "http://www.templeos.org/Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Rant131004.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:02:01:52 -0800] "GET /Wb/Demo/OldSchool/MultiFileAOT/MD2.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +52.53.176.129 - - [10/Feb/2015:02:02:12 -0800] "GET /Wb/0000Boot/0000Kernel.BIN.C HTTP/1.1" 200 185824 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:02:07:49 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 25100 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +87.180.246.184 - - [10/Feb/2015:02:08:04 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.pl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=ftjZVJnrHsz1Uquug5AM&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85464276,d.d24" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +87.180.246.184 - - [10/Feb/2015:02:08:07 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +211.88.221.103 - - [10/Feb/2015:02:09:05 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +52.87.77.86 - - [10/Feb/2015:02:09:09 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +52.53.176.225 - - [10/Feb/2015:02:09:13 -0800] "GET /Wb/Demo/DolDoc/Data.CPP.Z HTTP/1.1" 200 950 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +52.87.77.86 - - [10/Feb/2015:02:09:43 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +119.225.240.174 - - [10/Feb/2015:02:10:24 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +14.6.26.253 - - [10/Feb/2015:02:10:59 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +14.6.26.253 - - [10/Feb/2015:02:11:07 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7102 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +233.74.252.115 - - [10/Feb/2015:02:11:20 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +106.52.123.129 - - [10/Feb/2015:02:11:30 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.fi/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:02:15:51 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 27781 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.77.1.159 - - [10/Feb/2015:02:17:11 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +52.77.1.159 - - [10/Feb/2015:02:17:12 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 27765 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +161.215.69.12 - - [10/Feb/2015:02:17:17 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.77.1.159 - - [10/Feb/2015:02:17:18 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/Wb/Home/Wb2/TADRant.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +161.215.69.12 - - [10/Feb/2015:02:17:38 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +161.215.69.12 - - [10/Feb/2015:02:17:39 -0800] "GET /Wb/Home/Wb2/Imgs/MenuV0104.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +161.215.69.12 - - [10/Feb/2015:02:17:39 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +16.230.140.31 - - [10/Feb/2015:02:19:54 -0800] "GET /wp-login.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/23.0.1271.6 Safari/537.11" "templeos.org" +16.230.140.31 - - [10/Feb/2015:02:19:54 -0800] "GET /administrator/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/23.0.1271.6 Safari/537.11" "templeos.org" +16.230.140.31 - - [10/Feb/2015:02:19:54 -0800] "GET /admin.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/23.0.1271.6 Safari/537.11" "templeos.org" +2.18.244.210 - - [10/Feb/2015:02:21:00 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Rant131007.html HTTP/1.1" 404 89 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +2.18.244.210 - - [10/Feb/2015:02:21:00 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +74.51.144.148 - - [10/Feb/2015:02:24:43 -0800] "GET /Wb/Accts/TS/Wb2/TAD/Files/Text/Walden.TXT HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +39.252.113.221 - - [10/Feb/2015:02:25:08 -0800] "GET / HTTP/1.1" 200 6329 "-" "NetLyzer FastProbe" "www.templeos.org" +106.52.123.129 - - [10/Feb/2015:02:25:21 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "https://www.google.fi/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +225.87.3.137 - - [10/Feb/2015:02:26:11 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +225.87.3.137 - - [10/Feb/2015:02:26:11 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +225.87.3.137 - - [10/Feb/2015:02:26:29 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +83.8.47.3 - - [10/Feb/2015:02:26:35 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "templeos.org" +189.3.229.39 - - [10/Feb/2015:02:27:36 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +52.53.176.9 - - [10/Feb/2015:02:28:08 -0800] "GET /Wb/Demo/SortFileExample/ HTTP/1.1" 200 2022 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +228.48.95.108 - - [10/Feb/2015:02:28:20 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Page2RSS/0.7; +http://page2rss.com/)" "www.templeos.org" +52.53.176.32 - - [10/Feb/2015:02:29:32 -0800] "GET /Wb/Adam/Gr/GrTextBase.CPP.Z HTTP/1.1" 200 3554 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +74.51.144.148 - - [10/Feb/2015:02:36:28 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/11/Rant141120.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +207.244.87.211 - - [10/Feb/2015:02:37:36 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com.au/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +207.244.87.211 - - [10/Feb/2015:02:37:37 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:02:37:41 -0800] "GET /logs/ HTTP/1.1" 200 5327 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:02:37:44 -0800] "GET /logs/access_150210.log HTTP/1.1" 200 407114 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +164.219.42.247 - - [10/Feb/2015:02:37:48 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:02:37:48 -0800] "GET /logs/access.log HTTP/1.1" 200 32183 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:02:39:36 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +254.174.215.3 - - [10/Feb/2015:02:41:29 -0800] "GET /Wb/Home/Wb2/Files/Text/Talmud.TXT HTTP/1.1" 200 849716 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +254.174.215.3 - - [10/Feb/2015:02:42:32 -0800] "GET /Wb/Home/Wb2/Files/Text/Talmud.TXT HTTP/1.1" 200 849716 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +120.29.162.145 - - [10/Feb/2015:02:42:48 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" +120.29.162.145 - - [10/Feb/2015:02:43:08 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" +27.210.37.158 - - [10/Feb/2015:02:47:02 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +68.74.162.253 - - [10/Feb/2015:02:47:02 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +27.210.37.158 - - [10/Feb/2015:02:47:03 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.158 - - [10/Feb/2015:02:47:03 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +189.66.173.0 - - [10/Feb/2015:02:47:05 -0800] "HEAD /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 0 "-" "Google-HTTP-Java-Client/1.17.0-rc (gzip)" "www.templeos.org" +139.134.182.139 - - [10/Feb/2015:02:47:21 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Getter/0.1)" "www.templeos.org" +139.134.182.139 - - [10/Feb/2015:02:47:22 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Getter/0.1)" "www.templeos.org" +68.196.44.189 - - [10/Feb/2015:02:48:04 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 ()" "www.templeos.org" +111.125.242.45 - - [10/Feb/2015:02:51:04 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +105.119.49.193 - - [10/Feb/2015:02:55:36 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +105.119.49.193 - - [10/Feb/2015:02:55:53 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +241.159.225.120 - - [10/Feb/2015:02:57:00 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +189.246.94.46 - - [10/Feb/2015:02:59:48 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "python-requests/2.4.3 CPython/2.7.6 Linux/3.13.0-29-generic" "www.templeos.org" +87.34.169.110 - - [10/Feb/2015:02:59:54 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "http://go.mail.ru/search?fm=1&rf=1011&q=USBSTOR%5CDISK%26VEN_SAMSUNG%26PROD_M3_PORTABLE%26REV_3_%5C00000000011E4E7A%260" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1709.113 Amigo/32.0.1709.113 MRCHROME SOC Safari/537.36" "www.templeos.org" +87.34.169.110 - - [10/Feb/2015:03:00:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1709.113 Amigo/32.0.1709.113 MRCHROME SOC Safari/537.36" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:03:02:18 -0800] "GET /Certs/virtual-notary-cert-randomnum-51617.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +254.174.215.3 - - [10/Feb/2015:03:03:08 -0800] "GET /Wb/Accts/TS/Wb2/TAD/Files/Text/Walden.TXT HTTP/1.1" 404 89 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +254.174.215.3 - - [10/Feb/2015:03:03:10 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:03:03:42 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +246.2.100.39 - - [10/Feb/2015:03:09:07 -0800] "GET /Wb/Adam/DevInfo.html HTTP/1.1" 200 110324 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +229.137.198.53 - - [10/Feb/2015:03:09:27 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +28.130.54.100 - - [10/Feb/2015:03:09:56 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT HTTP/1.1" 200 652722 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +50.26.245.193 - - [10/Feb/2015:03:12:00 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40105 "http://www.templeos.org/Wb/Home/Wb2/Videos.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:03:13:19 -0800] "GET /Wb/Apps/Psalmody/Examples/elijah.html HTTP/1.1" 200 34593 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +34.222.78.124 - - [10/Feb/2015:03:13:44 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +34.222.78.124 - - [10/Feb/2015:03:13:45 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +52.53.176.247 - - [10/Feb/2015:03:16:57 -0800] "GET /Wb/Apps/ToTheFront/AIs/SimpleAI.CPP.Z HTTP/1.1" 200 1094 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:03:21:29 -0800] "GET /Wb/Accts/TS/Wb2/AfterEgypt01.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +223.88.111.165 - - [10/Feb/2015:03:21:53 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:03:22:04 -0800] "GET /Wb/Temp/ScreenShots/?M=D HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +27.210.37.166 - - [10/Feb/2015:03:22:06 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.166 - - [10/Feb/2015:03:22:06 -0800] "GET / HTTP/1.1" 200 6329 "-" "Twitterbot/1.0" "www.templeos.org" +98.55.249.190 - - [10/Feb/2015:03:23:44 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +98.55.249.190 - - [10/Feb/2015:03:23:45 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +223.88.111.136 - - [10/Feb/2015:03:25:20 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +38.28.7.107 - - [10/Feb/2015:03:25:54 -0800] "GET /Wb/Doc/RedSea.html HTTP/1.1" 200 23788 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +38.28.7.107 - - [10/Feb/2015:03:25:55 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +52.53.176.46 - - [10/Feb/2015:03:31:47 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +38.234.104.85 - - [10/Feb/2015:03:32:38 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +38.234.104.85 - - [10/Feb/2015:03:32:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +179.43.210.71 - - [10/Feb/2015:03:35:25 -0800] "GET /robots.txt HTTP/1.1" 404 89 "http://templeos.org/robots.txt" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); 360Spider(compatible; HaosouSpider; http://www.haosou.com/help/help_3_2.html)" "templeos.org" +233.133.247.179 - - [10/Feb/2015:03:35:56 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ch/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +197.109.150.128 - - [10/Feb/2015:03:40:52 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +197.109.150.128 - - [10/Feb/2015:03:40:55 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +27.241.156.119 - - [10/Feb/2015:03:41:05 -0800] "GET /Wb/Accts/TS/Wb2/Tutorials.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +88.71.36.79 - - [10/Feb/2015:03:44:09 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCkQFjAB&url=http%3A%2F%2Fwww.templeos.org%2F&ei=Au_ZVNrlK4LqaPCagvAF&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=5_XFhPnKn69eq3N9e0rndA&bvm=bv.85464276,d.d2s" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +175.87.155.92 - - [10/Feb/2015:03:44:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36" "www.templeos.org" +199.202.179.206 - - [10/Feb/2015:03:46:58 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "http://m.facebook.com/" "Mozilla/5.0 (Linux; U; Android 4.3; en-us; MT2L03 Build/HuaweiMT2L03) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/27.0.0.13.15;]" "www.templeos.org" +52.53.176.129 - - [10/Feb/2015:03:47:42 -0800] "GET /Wb/Apps/Psalmody/Examples/shield.CPP.Z HTTP/1.1" 200 1149 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:03:50:33 -0800] "GET /Certs/virtual-notary-cert-randomnum-39917.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +155.156.205.175 - - [10/Feb/2015:03:52:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +52.53.176.225 - - [10/Feb/2015:03:53:00 -0800] "GET /Wb/Adam/DolDoc/DocMacro.html HTTP/1.1" 200 114437 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +88.71.36.79 - - [10/Feb/2015:03:54:19 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:33.1) Gecko/20100101 Firefox/33.1" "www.templeos.org" +16.141.166.164 - - [10/Feb/2015:04:00:53 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66 (Edition Campaign 21)" "www.templeos.org" +156.64.146.178 - - [10/Feb/2015:04:02:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0" "www.templeos.org" +38.37.55.103 - - [10/Feb/2015:04:07:23 -0800] "GET / HTTP/1.1" 200 6329 "http://buttons-for-website.com" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "templeos.org" +74.51.215.23 - - [10/Feb/2015:04:10:50 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +16.141.166.164 - - [10/Feb/2015:04:19:00 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66 (Edition Campaign 21)" "www.templeos.org" +16.141.166.164 - - [10/Feb/2015:04:19:05 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66 (Edition Campaign 21)" "www.templeos.org" +22.176.175.147 - - [10/Feb/2015:04:24:11 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36" "templeos.org" +27.210.37.166 - - [10/Feb/2015:04:27:03 -0800] "GET /Wb/Demo/AcctExample/TSHolySpirit.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.110 - - [10/Feb/2015:04:27:03 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.110 - - [10/Feb/2015:04:27:03 -0800] "GET /Wb/Apps/HolySpirit/HolySpirit.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.110 - - [10/Feb/2015:04:27:03 -0800] "GET /Wb/Demo/AcctExample/Adam3dKeyPlugIns.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.158 - - [10/Feb/2015:04:27:03 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:04:28:29 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/09/Rant130917.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:04:28:43 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/08/Rant140829.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +32.143.197.131 - - [10/Feb/2015:04:29:07 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +32.143.197.131 - - [10/Feb/2015:04:29:09 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.187.37.88 - - [10/Feb/2015:04:29:32 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +52.53.176.137 - - [10/Feb/2015:04:30:05 -0800] "GET /Wb/Adam/AutoComplete/ACWords.DAT.Z HTTP/1.1" 200 477279 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +223.88.111.19 - - [10/Feb/2015:04:30:41 -0800] "GET /Wb/Apps/Psalmody/Examples/born.html HTTP/1.1" 200 35021 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +129.226.244.66 - - [10/Feb/2015:04:32:26 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/06/Rant140624.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +98.238.57.110 - - [10/Feb/2015:04:33:59 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +98.238.57.110 - - [10/Feb/2015:04:33:59 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +217.51.68.58 - - [10/Feb/2015:04:34:03 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +211.158.230.142 - - [10/Feb/2015:04:38:18 -0800] "GET / HTTP/1.1" 200 6329 "http://templeos.org/" "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30" "templeos.org" +213.219.186.160 - - [10/Feb/2015:04:41:11 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +213.219.186.160 - - [10/Feb/2015:04:41:46 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +213.219.186.160 - - [10/Feb/2015:04:41:56 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +112.130.98.166 - - [10/Feb/2015:04:42:20 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +112.130.98.166 - - [10/Feb/2015:04:42:20 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +12.137.124.177 - - [10/Feb/2015:04:42:28 -0800] "GET /Wb/Kernel/KbdMouse/ HTTP/1.1" 200 1700 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:04:44:25 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +211.158.52.189 - - [10/Feb/2015:04:47:39 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "http://www.templeos.org/Wb/Doc/Charter.html" "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30" "www.templeos.org" +38.122.192.108 - - [10/Feb/2015:04:48:29 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0" "www.templeos.org" +38.122.192.108 - - [10/Feb/2015:04:48:29 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0" "www.templeos.org" +38.122.192.108 - - [10/Feb/2015:04:48:29 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +38.122.192.108 - - [10/Feb/2015:04:48:29 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0" "www.templeos.org" +38.122.192.108 - - [10/Feb/2015:04:48:30 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +38.122.192.108 - - [10/Feb/2015:04:48:31 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0" "www.templeos.org" +38.122.192.108 - - [10/Feb/2015:04:48:31 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.108 - - [10/Feb/2015:04:48:32 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +38.122.192.108 - - [10/Feb/2015:04:48:32 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +217.33.136.131 - - [10/Feb/2015:04:48:46 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +101.231.107.239 - - [10/Feb/2015:04:51:05 -0800] "GET / HTTP/1.1" 200 6329 "http://www.reddit.com/r/Survival/comments/2ujfcw/oh_joseph_just_no/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +101.231.107.239 - - [10/Feb/2015:04:51:05 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +211.158.230.77 - - [10/Feb/2015:04:51:31 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org/" "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30" "www.templeos.org" +148.120.95.68 - - [10/Feb/2015:04:52:46 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +148.120.95.68 - - [10/Feb/2015:04:52:46 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +75.176.241.118 - - [10/Feb/2015:04:53:12 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.es/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +75.176.241.118 - - [10/Feb/2015:04:53:14 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +75.176.241.118 - - [10/Feb/2015:04:53:21 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +148.120.95.68 - - [10/Feb/2015:04:53:27 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +148.120.95.68 - - [10/Feb/2015:04:54:13 -0800] "GET /Wb/Demo/Games/CastleFrankenstein.html HTTP/1.1" 200 259730 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +223.88.111.105 - - [10/Feb/2015:04:56:03 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +75.176.241.118 - - [10/Feb/2015:04:56:25 -0800] "GET /Wb/Doc/RedSea.html HTTP/1.1" 200 23788 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +223.88.111.189 - - [10/Feb/2015:04:56:31 -0800] "GET /Wb/Apps/Psalmody/Examples/completed.html HTTP/1.1" 200 20052 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +75.176.241.118 - - [10/Feb/2015:04:57:15 -0800] "GET /Wb/Doc/RedSea.html HTTP/1.1" 200 23788 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:05:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:05:13:38 -0800] "GET /Wb/Apps/Psalmody/Examples/exiled.html HTTP/1.1" 200 33724 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:05:13:39 -0800] "GET /Wb/Apps/Psalmody/Examples/advantage.html HTTP/1.1" 200 11415 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +226.174.2.211 - - [10/Feb/2015:05:16:23 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0" "www.templeos.org" +52.53.176.32 - - [10/Feb/2015:05:20:15 -0800] "GET /Wb/Adam/Dsk/ADskB.CPP.Z HTTP/1.1" 200 5591 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +69.189.218.252 - - [10/Feb/2015:05:22:11 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +52.53.176.225 - - [10/Feb/2015:05:23:21 -0800] "GET /Wb/Demo/Games/Stadium/?D=A HTTP/1.1" 200 1576 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +129.226.244.66 - - [10/Feb/2015:05:24:19 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:05:24:45 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses58.html HTTP/1.1" 200 3650 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +222.32.254.206 - - [10/Feb/2015:05:30:20 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Linux; Android 5.0.2; Nexus 7 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Safari/537.36" "www.templeos.org" +222.32.254.206 - - [10/Feb/2015:05:30:21 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 5.0.2; Nexus 7 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Safari/537.36" "www.templeos.org" +222.32.254.206 - - [10/Feb/2015:05:30:55 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 5.0.2; Nexus 7 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Safari/537.36" "www.templeos.org" +164.176.61.156 - - [10/Feb/2015:05:30:58 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +223.88.111.189 - - [10/Feb/2015:05:31:25 -0800] "GET /Wb/Doc/HelpIndex.html HTTP/1.1" 200 19954 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +223.88.111.189 - - [10/Feb/2015:05:31:25 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +52.53.176.137 - - [10/Feb/2015:05:31:43 -0800] "GET /Certs/virtual-notary-cert-randomnum-31779.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:05:32:06 -0800] "GET /Wb/Accts/TS/Wb2/TAD/Files/?M=A HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +69.189.218.252 - - [10/Feb/2015:05:32:16 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +129.226.244.66 - - [10/Feb/2015:05:32:29 -0800] "GET /Wb/Apps/Psalmody/Examples/finger.html HTTP/1.1" 200 28386 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:05:32:58 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/10/Rant141025.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +52.53.176.129 - - [10/Feb/2015:05:33:57 -0800] "GET /Wb/Doc/ HTTP/1.1" 200 23911 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:05:35:54 -0800] "GET /beacon.nist.gov/rest/record/1416617880 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:05:38:38 -0800] "GET /Wb/Apps/Budget/Install.html HTTP/1.1" 200 5452 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:05:39:34 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Img009.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +75.166.171.184 - - [10/Feb/2015:05:52:11 -0800] "GET / HTTP/1.1" 200 6329 "http://www.chimerarevo.com/hardware/templeos-il-sistema-operativo-richiesto-da-dio-182037/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +75.166.171.184 - - [10/Feb/2015:05:52:13 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +97.243.249.230 - - [10/Feb/2015:05:52:28 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/39.0.2171.65 Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org" +223.88.111.189 - - [10/Feb/2015:06:04:41 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +34.222.78.124 - - [10/Feb/2015:06:13:46 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +34.222.78.124 - - [10/Feb/2015:06:13:47 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +52.53.176.0 - - [10/Feb/2015:06:17:23 -0800] "GET /Wb/Apps/AfterEgypt/?M=A HTTP/1.1" 200 4643 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +130.183.37.67 - - [10/Feb/2015:06:19:52 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40105 "http://www.templeos.org/Wb/Home/Wb2/Videos.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" "www.templeos.org" +150.106.210.108 - - [10/Feb/2015:06:20:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +115.70.68.214 - - [10/Feb/2015:06:20:38 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://codigofonte.uol.com.br/artigos/o-programador-que-criou-um-os-para-falar-com-deus" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +115.70.68.214 - - [10/Feb/2015:06:20:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:06:24:36 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/07/Rant140707.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:06:24:36 -0800] "GET /Wb/Doc/Que.html HTTP/1.1" 200 3154 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:06:24:36 -0800] "GET /Wb/Kernel/AOT.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +199.240.42.205 - - [10/Feb/2015:06:24:51 -0800] "GET /Wb/Accts/TS/Wb2/TAD/Files/Text/Walden.TXT HTTP/1.1" 404 89 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +199.240.42.205 - - [10/Feb/2015:06:24:53 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +164.176.61.156 - - [10/Feb/2015:06:33:29 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +164.176.61.156 - - [10/Feb/2015:06:33:36 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +69.189.218.252 - - [10/Feb/2015:06:33:54 -0800] "GET /Wb/Doc/Mysteries.html HTTP/1.1" 200 18410 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:06:35:27 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 4716 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +38.37.45.192 - - [10/Feb/2015:06:40:30 -0800] "GET / HTTP/1.1" 200 6329 "http://www.waxy.org/links/" "Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +185.105.126.184 - - [10/Feb/2015:06:42:20 -0800] "GET /images/Machine.jpg HTTP/1.1" 200 90402 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +3.10.154.192 - - [10/Feb/2015:06:43:26 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.0.0.3000 Chrome/35.0.1849.0 Safari/537.36" "www.templeos.org" +3.10.154.192 - - [10/Feb/2015:06:43:32 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "MxAgent" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:06:44:45 -0800] "GET /Wb/Adam/Utils/Grep.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +69.27.5.233 - - [10/Feb/2015:06:46:21 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://doska-vsem.ru/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)" "www.templeos.org" +69.27.5.233 - - [10/Feb/2015:06:46:22 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://doska-vsem.ru/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)" "www.templeos.org" +69.27.5.233 - - [10/Feb/2015:06:46:23 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://doska-vsem.ru/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)" "www.templeos.org" +223.88.111.105 - - [10/Feb/2015:06:47:10 -0800] "GET /Wb/Home/Wb2/Files HTTP/1.1" 301 105 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +223.88.111.105 - - [10/Feb/2015:06:47:10 -0800] "GET /Wb/ HTTP/1.1" 200 5158 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +70.246.47.16 - - [10/Feb/2015:06:49:42 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" "www.templeos.org" +222.103.136.117 - - [10/Feb/2015:06:51:15 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +223.88.111.136 - - [10/Feb/2015:06:51:44 -0800] "GET /Wb/PersonalNotes.html HTTP/1.1" 200 2556 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:06:53:57 -0800] "GET /Wb/Demo/OldSchool/MultiFileAOT/MD1.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +223.88.111.105 - - [10/Feb/2015:06:55:50 -0800] "GET /Wb/Home/ HTTP/1.1" 200 663 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +44.87.149.142 - - [10/Feb/2015:06:57:12 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:07:04:42 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +88.134.54.188 - - [10/Feb/2015:07:09:33 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/TempleOS.html" "Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +240.103.181.101 - - [10/Feb/2015:07:13:49 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:07:14:09 -0800] "GET /Wb/Demo/DolDoc/Data.html HTTP/1.1" 200 29295 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +9.138.195.119 - - [10/Feb/2015:07:14:58 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 11726 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +9.138.195.119 - - [10/Feb/2015:07:15:00 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.9 - - [10/Feb/2015:07:18:10 -0800] "GET /Wb/Accts/TS/TAD/Adam3eSys.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +127.77.121.236 - - [10/Feb/2015:07:19:24 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 11710 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B410 Safari/600.1.4" "www.templeos.org" +127.77.121.236 - - [10/Feb/2015:07:19:25 -0800] "GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 89 "-" "com.apple.WebKit.WebContent/10600.3.18 CFNetwork/720.2.4 Darwin/14.1.0 (x86_64)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:07:20:03 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru02.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +223.88.111.19 - - [10/Feb/2015:07:27:45 -0800] "GET /Wb/Demo/Graphics/Life.html HTTP/1.1" 200 46740 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +88.85.8.84 - - [10/Feb/2015:07:30:45 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "http://motherboard.vice.com/read/gods-lonely-programmer" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +16.21.117.141 - - [10/Feb/2015:07:32:31 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +254.22.12.199 - - [10/Feb/2015:07:35:48 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +3.169.79.157 - - [10/Feb/2015:07:36:02 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +202.176.251.249 - - [10/Feb/2015:07:36:36 -0800] "GET /Wb/Home/Wb2/Files/Words/Chess.html HTTP/1.1" 200 3015 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +254.22.12.199 - - [10/Feb/2015:07:37:59 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:07:37:59 -0800] "GET /Wb/Doc/StandBy.html HTTP/1.1" 200 4208 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:07:38:00 -0800] "GET /Wb/Adam/DolDoc/DocCtrlL.html HTTP/1.1" 200 654379 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +3.169.79.157 - - [10/Feb/2015:07:38:47 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +3.169.79.157 - - [10/Feb/2015:07:40:01 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +136.112.172.187 - - [10/Feb/2015:07:43:06 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0 Iceweasel/34.0" "templeos.org" +58.71.218.57 - - [10/Feb/2015:07:43:11 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:07:44:59 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +108.75.63.169 - - [10/Feb/2015:07:50:57 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/Wb/Accts/TS/Wb2/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5" "www.templeos.org" +27.210.37.110 - - [10/Feb/2015:07:52:35 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.110 - - [10/Feb/2015:07:52:35 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.110 - - [10/Feb/2015:07:52:35 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +26.79.208.169 - - [10/Feb/2015:08:01:09 -0800] "GET / HTTP/1.1" 200 6345 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +26.79.208.169 - - [10/Feb/2015:08:01:09 -0800] "GET / HTTP/1.1" 200 6345 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +193.84.229.200 - - [10/Feb/2015:08:02:51 -0800] "GET /Wb/Demo/Lectures/MiniCompiler.html HTTP/1.1" 200 109896 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:08:04:48 -0800] "GET /logs/ HTTP/1.1" 200 5327 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +27.55.241.229 - - [10/Feb/2015:08:10:17 -0800] "GET /Wb/Misc/Bible.html HTTP/1.1" 200 6439170 "http://www.templeos.org/Wb/Adam/God/HSNotes.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +155.156.107.146 - - [10/Feb/2015:08:16:08 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.fi/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=xS7aVI6MIYnjywPWtIDADA&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85464276,d.bGQ" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +155.156.107.146 - - [10/Feb/2015:08:16:11 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +44.208.145.23 - - [10/Feb/2015:08:17:51 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +44.208.145.23 - - [10/Feb/2015:08:17:54 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +69.200.5.39 - - [10/Feb/2015:08:18:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.4; D5803 Build/23.0.1.A.5.77) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +44.208.145.23 - - [10/Feb/2015:08:18:57 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12685 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:08:28:16 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +199.55.138.47 - - [10/Feb/2015:08:48:17 -0800] "GET /Wb/Home/Wb2/Files/ HTTP/1.1" 200 5204 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +254.67.161.241 - - [10/Feb/2015:08:51:05 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/05/Rant140501.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org" +254.67.161.241 - - [10/Feb/2015:08:51:06 -0800] "GET /files/BIBLE.TXT HTTP/1.1" 200 655360 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org" +254.67.161.241 - - [10/Feb/2015:08:51:08 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/05/Rant140501.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org" +254.67.161.241 - - [10/Feb/2015:08:51:08 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/05/Rant140501.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org" +254.67.161.241 - - [10/Feb/2015:08:51:09 -0800] "GET /files/BIBLE.TXT HTTP/1.1" 200 589824 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org" +52.53.176.0 - - [10/Feb/2015:08:57:04 -0800] "GET /Wb/Demo/Games/Coach.CPP.Z HTTP/1.1" 200 2714 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +70.185.231.76 - - [10/Feb/2015:08:58:22 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:09:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +216.240.124.161 - - [10/Feb/2015:09:04:03 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +151.95.224.209 - - [10/Feb/2015:09:04:55 -0800] "HEAD /TempleOSCD.ISO HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +16.160.35.108 - - [10/Feb/2015:09:08:19 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +16.160.35.108 - - [10/Feb/2015:09:08:20 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +229.137.198.53 - - [10/Feb/2015:09:09:32 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +70.185.231.76 - - [10/Feb/2015:09:11:15 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.55.71.47 - - [10/Feb/2015:09:11:16 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "http://www.templeos.org/Wb/Doc/Charter.html" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" "www.templeos.org" +52.53.176.173 - - [10/Feb/2015:09:12:03 -0800] "GET /Wb/Apps/Psalmody/Examples/exiled.CPP.Z HTTP/1.1" 200 1041 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +52.53.176.46 - - [10/Feb/2015:09:12:47 -0800] "GET /Wb/Apps/X-Caliber/X-Caliber.html HTTP/1.1" 200 615592 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +189.30.24.0 - - [10/Feb/2015:09:13:02 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2" "www.templeos.org" +34.222.78.124 - - [10/Feb/2015:09:13:49 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +151.95.224.209 - - [10/Feb/2015:09:14:33 -0800] "HEAD /files/ASU_Transcripts.pdf HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:09:14:35 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:09:14:37 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 28254 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +119.225.240.30 - - [10/Feb/2015:09:15:05 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +189.49.255.74 - - [10/Feb/2015:09:16:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2" "www.templeos.org" +124.43.180.237 - - [10/Feb/2015:09:19:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +27.24.108.122 - - [10/Feb/2015:09:19:51 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +240.227.157.174 - - [10/Feb/2015:09:21:03 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (Linux; Android 4.4.4; SM-N900V Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36" "www.templeos.org" +240.227.157.174 - - [10/Feb/2015:09:23:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Android; Mobile; rv:36.0) Gecko/36.0 Firefox/36.0" "www.templeos.org" +240.227.157.174 - - [10/Feb/2015:09:23:24 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Android; Mobile; rv:36.0) Gecko/36.0 Firefox/36.0" "www.templeos.org" +177.68.132.63 - - [10/Feb/2015:09:26:00 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +177.68.132.63 - - [10/Feb/2015:09:26:01 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.179.215.31 - - [10/Feb/2015:09:26:44 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +22.85.88.69 - - [10/Feb/2015:09:26:46 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +22.85.88.69 - - [10/Feb/2015:09:26:55 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +61.172.105.199 - - [10/Feb/2015:09:28:25 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Googlebot (gocrawl v0.4)" "templeos.org" +131.162.99.185 - - [10/Feb/2015:09:28:58 -0800] "GET /test/wp-admin/ HTTP/1.1" 404 89 "-" "-" "templeos.org" +216.215.19.146 - - [10/Feb/2015:09:30:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +124.247.77.35 - - [10/Feb/2015:09:30:34 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +27.210.37.166 - - [10/Feb/2015:09:31:38 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +222.179.215.31 - - [10/Feb/2015:09:33:46 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +222.179.215.31 - - [10/Feb/2015:09:33:56 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +12.137.124.46 - - [10/Feb/2015:09:34:30 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 65536 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +52.53.176.46 - - [10/Feb/2015:09:37:10 -0800] "GET /Wb/Apps/Psalmody/Examples/compassions.CPP.Z HTTP/1.1" 200 485 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +49.113.231.145 - - [10/Feb/2015:09:37:18 -0800] "GET /wordpress/wp-admin/ HTTP/1.1" 404 89 "-" "-" "templeos.org" +196.243.153.174 - - [10/Feb/2015:09:38:19 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +247.15.200.231 - - [10/Feb/2015:09:39:18 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +247.15.200.231 - - [10/Feb/2015:09:39:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +44.172.35.254 - - [10/Feb/2015:09:43:14 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +44.172.35.254 - - [10/Feb/2015:09:43:53 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +130.75.162.176 - - [10/Feb/2015:09:45:41 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +130.75.162.176 - - [10/Feb/2015:09:45:42 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +15.231.164.215 - - [10/Feb/2015:09:51:15 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:09:51:35 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 28840 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +151.251.18.31 - - [10/Feb/2015:09:52:37 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +182.87.47.160 - - [10/Feb/2015:09:52:52 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +182.87.47.160 - - [10/Feb/2015:09:52:54 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +182.87.47.160 - - [10/Feb/2015:09:53:23 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +182.87.47.160 - - [10/Feb/2015:09:53:28 -0800] "GET /Wb/Doc/Features.html HTTP/1.1" 200 8597 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +112.129.154.164 - - [10/Feb/2015:09:53:47 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0" "www.templeos.org" +112.129.154.164 - - [10/Feb/2015:09:53:47 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0" "www.templeos.org" +112.129.154.164 - - [10/Feb/2015:09:54:42 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "http://www.templeos.org/Wb/Doc/AboutTempleOS.html" "Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0" "www.templeos.org" +112.129.154.164 - - [10/Feb/2015:09:56:19 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:09:57:53 -0800] "GET /Wb/Kernel/Dsk/Dsk1c.CPP.Z HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +136.179.22.32 - - [10/Feb/2015:10:00:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +232.74.241.219 - - [10/Feb/2015:10:01:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +127.173.116.46 - - [10/Feb/2015:10:01:59 -0800] "GET /old/wp-admin/ HTTP/1.1" 404 89 "-" "-" "templeos.org" +112.129.154.164 - - [10/Feb/2015:10:03:54 -0800] "GET /Wb/Demo/Graphics/Doodle.html HTTP/1.1" 200 24250 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0" "www.templeos.org" +127.33.79.31 - - [10/Feb/2015:10:06:51 -0800] "GET / HTTP/1.1" 200 6329 "-" "Opera/9.80 (Android; Opera Mini/7.6.40234/35.7194; U; pt) Presto/2.8.119 Version/11.10" "www.templeos.org" +103.171.233.63 - - [10/Feb/2015:10:08:45 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:10:08:46 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:10:08:53 -0800] "GET /Wb/Home/Wb2/LineRep.html HTTP/1.1" 200 110108 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +213.160.102.96 - - [10/Feb/2015:10:12:38 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +119.225.240.220 - - [10/Feb/2015:10:14:15 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +119.225.240.174 - - [10/Feb/2015:10:14:16 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +124.36.115.160 - - [10/Feb/2015:10:17:13 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +124.36.115.160 - - [10/Feb/2015:10:17:13 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +119.156.166.145 - - [10/Feb/2015:10:19:03 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +130.15.226.45 - - [10/Feb/2015:10:21:04 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org" +52.53.176.137 - - [10/Feb/2015:10:27:25 -0800] "GET /Wb/Apps/Psalmody/Examples/readier.CPP.Z HTTP/1.1" 200 348 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +136.232.213.50 - - [10/Feb/2015:10:33:47 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40265 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2301.0 Safari/537.36" "www.templeos.org" +136.232.213.50 - - [10/Feb/2015:10:34:11 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2301.0 Safari/537.36" "www.templeos.org" +222.211.142.20 - - [10/Feb/2015:10:37:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +70.137.95.233 - - [10/Feb/2015:10:38:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:10:40:06 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +164.19.71.62 - - [10/Feb/2015:10:40:39 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.pt/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=pFDaVPLDCIP6avbKgpAO&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=tqQQ0-CmDA4jWipvsf5l2Q&bvm=bv.85464276,d.d2s" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +164.19.71.62 - - [10/Feb/2015:10:40:41 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +254.174.215.3 - - [10/Feb/2015:10:42:29 -0800] "GET /Wb/Home/Wb2/Files/Text/Darwin.html HTTP/1.1" 200 1697615 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:10:43:50 -0800] "GET /Certs/virtual-notary-cert-randomnum-29070.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +164.19.71.62 - - [10/Feb/2015:10:44:46 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:10:45:11 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:10:46:03 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +222.45.217.173 - - [10/Feb/2015:10:57:19 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Google-HTTP-Java-Client/1.17.0-rc (gzip)" "www.templeos.org" +222.45.217.173 - - [10/Feb/2015:10:57:19 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Google-HTTP-Java-Client/1.17.0-rc (gzip)" "www.templeos.org" +116.166.229.105 - - [10/Feb/2015:10:57:20 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +14.152.228.242 - - [10/Feb/2015:10:57:20 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (TweetmemeBot/4.0; +http://datasift.com/bot.html) Gecko/20100101 Firefox/31.0" "www.templeos.org" +131.178.168.191 - - [10/Feb/2015:10:57:48 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +119.148.254.211 - - [10/Feb/2015:11:01:35 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36" "www.templeos.org" +129.66.239.159 - - [10/Feb/2015:11:01:55 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 32735 "-" "Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)" "www.templeos.org" +129.66.239.104 - - [10/Feb/2015:11:02:22 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140607.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)" "www.templeos.org" +129.66.239.18 - - [10/Feb/2015:11:02:36 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/01/Rant140129.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)" "www.templeos.org" +129.66.239.129 - - [10/Feb/2015:11:02:39 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/08/Rant140814.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)" "www.templeos.org" +112.129.154.164 - - [10/Feb/2015:11:03:31 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7102 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +112.129.154.164 - - [10/Feb/2015:11:03:31 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +116.166.229.105 - - [10/Feb/2015:11:03:32 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +116.166.229.105 - - [10/Feb/2015:11:03:33 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 32735 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +88.89.225.229 - - [10/Feb/2015:11:04:14 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +231.93.210.25 - - [10/Feb/2015:11:07:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +52.53.176.225 - - [10/Feb/2015:11:10:02 -0800] "GET /Wb/Apps/HolySpirit/HSNotes.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +203.191.130.197 - - [10/Feb/2015:11:11:25 -0800] "GET / HTTP/1.1" 200 6345 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +37.14.8.178 - - [10/Feb/2015:11:13:20 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:11:13:32 -0800] "GET /Wb/Apps/Psalmody/Examples/first.html HTTP/1.1" 200 30539 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +223.88.111.165 - - [10/Feb/2015:11:15:27 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:11:17:11 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +127.77.137.39 - - [10/Feb/2015:11:17:40 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +127.167.182.31 - - [10/Feb/2015:11:17:44 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7102 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.173 - - [10/Feb/2015:11:17:45 -0800] "GET /Wb/Demo/Graphics/PanText.CPP.Z HTTP/1.1" 200 234 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +127.77.137.39 - - [10/Feb/2015:11:17:47 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +119.225.240.88 - - [10/Feb/2015:11:18:33 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +39.252.113.221 - - [10/Feb/2015:11:18:40 -0800] "GET / HTTP/1.1" 200 6329 "-" "NetLyzer FastProbe" "www.templeos.org" +127.167.182.31 - - [10/Feb/2015:11:23:08 -0800] "GET /Wb/Doc/DemoIndex.html HTTP/1.1" 200 32945 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +127.167.182.31 - - [10/Feb/2015:11:23:25 -0800] "GET /Wb/Demo/Graphics/Speedline.html HTTP/1.1" 200 25142 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.53 - - [10/Feb/2015:11:23:39 -0800] "GET /Wb/Apps/Budget/Load.CPP.Z HTTP/1.1" 200 136 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:11:25:53 -0800] "GET /beacon.nist.gov/rest/record/1417188660 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:11:26:06 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:11:26:10 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +112.201.223.166 - - [10/Feb/2015:11:26:49 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +172.177.247.196 - - [10/Feb/2015:11:29:01 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +222.58.71.125 - - [10/Feb/2015:11:31:16 -0800] "GET /Wb/Home/Wb2/Files/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.58.71.125 - - [10/Feb/2015:11:31:59 -0800] "GET /Wb/Home/Wb2/Files/Text/ HTTP/1.1" 200 5751 "http://www.templeos.org/Wb/Home/Wb2/Files/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.58.71.125 - - [10/Feb/2015:11:32:03 -0800] "GET /Wb/Home/Wb2/Files/VanGogh/ HTTP/1.1" 200 1007 "http://www.templeos.org/Wb/Home/Wb2/Files/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.58.71.125 - - [10/Feb/2015:11:32:55 -0800] "GET /Wb/Kernel/Dsk/FileSysRedSea.html HTTP/1.1" 200 342512 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.58.71.125 - - [10/Feb/2015:11:33:41 -0800] "GET /Wb/Adam/Boot/DskCDDVD.html HTTP/1.1" 200 360031 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.178.105.52 - - [10/Feb/2015:11:34:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +177.106.234.227 - - [10/Feb/2015:11:35:02 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:11:35:37 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.53.176.247 - - [10/Feb/2015:11:37:26 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses22.html HTTP/1.1" 200 3461 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:11:39:53 -0800] "GET /Wb/Linux/ HTTP/1.1" 200 805 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +151.65.20.238 - - [10/Feb/2015:11:41:15 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.51.6.152 - - [10/Feb/2015:11:42:43 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)" "www.templeos.org" +232.70.57.197 - - [10/Feb/2015:11:49:29 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +232.70.57.197 - - [10/Feb/2015:11:49:29 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +225.163.244.45 - - [10/Feb/2015:11:50:06 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 iPad4,1/J71AP Zite/2.6" "www.templeos.org" +202.176.251.85 - - [10/Feb/2015:11:53:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" "www.templeos.org" +56.76.208.168 - - [10/Feb/2015:11:59:16 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +56.76.208.168 - - [10/Feb/2015:11:59:20 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 37263 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:12:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +232.70.57.249 - - [10/Feb/2015:12:01:17 -0800] "GET /Wb/Home/Wb2/Files HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +232.70.57.249 - - [10/Feb/2015:12:01:18 -0800] "GET /Wb/Home/Wb2/Files/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.51.144.36 - - [10/Feb/2015:12:01:59 -0800] "GET /TempleOS.html HTTP/1.1" 200 12685 "-" "SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +130.19.136.192 - - [10/Feb/2015:12:04:40 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +130.19.136.192 - - [10/Feb/2015:12:04:40 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +130.19.136.192 - - [10/Feb/2015:12:04:42 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:12:04:44 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:12:05:15 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:12:05:16 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 524288 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +189.3.229.39 - - [10/Feb/2015:12:05:21 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +68.145.44.153 - - [10/Feb/2015:12:10:44 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +34.222.78.124 - - [10/Feb/2015:12:13:51 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +98.32.57.59 - - [10/Feb/2015:12:15:10 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "http://govome.inspsearch.com/search/web?fcoid=417&q=%3Ca%20href%3D%22http%3A%2F%2Fdownload.driverguide.com%2Fdriver%2FM2V-MX%2BSE%2FASUS%2Fd1200946.html%22%3EASUS%20VIA%20Chrome9%20HC%20IGP%20WDDM%20Driver%3C%2Fa%3E" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +70.97.199.206 - - [10/Feb/2015:12:18:11 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +177.142.201.156 - - [10/Feb/2015:12:20:30 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +177.142.201.156 - - [10/Feb/2015:12:20:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +14.17.121.145 - - [10/Feb/2015:12:23:47 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.es/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +14.17.121.145 - - [10/Feb/2015:12:24:08 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 37247 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +143.80.70.110 - - [10/Feb/2015:12:24:40 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +70.155.59.93 - - [10/Feb/2015:12:25:52 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:12:26:04 -0800] "GET /Wb/Apps/Psalmody/Examples/abiding.html HTTP/1.1" 200 40324 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:12:26:04 -0800] "GET /Wb/Accts/TS/Wb2/AfterEgypt02.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +226.127.32.109 - - [10/Feb/2015:12:26:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +50.246.225.191 - - [10/Feb/2015:12:27:13 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +104.133.41.223 - - [10/Feb/2015:12:28:19 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:12:29:13 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +199.138.47.61 - - [10/Feb/2015:12:30:01 -0800] "GET /Wb/Home/Wb2/Files/Text/Hamlet.html HTTP/1.1" 200 328768 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org" +199.138.47.61 - - [10/Feb/2015:12:30:01 -0800] "GET /Wb/Home/Wb2/Files/Text/Talmud.html HTTP/1.1" 200 458752 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org" +254.187.174.234 - - [10/Feb/2015:12:34:23 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +112.77.203.64 - - [10/Feb/2015:12:35:55 -0800] "GET /Wb/Doc/TrivialSolutions.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +215.73.32.178 - - [10/Feb/2015:12:38:07 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" "www.templeos.org" +199.253.77.40 - - [10/Feb/2015:12:40:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:12:43:17 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +78.5.254.186 - - [10/Feb/2015:12:45:31 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +78.5.254.186 - - [10/Feb/2015:12:45:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +101.148.16.89 - - [10/Feb/2015:12:46:01 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +101.148.16.89 - - [10/Feb/2015:12:46:02 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +27.210.37.110 - - [10/Feb/2015:12:46:20 -0800] "GET / HTTP/1.1" 200 6329 "-" "Twitterbot/1.0" "www.templeos.org" +219.244.215.127 - - [10/Feb/2015:12:49:03 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +219.244.215.127 - - [10/Feb/2015:12:49:03 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +119.225.151.14 - - [10/Feb/2015:12:50:20 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +68.106.199.42 - - [10/Feb/2015:12:52:40 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +70.8.165.221 - - [10/Feb/2015:12:53:48 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +70.8.165.221 - - [10/Feb/2015:12:53:51 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +70.8.165.221 - - [10/Feb/2015:12:53:56 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +70.8.165.221 - - [10/Feb/2015:12:54:02 -0800] "GET /Wb/Home/Wb2/Files HTTP/1.1" 301 105 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +70.8.165.221 - - [10/Feb/2015:12:54:18 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 40133 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +124.89.143.170 - - [10/Feb/2015:12:57:51 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +124.89.143.170 - - [10/Feb/2015:12:57:52 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +143.53.212.203 - - [10/Feb/2015:12:58:57 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.2.0" "templeos.org" +143.53.212.203 - - [10/Feb/2015:12:59:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.2.0" "www.templeos.org" +52.53.176.179 - - [10/Feb/2015:12:59:51 -0800] "GET /Wb/Kernel/Dsk/DskAddDev.html HTTP/1.1" 200 180909 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +74.51.144.148 - - [10/Feb/2015:12:59:55 -0800] "GET /Wb/Adam/WordStat/WSMain.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:13:00:44 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 41279 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +74.51.214.128 - - [10/Feb/2015:13:02:01 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/40.0.2214.69 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:13:05:03 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/08/Img004.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +69.123.87.197 - - [10/Feb/2015:13:07:06 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:35.0) Gecko/20100101 Firefox/35.0 Cyberfox/35.0.1" "www.templeos.org" +101.209.72.155 - - [10/Feb/2015:13:10:28 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.se/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=v3PaVNnvEMq7ygOL74HQBg&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85761416,d.bGQ" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:13:15:03 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +27.210.37.158 - - [10/Feb/2015:13:19:36 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +223.88.111.105 - - [10/Feb/2015:13:21:21 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/02/Rant140204.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +56.101.167.69 - - [10/Feb/2015:13:22:47 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +56.101.167.69 - - [10/Feb/2015:13:23:14 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +139.22.35.40 - - [10/Feb/2015:13:23:27 -0800] "GET /images/Machine.jpg HTTP/1.1" 200 90402 "-" "Mozilla/5.0 (compatible; Fetcher/0.1)" "templeos.org" +164.123.175.192 - - [10/Feb/2015:13:23:36 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16" "www.templeos.org" +61.158.77.223 - - [10/Feb/2015:13:25:36 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "www.templeos.org" +215.73.32.178 - - [10/Feb/2015:13:26:50 -0800] "GET /images/Machine.jpg HTTP/1.1" 200 90402 "http://motherboard.vice.com/read/gods-lonely-programmer" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" "templeos.org" +69.86.47.26 - - [10/Feb/2015:13:31:12 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "www.templeos.org" +69.86.47.26 - - [10/Feb/2015:13:31:12 -0800] "GET /Wb/Home/Wb2/Imgs/MenuV0104.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "www.templeos.org" +74.51.200.50 - - [10/Feb/2015:13:32:04 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +98.34.1.98 - - [10/Feb/2015:13:32:53 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:13:33:27 -0800] "GET /Wb/DoOnce.html HTTP/1.1" 200 15334 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +202.176.251.175 - - [10/Feb/2015:13:34:05 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses35.html HTTP/1.1" 200 2972 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:13:41:50 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 50958 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.53.176.137 - - [10/Feb/2015:13:44:27 -0800] "GET /files/?D=A HTTP/1.1" 200 1522 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +52.81.208.207 - - [10/Feb/2015:13:45:31 -0800] "GET /Wb/Adam/Gr/GrPrimatives.html HTTP/1.1" 200 743387 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +130.158.66.124 - - [10/Feb/2015:13:47:09 -0800] "GET /files/BIBLE.TXT HTTP/1.1" 200 4345143 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36" "www.templeos.org" +150.176.164.55 - - [10/Feb/2015:13:47:55 -0800] "GET /Wb/Demo/Graphics/CharGraphics.html HTTP/1.1" 200 15754 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +150.176.164.55 - - [10/Feb/2015:13:51:30 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +150.176.164.55 - - [10/Feb/2015:13:51:58 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +210.63.49.147 - - [10/Feb/2015:13:53:23 -0800] "GET /test/wp-admin/ HTTP/1.1" 404 89 "-" "-" "templeos.org" +131.8.134.171 - - [10/Feb/2015:13:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +61.66.254.186 - - [10/Feb/2015:13:55:31 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=S37aVLKPE4X9oATSs4JI&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85464276,d.cGU" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/7.1.2 Safari/537.85.11" "www.templeos.org" +215.111.233.124 - - [10/Feb/2015:13:55:42 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +216.23.33.255 - - [10/Feb/2015:13:57:24 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "http://www.charlesholbrow.com/awareness" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +216.23.33.255 - - [10/Feb/2015:13:57:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +120.23.76.107 - - [10/Feb/2015:13:57:34 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +120.23.76.107 - - [10/Feb/2015:13:57:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +120.23.76.107 - - [10/Feb/2015:13:58:00 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses01.html HTTP/1.1" 200 2935 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +38.151.69.231 - - [10/Feb/2015:13:58:48 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +26.170.115.204 - - [10/Feb/2015:14:00:47 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +26.170.115.204 - - [10/Feb/2015:14:00:57 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +89.210.212.192 - - [10/Feb/2015:14:01:15 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0217A.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7" "www.templeos.org" +89.210.212.192 - - [10/Feb/2015:14:01:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7" "templeos.org" +14.43.168.152 - - [10/Feb/2015:14:02:37 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://taihouse.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +146.235.178.58 - - [10/Feb/2015:14:02:37 -0800] "GET /wordpress/wp-admin/ HTTP/1.1" 404 89 "-" "-" "templeos.org" +14.43.168.152 - - [10/Feb/2015:14:02:38 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://taihouse.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +150.176.164.55 - - [10/Feb/2015:14:07:12 -0800] "GET /Wb/Doc/Widget.html HTTP/1.1" 200 7664 "http://www.templeos.org/Wb/Doc/DolDocOverview.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +69.171.205.105 - - [10/Feb/2015:14:14:13 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B410 Safari/600.1.4" "www.templeos.org" +139.22.35.40 - - [10/Feb/2015:14:14:14 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; Fetcher/0.1)" "www.templeos.org" +189.135.54.152 - - [10/Feb/2015:14:16:15 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +189.135.54.152 - - [10/Feb/2015:14:16:15 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/03/Rant140309.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:14:17:37 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Rant131220.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:14:17:37 -0800] "GET /Wb/Adam/WordStat/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:14:17:37 -0800] "GET /Wb/Compiler/Assembler.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:14:17:37 -0800] "GET /Wb/Demo/AcctExample/TSDistro.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +131.225.94.254 - - [10/Feb/2015:14:23:26 -0800] "GET / HTTP/1.1" 200 6329 "-" "=Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" "templeos.org" +104.108.59.13 - - [10/Feb/2015:14:28:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +104.108.59.13 - - [10/Feb/2015:14:28:41 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.247 - - [10/Feb/2015:14:30:44 -0800] "GET /Wb/Adam/Gr/GrPalette.html HTTP/1.1" 200 57607 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +119.225.151.56 - - [10/Feb/2015:14:34:03 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +52.53.176.32 - - [10/Feb/2015:14:36:53 -0800] "GET /Wb/Kernel/KHashA.html HTTP/1.1" 200 122385 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +136.15.151.247 - - [10/Feb/2015:14:44:01 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:14:49:36 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 63104 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:14:53:20 -0800] "GET /logs/ HTTP/1.1" 200 5327 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +129.226.244.66 - - [10/Feb/2015:14:58:50 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +228.48.95.108 - - [10/Feb/2015:14:59:18 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Page2RSS/0.7; +http://page2rss.com/)" "www.templeos.org" +139.22.35.40 - - [10/Feb/2015:14:59:58 -0800] "GET /images/Machine.jpg HTTP/1.1" 200 90402 "-" "Mozilla/5.0 (compatible; Fetcher/0.1)" "templeos.org" +131.132.85.243 - - [10/Feb/2015:15:02:26 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "templeos.org" +199.254.66.187 - - [10/Feb/2015:15:03:04 -0800] "GET / HTTP/1.1" 200 6329 "-" "-" "www.templeos.org" +182.76.177.172 - - [10/Feb/2015:15:04:07 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +182.76.177.172 - - [10/Feb/2015:15:04:08 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:15:04:18 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 69133 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:15:05:17 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +223.88.111.165 - - [10/Feb/2015:15:06:34 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +223.88.111.105 - - [10/Feb/2015:15:07:08 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +70.17.181.85 - - [10/Feb/2015:15:10:58 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +223.88.111.165 - - [10/Feb/2015:15:11:37 -0800] "GET /Wb/Apps/X-Caliber/XCCtrls.html HTTP/1.1" 200 120525 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +223.88.111.165 - - [10/Feb/2015:15:11:37 -0800] "GET /Wb/Demo/Games/Wenceslas.html HTTP/1.1" 200 256699 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +70.17.181.85 - - [10/Feb/2015:15:12:01 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 9961472 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +223.88.111.165 - - [10/Feb/2015:15:13:00 -0800] "GET /Wb/Apps/ToTheFront/AIs/Human.html HTTP/1.1" 200 81482 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +70.17.181.85 - - [10/Feb/2015:15:17:54 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 8192000 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +240.142.205.8 - - [10/Feb/2015:15:17:58 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3" "www.templeos.org" +74.51.133.5 - - [10/Feb/2015:15:20:09 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "templeos.org" +70.17.181.85 - - [10/Feb/2015:15:20:18 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 10027008 "-" "Wget/1.16.1 (linux-gnu)" "www.templeos.org" +175.223.248.74 - - [10/Feb/2015:15:21:10 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "https://news.ycombinator.com/" "Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +175.223.248.74 - - [10/Feb/2015:15:21:20 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +89.34.167.176 - - [10/Feb/2015:15:22:31 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +89.34.167.176 - - [10/Feb/2015:15:23:14 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +217.240.134.177 - - [10/Feb/2015:15:24:29 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +217.240.134.177 - - [10/Feb/2015:15:24:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:15:25:27 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 75147 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +202.176.251.87 - - [10/Feb/2015:15:27:12 -0800] "GET /Wb/Apps/AfterEgypt/ HTTP/1.1" 200 4643 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +89.34.167.176 - - [10/Feb/2015:15:27:42 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +70.17.181.85 - - [10/Feb/2015:15:27:48 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +89.34.167.176 - - [10/Feb/2015:15:28:31 -0800] "GET /Wb/Doc/Mysteries.html HTTP/1.1" 200 18410 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +89.34.167.176 - - [10/Feb/2015:15:29:38 -0800] "GET /Wb/Apps/TimeClock/Install.html HTTP/1.1" 200 8275 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +89.34.167.176 - - [10/Feb/2015:15:30:00 -0800] "GET /Wb/Home/Wb2/SymsAlpha.html HTTP/1.1" 200 1229091 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +14.43.168.152 - - [10/Feb/2015:15:32:24 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://wallpapers.red/" "Mozilla/5.0 (Windows NT 5.1; U; en) Opera 8.00" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:15:39:19 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 78853 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:15:41:07 -0800] "GET /Wb/Demo/Games/Stadium/StadiumGen.html HTTP/1.1" 200 16502 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +129.226.244.66 - - [10/Feb/2015:15:42:33 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 983040 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +164.254.241.127 - - [10/Feb/2015:15:44:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +119.225.240.14 - - [10/Feb/2015:15:45:23 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0216A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +78.5.254.186 - - [10/Feb/2015:15:45:50 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +18.1.147.164 - - [10/Feb/2015:15:48:08 -0800] "GET / HTTP/1.1" 200 6329 "http://www.reddit.com/comments/1aqdxn" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org" +18.1.147.164 - - [10/Feb/2015:15:48:09 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org" +18.1.147.164 - - [10/Feb/2015:15:48:32 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:15:52:49 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses66.html HTTP/1.1" 200 3038 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:15:53:55 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Rant131220.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:15:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +202.176.250.100 - - [10/Feb/2015:15:57:39 -0800] "GET /Wb/Demo/Games/BomberGolf.html HTTP/1.1" 200 94926 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:15:58:33 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 84229 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +161.0.62.51 - - [10/Feb/2015:16:15:22 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +161.0.62.51 - - [10/Feb/2015:16:15:27 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +88.41.247.103 - - [10/Feb/2015:16:16:59 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +69.206.243.192 - - [10/Feb/2015:16:21:17 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Linux; U; Android 4.4.4; pl-pl; GT-I9505 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.0.1" "www.templeos.org" +52.53.176.53 - - [10/Feb/2015:16:26:28 -0800] "GET /Wb/Kernel/MemC.html HTTP/1.1" 200 173397 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +202.176.251.67 - - [10/Feb/2015:16:33:00 -0800] "GET /Wb/Adam/Utils/S2T.html HTTP/1.1" 200 38162 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +52.53.176.179 - - [10/Feb/2015:16:39:02 -0800] "GET /Wb/Adam/DolDoc/DocInit.CPP.Z HTTP/1.1" 200 1786 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +141.23.85.107 - - [10/Feb/2015:16:43:09 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +192.93.245.183 - - [10/Feb/2015:16:46:14 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:16:46:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +150.244.103.30 - - [10/Feb/2015:16:58:13 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 iPad4,5/J86AP Zite/2.6" "www.templeos.org" +150.244.103.30 - - [10/Feb/2015:16:58:19 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 iPad4,5/J86AP Zite/2.6" "www.templeos.org" +119.225.240.14 - - [10/Feb/2015:16:59:20 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:17:00:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +112.77.76.210 - - [10/Feb/2015:17:02:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +74.51.214.154 - - [10/Feb/2015:17:03:51 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +216.35.151.184 - - [10/Feb/2015:17:04:01 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +202.176.250.141 - - [10/Feb/2015:17:04:39 -0800] "GET /Wb/Demo/Games/Digits.html HTTP/1.1" 200 41458 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +216.35.151.184 - - [10/Feb/2015:17:04:41 -0800] "GET /Wb/Demo/Graphics/PredatorPrey.html HTTP/1.1" 200 38295 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +216.35.151.184 - - [10/Feb/2015:17:04:47 -0800] "GET /Wb/Demo/Print.html HTTP/1.1" 200 14425 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:17:08:29 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:17:10:00 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/04/Rant140402.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:17:10:00 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141008.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +129.226.244.66 - - [10/Feb/2015:17:13:28 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/08/Rant140815.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +129.226.244.66 - - [10/Feb/2015:17:13:28 -0800] "GET /Wb/Apps/Psalmody/Examples/partake.html HTTP/1.1" 200 18418 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +92.176.205.236 - - [10/Feb/2015:17:16:00 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:17:27:07 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 111157 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +108.25.30.75 - - [10/Feb/2015:17:27:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +108.25.30.75 - - [10/Feb/2015:17:27:10 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +108.25.30.75 - - [10/Feb/2015:17:30:17 -0800] "GET /Wb/Home/Wb2/Files/ HTTP/1.1" 200 5204 "http://t.co/9n6tiOcMYh" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +108.25.30.75 - - [10/Feb/2015:17:30:37 -0800] "GET /Wb/Home/Wb2/Files/DocIDE.CPP.Z HTTP/1.1" 200 6028 "http://www.templeos.org/Wb/Home/Wb2/Files/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +189.40.12.106 - - [10/Feb/2015:17:35:40 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +202.176.251.73 - - [10/Feb/2015:17:37:54 -0800] "GET /Wb/Adam/DolDoc/DocNew.html HTTP/1.1" 200 448384 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:17:39:45 -0800] "GET /beacon.nist.gov/rest/record/1416785100 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +74.217.44.156 - - [10/Feb/2015:17:44:46 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:17:45:07 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +131.171.89.12 - - [10/Feb/2015:17:47:31 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +16.39.85.109 - - [10/Feb/2015:17:48:46 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +224.200.159.122 - - [10/Feb/2015:17:49:54 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +189.217.254.14 - - [10/Feb/2015:17:50:08 -0800] "GET /Wb/Doc/Boot.html HTTP/1.1" 200 10347 "-" "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" "www.templeos.org" +202.176.250.211 - - [10/Feb/2015:17:53:27 -0800] "GET /Wb/Misc/Tour/TourA.html HTTP/1.1" 200 16712 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +52.53.176.129 - - [10/Feb/2015:17:55:58 -0800] "GET /Wb/Demo/WebLogExample/?D=A HTTP/1.1" 200 1738 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +130.98.70.92 - - [10/Feb/2015:17:57:00 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "http://www.templeos.org/Wb/Doc/Charter.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org" +222.109.173.72 - - [10/Feb/2015:17:58:35 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24" "www.templeos.org" +3.193.170.161 - - [10/Feb/2015:17:59:06 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:18:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +52.53.176.173 - - [10/Feb/2015:18:02:51 -0800] "GET /Wb/Kernel/KMathB.html HTTP/1.1" 200 65406 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:18:05:22 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +214.200.126.200 - - [10/Feb/2015:18:11:14 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 521)" "www.templeos.org" +34.222.78.124 - - [10/Feb/2015:18:14:02 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +119.225.240.220 - - [10/Feb/2015:18:14:33 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +112.130.98.166 - - [10/Feb/2015:18:16:09 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +223.88.111.105 - - [10/Feb/2015:18:16:13 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +18.204.16.36 - - [10/Feb/2015:18:16:54 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; FreeBSD amd64; rv:32.0) Gecko/20100101 Firefox/32.0" "www.templeos.org" +202.176.250.16 - - [10/Feb/2015:18:18:53 -0800] "GET /Wb/Misc/Tour/?M=A HTTP/1.1" 200 3892 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +70.255.9.33 - - [10/Feb/2015:18:19:08 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org" +70.255.9.33 - - [10/Feb/2015:18:19:09 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org" +150.145.20.251 - - [10/Feb/2015:18:20:20 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 458752 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100317 SUSE/3.5.9-0.1.1 Firefox/3.5.9" "www.templeos.org" +226.54.117.18 - - [10/Feb/2015:18:20:47 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +74.217.89.186 - - [10/Feb/2015:18:22:58 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53" "www.templeos.org" +67.204.69.39 - - [10/Feb/2015:18:23:45 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "http://go.mail.ru/search?gp=lp5yasy&q=%D0%B3%D0%B4%D0%B5+%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C+PCI%5CVEN_1022%26DEV_7807%26SUBSYS_059F1025" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1709.117 Amigo/32.0.1709.117 MRCHROME SOC Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:18:32:07 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +223.88.111.165 - - [10/Feb/2015:18:33:17 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +179.43.181.34 - - [10/Feb/2015:18:33:48 -0800] "GET /Wb/Kernel/KStart.html HTTP/1.1" 200 195552 "http://www.templeos.org/Wb/Kernel/KStart.html" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); 360Spider(compatible; HaosouSpider; http://www.haosou.com/help/help_3_2.html)" "www.templeos.org" +112.130.98.166 - - [10/Feb/2015:18:40:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +111.7.18.116 - - [10/Feb/2015:18:41:08 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +112.77.76.210 - - [10/Feb/2015:18:43:42 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +112.77.76.210 - - [10/Feb/2015:18:46:20 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +228.191.84.89 - - [10/Feb/2015:18:49:49 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/Wb/Home/Wb2/Videos.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 YaBrowser/14.10.2062.12061 Safari/537.36" "www.templeos.org" +82.223.38.239 - - [10/Feb/2015:18:52:38 -0800] "GET /Wb/Home/Wb2/Files/Text/Paradise.html HTTP/1.1" 200 704139 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +159.151.172.112 - - [10/Feb/2015:18:54:49 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +159.151.172.112 - - [10/Feb/2015:18:54:51 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:18:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +128.196.194.1 - - [10/Feb/2015:18:58:04 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +128.196.194.1 - - [10/Feb/2015:18:58:10 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +128.196.194.1 - - [10/Feb/2015:18:59:31 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +202.176.251.246 - - [10/Feb/2015:19:08:49 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses07.html HTTP/1.1" 200 3377 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +222.248.144.106 - - [10/Feb/2015:19:10:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +128.196.194.1 - - [10/Feb/2015:19:12:04 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.179 - - [10/Feb/2015:19:19:38 -0800] "GET /Wb/Demo/DolDoc/CallBack.html HTTP/1.1" 200 37017 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +126.106.40.164 - - [10/Feb/2015:19:21:42 -0800] "GET / HTTP/1.1" 200 6329 "http://www.losethos.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +126.106.40.164 - - [10/Feb/2015:19:21:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +126.106.40.164 - - [10/Feb/2015:19:22:16 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +27.241.156.119 - - [10/Feb/2015:19:26:35 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:19:26:58 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:19:28:39 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 136360 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +190.241.251.38 - - [10/Feb/2015:19:29:25 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)" "www.templeos.org" +190.241.251.38 - - [10/Feb/2015:19:29:25 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)" "www.templeos.org" +190.241.251.38 - - [10/Feb/2015:19:29:26 -0800] "GET /apple-touch-icon-57x57.png HTTP/1.1" 404 89 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)" "www.templeos.org" +190.241.251.38 - - [10/Feb/2015:19:29:26 -0800] "GET /apple-touch-icon-72x72.png HTTP/1.1" 404 89 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:19:30:24 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 136828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +223.88.111.136 - - [10/Feb/2015:19:30:36 -0800] "GET /Wb/Home/Wb2/SymsAlpha.html HTTP/1.1" 200 1048576 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +14.39.142.36 - - [10/Feb/2015:19:34:05 -0800] "GET /wp-admin/ HTTP/1.1" 404 89 "-" "-" "templeos.org" +129.226.244.66 - - [10/Feb/2015:19:36:17 -0800] "GET /Wb/Home/TOSCfg.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:19:38:05 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 137488 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +214.200.176.89 - - [10/Feb/2015:19:42:52 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4" "www.templeos.org" +215.120.48.102 - - [10/Feb/2015:19:44:48 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +215.120.48.236 - - [10/Feb/2015:19:44:48 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +126.216.219.153 - - [10/Feb/2015:19:45:19 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +126.216.219.153 - - [10/Feb/2015:19:45:21 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +27.210.37.158 - - [10/Feb/2015:19:46:50 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.158 - - [10/Feb/2015:19:46:51 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:19:47:30 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +194.182.202.170 - - [10/Feb/2015:19:58:17 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +56.153.90.137 - - [10/Feb/2015:19:58:22 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.2) Gecko/20150122 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org" +56.153.90.137 - - [10/Feb/2015:19:58:23 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.2) Gecko/20150122 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org" +83.80.94.220 - - [10/Feb/2015:19:58:38 -0800] "GET /blog/wp-admin/ HTTP/1.1" 404 89 "-" "-" "templeos.org" +119.184.143.96 - - [10/Feb/2015:19:58:54 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +56.153.90.137 - - [10/Feb/2015:19:58:58 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "http://www.templeos.org/Wb/Doc/AboutTempleOS.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.2) Gecko/20150122 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:20:00:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:20:07:23 -0800] "GET /files/History HTTP/1.1" 301 101 "http://www.templeos.org/Wb/Home/Wb2/History.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:20:07:23 -0800] "GET /files/History/ HTTP/1.1" 200 3176 "http://www.templeos.org/Wb/Home/Wb2/History.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +77.26.170.124 - - [10/Feb/2015:20:08:46 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +194.182.202.170 - - [10/Feb/2015:20:15:33 -0800] "GET /Wb/Kernel/KernelA.html HTTP/1.1" 200 2050776 "http://www.templeos.org/Wb/Kernel/MemB.html" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +126.106.40.164 - - [10/Feb/2015:20:16:35 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.129 - - [10/Feb/2015:20:19:30 -0800] "GET /Wb/Kernel/?D=A HTTP/1.1" 200 12449 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +126.106.40.164 - - [10/Feb/2015:20:21:18 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +56.133.121.123 - - [10/Feb/2015:20:25:22 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +89.174.197.231 - - [10/Feb/2015:20:25:40 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.51.200.50 - - [10/Feb/2015:20:26:19 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +70.90.255.16 - - [10/Feb/2015:20:30:46 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://templeos.org/" "Mozilla/5.0 (X11; Linux i686; rv:25.2) Gecko/20150123 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org" +136.88.5.205 - - [10/Feb/2015:20:31:59 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +74.51.144.214 - - [10/Feb/2015:20:33:29 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +224.253.247.40 - - [10/Feb/2015:20:34:26 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Linux; Android 4.4.2; SGH-I337M Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +224.253.247.40 - - [10/Feb/2015:20:34:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.2; SGH-I337M Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:20:41:19 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.53.176.137 - - [10/Feb/2015:20:44:58 -0800] "GET /Wb/Demo/?N=A HTTP/1.1" 200 10926 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +241.159.189.144 - - [10/Feb/2015:20:47:35 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +240.94.100.138 - - [10/Feb/2015:20:47:39 -0800] "GET /Wb/Home/Wb2/Files/Text/Yankee.TXT HTTP/1.1" 200 663207 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:20:50:23 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/08/Rant140831.TXT.Z HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +112.233.185.37 - - [10/Feb/2015:20:51:08 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org" +87.5.200.32 - - [10/Feb/2015:20:52:55 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://na-verh.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +87.5.200.32 - - [10/Feb/2015:20:52:56 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://na-verh.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:20:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +202.176.250.25 - - [10/Feb/2015:20:57:18 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/09/Rant140911.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:21:06:47 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +222.215.30.7 - - [10/Feb/2015:21:06:57 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:21:08:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 524288 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:21:09:29 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:21:10:20 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +85.137.31.239 - - [10/Feb/2015:21:10:23 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +229.137.198.53 - - [10/Feb/2015:21:11:14 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 524288 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +229.137.198.53 - - [10/Feb/2015:21:11:39 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +85.209.42.43 - - [10/Feb/2015:21:11:45 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +229.137.198.53 - - [10/Feb/2015:21:12:09 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +34.222.78.124 - - [10/Feb/2015:21:14:06 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +112.130.98.166 - - [10/Feb/2015:21:14:12 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +112.130.98.166 - - [10/Feb/2015:21:14:12 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +112.130.98.166 - - [10/Feb/2015:21:14:14 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 138394 "http://templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +12.137.124.242 - - [10/Feb/2015:21:14:17 -0800] "GET /Wb/Adam/Utils/Diff.html HTTP/1.1" 200 213877 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +112.130.98.166 - - [10/Feb/2015:21:14:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:21:14:22 -0800] "GET /Wb/Apps/Psalmody/Examples/fog.html HTTP/1.1" 200 26215 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:21:14:25 -0800] "GET /Wb/Demo/SubSwitch.html HTTP/1.1" 200 9531 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:21:14:26 -0800] "GET /Wb/Demo/Graphics/SpritePut.html HTTP/1.1" 200 9115 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +237.74.202.246 - - [10/Feb/2015:21:16:09 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2298.0 Safari/537.36" "www.templeos.org" +223.88.111.105 - - [10/Feb/2015:21:24:48 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/05/Rant140509.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +202.27.18.68 - - [10/Feb/2015:21:26:27 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +202.27.18.68 - - [10/Feb/2015:21:26:32 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +123.123.196.84 - - [10/Feb/2015:21:27:31 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/4.0" "www.templeos.org" +198.44.30.180 - - [10/Feb/2015:21:28:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +202.176.250.77 - - [10/Feb/2015:21:29:12 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "templeos.org" +189.52.157.59 - - [10/Feb/2015:21:29:16 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +52.53.176.173 - - [10/Feb/2015:21:31:00 -0800] "GET /Wb/Adam/DolDoc/DocMain.html HTTP/1.1" 200 316358 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +189.52.157.59 - - [10/Feb/2015:21:36:20 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:21:36:27 -0800] "GET /Wb/Home/?M=A HTTP/1.1" 200 663 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +74.51.214.128 - - [10/Feb/2015:21:37:00 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Linux; Android 4.4.4; SGH-M919 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +74.51.214.128 - - [10/Feb/2015:21:37:01 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.4; SGH-M919 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +74.51.214.50 - - [10/Feb/2015:21:37:09 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.4; SGH-M919 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:21:37:18 -0800] "GET /Wb/Kernel/KLoad.html HTTP/1.1" 200 140417 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +123.123.196.84 - - [10/Feb/2015:21:38:29 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/4.0" "www.templeos.org" +172.74.23.55 - - [10/Feb/2015:21:43:09 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +222.248.144.106 - - [10/Feb/2015:21:49:49 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +222.248.144.106 - - [10/Feb/2015:21:49:57 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +222.248.144.106 - - [10/Feb/2015:21:50:03 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:21:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +52.53.176.53 - - [10/Feb/2015:21:55:06 -0800] "GET /Wb/Demo/MultiCore/Interrupts.CPP.Z HTTP/1.1" 200 297 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +52.53.176.247 - - [10/Feb/2015:21:57:55 -0800] "GET /Wb/Adam/Gr/Gr.CPP.Z HTTP/1.1" 200 2714 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:22:00:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:22:03:00 -0800] "GET /Wb/Demo/OldSchool/MultiFileAOT/?D=A HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +190.136.225.24 - - [10/Feb/2015:22:04:29 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux i686; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +190.136.225.24 - - [10/Feb/2015:22:04:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux i686; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +202.176.250.181 - - [10/Feb/2015:22:05:11 -0800] "GET /Wb/Demo/Games/EagleDive.html HTTP/1.1" 200 458909 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "templeos.org" +189.117.13.223 - - [10/Feb/2015:22:05:22 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +241.81.172.41 - - [10/Feb/2015:22:10:35 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.102.4.215 - - [10/Feb/2015:22:11:45 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +189.18.230.158 - - [10/Feb/2015:22:14:28 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:22:19:37 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/09/Rant140914.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:22:21:13 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140603.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:22:21:14 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141121.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [10/Feb/2015:22:21:14 -0800] "GET /files/History/ HTTP/1.1" 200 3176 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +52.53.176.0 - - [10/Feb/2015:22:22:23 -0800] "GET /Wb/Doc/CutCorners.html HTTP/1.1" 200 5409 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:22:28:40 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +52.53.176.0 - - [10/Feb/2015:22:29:05 -0800] "GET /Wb/Adam/DolDoc/DocRecalcA.html HTTP/1.1" 200 119617 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +185.240.98.240 - - [10/Feb/2015:22:30:28 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:22:30:34 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/07/Rant140702.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +154.153.150.240 - - [10/Feb/2015:22:35:22 -0800] "GET / HTTP/1.1" 200 6329 "http://www.reddit.com/r/programming/comments/1szncc/how_much_of_this_is_true_c_vs_c_by_linus_torvald/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +154.153.150.240 - - [10/Feb/2015:22:35:46 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +12.137.124.39 - - [10/Feb/2015:22:39:01 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/06/Rant140621.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +202.176.250.241 - - [10/Feb/2015:22:39:26 -0800] "GET /Wb/Doc/TOSZ.html HTTP/1.1" 200 3187 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +116.64.65.76 - - [10/Feb/2015:22:42:28 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.95 Safari/537.36" "www.templeos.org" +116.64.65.76 - - [10/Feb/2015:22:42:28 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.95 Safari/537.36" "www.templeos.org" +116.64.65.76 - - [10/Feb/2015:22:43:58 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.95 Safari/537.36" "www.templeos.org" +121.164.47.125 - - [10/Feb/2015:22:47:19 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "-" "Mozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +58.71.218.57 - - [10/Feb/2015:22:47:27 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 144221 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +148.43.76.238 - - [10/Feb/2015:22:47:55 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:22:48:50 -0800] "GET /Certs/virtual-notary-cert-randomnum-94473.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:22:51:31 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/08/Rant140819.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +103.53.186.102 - - [10/Feb/2015:22:52:36 -0800] "GET /wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php HTTP/1.1" 404 89 "-" "weblist/2.0 (BSDI BSD/OS)" "templeos.org" +185.178.192.1 - - [10/Feb/2015:22:54:07 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +185.178.192.1 - - [10/Feb/2015:22:54:07 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +112.46.191.57 - - [10/Feb/2015:22:54:57 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org" +112.46.191.57 - - [10/Feb/2015:22:54:57 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:22:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +223.88.111.136 - - [10/Feb/2015:22:55:05 -0800] "GET /Certs/virtual-notary-cert-randomnum-52727.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +119.225.240.151 - - [10/Feb/2015:22:55:40 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +119.225.240.88 - - [10/Feb/2015:22:55:40 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +52.53.176.46 - - [10/Feb/2015:22:57:02 -0800] "GET /Wb/Demo/Games/TreeCheckers.html HTTP/1.1" 200 157610 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +185.178.192.1 - - [10/Feb/2015:22:57:37 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:23:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:23:00:59 -0800] "GET /Wb/Accts/TS/?D=D HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:23:04:24 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140604.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +199.38.39.172 - - [10/Feb/2015:23:06:30 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.linux.org/threads/linux-kernel-vs-other-kernels.6026/" "Opera/9.80 (Android; Opera Mini/7.6.40234/35.7194; U; en) Presto/2.8.119 Version/11.10" "www.templeos.org" +199.58.211.111 - - [10/Feb/2015:23:09:29 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +98.20.198.134 - - [10/Feb/2015:23:09:31 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +98.20.198.134 - - [10/Feb/2015:23:09:51 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +178.0.187.99 - - [10/Feb/2015:23:13:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +78.19.21.206 - - [10/Feb/2015:23:17:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +129.226.244.66 - - [10/Feb/2015:23:25:01 -0800] "GET /Wb/Kernel/PSect.html HTTP/1.1" 200 151686 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +228.141.141.213 - - [10/Feb/2015:23:25:24 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses45.html HTTP/1.1" 200 3130 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +240.128.130.130 - - [10/Feb/2015:23:27:02 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:13 -0800] "HEAD /fckeditor/editor/filemanager/connectors/aspx/upload.aspx HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:14 -0800] "HEAD /fckeditor/editor/filemanager/connectors/asp/upload.asp HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:16 -0800] "HEAD /fckeditor/editor/filemanager/upload/aspx/upload.aspx HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:19 -0800] "HEAD /fckeditor/editor/filemanager/connectors/aspx/connector.aspx HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:22 -0800] "HEAD /fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:25 -0800] "HEAD /includes/fckeditor/editor/filemanager/upload/aspx/upload.aspx HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:26 -0800] "HEAD /includes/fckeditor/editor/filemanager/upload/asp/upload.asp HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:26 -0800] "HEAD /includes/fckeditor/editor/filemanager/upload/php/upload.php HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:28 -0800] "HEAD /includes/fckeditor/editor/filemanager/connectors/php/connector.php HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:37 -0800] "HEAD /admin/fckeditor/editor/filemanager/connectors/asp/connector.asp HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:38 -0800] "HEAD /admin/fckeditor/editor/filemanager/connectors/asp/upload.asp HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:41 -0800] "HEAD /ckeditor/ckfinder/core/connector/asp/connector.asp HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +164.94.134.193 - - [10/Feb/2015:23:28:42 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +207.203.88.11 - - [10/Feb/2015:23:28:43 -0800] "HEAD /kcfinder/browse.php HTTP/1.1" 404 0 "-" "-" "www.templeos.org" +164.94.134.193 - - [10/Feb/2015:23:29:11 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +164.94.134.193 - - [10/Feb/2015:23:29:25 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +127.178.31.16 - - [10/Feb/2015:23:32:30 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "http://tech.slashdot.org/story/14/11/25/1847254/the-schizophrenic-programmer-who-built-an-os-to-talk-to-god?utm_source=rss1.0mainlinkanon&utm_medium=feed" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +143.80.70.110 - - [10/Feb/2015:23:33:32 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +56.65.44.0 - - [10/Feb/2015:23:33:45 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +56.65.44.0 - - [10/Feb/2015:23:33:46 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +148.48.190.137 - - [10/Feb/2015:23:33:55 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)" "www.templeos.org" +213.217.218.176 - - [10/Feb/2015:23:33:59 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:25.2) Gecko/20150122 PaleMoon/25.2.1" "www.templeos.org" +56.65.44.0 - - [10/Feb/2015:23:34:26 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +202.176.251.249 - - [10/Feb/2015:23:38:23 -0800] "GET /Wb/Demo/Games/ZoneOut.html HTTP/1.1" 200 118307 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +58.112.213.88 - - [10/Feb/2015:23:38:38 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.112.213.88 - - [10/Feb/2015:23:38:38 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.112.213.88 - - [10/Feb/2015:23:38:50 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +75.84.229.233 - - [10/Feb/2015:23:48:43 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "http://motherboard.vice.com/de/read/gottes-einsamer-programmierer-402" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +75.84.229.233 - - [10/Feb/2015:23:48:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +56.101.222.255 - - [10/Feb/2015:23:49:10 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +56.101.222.255 - - [10/Feb/2015:23:49:11 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +157.205.255.211 - - [10/Feb/2015:23:51:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +157.205.255.211 - - [10/Feb/2015:23:51:27 -0800] "GET /favicon.ico HTTP/1.1" 206 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +157.205.255.211 - - [10/Feb/2015:23:51:27 -0800] "GET /favicon.ico HTTP/1.1" 206 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +74.187.37.174 - - [10/Feb/2015:23:54:34 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +74.187.37.30 - - [10/Feb/2015:23:54:34 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +69.185.167.13 - - [10/Feb/2015:23:54:53 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +131.8.134.171 - - [10/Feb/2015:23:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +69.185.167.13 - - [10/Feb/2015:23:55:07 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +111.92.62.205 - - [10/Feb/2015:23:55:53 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org" +111.92.62.205 - - [10/Feb/2015:23:55:54 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org" +111.92.62.205 - - [10/Feb/2015:23:56:14 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org" +129.226.244.66 - - [10/Feb/2015:23:57:12 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/08/Rant140815.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +58.128.177.232 - - [10/Feb/2015:23:59:11 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Palm.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" diff --git a/Demo/WebLogExample/access_150212.LOG b/Demo/WebLogExample/access_150212.LOG new file mode 100644 index 0000000..bcc0ba9 --- /dev/null +++ b/Demo/WebLogExample/access_150212.LOG @@ -0,0 +1,1062 @@ +131.8.134.171 - - [11/Feb/2015:00:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +27.210.37.110 - - [11/Feb/2015:00:00:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +202.176.250.95 - - [11/Feb/2015:00:08:24 -0800] "GET /Wb/PersonalMenu.html HTTP/1.1" 200 11021 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +175.118.211.94 - - [11/Feb/2015:00:08:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +75.167.187.85 - - [11/Feb/2015:00:13:38 -0800] "GET /user/ HTTP/1.1" 404 89 "-" "Mozilla/4.0 (compatible; Synapse)" "templeos.org" +34.222.78.124 - - [11/Feb/2015:00:14:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:00:17:07 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Rant131204.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +233.6.219.205 - - [11/Feb/2015:00:17:22 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +233.6.219.205 - - [11/Feb/2015:00:17:34 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +233.6.219.205 - - [11/Feb/2015:00:18:10 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +193.84.229.200 - - [11/Feb/2015:00:18:15 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" "www.templeos.org" +193.84.229.200 - - [11/Feb/2015:00:20:19 -0800] "GET /Wb/Kernel/Font8x8.html HTTP/1.1" 200 65536 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" "www.templeos.org" +157.205.255.211 - - [11/Feb/2015:00:20:55 -0800] "GET / HTTP/1.1" 200 6329 "http://www.reddit.com/r/programming/comments/1aqdxn/temple_operating_system_v100_released/?limit=500" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +157.205.255.211 - - [11/Feb/2015:00:20:56 -0800] "GET /favicon.ico HTTP/1.1" 206 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:00:22:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/01/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:00:22:03 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141002.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:00:22:03 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/?N=D HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +119.225.240.201 - - [11/Feb/2015:00:26:18 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +119.225.240.88 - - [11/Feb/2015:00:26:18 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +74.51.215.137 - - [11/Feb/2015:00:28:06 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +213.217.218.176 - - [11/Feb/2015:00:33:53 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:25.2) Gecko/20150122 PaleMoon/25.2.1" "www.templeos.org" +130.41.233.58 - - [11/Feb/2015:00:34:50 -0800] "GET /Wb/Demo/WebLogExample/access_090509.html HTTP/1.1" 200 217406 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +52.53.176.32 - - [11/Feb/2015:00:35:13 -0800] "GET /Wb/Compiler/BackA.CPP.Z HTTP/1.1" 200 7144 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +108.204.215.78 - - [11/Feb/2015:00:35:15 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +108.204.215.78 - - [11/Feb/2015:00:35:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:00:37:06 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/11/Rant131108.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +202.176.250.234 - - [11/Feb/2015:00:38:24 -0800] "GET /Wb/Demo/MultiCore/RadixSort.html HTTP/1.1" 200 60928 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +52.221.226.64 - - [11/Feb/2015:00:39:38 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "templeos.org" +127.101.53.207 - - [11/Feb/2015:00:40:12 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (Linux; Android 5.0.1; HTC One_M8 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:00:42:10 -0800] "GET /Wb/Accts/TOS/Wb2/History.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +189.117.13.223 - - [11/Feb/2015:00:42:21 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +27.241.156.119 - - [11/Feb/2015:00:50:41 -0800] "GET /Wb/Apps/Logic/Load.html HTTP/1.1" 200 3967 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:00:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +74.51.144.182 - - [11/Feb/2015:00:56:43 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "-" "Googlebot-Image/1.0" "www.templeos.org" +101.46.104.22 - - [11/Feb/2015:00:58:17 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.be/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=pxnbVI-4IYXVaov4gNgL&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=PNPfW2TNV7yy36VV6fLfMw&bvm=bv.85761416,d.d2s" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +101.46.104.22 - - [11/Feb/2015:00:58:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +225.87.178.147 - - [11/Feb/2015:00:58:52 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +225.87.178.147 - - [11/Feb/2015:00:58:55 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:01:00:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +223.88.111.105 - - [11/Feb/2015:01:02:08 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/02/Rant140221.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +152.90.53.147 - - [11/Feb/2015:01:03:21 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +152.90.53.147 - - [11/Feb/2015:01:03:35 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +246.2.100.1 - - [11/Feb/2015:01:05:00 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +148.48.190.250 - - [11/Feb/2015:01:05:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)" "www.templeos.org" +148.48.190.250 - - [11/Feb/2015:01:05:13 -0800] "GET /Wb/Adam/Gr/Gr.html HTTP/1.1" 200 106809 "-" "Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)" "www.templeos.org" +87.62.139.244 - - [11/Feb/2015:01:08:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +87.62.139.244 - - [11/Feb/2015:01:08:43 -0800] "GET /favicon.ico HTTP/1.1" 206 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.53.176.129 - - [11/Feb/2015:01:13:45 -0800] "GET /Wb/Kernel/StrPrint.html HTTP/1.1" 200 389185 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +23.178.105.91 - - [11/Feb/2015:01:15:06 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (iPad; CPU OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4" "www.templeos.org" +89.247.67.146 - - [11/Feb/2015:01:15:13 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +89.247.67.146 - - [11/Feb/2015:01:15:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:01:15:18 -0800] "GET /Wb/Demo/Games/MassSpring.html HTTP/1.1" 200 86419 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:01:15:18 -0800] "GET /Wb/Apps/GrModels/BallGen.html HTTP/1.1" 200 67786 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +104.74.160.63 - - [11/Feb/2015:01:15:43 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:25.2) Gecko/20150123 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org" +104.74.160.63 - - [11/Feb/2015:01:15:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:25.2) Gecko/20150123 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org" +104.74.160.63 - - [11/Feb/2015:01:15:46 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:25.2) Gecko/20150123 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org" +119.225.151.151 - - [11/Feb/2015:01:16:35 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +25.28.235.97 - - [11/Feb/2015:01:18:12 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com.hk/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.32 - - [11/Feb/2015:01:21:05 -0800] "GET /Wb/Adam/Utils/LineRep.CPP.Z HTTP/1.1" 200 1599 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +56.179.101.97 - - [11/Feb/2015:01:21:14 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +56.179.101.97 - - [11/Feb/2015:01:21:16 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +214.200.131.51 - - [11/Feb/2015:01:22:20 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.2; ALCATEL ONE TOUCH 4037T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36" "www.templeos.org" +214.200.131.51 - - [11/Feb/2015:01:22:23 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.2; ALCATEL ONE TOUCH 4037T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36" "www.templeos.org" +214.200.131.51 - - [11/Feb/2015:01:22:58 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.2; ALCATEL ONE TOUCH 4037T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36" "www.templeos.org" +25.28.235.97 - - [11/Feb/2015:01:23:05 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +165.169.82.82 - - [11/Feb/2015:01:25:10 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org" +165.169.82.82 - - [11/Feb/2015:01:25:11 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org" +25.28.235.97 - - [11/Feb/2015:01:25:35 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 1 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +25.28.235.97 - - [11/Feb/2015:01:26:37 -0800] "GET /TempleOSUltra.ISO HTTP/1.1" 200 1114112 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +25.28.235.97 - - [11/Feb/2015:01:27:23 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +214.200.131.51 - - [11/Feb/2015:01:28:01 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.2; ALCATEL ONE TOUCH 4037T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36" "www.templeos.org" +25.28.235.97 - - [11/Feb/2015:01:30:49 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +18.190.85.115 - - [11/Feb/2015:01:31:56 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)" "www.templeos.org" +148.129.167.240 - - [11/Feb/2015:01:31:57 -0800] "GET / HTTP/1.1" 200 6329 "-" "WeeChat/1.1 (http://www.weechat.org)" "www.templeos.org" +27.210.37.166 - - [11/Feb/2015:01:32:45 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +216.3.201.52 - - [11/Feb/2015:01:34:26 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +216.3.201.52 - - [11/Feb/2015:01:34:26 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +18.225.127.40 - - [11/Feb/2015:01:34:30 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +18.225.127.40 - - [11/Feb/2015:01:34:31 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +18.225.127.40 - - [11/Feb/2015:01:34:45 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +18.225.127.40 - - [11/Feb/2015:01:35:07 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +18.225.127.40 - - [11/Feb/2015:01:35:07 -0800] "GET /Wb/Home/Wb2/Imgs/MenuV0104.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +18.225.127.40 - - [11/Feb/2015:01:35:07 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:01:36:30 -0800] "GET /Wb/Adam/Training.html HTTP/1.1" 200 115573 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +209.70.147.89 - - [11/Feb/2015:01:40:05 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Rant131028.html HTTP/1.1" 404 89 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +209.70.147.89 - - [11/Feb/2015:01:40:05 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +172.141.247.134 - - [11/Feb/2015:01:45:49 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "http://go.mail.ru/search?fm=1&rf=0010&q=OS+%3A+Windows+XP+5.1+%28Build%3A+2600%29+CPU+%3A+AuthenticAMD+Unknown+processor+%40+2815+MHz+with+1789MB+RAM+Video+%3A+AMD+760G+%287140%29++Bad+name+index+-44%2F19127" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +172.141.247.134 - - [11/Feb/2015:01:45:52 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +52.53.176.46 - - [11/Feb/2015:01:49:20 -0800] "GET /Wb/Demo/Games/Stadium/?M=D HTTP/1.1" 200 1576 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +52.220.146.124 - - [11/Feb/2015:01:51:41 -0800] "GET / HTTP/1.1" 200 6329 "https://duckduckgo.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "templeos.org" +14.1.204.227 - - [11/Feb/2015:01:54:21 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +14.1.204.227 - - [11/Feb/2015:01:54:37 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:01:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +223.88.111.165 - - [11/Feb/2015:01:57:37 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:25 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:25 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:25 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:25 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:26 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:26 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:26 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:26 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:26 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:26 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:26 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:27 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:27 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:27 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:27 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:27 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:27 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:01:58:27 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0" "www.templeos.org" +82.153.251.69 - - [11/Feb/2015:01:59:00 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:02:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +52.220.146.124 - - [11/Feb/2015:02:01:46 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.reddit.com/r/TempleOS_Official/comments/2pdlh3/post_what_god_said_ill_help_interpret/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +52.220.146.124 - - [11/Feb/2015:02:01:47 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/Wb/Adam/God/HSNotes.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +82.153.251.69 - - [11/Feb/2015:02:03:22 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +74.187.37.88 - - [11/Feb/2015:02:12:47 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +246.2.100.125 - - [11/Feb/2015:02:14:46 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" "templeos.org" +150.37.23.126 - - [11/Feb/2015:02:16:31 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:02:16:33 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/11/Rant131110.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:02:16:34 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140615.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:02:16:34 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/08/Rant140816.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:02:16:34 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/08/Rant140822.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:02:16:34 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/09/Rant140923.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:02:16:34 -0800] "GET /Wb/Compiler/?M=A HTTP/1.1" 200 8721 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +12.137.124.253 - - [11/Feb/2015:02:17:40 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "templeos.org" +78.19.21.206 - - [11/Feb/2015:02:17:51 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:02:18:14 -0800] "GET /beacon.nist.gov/rest/record/1417162440 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +78.19.21.206 - - [11/Feb/2015:02:18:35 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +78.19.21.206 - - [11/Feb/2015:02:19:08 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +148.17.233.40 - - [11/Feb/2015:02:20:53 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +148.17.233.40 - - [11/Feb/2015:02:20:53 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +74.51.144.214 - - [11/Feb/2015:02:21:45 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/06/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +213.217.218.176 - - [11/Feb/2015:02:21:47 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:25.2) Gecko/20150122 PaleMoon/25.2.1" "www.templeos.org" +140.157.66.197 - - [11/Feb/2015:02:24:21 -0800] "GET /Wb/Kernel/StrPrint.html HTTP/1.1" 200 389185 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +140.157.66.197 - - [11/Feb/2015:02:24:36 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:02:27:28 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +189.117.13.223 - - [11/Feb/2015:02:27:58 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +211.88.147.68 - - [11/Feb/2015:02:28:18 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +37.178.43.26 - - [11/Feb/2015:02:29:15 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +37.178.43.26 - - [11/Feb/2015:02:29:20 -0800] "GET /images/?N=D HTTP/1.1" 200 1654 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +85.146.209.151 - - [11/Feb/2015:02:33:15 -0800] "GET /Wb/Demo/WebLogExample/ HTTP/1.1" 200 1738 "http://estilo.in.ua/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" "www.templeos.org" +244.92.34.164 - - [11/Feb/2015:02:33:17 -0800] "GET /Wb/Demo/WebLogExample/ HTTP/1.1" 200 1738 "http://estilo.in.ua/" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" "www.templeos.org" +181.63.235.218 - - [11/Feb/2015:02:36:13 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com.au/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +181.63.235.218 - - [11/Feb/2015:02:36:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +181.63.235.218 - - [11/Feb/2015:02:36:21 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +52.220.146.124 - - [11/Feb/2015:02:41:29 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +52.220.146.124 - - [11/Feb/2015:02:41:35 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +52.220.146.124 - - [11/Feb/2015:02:42:47 -0800] "GET /Wb/Misc/Bible.html HTTP/1.1" 200 6439170 "http://www.templeos.org/Wb/Adam/God/HSNotes.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:02:49:43 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/03/Rant140322.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +52.53.176.32 - - [11/Feb/2015:02:50:32 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses58.TXT.Z HTTP/1.1" 200 498 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +27.8.224.47 - - [11/Feb/2015:02:54:17 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +52.220.146.124 - - [11/Feb/2015:02:54:47 -0800] "GET /Wb/Apps/AfterEgypt/Comics/ HTTP/1.1" 200 20959 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +52.220.146.124 - - [11/Feb/2015:02:54:54 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses01.html HTTP/1.1" 200 2935 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:02:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +27.210.37.158 - - [11/Feb/2015:02:57:59 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.158 - - [11/Feb/2015:02:57:59 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +101.214.15.225 - - [11/Feb/2015:02:58:23 -0800] "GET / HTTP/1.1" 200 6329 "http://www.slate.fr/story/86549/temple-os-systeme-exploitation-parler-dieu" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +101.214.15.225 - - [11/Feb/2015:02:58:24 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.129 - - [11/Feb/2015:02:59:13 -0800] "GET /Wb/Apps/KeepAway/?N=D HTTP/1.1" 200 1391 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:41 -0800] "HEAD /editor/fckeditor/editor/fckdebug.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:41 -0800] "HEAD /editor/fckeditor/fckstyles.xml HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:41 -0800] "HEAD /fckeditor/dialog/fck_about.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:47 -0800] "HEAD /FCKeditor/editor/filemanager/browser/default/browser.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:47 -0800] "HEAD /fckeditor/editor/filemanager/browser/default/browser.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:47 -0800] "HEAD /FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=CreateFolder&CurrentFolder=/&Type=Image&NewFolderName=shell.asp HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:48 -0800] "HEAD /FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/ HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:48 -0800] "HEAD /fckeditor/editor/filemanager/browser/default/connectors/asp/upload.asp?Type=Media HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:48 -0800] "HEAD /FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=/1.asp HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:48 -0800] "HEAD /FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=/shell.asp HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:49 -0800] "HEAD /FCKeditor/editor/filemanager/connectors/ HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:50 -0800] "HEAD /FCKeditor/editor/filemanager/connectors/asp/connector.asp HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:01:50 -0800] "HEAD /FCKeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=%2Fshell.asp&NewFolderName=z&uuid=1244789975684 HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:00 -0800] "HEAD /FCKeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=/shell.asp&NewFolderName=z&uuid=1244789975684 HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:06 -0800] "HEAD /fckeditor/editor/filemanager/connectors/test.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:06 -0800] "HEAD /FCKeditor/editor/filemanager/connectors/test.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:06 -0800] "HEAD /fckeditor/editor/filemanager/connectors/uploadtest.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:07 -0800] "HEAD /FCKeditor/editor/filemanager/connectors/uploadtest.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:07 -0800] "HEAD /FCKeditor/editor/filemanager/upload/php/upload.php HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +219.82.102.179 - - [11/Feb/2015:03:02:12 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:13 -0800] "HEAD /FCKeditor/editor/filemanager/upload/test.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +219.82.102.179 - - [11/Feb/2015:03:02:13 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:13 -0800] "HEAD /FCKeditor/_whatsnew.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:18 -0800] "HEAD /include/fckeditor/editor/fckeditor.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:19 -0800] "HEAD /include/FCKeditor/editor/filemanager/browser/default/browser.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:19 -0800] "HEAD /include/fckeditor/editor/filemanager/upload/test.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:20 -0800] "HEAD /include/FCKeditor/editor/filemanager/upload/test.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:25 -0800] "HEAD /includes/fckeditor/editor/fckeditor.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:26 -0800] "HEAD /includes/fckeditor/editor/filemanager/browser/default/browser.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:26 -0800] "HEAD /includes/FCKeditor/editor/filemanager/browser/default/browser.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:27 -0800] "HEAD /includes/FCKeditor/editor/filemanager/upload/test.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +108.116.201.118 - - [11/Feb/2015:03:02:27 -0800] "HEAD /includes/js/fckeditor/editor/filemanager/connectors/test.html HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +219.82.102.179 - - [11/Feb/2015:03:02:36 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +210.238.117.235 - - [11/Feb/2015:03:03:13 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "https://www.qwant.com/?q=ar9485wb-eg+forcer+802.11a&client=firefox" "Qwantify/1.0" "www.templeos.org" +148.48.190.245 - - [11/Feb/2015:03:03:27 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)" "www.templeos.org" +101.214.15.225 - - [11/Feb/2015:03:04:32 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +101.214.15.225 - - [11/Feb/2015:03:05:13 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +177.171.167.92 - - [11/Feb/2015:03:08:49 -0800] "GET / HTTP/1.1" 200 6329 "http://www.reddit.com/r/WTF/search?q=temple+os&sort=relevance&t=all" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +119.225.240.30 - - [11/Feb/2015:03:11:32 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +119.225.240.174 - - [11/Feb/2015:03:11:33 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +229.137.198.53 - - [11/Feb/2015:03:12:14 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +229.137.198.53 - - [11/Feb/2015:03:12:15 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:03:13:42 -0800] "GET /Wb/Apps/Psalmody/Examples/sustain.html HTTP/1.1" 200 29411 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +85.209.42.43 - - [11/Feb/2015:03:13:52 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +202.176.250.132 - - [11/Feb/2015:03:14:04 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/07/Rant140706.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +34.222.78.124 - - [11/Feb/2015:03:14:14 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +16.92.145.140 - - [11/Feb/2015:03:14:14 -0800] "GET /Wb/Compiler/CmpAsm.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +14.43.168.152 - - [11/Feb/2015:03:14:29 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://msk.onlinebay.ru/" "Opera/7.60 (Windows NT 5.2; U) [en] (IBM EVV/3.0/EAK01AG9/LE)" "www.templeos.org" +82.164.220.94 - - [11/Feb/2015:03:14:46 -0800] "GET / HTTP/1.1" 200 6329 "http://www.developpez.com/actu/77604/TempleOS-un-systeme-d-exploitation-pour-parler-a-Dieu-developpe-par-un-programmeur-schizophrene/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +130.195.45.202 - - [11/Feb/2015:03:20:16 -0800] "GET /Wb/Misc/Bible.html HTTP/1.1" 200 6439170 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +106.255.105.30 - - [11/Feb/2015:03:22:03 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2236.0 Safari/537.36" "www.templeos.org" +52.53.176.129 - - [11/Feb/2015:03:24:32 -0800] "GET /Wb/Home/Wb2/Files/HDAudio/Examples/BeatFreq.CPP.Z HTTP/1.1" 200 1167 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +164.225.231.69 - - [11/Feb/2015:03:27:05 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "www.templeos.org" +228.48.95.108 - - [11/Feb/2015:03:31:51 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Page2RSS/0.7; +http://page2rss.com/)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:32:40 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:32:42 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141028.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:32:47 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141030.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:32:50 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141031.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:32:53 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141101.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +193.22.148.87 - - [11/Feb/2015:03:32:55 -0800] "HEAD /TempleOSCD.ISO HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 2.0.50727)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:33:03 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141104.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:33:11 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141106.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:33:17 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141107.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:33:30 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141110.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:33:39 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141111.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:34:10 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141113.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:34:26 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141115.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:34:42 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141118.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:34:52 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141120.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +131.17.77.111 - - [11/Feb/2015:03:34:55 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141121.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:03:35:46 -0800] "GET /Wb/Apps/Psalmody/Psalmody.html HTTP/1.1" 200 39862 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +69.47.114.72 - - [11/Feb/2015:03:37:06 -0800] "GET /Wb/Demo/WebLogExample/access_090510.html HTTP/1.1" 200 222005 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +69.47.114.72 - - [11/Feb/2015:03:37:58 -0800] "GET /Wb/Demo/WebLogExample/access_090509.html HTTP/1.1" 200 217406 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +210.182.97.43 - - [11/Feb/2015:03:39:28 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +189.52.157.59 - - [11/Feb/2015:03:41:24 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +217.220.156.197 - - [11/Feb/2015:03:42:14 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +16.160.56.10 - - [11/Feb/2015:03:42:39 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +210.182.97.43 - - [11/Feb/2015:03:43:00 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +52.53.176.247 - - [11/Feb/2015:03:43:33 -0800] "GET /Wb/Apps/Psalmody/Examples/reposes.CPP.Z HTTP/1.1" 200 444 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +210.182.97.43 - - [11/Feb/2015:03:45:55 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +52.53.176.137 - - [11/Feb/2015:03:49:15 -0800] "GET /Wb/Apps/Logic/Load.html HTTP/1.1" 200 3967 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +129.226.244.66 - - [11/Feb/2015:03:49:24 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Rant131220.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +52.53.176.46 - - [11/Feb/2015:03:50:28 -0800] "GET /Wb/Doc/Grub.html HTTP/1.1" 200 5304 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +52.53.176.225 - - [11/Feb/2015:03:50:57 -0800] "GET /Wb/Apps/X-Caliber/XCCtrls.html HTTP/1.1" 200 120525 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +74.51.6.152 - - [11/Feb/2015:03:51:18 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)" "www.templeos.org" +75.183.155.81 - - [11/Feb/2015:03:51:43 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +55.62.98.43 - - [11/Feb/2015:03:51:56 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +55.62.98.43 - - [11/Feb/2015:03:52:04 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 144167 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +210.182.97.43 - - [11/Feb/2015:03:56:35 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:04:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +75.167.248.191 - - [11/Feb/2015:04:11:40 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org" +172.22.99.239 - - [11/Feb/2015:04:12:52 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +172.22.99.239 - - [11/Feb/2015:04:12:53 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +87.172.219.115 - - [11/Feb/2015:04:16:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36" "www.templeos.org" +87.172.219.115 - - [11/Feb/2015:04:17:00 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36" "www.templeos.org" +172.22.99.239 - - [11/Feb/2015:04:17:06 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +87.172.219.115 - - [11/Feb/2015:04:17:48 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "www.templeos.org" +87.172.219.115 - - [11/Feb/2015:04:17:49 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "www.templeos.org" +87.172.219.115 - - [11/Feb/2015:04:18:05 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "www.templeos.org" +112.130.98.166 - - [11/Feb/2015:04:20:17 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +112.130.98.166 - - [11/Feb/2015:04:21:03 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 144167 "http://templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:04:24:47 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/09/Rant130923.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:04:24:52 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Rant131001.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:04:24:52 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/11/Rant131130.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:04:24:52 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/04/Rant140419.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +52.220.146.124 - - [11/Feb/2015:04:25:07 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +119.225.240.30 - - [11/Feb/2015:04:37:14 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +202.176.250.20 - - [11/Feb/2015:04:46:34 -0800] "GET /Wb/Adam/AHash.html HTTP/1.1" 200 249155 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +83.47.222.227 - - [11/Feb/2015:04:48:48 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +23.156.136.47 - - [11/Feb/2015:04:50:29 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +74.51.144.182 - - [11/Feb/2015:04:53:15 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140610.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:04:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +127.23.172.203 - - [11/Feb/2015:04:59:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:05:00:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +236.108.225.132 - - [11/Feb/2015:05:00:05 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ro/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +214.200.46.211 - - [11/Feb/2015:05:00:14 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +214.200.46.211 - - [11/Feb/2015:05:00:16 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +87.172.219.115 - - [11/Feb/2015:05:02:29 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org" +189.217.253.100 - - [11/Feb/2015:05:06:02 -0800] "GET / HTTP/1.1" 200 6329 "-" "Apache-HttpClient/4.2.2 (java 1.5)" "www.templeos.org" +189.117.13.223 - - [11/Feb/2015:05:07:06 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +74.51.61.6 - - [11/Feb/2015:05:08:04 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.co.jp/" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +74.51.61.2 - - [11/Feb/2015:05:08:10 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.google.co.jp/" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +74.51.61.2 - - [11/Feb/2015:05:08:36 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.co.jp/" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +189.135.54.152 - - [11/Feb/2015:05:09:03 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/11/Rant141130.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +189.135.54.152 - - [11/Feb/2015:05:09:03 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +136.192.236.107 - - [11/Feb/2015:05:11:15 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.co.il/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +136.192.236.107 - - [11/Feb/2015:05:11:17 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:05:11:43 -0800] "GET /Certs/virtual-notary-cert-randomnum-44317.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:05:13:29 -0800] "GET /Wb/Apps/Psalmody/Install.html HTTP/1.1" 200 4223 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +75.198.42.61 - - [11/Feb/2015:05:17:01 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +98.35.70.5 - - [11/Feb/2015:05:18:08 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +165.53.246.143 - - [11/Feb/2015:05:20:13 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.1.2; GT-I9100T Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +58.16.235.86 - - [11/Feb/2015:05:20:53 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.2; SCH-I545 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +223.88.111.165 - - [11/Feb/2015:05:21:31 -0800] "GET /Wb/PersonalMenu.html HTTP/1.1" 200 11005 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:05:24:23 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses05.html HTTP/1.1" 200 3292 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +98.55.207.40 - - [11/Feb/2015:05:26:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +254.1.4.218 - - [11/Feb/2015:05:28:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +98.159.204.65 - - [11/Feb/2015:05:29:04 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://www.artparquet.ru/" "Mozilla/5.0 (compatible; Add Catalog/2.1;)" "www.templeos.org" +98.159.204.65 - - [11/Feb/2015:05:29:04 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://www.artparquet.ru/" "Mozilla/5.0 (compatible; Add Catalog/2.1;)" "www.templeos.org" +225.106.229.210 - - [11/Feb/2015:05:38:14 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +225.106.229.210 - - [11/Feb/2015:05:38:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +225.106.229.210 - - [11/Feb/2015:05:38:27 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +254.230.43.236 - - [11/Feb/2015:05:38:49 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2298.0 Safari/537.36" "www.templeos.org" +225.106.229.210 - - [11/Feb/2015:05:39:03 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:39:55 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.57 Safari/537.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:39:56 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT/register.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.57 Safari/537.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:39:56 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:39:57 -0800] "GET /register.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:39:58 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:39:59 -0800] "GET /signup.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:39:59 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:00 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT/index.php?do=/user/register/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:00 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT/join.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:00 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT/index.php?action=register HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:01 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT/wikka.php?wakka=UserSettings HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:02 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:03 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT/tiki-register.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:03 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:04 -0800] "GET /login.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:05 -0800] "GET /Wb/Home/Wb2/Files/Text/signup.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:05 -0800] "GET /Wb/Home/Wb2/Files/Text/signup.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org" +121.55.32.121 - - [11/Feb/2015:05:40:05 -0800] "GET /Wb/Home/Wb2/Files/Text/index.php?page=register HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1" "www.templeos.org" +111.111.209.37 - - [11/Feb/2015:05:40:59 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +146.104.4.202 - - [11/Feb/2015:05:42:52 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/6.1.1 Safari/537.73.11" "www.templeos.org" +127.229.168.75 - - [11/Feb/2015:05:43:03 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +127.229.168.75 - - [11/Feb/2015:05:43:07 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +202.176.251.215 - - [11/Feb/2015:05:45:56 -0800] "GET /Wb/Home/ HTTP/1.1" 200 663 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +210.140.74.22 - - [11/Feb/2015:05:48:49 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +78.19.21.206 - - [11/Feb/2015:05:50:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +240.41.127.104 - - [11/Feb/2015:05:50:42 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.2; VS985 4G Build/KVT49L.VS98512B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +78.19.21.206 - - [11/Feb/2015:05:50:42 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +240.41.127.104 - - [11/Feb/2015:05:50:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.2; VS985 4G Build/KVT49L.VS98512B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +39.252.113.221 - - [11/Feb/2015:05:50:48 -0800] "GET / HTTP/1.1" 200 6329 "-" "NetLyzer FastProbe" "www.templeos.org" +212.15.17.147 - - [11/Feb/2015:05:50:59 -0800] "GET /Wb/Apps/X-Caliber/Run.html HTTP/1.1" 200 3293 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +70.90.114.201 - - [11/Feb/2015:05:51:19 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0217A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +70.90.114.14 - - [11/Feb/2015:05:51:20 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0217A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +212.15.17.5 - - [11/Feb/2015:05:52:10 -0800] "GET /Wb/Demo/SortFileExample/F64FileGen.html HTTP/1.1" 200 15072 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +127.55.189.158 - - [11/Feb/2015:05:52:29 -0800] "GET / HTTP/1.1" 200 6329 "http://nautro.tumblr.com/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B435" "www.templeos.org" +127.55.189.158 - - [11/Feb/2015:05:52:44 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B435" "www.templeos.org" +196.51.160.176 - - [11/Feb/2015:05:55:38 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +148.91.59.109 - - [11/Feb/2015:05:56:15 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +196.51.160.176 - - [11/Feb/2015:05:58:32 -0800] "GET /Wb/Apps/AfterEgypt/Comics/ HTTP/1.1" 200 20959 "http://www.templeos.org/Wb/Adam/God/HSNotes.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +97.49.194.193 - - [11/Feb/2015:06:00:57 -0800] "GET / HTTP/1.1" 200 6329 "http://nautro.tumblr.com/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +196.51.160.176 - - [11/Feb/2015:06:08:09 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +246.2.100.198 - - [11/Feb/2015:06:10:59 -0800] "GET /Wb/Kernel/KUtils.html HTTP/1.1" 200 163866 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +189.117.13.223 - - [11/Feb/2015:06:11:01 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +106.65.84.63 - - [11/Feb/2015:06:11:46 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10" "www.templeos.org" +106.65.84.63 - - [11/Feb/2015:06:11:47 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10" "www.templeos.org" +148.48.190.184 - - [11/Feb/2015:06:13:30 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)" "www.templeos.org" +119.225.240.220 - - [11/Feb/2015:06:13:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +106.163.215.187 - - [11/Feb/2015:06:13:57 -0800] "GET / HTTP/1.1" 200 6329 "http://l.facebook.com/lsr.php?u=http%3A%2F%2Fwww.templeos.org%2F&ext=1423664096&hash=Aclpws0Ipoy2i9jkYE3PvWtkwAyzkKtlBEHMpB_HBimSewfy" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +148.236.58.166 - - [11/Feb/2015:06:14:06 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +106.163.215.187 - - [11/Feb/2015:06:14:21 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +148.236.58.166 - - [11/Feb/2015:06:15:52 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +220.188.81.62 - - [11/Feb/2015:06:17:56 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +236.174.189.40 - - [11/Feb/2015:06:19:11 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +14.81.171.125 - - [11/Feb/2015:06:21:16 -0800] "GET /%EF%BB%BF HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +189.153.64.105 - - [11/Feb/2015:06:22:31 -0800] "GET / HTTP/1.1" 200 6329 "-" "Crowsnest/0.5 (+http://www.crowsnest.tv/)" "templeos.org" +249.145.75.55 - - [11/Feb/2015:06:23:01 -0800] "HEAD / HTTP/1.1" 200 0 "-" "MetaURI API/2.0 +metauri.com" "templeos.org" +249.145.75.55 - - [11/Feb/2015:06:23:01 -0800] "HEAD / HTTP/1.1" 200 0 "-" "MetaURI API/2.0 +metauri.com" "templeos.org" +249.145.75.55 - - [11/Feb/2015:06:23:03 -0800] "GET / HTTP/1.1" 200 6329 "-" "MetaURI API/2.0 +metauri.com" "templeos.org" +139.134.220.79 - - [11/Feb/2015:06:23:08 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Getter/0.1)" "templeos.org" +68.74.162.192 - - [11/Feb/2015:06:23:14 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "templeos.org" +222.45.217.173 - - [11/Feb/2015:06:24:17 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Google-HTTP-Java-Client/1.17.0-rc (gzip)" "www.templeos.org" +129.204.18.154 - - [11/Feb/2015:06:24:18 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +217.106.250.236 - - [11/Feb/2015:06:25:03 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.56.59.157 - - [11/Feb/2015:06:26:20 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1" "templeos.org" +189.49.145.224 - - [11/Feb/2015:06:27:24 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Apache-HttpClient/4.2.2 (java 1.5)" "templeos.org" +189.34.141.195 - - [11/Feb/2015:06:27:25 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3" "templeos.org" +189.34.141.195 - - [11/Feb/2015:06:27:25 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) (Contact: backend@getprismatic.com)" "templeos.org" +189.34.141.195 - - [11/Feb/2015:06:27:25 -0800] "GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) (Contact: backend@getprismatic.com)" "templeos.org" +189.34.141.195 - - [11/Feb/2015:06:27:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) (Contact: backend@getprismatic.com)" "templeos.org" +189.49.145.224 - - [11/Feb/2015:06:27:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) (Contact: backend@getprismatic.com)" "templeos.org" +189.34.141.195 - - [11/Feb/2015:06:27:25 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) (Contact: backend@getprismatic.com)" "templeos.org" +189.49.145.224 - - [11/Feb/2015:06:27:26 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) (Contact: backend@getprismatic.com)" "templeos.org" +189.49.145.224 - - [11/Feb/2015:06:27:26 -0800] "GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) (Contact: backend@getprismatic.com)" "templeos.org" +189.49.145.224 - - [11/Feb/2015:06:27:26 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) (Contact: backend@getprismatic.com)" "templeos.org" +52.172.46.44 - - [11/Feb/2015:06:29:14 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +52.172.46.44 - - [11/Feb/2015:06:29:14 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +171.130.243.5 - - [11/Feb/2015:06:29:22 -0800] "GET / HTTP/1.1" 200 6329 "http://t.co/3ilJM3AT6U" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 4 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "templeos.org" +58.96.142.249 - - [11/Feb/2015:06:29:46 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +58.96.142.249 - - [11/Feb/2015:06:30:50 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 144167 "http://templeos.org/" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +189.49.154.131 - - [11/Feb/2015:06:33:38 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0 (FlipboardProxy/1.1; +http://flipboard.com/browserproxy)" "templeos.org" +125.136.189.250 - - [11/Feb/2015:06:35:24 -0800] "GET / HTTP/1.1" 200 6329 "http://www.baidu.com/link?url=Hl4l_8LuZUtpYHE6T_CS_didHzSuNHpOyxmNL_9NRRS&wd=wmware%20temple%20os&issp=1&f=8&ie=utf-8&tn=baiduhome_pg&inputT=6178" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "templeos.org" +119.136.170.211 - - [11/Feb/2015:06:35:24 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +119.136.170.211 - - [11/Feb/2015:06:35:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +125.136.189.250 - - [11/Feb/2015:06:35:28 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +125.136.189.250 - - [11/Feb/2015:06:35:33 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +14.201.58.187 - - [11/Feb/2015:06:36:25 -0800] "GET / HTTP/1.1" 200 6329 "http://www.chimerarevo.com/hardware/templeos-il-sistema-operativo-richiesto-da-dio-182037/" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +125.136.189.250 - - [11/Feb/2015:06:38:00 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 1310720 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/7.0 Safari/537.77.4" "www.templeos.org" +119.225.151.220 - - [11/Feb/2015:06:39:12 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +14.201.58.187 - - [11/Feb/2015:06:40:22 -0800] "GET /TempleOSUltra.ISO HTTP/1.1" 200 2181120 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +125.136.189.250 - - [11/Feb/2015:06:41:39 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 1769472 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/7.0 Safari/537.77.4" "www.templeos.org" +125.136.189.250 - - [11/Feb/2015:06:41:58 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 1376256 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/7.0 Safari/537.77.4" "www.templeos.org" +129.22.78.186 - - [11/Feb/2015:06:44:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +125.136.189.250 - - [11/Feb/2015:06:46:52 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 4980736 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/7.0 Safari/537.77.4" "www.templeos.org" +154.152.170.233 - - [11/Feb/2015:06:47:52 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +154.152.170.233 - - [11/Feb/2015:06:47:53 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +154.152.170.233 - - [11/Feb/2015:06:47:55 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +82.67.86.70 - - [11/Feb/2015:06:50:55 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0" "templeos.org" +82.67.86.70 - - [11/Feb/2015:06:51:07 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0" "templeos.org" +27.24.108.122 - - [11/Feb/2015:06:56:05 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +102.204.119.147 - - [11/Feb/2015:06:59:37 -0800] "GET /wordpress/wp-admin/ HTTP/1.1" 404 89 "-" "-" "templeos.org" +225.228.133.22 - - [11/Feb/2015:07:02:25 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +225.228.133.22 - - [11/Feb/2015:07:02:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +225.228.133.22 - - [11/Feb/2015:07:02:38 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +225.228.133.22 - - [11/Feb/2015:07:03:40 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +115.117.220.51 - - [11/Feb/2015:07:04:44 -0800] "GET / HTTP/1.1" 200 6329 "http://codigofonte.uol.com.br/artigos/o-programador-que-criou-um-os-para-falar-com-deus" "Mozilla/5.0 (Windows NT 6.2; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +27.210.37.110 - - [11/Feb/2015:07:08:50 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +119.225.151.56 - - [11/Feb/2015:07:10:40 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +189.18.230.158 - - [11/Feb/2015:07:13:50 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +58.128.209.189 - - [11/Feb/2015:07:16:14 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:07:17:04 -0800] "GET /Wb/Demo/ClassMeta.html HTTP/1.1" 200 47446 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:07:17:07 -0800] "GET /Wb/Demo/DolDoc/DefineStr.html HTTP/1.1" 200 14138 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +74.108.121.62 - - [11/Feb/2015:07:21:15 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:07:31:37 -0800] "GET /Certs/virtual-notary-cert-randomnum-30162.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:07:37:15 -0800] "GET /Wb/0000Boot/?D=D HTTP/1.1" 200 968 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.48.95.108 - - [11/Feb/2015:07:37:52 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Page2RSS/0.7; +http://page2rss.com/)" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:07:38:11 -0800] "GET /TempleOSLite.ISO HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +223.88.111.136 - - [11/Feb/2015:07:40:05 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +223.88.111.136 - - [11/Feb/2015:07:40:06 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +140.146.96.129 - - [11/Feb/2015:07:43:21 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +189.230.92.180 - - [11/Feb/2015:07:46:12 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0 (FlipboardProxy/1.1; +http://flipboard.com/browserproxy)" "templeos.org" +82.153.251.69 - - [11/Feb/2015:07:47:44 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +189.34.163.43 - - [11/Feb/2015:07:51:04 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +189.34.163.43 - - [11/Feb/2015:07:51:04 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/02/Rant140214.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +82.153.251.69 - - [11/Feb/2015:07:53:33 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +183.167.53.59 - - [11/Feb/2015:07:56:21 -0800] "GET / HTTP/1.1" 200 6329 "-" "NerdyBot" "templeos.org" +223.88.111.165 - - [11/Feb/2015:07:56:49 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +246.2.100.134 - - [11/Feb/2015:07:56:52 -0800] "GET /Wb/Compiler/CompilerB.html HTTP/1.1" 200 79787 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:08:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:08:01:35 -0800] "GET /Wb/Kernel/Dsk/Dsk1a.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +143.230.225.203 - - [11/Feb/2015:08:08:36 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; IE8Mercury)" "www.templeos.org" +27.210.37.158 - - [11/Feb/2015:08:11:05 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.158 - - [11/Feb/2015:08:11:05 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +161.85.209.234 - - [11/Feb/2015:08:15:24 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +14.35.61.84 - - [11/Feb/2015:08:16:36 -0800] "GET /Wb/Compiler/OptPass6.html HTTP/1.1" 200 137620 "http://yandex.ru/yandsearch?text=tempil&lr=213" "Opera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.10" "www.templeos.org" +106.180.130.10 - - [11/Feb/2015:08:16:37 -0800] "GET /Wb/Compiler/CmpMain.html HTTP/1.1" 404 89 "http://yandex.ru/yandsearch?text=streamprint&lr=213" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1284.49" "www.templeos.org" +127.227.41.108 - - [11/Feb/2015:08:20:06 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +148.211.234.37 - - [11/Feb/2015:08:21:57 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +48.185.149.246 - - [11/Feb/2015:08:22:25 -0800] "GET /Wb/Doc/Credits.html HTTP/1.1" 200 9704 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +143.113.201.87 - - [11/Feb/2015:08:31:30 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ca/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/40.0.2214.94 Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +143.113.201.87 - - [11/Feb/2015:08:31:31 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/40.0.2214.94 Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +143.210.194.177 - - [11/Feb/2015:08:32:17 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +121.172.255.162 - - [11/Feb/2015:08:41:44 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org" +121.172.255.162 - - [11/Feb/2015:08:41:45 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org" +27.210.37.158 - - [11/Feb/2015:08:43:10 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +211.88.147.68 - - [11/Feb/2015:08:48:17 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +222.91.253.4 - - [11/Feb/2015:09:06:09 -0800] "GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 89 "-" "com.apple.WebKit.WebContent/10600.3.18 CFNetwork/720.2.4 Darwin/14.1.0 (x86_64)" "www.templeos.org" +222.91.253.4 - - [11/Feb/2015:09:06:09 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "com.apple.WebKit.WebContent/10600.3.18 CFNetwork/720.2.4 Darwin/14.1.0 (x86_64)" "www.templeos.org" +80.98.38.207 - - [11/Feb/2015:09:07:17 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20100101 Firefox/10.0.12 Iceweasel/10.0.12" "www.templeos.org" +56.202.217.228 - - [11/Feb/2015:09:07:19 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=Kd62VJWhGKnLsATwz4GwDg&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.83640239,d.cWc" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +254.245.146.180 - - [11/Feb/2015:09:07:53 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.it/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCMQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=S4zbVJKGCcvUaqGSgNgC&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=5xKasDbdVZKGbLDyFi9u_Q&bvm=bv.85761416,d.d2s" "Mozilla/5.0 (X11; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0" "www.templeos.org" +254.245.146.180 - - [11/Feb/2015:09:07:57 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0" "www.templeos.org" +254.245.146.180 - - [11/Feb/2015:09:08:27 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0" "www.templeos.org" +254.245.146.180 - - [11/Feb/2015:09:08:33 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (X11; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0" "www.templeos.org" +143.57.63.139 - - [11/Feb/2015:09:12:45 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:09:13:33 -0800] "GET /Wb/Demo/Games/Zing.html HTTP/1.1" 200 103746 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +164.176.11.140 - - [11/Feb/2015:09:13:36 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +27.85.185.241 - - [11/Feb/2015:09:14:40 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/40.0.2214.111 Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +182.48.85.221 - - [11/Feb/2015:09:15:05 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +229.137.198.53 - - [11/Feb/2015:09:15:06 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +182.48.85.221 - - [11/Feb/2015:09:15:41 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +189.44.132.59 - - [11/Feb/2015:09:15:55 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Googlebot (gocrawl v0.4)" "templeos.org" +189.44.132.59 - - [11/Feb/2015:09:16:07 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2" "www.templeos.org" +74.51.36.252 - - [11/Feb/2015:09:16:20 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +182.48.85.221 - - [11/Feb/2015:09:16:22 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +83.141.82.225 - - [11/Feb/2015:09:16:44 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ro/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +83.141.82.225 - - [11/Feb/2015:09:16:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +83.141.82.225 - - [11/Feb/2015:09:17:36 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +112.227.70.67 - - [11/Feb/2015:09:17:41 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/09/Rant130913.html HTTP/1.1" 404 89 "http://www.atheistfoundation.org.au/forums/showthread.php?t=21972" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +202.176.251.130 - - [11/Feb/2015:09:21:48 -0800] "GET /Wb/Home/Wb2/Files/?D=A HTTP/1.1" 200 5204 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +58.170.132.124 - - [11/Feb/2015:09:22:10 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org" +58.170.132.124 - - [11/Feb/2015:09:22:12 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:09:22:23 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses71.html HTTP/1.1" 200 3232 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +78.19.21.206 - - [11/Feb/2015:09:24:35 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 10813440 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +150.57.222.231 - - [11/Feb/2015:09:26:00 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +224.223.108.49 - - [11/Feb/2015:09:28:09 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Googlebot (gocrawl v0.4)" "templeos.org" +150.57.222.231 - - [11/Feb/2015:09:28:52 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +150.57.222.231 - - [11/Feb/2015:09:28:54 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +182.48.85.221 - - [11/Feb/2015:09:28:54 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +150.57.222.231 - - [11/Feb/2015:09:28:54 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +150.57.222.231 - - [11/Feb/2015:09:28:57 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +150.57.222.231 - - [11/Feb/2015:09:29:58 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses19.html HTTP/1.1" 200 3110 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +150.57.222.231 - - [11/Feb/2015:09:30:05 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses47.html HTTP/1.1" 200 2840 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:09:33:05 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/08/Rant140826.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:09:33:31 -0800] "GET /Wb/Home/TOSIDComputer.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +130.115.199.131 - - [11/Feb/2015:09:37:08 -0800] "GET /Wb/Doc/ImportExports.html HTTP/1.1" 200 19214 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +189.135.83.213 - - [11/Feb/2015:09:41:09 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Googlebot (gocrawl v0.4)" "templeos.org" +175.133.186.103 - - [11/Feb/2015:09:43:32 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +27.210.37.110 - - [11/Feb/2015:09:44:20 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +70.227.168.155 - - [11/Feb/2015:09:45:48 -0800] "GET / HTTP/1.1" 200 6329 "http://nautro.tumblr.com/" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +70.227.168.155 - - [11/Feb/2015:09:46:32 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +223.88.111.114 - - [11/Feb/2015:09:51:18 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/05/Rant140509.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +236.62.222.68 - - [11/Feb/2015:09:54:59 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +236.62.222.68 - - [11/Feb/2015:09:55:01 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +131.8.134.171 - - [11/Feb/2015:09:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +9.211.82.139 - - [11/Feb/2015:09:59:58 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +161.0.20.66 - - [11/Feb/2015:10:01:30 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +150.247.224.105 - - [11/Feb/2015:10:09:24 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +150.247.224.105 - - [11/Feb/2015:10:09:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +182.135.91.227 - - [11/Feb/2015:10:09:50 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3" "www.templeos.org" +143.71.136.67 - - [11/Feb/2015:10:11:26 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=S5vbVPKBJcrYggT06IDYCw&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=v5ebyUM-ZCzReNtYuja3bg" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +143.71.136.67 - - [11/Feb/2015:10:11:47 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 144167 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +97.166.223.171 - - [11/Feb/2015:10:12:08 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +103.80.197.200 - - [11/Feb/2015:10:12:51 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=NJvbVP7JENLqaICmgOgB&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=Zf6bGy4yo4xJe7zthzRixQ&bvm=bv.85761416,d.d2s" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +103.80.197.200 - - [11/Feb/2015:10:12:55 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +75.195.44.211 - - [11/Feb/2015:10:17:24 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.co.uk/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +75.195.44.211 - - [11/Feb/2015:10:17:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:10:18:05 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/02/Rant140219.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:10:18:05 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/07/Rant140705.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:10:18:05 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/09/Rant140928.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:10:18:05 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141111.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +87.5.200.32 - - [11/Feb/2015:10:18:58 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://vpihnul.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +106.171.103.114 - - [11/Feb/2015:10:23:39 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.de/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:10:25:18 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +106.171.103.114 - - [11/Feb/2015:10:25:27 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +155.193.28.70 - - [11/Feb/2015:10:26:07 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +143.94.237.51 - - [11/Feb/2015:10:29:00 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +129.66.239.134 - - [11/Feb/2015:10:36:46 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Jakarta Commons-HttpClient/3.1" "www.templeos.org" +179.43.210.6 - - [11/Feb/2015:10:37:13 -0800] "GET /robots.txt HTTP/1.1" 404 89 "http://www.templeos.org/robots.txt" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); 360Spider(compatible; HaosouSpider; http://www.haosou.com/help/help_3_2.html)" "www.templeos.org" +106.171.103.114 - - [11/Feb/2015:10:38:04 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +106.171.103.114 - - [11/Feb/2015:10:39:17 -0800] "GET /Wb/Kernel/Dsk/FileSysRedSea.html HTTP/1.1" 200 342512 "http://www.templeos.org/Wb/Doc/RedSea.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +190.223.163.164 - - [11/Feb/2015:10:40:22 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +190.223.163.164 - - [11/Feb/2015:10:40:23 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +175.150.202.21 - - [11/Feb/2015:10:41:22 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +106.171.103.114 - - [11/Feb/2015:10:43:46 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +75.167.213.212 - - [11/Feb/2015:10:46:39 -0800] "GET /Wb/Home/Wb2/Files/Text/Hamlet.html HTTP/1.1" 200 328768 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +171.24.44.123 - - [11/Feb/2015:10:48:36 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +61.39.72.30 - - [11/Feb/2015:10:52:15 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0 (FlipboardProxy/1.1; +http://flipboard.com/browserproxy)" "templeos.org" +131.8.134.171 - - [11/Feb/2015:10:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +87.5.47.200 - - [11/Feb/2015:10:57:16 -0800] "GET //RK=0 HTTP/1.1" 404 89 "http://getbot.guru/?pr=0bb7f2d00d979929148f79c3917b9371" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" "templeos.org" +87.5.47.200 - - [11/Feb/2015:10:57:17 -0800] "GET //RK=0 HTTP/1.1" 404 89 "http://getbot.guru/?pr=0bb7f2d00d979929148f79c3917b9371" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" "templeos.org" +151.111.8.153 - - [11/Feb/2015:11:01:24 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +151.111.8.153 - - [11/Feb/2015:11:01:29 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +204.30.140.57 - - [11/Feb/2015:11:01:41 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 5.0; GT-I9505G Build/LRX21P.S012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +219.151.182.151 - - [11/Feb/2015:11:03:45 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" "templeos.org" +106.171.103.114 - - [11/Feb/2015:11:05:13 -0800] "GET /Wb/Compiler/Lex.html HTTP/1.1" 200 768499 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +161.195.42.127 - - [11/Feb/2015:11:06:01 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A405" "www.templeos.org" +106.171.103.114 - - [11/Feb/2015:11:06:36 -0800] "GET /Wb/Compiler/CompilerB.html HTTP/1.1" 200 79787 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +222.45.217.173 - - [11/Feb/2015:11:11:53 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Google-HTTP-Java-Client/1.17.0-rc (gzip)" "www.templeos.org" +222.45.217.173 - - [11/Feb/2015:11:11:53 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Google-HTTP-Java-Client/1.17.0-rc (gzip)" "www.templeos.org" +190.223.163.164 - - [11/Feb/2015:11:12:57 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:11:13:39 -0800] "GET /Wb/Demo/Graphics/Doodle.html HTTP/1.1" 200 24250 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +247.202.116.149 - - [11/Feb/2015:11:15:30 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.hu/" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53" "www.templeos.org" +150.150.97.41 - - [11/Feb/2015:11:22:46 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +190.223.163.164 - - [11/Feb/2015:11:24:05 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "http://www.templeos.org/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +190.223.163.164 - - [11/Feb/2015:11:24:14 -0800] "GET /Wb/Home/Wb2/LineRep.html HTTP/1.1" 200 110073 "http://www.templeos.org/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +190.223.163.164 - - [11/Feb/2015:11:24:35 -0800] "GET /Wb/Adam/AutoComplete/ACMain.html HTTP/1.1" 200 181672 "http://www.templeos.org/Wb/Home/Wb2/SymsAlpha.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +222.127.32.124 - - [11/Feb/2015:11:29:42 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +38.217.18.63 - - [11/Feb/2015:11:34:33 -0800] "GET /wordpress/wp-login.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "templeos.org" +38.217.18.63 - - [11/Feb/2015:11:34:34 -0800] "GET /section/wp-login.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "templeos.org" +150.153.134.7 - - [11/Feb/2015:11:35:25 -0800] "GET /admin/wp-login.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +150.153.134.7 - - [11/Feb/2015:11:35:25 -0800] "GET /site/wp-login.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +150.153.134.7 - - [11/Feb/2015:11:35:26 -0800] "GET /wp/wp-login.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +150.153.134.7 - - [11/Feb/2015:11:35:28 -0800] "GET /wp-login/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:11:35:31 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +217.28.223.145 - - [11/Feb/2015:11:38:41 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.nl/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +217.28.223.145 - - [11/Feb/2015:11:38:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +217.28.223.145 - - [11/Feb/2015:11:38:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +150.150.97.41 - - [11/Feb/2015:11:41:50 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +74.170.235.123 - - [11/Feb/2015:11:44:20 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +70.90.114.201 - - [11/Feb/2015:11:53:16 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:11:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +228.208.108.206 - - [11/Feb/2015:11:58:57 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:12:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +52.147.15.158 - - [11/Feb/2015:12:07:23 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB0QFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=drbbVJqgIILpUoakgdAM&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=tIj2CaAih-V9QM4hyGf6ww" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +164.176.11.140 - - [11/Feb/2015:12:07:48 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +87.5.47.200 - - [11/Feb/2015:12:11:17 -0800] "GET //RK=0 HTTP/1.1" 404 89 "http://getbot.guru/?pr=0bb7f2d00d979929148f79c3917b9371" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" "templeos.org" +114.73.133.215 - - [11/Feb/2015:12:14:06 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +164.176.11.140 - - [11/Feb/2015:12:14:19 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +122.202.35.2 - - [11/Feb/2015:12:16:05 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.2; SPH-L710T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +124.121.247.5 - - [11/Feb/2015:12:17:26 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=1LjbVJaNAsu5ggT6ioG4Dw&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=oD11tslY2Af60n_hczIYKA&bvm=bv.85761416,d.eXY" "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +124.121.247.5 - - [11/Feb/2015:12:17:26 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +246.2.100.15 - - [11/Feb/2015:12:19:29 -0800] "GET /Wb/Compiler/BackC.html HTTP/1.1" 200 586121 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +56.182.199.150 - - [11/Feb/2015:12:19:32 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +56.182.199.150 - - [11/Feb/2015:12:19:33 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +97.93.132.193 - - [11/Feb/2015:12:23:49 -0800] "GET / HTTP/1.1" 200 6329 "http://t.co/hheHFEwFTV" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +97.93.132.193 - - [11/Feb/2015:12:23:50 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +122.202.35.2 - - [11/Feb/2015:12:24:36 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Linux; Android 4.4.2; SPH-L710T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:12:27:27 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/09/Rant140906.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:12:27:27 -0800] "GET /Wb/Windows/?M=A HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +213.79.42.131 - - [11/Feb/2015:12:28:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.0; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +213.79.42.131 - - [11/Feb/2015:12:29:22 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.0; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +74.23.175.111 - - [11/Feb/2015:12:30:37 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Safari/537.71" "templeos.org" +74.23.175.111 - - [11/Feb/2015:12:30:37 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Safari/537.71" "templeos.org" +74.23.175.111 - - [11/Feb/2015:12:31:13 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Safari/537.71" "www.templeos.org" +74.23.175.111 - - [11/Feb/2015:12:31:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Safari/537.71" "www.templeos.org" +10.142.135.222 - - [11/Feb/2015:12:34:57 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCcQFjAB&url=http%3A%2F%2Fwww.templeos.org%2F&ei=7LzbVKKJKIueyQTf_ID4BQ&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=Ce7OpjijnMBjCqacWerueA&bvm=bv.85761416,d.aWw&cad=rja" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +82.243.67.16 - - [11/Feb/2015:12:35:45 -0800] "GET /Wb/Kernel/KStart.html HTTP/1.1" 200 195552 "http://t.co/rr0rLw7xed" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:12:42:23 -0800] "GET /Certs/virtual-notary-cert-randomnum-39789.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +112.149.50.24 - - [11/Feb/2015:12:43:53 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +27.8.215.50 - - [11/Feb/2015:12:45:00 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +88.218.68.100 - - [11/Feb/2015:12:45:39 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 [FBAN/FBIOS;FBAV/23.1.0.8.11;FBBV/6660503;FBDV/iPhone6,2;FBMD/iPhone;FBSN/iPhone OS;FBSV/7.1.2;FBSS/2; FBCR/elisa;FBID/phone;FBLC/fi_FI;FBOP/5]" "www.templeos.org" +150.57.222.231 - - [11/Feb/2015:12:45:56 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.co.uk/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.51.215.116 - - [11/Feb/2015:12:50:37 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +74.51.215.116 - - [11/Feb/2015:12:50:37 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +210.123.8.131 - - [11/Feb/2015:12:51:21 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +10.142.135.211 - - [11/Feb/2015:12:53:43 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36" "www.templeos.org" +10.142.135.211 - - [11/Feb/2015:12:53:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36" "www.templeos.org" +122.202.35.2 - - [11/Feb/2015:12:56:08 -0800] "GET /Wb/Kernel/ HTTP/1.1" 200 12449 "http://www.templeos.org/Wb/" "Mozilla/5.0 (Linux; Android 4.4.2; SPH-L710T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +122.202.35.2 - - [11/Feb/2015:12:56:17 -0800] "GET /Wb/Kernel/Kernel.html HTTP/1.1" 200 37007 "http://www.templeos.org/Wb/Kernel/" "Mozilla/5.0 (Linux; Android 4.4.2; SPH-L710T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +122.202.35.2 - - [11/Feb/2015:12:57:22 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.2; SPH-L710T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +129.226.244.66 - - [11/Feb/2015:12:57:40 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:12:59:59 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/09/Rant130929.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +215.120.48.102 - - [11/Feb/2015:13:01:38 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)" "www.templeos.org" +222.45.217.173 - - [11/Feb/2015:13:05:55 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Google-HTTP-Java-Client/1.17.0-rc (gzip)" "www.templeos.org" +222.45.217.173 - - [11/Feb/2015:13:05:55 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Google-HTTP-Java-Client/1.17.0-rc (gzip)" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:07:52 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB4QFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=o8TbVIPxI8SWNsuHg5gN&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=SYHEA161k2fBWIyj8t4jEA&bvm=bv.85761416,d.cWc" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:07:53 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +106.144.211.198 - - [11/Feb/2015:13:13:02 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; SeznamBot/3.2; +http://fulltext.sblog.cz/)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:13:13:07 -0800] "GET /Wb/Apps/Psalmody/Examples/free.html HTTP/1.1" 200 77268 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +50.109.162.182 - - [11/Feb/2015:13:13:17 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0" "www.templeos.org" +50.109.162.182 - - [11/Feb/2015:13:13:55 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0" "www.templeos.org" +87.5.200.32 - - [11/Feb/2015:13:15:00 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://ufa-medosmotr.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +87.5.200.32 - - [11/Feb/2015:13:15:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://ufa-medosmotr.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +222.27.15.254 - - [11/Feb/2015:13:16:21 -0800] "GET /Wb/Doc/Acknowledgements.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +222.27.15.254 - - [11/Feb/2015:13:16:21 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +88.167.200.22 - - [11/Feb/2015:13:16:38 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +182.97.104.222 - - [11/Feb/2015:13:18:16 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +101.237.12.144 - - [11/Feb/2015:13:18:39 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:18:59 -0800] "GET /Wb/Kernel/Dsk/DskC.html HTTP/1.1" 200 185918 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:19:26 -0800] "GET /Wb/Kernel/KbdMouse/Keyboard.html HTTP/1.1" 200 297077 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +240.76.155.0 - - [11/Feb/2015:13:21:01 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +240.76.155.0 - - [11/Feb/2015:13:21:01 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:21:19 -0800] "GET /Wb/Apps/AfterEgypt/AfterEgypt.html HTTP/1.1" 200 95332 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:21:56 -0800] "GET /Wb/Apps/Psalmody/Examples/restless.html HTTP/1.1" 200 20663 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +108.120.3.230 - - [11/Feb/2015:13:23:48 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=YsjbVNKoFMOVNsnMgPgC&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85761416,d.eXY" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +16.186.160.193 - - [11/Feb/2015:13:26:11 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCkQFjAB&url=http%3A%2F%2Fwww.templeos.org%2F&ei=gsjbVKfIFs2O7Qb6mIHwAg&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85761416,d.ZGU" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" +16.186.160.193 - - [11/Feb/2015:13:26:44 -0800] "GET /Wb/Kernel/Dsk/FileSysRedSea.html HTTP/1.1" 200 342512 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" +16.186.160.193 - - [11/Feb/2015:13:27:24 -0800] "GET /Wb/Doc/DolDocOverview.html HTTP/1.1" 200 48077 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:27:30 -0800] "GET /Wb/Apps/Psalmody/Examples/determination.html HTTP/1.1" 200 13957 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:28:06 -0800] "GET /Wb/Demo/Graphics/Pick3D.html HTTP/1.1" 200 140027 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +74.51.6.189 - - [11/Feb/2015:13:29:12 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "templeos.org" +16.186.160.193 - - [11/Feb/2015:13:29:21 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" +75.159.81.105 - - [11/Feb/2015:13:31:19 -0800] "GET / HTTP/1.1" 200 6329 "http://www.chimerarevo.com/hardware/templeos-il-sistema-operativo-richiesto-da-dio-182037/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +129.157.224.223 - - [11/Feb/2015:13:31:38 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 4 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Mobile Safari/537.36" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:13:33:25 -0800] "GET /Wb/Home/?N=D HTTP/1.1" 200 663 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +223.88.111.165 - - [11/Feb/2015:13:35:20 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:35:37 -0800] "GET /Wb/AdamWrappers.html HTTP/1.1" 200 21122 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:35:50 -0800] "GET /Wb/Linux/TOSZ.html HTTP/1.1" 200 158762 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:36:15 -0800] "GET /Wb/Kernel/Display.html HTTP/1.1" 200 85823 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +27.241.156.119 - - [11/Feb/2015:13:36:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "templeos.org" +183.7.224.95 - - [11/Feb/2015:13:36:28 -0800] "GET /Wb/Kernel/MultiProc.html HTTP/1.1" 200 222479 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +74.187.37.174 - - [11/Feb/2015:13:37:12 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +128.212.58.116 - - [11/Feb/2015:13:37:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)" "www.templeos.org" +202.176.250.235 - - [11/Feb/2015:13:43:22 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/10/Rant141006.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +112.240.191.115 - - [11/Feb/2015:13:44:04 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +74.51.214.50 - - [11/Feb/2015:13:44:52 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +240.92.54.138 - - [11/Feb/2015:13:46:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +240.92.54.138 - - [11/Feb/2015:13:46:34 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +38.191.148.193 - - [11/Feb/2015:13:55:13 -0800] "GET /files/DICTIONARY.TXT HTTP/1.1" 200 2555904 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +27.210.37.110 - - [11/Feb/2015:13:59:05 -0800] "GET /Wb/Kernel/Memory.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +82.39.137.4 - - [11/Feb/2015:14:01:26 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1756393434cb7a7170f4fceda22c860&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +82.39.137.4 - - [11/Feb/2015:14:01:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +126.85.190.120 - - [11/Feb/2015:14:05:45 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com.au/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +74.217.109.8 - - [11/Feb/2015:14:06:23 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.217.109.8 - - [11/Feb/2015:14:06:24 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +129.66.177.189 - - [11/Feb/2015:14:06:24 -0800] "GET /Wb/Adam/Utils/Profiler.html HTTP/1.1" 200 62042 "-" "Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)" "www.templeos.org" +126.85.190.120 - - [11/Feb/2015:14:06:44 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "https://www.google.com.au/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +189.40.12.106 - - [11/Feb/2015:14:10:08 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2013/10/Rant131024.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +189.40.12.106 - - [11/Feb/2015:14:10:08 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +189.40.12.106 - - [11/Feb/2015:14:10:08 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +108.218.70.2 - - [11/Feb/2015:14:12:43 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.2) Gecko/20150122 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org" +108.218.70.2 - - [11/Feb/2015:14:13:06 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.2) Gecko/20150122 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org" +129.226.244.175 - - [11/Feb/2015:14:13:15 -0800] "GET /Wb/Doc/KeyAlloc.html HTTP/1.1" 200 6621 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +224.200.59.240 - - [11/Feb/2015:14:16:05 -0800] "GET / HTTP/1.1" 200 6329 "http://www.losethos.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +224.200.59.240 - - [11/Feb/2015:14:16:05 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +224.200.59.240 - - [11/Feb/2015:14:16:08 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +32.75.37.174 - - [11/Feb/2015:14:16:21 -0800] "GET /Wb/Accts/TS/Wb2/Downloads.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org" +32.75.37.174 - - [11/Feb/2015:14:16:22 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org" +224.200.59.240 - - [11/Feb/2015:14:16:27 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +106.236.26.75 - - [11/Feb/2015:14:19:00 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:23 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:23 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:23 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:24 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:24 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:25 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:26 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:26 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:26 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +38.122.192.108 - - [11/Feb/2015:14:20:26 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +114.219.144.99 - - [11/Feb/2015:14:20:28 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +114.219.144.99 - - [11/Feb/2015:14:20:54 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +114.222.49.144 - - [11/Feb/2015:14:22:25 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.0.4; GT-P6200 Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Safari/537.36" "www.templeos.org" +74.51.144.58 - - [11/Feb/2015:14:27:18 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +217.86.23.255 - - [11/Feb/2015:14:29:21 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +217.86.23.255 - - [11/Feb/2015:14:29:22 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +130.183.182.159 - - [11/Feb/2015:14:32:02 -0800] "GET /Wb/Doc/DolDocOverview.html HTTP/1.1" 200 48077 "http://www.templeos.org/Wb/Doc/DolDocOverview.html" "Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" "www.templeos.org" +38.15.199.17 - - [11/Feb/2015:14:35:18 -0800] "GET / HTTP/1.1" 200 6329 "http://www.chimerarevo.com/hardware/templeos-il-sistema-operativo-richiesto-da-dio-182037/" "Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36" "www.templeos.org" +38.15.199.17 - - [11/Feb/2015:14:35:27 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:14:39:30 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Rant131031.TXT.Z HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +172.141.73.216 - - [11/Feb/2015:14:43:48 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://cpa-partnerki.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +172.141.73.216 - - [11/Feb/2015:14:43:48 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://taihouse.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +172.141.73.216 - - [11/Feb/2015:14:43:48 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://cpa-partnerki.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +172.141.73.216 - - [11/Feb/2015:14:43:49 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://cpa-partnerki.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +172.141.73.216 - - [11/Feb/2015:14:43:49 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://taihouse.ru/" "Opera/7.54 (Windows NT 5.1; U) [pl]" "www.templeos.org" +119.225.240.220 - - [11/Feb/2015:14:45:14 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +119.225.240.88 - - [11/Feb/2015:14:45:15 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +130.158.40.220 - - [11/Feb/2015:14:45:21 -0800] "GET / HTTP/1.1" 200 6329 "http://www.gwern.net/Blackmail" "ArchiveTeam ArchiveBot/20150209.01 (wpull 0.1007a1) and not Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +202.176.251.187 - - [11/Feb/2015:14:46:06 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses25.html HTTP/1.1" 200 3175 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +233.209.22.129 - - [11/Feb/2015:14:48:01 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.hu/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36" "www.templeos.org" +193.22.148.87 - - [11/Feb/2015:14:52:26 -0800] "HEAD /TempleOSCD.ISO HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 2.0.50727)" "www.templeos.org" +88.41.4.142 - - [11/Feb/2015:14:53:19 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:14:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +88.41.4.142 - - [11/Feb/2015:14:55:51 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +2.18.244.210 - - [11/Feb/2015:14:58:01 -0800] "GET /Wb/Accts/TS/Wb2/TAD/Files/Text/2Cities.html HTTP/1.1" 404 89 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +2.18.244.210 - - [11/Feb/2015:14:58:01 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:15:00:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +202.176.250.20 - - [11/Feb/2015:15:01:06 -0800] "GET /Wb/Doc/Lex.html HTTP/1.1" 200 2981 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +39.252.113.221 - - [11/Feb/2015:15:03:29 -0800] "GET / HTTP/1.1" 200 6329 "-" "NetLyzer FastProbe" "www.templeos.org" +136.164.16.223 - - [11/Feb/2015:15:04:12 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.co.uk/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +136.164.16.223 - - [11/Feb/2015:15:04:13 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +156.243.71.115 - - [11/Feb/2015:15:04:22 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.137.54.84 - - [11/Feb/2015:15:04:57 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2121.0 Safari/537.36" "www.templeos.org" +88.41.4.142 - - [11/Feb/2015:15:05:45 -0800] "GET /Wb/Doc/Features.html HTTP/1.1" 200 8597 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +88.41.4.142 - - [11/Feb/2015:15:11:54 -0800] "GET /Wb/Home/Wb2/LineRep.html HTTP/1.1" 200 110073 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +88.41.4.142 - - [11/Feb/2015:15:12:45 -0800] "GET /Wb/Adam/God/GodDoodle.html HTTP/1.1" 200 95912 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +97.129.16.212 - - [11/Feb/2015:15:12:59 -0800] "GET / HTTP/1.1" 200 6329 "http://www.losethos.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:16.0) Gecko/20100101 Firefox/16.0" "www.templeos.org" +97.129.16.212 - - [11/Feb/2015:15:12:59 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:16.0) Gecko/20100101 Firefox/16.0" "www.templeos.org" +34.222.78.124 - - [11/Feb/2015:15:14:30 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +88.41.4.142 - - [11/Feb/2015:15:14:51 -0800] "GET /Wb/Demo/Graphics/LowPassFilter.html HTTP/1.1" 200 31098 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +229.137.198.53 - - [11/Feb/2015:15:16:43 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:15:18:24 -0800] "GET /Wb/Demo/Lectures/Uncached.html HTTP/1.1" 200 25539 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +115.195.71.92 - - [11/Feb/2015:15:20:23 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=59a235bdb0503729dbf2f256a99267ac&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Linux; Android 4.4.2; SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +115.195.71.92 - - [11/Feb/2015:15:20:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.2; SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +115.195.71.92 - - [11/Feb/2015:15:20:48 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.2; SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +111.203.153.45 - - [11/Feb/2015:15:25:31 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:15:36:33 -0800] "GET /Wb/Apps/Vocabulary/VocabQuiz.html HTTP/1.1" 200 27871 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +74.187.182.220 - - [11/Feb/2015:15:36:43 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0217A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +192.140.118.152 - - [11/Feb/2015:15:37:30 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +193.84.229.200 - - [11/Feb/2015:15:38:47 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" "templeos.org" +111.203.153.45 - - [11/Feb/2015:15:41:49 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36" "www.templeos.org" +189.135.54.152 - - [11/Feb/2015:15:41:51 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +68.126.105.238 - - [11/Feb/2015:15:42:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +68.126.105.238 - - [11/Feb/2015:15:42:32 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +68.126.105.238 - - [11/Feb/2015:15:43:05 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +68.126.105.238 - - [11/Feb/2015:15:43:33 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +68.126.105.238 - - [11/Feb/2015:15:45:36 -0800] "GET /Wb/Apps/AfterEgypt/Comics/ HTTP/1.1" 200 20959 "http://www.templeos.org/Wb/Adam/God/HSNotes.html" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +68.126.105.238 - - [11/Feb/2015:15:45:39 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses01.html HTTP/1.1" 200 2935 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +74.165.228.190 - - [11/Feb/2015:15:47:53 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_6 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11B651" "www.templeos.org" +27.210.37.166 - - [11/Feb/2015:15:49:25 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.210.37.166 - - [11/Feb/2015:15:49:25 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +68.126.105.238 - - [11/Feb/2015:15:51:53 -0800] "GET /Wb/Apps/AfterEgypt/Comics/ HTTP/1.1" 200 20959 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +68.126.105.238 - - [11/Feb/2015:15:52:02 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses01.TXT.Z HTTP/1.1" 200 324 "-" "curl/7.40.0" "www.templeos.org" +68.126.105.238 - - [11/Feb/2015:15:52:05 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses01.TXT.Z HTTP/1.1" 200 324 "-" "curl/7.40.0" "www.templeos.org" +68.126.105.238 - - [11/Feb/2015:15:52:06 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses01.TXT.Z HTTP/1.1" 200 324 "-" "curl/7.40.0" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:15:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +74.51.144.214 - - [11/Feb/2015:15:57:39 -0800] "GET /Wb/Doc/Install.html HTTP/1.1" 200 10714 "-" "SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +189.117.13.223 - - [11/Feb/2015:16:01:30 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +189.18.230.158 - - [11/Feb/2015:16:20:25 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +83.79.133.239 - - [11/Feb/2015:16:21:11 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +240.6.254.12 - - [11/Feb/2015:16:26:31 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +240.6.254.12 - - [11/Feb/2015:16:26:32 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:16:28:56 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +88.59.144.89 - - [11/Feb/2015:16:29:57 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.226.105.142 - - [11/Feb/2015:16:31:06 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +119.42.203.227 - - [11/Feb/2015:16:32:32 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "templeos.org" +119.42.203.227 - - [11/Feb/2015:16:32:32 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "templeos.org" +228.141.141.213 - - [11/Feb/2015:16:38:14 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/02/Rant140228.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +222.55.36.232 - - [11/Feb/2015:16:43:21 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +111.203.153.45 - - [11/Feb/2015:16:49:13 -0800] "GET /Wb/ HTTP/1.1" 200 5158 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36" "www.templeos.org" +111.203.153.45 - - [11/Feb/2015:16:49:17 -0800] "GET /Wb/0000Boot/ HTTP/1.1" 200 968 "http://www.templeos.org/Wb/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36" "www.templeos.org" +135.5.242.52 - - [11/Feb/2015:16:49:45 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG-SGH-I337 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36" "www.templeos.org" +111.203.153.45 - - [11/Feb/2015:16:50:29 -0800] "GET /Wb/Linux/TOSZ.CPP HTTP/1.1" 200 6859 "http://www.templeos.org/Wb/Linux/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36" "www.templeos.org" +124.235.243.82 - - [11/Feb/2015:16:57:28 -0800] "GET /Wb/Home/Wb2/Imgs/MenuV0104.BMP HTTP/1.1" 200 153718 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +124.235.243.82 - - [11/Feb/2015:16:59:02 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "www.templeos.org" +56.172.235.120 - - [11/Feb/2015:16:59:32 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +56.172.235.120 - - [11/Feb/2015:16:59:33 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +216.7.243.192 - - [11/Feb/2015:16:59:38 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ca/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +216.7.243.192 - - [11/Feb/2015:16:59:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +124.235.243.82 - - [11/Feb/2015:17:03:24 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "www.templeos.org" +27.241.156.119 - - [11/Feb/2015:17:05:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +124.235.243.82 - - [11/Feb/2015:17:07:36 -0800] "GET /images/Machine.jpg HTTP/1.1" 200 90402 "http://motherboard.vice.com/read/gods-lonely-programmer" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +106.144.211.5 - - [11/Feb/2015:17:11:04 -0800] "GET /files/History/ HTTP/1.1" 200 3176 "-" "Mozilla/5.0 (compatible; SeznamBot/3.2; +http://fulltext.sblog.cz/)" "www.templeos.org" +27.241.156.119 - - [11/Feb/2015:17:11:12 -0800] "GET /Wb/Accts/TS/Wb2/AfterEgypt03.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +179.177.175.181 - - [11/Feb/2015:17:16:32 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +48.232.145.192 - - [11/Feb/2015:17:16:50 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +48.232.145.192 - - [11/Feb/2015:17:16:50 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.187.182.174 - - [11/Feb/2015:17:19:23 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0217A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +225.24.133.200 - - [11/Feb/2015:17:20:05 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/6.2.3 Safari/537.85.12" "www.templeos.org" +74.51.200.116 - - [11/Feb/2015:17:21:28 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "templeos.org" +74.51.200.62 - - [11/Feb/2015:17:21:28 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "templeos.org" +228.141.169.196 - - [11/Feb/2015:17:23:07 -0800] "GET /Wb/Apps/AfterEgypt/ HTTP/1.1" 200 4643 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +225.24.133.200 - - [11/Feb/2015:17:26:32 -0800] "GET /Wb/Home/Wb2/Imgs/MenuV0104.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/6.2.3 Safari/537.85.12" "www.templeos.org" +225.24.133.200 - - [11/Feb/2015:17:26:32 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/6.2.3 Safari/537.85.12" "www.templeos.org" +225.24.133.200 - - [11/Feb/2015:17:27:26 -0800] "GET /Wb/Doc/Features.html HTTP/1.1" 200 8597 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/6.2.3 Safari/537.85.12" "www.templeos.org" +2.124.91.123 - - [11/Feb/2015:17:32:16 -0800] "GET / HTTP/1.1" 200 6329 "https://duckduckgo.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "templeos.org" +74.51.200.116 - - [11/Feb/2015:17:32:20 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "templeos.org" +2.124.91.123 - - [11/Feb/2015:17:32:41 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +2.124.91.123 - - [11/Feb/2015:17:33:14 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:17:34:10 -0800] "GET /Wb/Apps/?D=A HTTP/1.1" 200 2307 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +74.201.78.8 - - [11/Feb/2015:17:36:56 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +48.232.145.192 - - [11/Feb/2015:17:38:16 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +48.232.145.192 - - [11/Feb/2015:17:38:54 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +48.232.145.192 - - [11/Feb/2015:17:38:56 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +48.232.145.192 - - [11/Feb/2015:17:39:47 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "http://www.templeos.org/Wb/Home/Wb2/History.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +215.134.105.68 - - [11/Feb/2015:17:44:23 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=cwXcVPDVCpLwoAT-0oCgBg&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85970519,d.cGU" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +215.134.105.68 - - [11/Feb/2015:17:44:43 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +215.134.105.68 - - [11/Feb/2015:17:45:03 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCoQFjAB&url=http%3A%2F%2Fwww.templeos.org%2FTempleOS.html&ei=cwXcVPDVCpLwoAT-0oCgBg&usg=AFQjCNFgKoJBriQLYGUTwabTk3qxKB7Xfg&bvm=bv.85970519,d.cGU" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +48.232.145.192 - - [11/Feb/2015:17:45:11 -0800] "GET /Wb/Home/Wb2/LineRep.html HTTP/1.1" 200 110073 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +112.130.98.166 - - [11/Feb/2015:17:45:44 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +112.130.98.166 - - [11/Feb/2015:17:45:47 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +231.93.210.244 - - [11/Feb/2015:17:46:04 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +231.93.210.244 - - [11/Feb/2015:17:47:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +223.88.111.136 - - [11/Feb/2015:17:48:48 -0800] "GET /Certs/virtual-notary-cert-randomnum-47974.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +92.158.87.131 - - [11/Feb/2015:17:50:21 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0" "www.templeos.org" +2.124.91.123 - - [11/Feb/2015:17:53:25 -0800] "GET /Wb/Home/Wb2/LineRep.html HTTP/1.1" 200 110073 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +2.124.91.123 - - [11/Feb/2015:17:53:48 -0800] "GET /Wb/Doc/Mysteries.html HTTP/1.1" 200 18410 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +27.241.156.119 - - [11/Feb/2015:17:57:08 -0800] "GET /Wb/Apps/Budget/Load.html HTTP/1.1" 200 7085 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +2.124.91.123 - - [11/Feb/2015:17:57:41 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36" "www.templeos.org" +74.51.144.58 - - [11/Feb/2015:18:01:04 -0800] "GET /Wb/Doc/Install.html HTTP/1.1" 200 10714 "-" "DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +39.252.113.221 - - [11/Feb/2015:18:04:42 -0800] "GET / HTTP/1.1" 200 6329 "-" "NetLyzer FastProbe" "www.templeos.org" +143.69.100.171 - - [11/Feb/2015:18:04:45 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +74.51.144.214 - - [11/Feb/2015:18:11:27 -0800] "GET /Wb/Compiler/ExpParser.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +34.222.78.124 - - [11/Feb/2015:18:14:32 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +34.222.78.124 - - [11/Feb/2015:18:14:33 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +119.165.98.13 - - [11/Feb/2015:18:18:54 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/40.0.2214.111 Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +119.165.98.13 - - [11/Feb/2015:18:18:54 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/40.0.2214.111 Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +198.44.30.180 - - [11/Feb/2015:18:21:13 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "templeos.org" +108.49.204.202 - - [11/Feb/2015:18:21:46 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +150.145.20.236 - - [11/Feb/2015:18:22:48 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100317 SUSE/3.5.9-0.1.1 Firefox/3.5.9" "www.templeos.org" +150.145.20.84 - - [11/Feb/2015:18:22:49 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 524288 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100317 SUSE/3.5.9-0.1.1 Firefox/3.5.9" "www.templeos.org" +58.71.218.57 - - [11/Feb/2015:18:25:51 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 3616 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +111.205.193.236 - - [11/Feb/2015:18:26:02 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +18.120.217.62 - - [11/Feb/2015:18:26:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +18.120.217.62 - - [11/Feb/2015:18:26:49 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:18:28:52 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/07/Rant140712.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:18:32:41 -0800] "GET /Certs/virtual-notary-cert-randomnum-56052.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +189.117.13.223 - - [11/Feb/2015:18:36:55 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:18:37:45 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/01/?D=D HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +192.140.118.152 - - [11/Feb/2015:18:38:24 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +183.160.76.101 - - [11/Feb/2015:18:38:57 -0800] "GET / HTTP/1.1" 200 6329 "-" "ZEEFscraper 0.3 (+https://zeef.com/scraper)" "www.templeos.org" +183.160.76.101 - - [11/Feb/2015:18:38:57 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "ZEEFscraper 0.3 (+https://zeef.com/scraper)" "www.templeos.org" +52.53.176.20 - - [11/Feb/2015:18:51:14 -0800] "GET /Wb/Accts/TS/Wb2/Hymns.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +119.225.255.174 - - [11/Feb/2015:18:55:04 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +212.15.17.5 - - [11/Feb/2015:18:58:13 -0800] "GET /Wb/Adam/Snd/SndMath.html HTTP/1.1" 200 111985 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +215.73.32.178 - - [11/Feb/2015:18:59:33 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org" +215.73.32.178 - - [11/Feb/2015:18:59:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:19:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +215.73.32.178 - - [11/Feb/2015:19:00:31 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org" +215.73.32.178 - - [11/Feb/2015:19:01:52 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org" +215.73.32.178 - - [11/Feb/2015:19:02:18 -0800] "GET /Wb/Apps/AfterEgypt/Comics HTTP/1.1" 301 113 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org" +215.73.32.178 - - [11/Feb/2015:19:02:19 -0800] "GET /Wb/Apps/AfterEgypt/Comics/ HTTP/1.1" 200 20959 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org" +92.74.116.43 - - [11/Feb/2015:19:04:58 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +52.53.176.115 - - [11/Feb/2015:19:09:02 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +215.73.32.178 - - [11/Feb/2015:19:09:24 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org" +215.73.32.178 - - [11/Feb/2015:19:10:41 -0800] "GET /Wb/Home/Wb2/Files HTTP/1.1" 301 105 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org" +27.241.156.119 - - [11/Feb/2015:19:12:21 -0800] "GET /Wb/Accts/TS/Wb2/AfterEgypt03.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:19:14:34 -0800] "GET /Wb/Demo/Spy.html HTTP/1.1" 200 29873 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +237.74.135.250 - - [11/Feb/2015:19:15:23 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25" "www.templeos.org" +47.161.53.230 - - [11/Feb/2015:19:18:34 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "-" "mifetcher/1.0" "www.templeos.org" +172.141.73.216 - - [11/Feb/2015:19:20:46 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141012.html HTTP/1.1" 404 89 "http://xn--80ahdks.net/" "Opera/8.00 (Windows NT 5.1; U; en)" "www.templeos.org" +172.141.73.216 - - [11/Feb/2015:19:20:47 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141012.html HTTP/1.1" 404 89 "http://xn--80ahdks.net/" "Opera/8.00 (Windows NT 5.1; U; en)" "www.templeos.org" +52.53.176.42 - - [11/Feb/2015:19:22:09 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +104.237.154.130 - - [11/Feb/2015:19:22:27 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:19:25:21 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses04.html HTTP/1.1" 200 2928 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:19:25:21 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses25.html HTTP/1.1" 200 3175 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +224.37.38.66 - - [11/Feb/2015:19:27:23 -0800] "GET /Wb/Home/Wb2/Files/Words/Ingredients.html HTTP/1.1" 200 30633 "https://www.google.com/" "Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:19:29:20 -0800] "GET /Certs/virtual-notary-cert-randomnum-39534.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +16.254.102.53 - - [11/Feb/2015:19:29:43 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.co.uk/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +234.111.185.200 - - [11/Feb/2015:19:29:43 -0800] "GET / HTTP/1.1" 200 6329 "-" "www.ahmadsoftware.com" "www.templeos.org" +52.53.176.53 - - [11/Feb/2015:19:30:08 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/TADRants.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +207.244.49.30 - - [11/Feb/2015:19:30:53 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +207.244.49.30 - - [11/Feb/2015:19:31:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +175.175.225.39 - - [11/Feb/2015:19:35:17 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +190.241.251.38 - - [11/Feb/2015:19:45:40 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)" "www.templeos.org" +190.241.251.38 - - [11/Feb/2015:19:45:41 -0800] "GET /apple-touch-icon-72x72.png HTTP/1.1" 404 89 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)" "www.templeos.org" +82.144.237.15 - - [11/Feb/2015:19:53:49 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=0523ff5c0c3046e85673af71613146f3&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +82.144.237.15 - - [11/Feb/2015:19:54:52 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +61.87.248.67 - - [11/Feb/2015:19:55:26 -0800] "GET /Wb/Home/Wb2/Files/Text/Yankee.TXT HTTP/1.1" 200 663207 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36" "www.templeos.org" +82.144.237.15 - - [11/Feb/2015:19:55:40 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.53.176.42 - - [11/Feb/2015:19:56:47 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +129.226.244.80 - - [11/Feb/2015:19:58:05 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +181.232.11.60 - - [11/Feb/2015:19:58:50 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +112.103.200.223 - - [11/Feb/2015:19:59:07 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +181.232.11.60 - - [11/Feb/2015:20:00:12 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "https://www.google.co.jp/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +202.176.251.139 - - [11/Feb/2015:20:01:16 -0800] "GET /Wb/Adam/Boot HTTP/1.1" 301 100 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +202.176.251.156 - - [11/Feb/2015:20:01:18 -0800] "GET /Wb/Adam/Boot/ HTTP/1.1" 200 2521 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +190.163.176.154 - - [11/Feb/2015:20:01:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/7.0.6 Safari/537.78.2" "www.templeos.org" +215.120.48.236 - - [11/Feb/2015:20:04:14 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +52.53.176.160 - - [11/Feb/2015:20:08:46 -0800] "GET /Wb/Doc/Start.TXT.Z HTTP/1.1" 200 202 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +121.139.44.4 - - [11/Feb/2015:20:12:12 -0800] "HEAD /robots.txt HTTP/1.1" 404 0 "-" "creepyCrawler" "www.templeos.org" +241.159.120.16 - - [11/Feb/2015:20:24:42 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +81.253.5.237 - - [11/Feb/2015:20:26:45 -0800] "GET /wb/home/wb2/videos.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:20:27:48 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2013/10/Rant131026.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +52.53.176.236 - - [11/Feb/2015:20:41:43 -0800] "GET /Wb/Accts/TS/TAD/MusicOrgan/battlehymnsolo.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +129.226.244.238 - - [11/Feb/2015:20:42:40 -0800] "GET /Wb/Doc/KeyAlloc.html HTTP/1.1" 200 6621 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +222.23.138.147 - - [11/Feb/2015:20:43:36 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 3600 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.23.138.147 - - [11/Feb/2015:20:43:59 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +121.139.44.4 - - [11/Feb/2015:20:44:39 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "-" "creepyCrawler" "www.templeos.org" +58.71.218.57 - - [11/Feb/2015:20:44:40 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +121.139.44.4 - - [11/Feb/2015:20:45:40 -0800] "HEAD /robots.txt HTTP/1.1" 404 0 "-" "creepyCrawler" "www.templeos.org" +58.71.218.57 - - [11/Feb/2015:20:45:42 -0800] "GET /logs/ HTTP/1.1" 200 5473 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +121.139.44.4 - - [11/Feb/2015:20:45:45 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/02/Rant140218.html HTTP/1.1" 404 89 "-" "creepyCrawler" "www.templeos.org" +47.31.174.175 - - [11/Feb/2015:20:54:15 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "YisouSpider" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:20:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +130.41.233.161 - - [11/Feb/2015:20:55:54 -0800] "GET /Wb/Demo/WebLogExample/access_090509.html HTTP/1.1" 200 217406 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +52.53.176.185 - - [11/Feb/2015:20:56:12 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Rant131201.TXT.Z HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:20:57:41 -0800] "GET /Certs/virtual-notary-cert-randomnum-46487.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +129.226.244.80 - - [11/Feb/2015:21:00:24 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +241.159.225.120 - - [11/Feb/2015:21:02:04 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +52.53.176.58 - - [11/Feb/2015:21:10:47 -0800] "GET /Wb/Kernel/Sched.CPP.Z HTTP/1.1" 200 4669 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +52.53.176.100 - - [11/Feb/2015:21:11:33 -0800] "GET /Wb/Demo/Games/Squirt.html HTTP/1.1" 200 183425 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +199.153.192.55 - - [11/Feb/2015:21:12:18 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Python-urllib/2.7 AppEngine-Google; (+http://code.google.com/appengine; appid: s~jkirchartz)" "www.templeos.org" +229.137.198.53 - - [11/Feb/2015:21:17:39 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:21:17:53 -0800] "GET /Wb/Doc/Quirks.html HTTP/1.1" 200 10167 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +60.214.139.33 - - [11/Feb/2015:21:18:40 -0800] "GET / HTTP/1.1" 200 6329 "http://www.chimerarevo.com/hardware/templeos-il-sistema-operativo-richiesto-da-dio-182037/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org" +2.18.244.210 - - [11/Feb/2015:21:21:47 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:21:23:16 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses54.html HTTP/1.1" 200 3326 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +63.41.58.152 - - [11/Feb/2015:21:23:25 -0800] "GET / HTTP/1.1" 200 6329 "http://www.losethos.com/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +63.41.58.152 - - [11/Feb/2015:21:23:31 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 3600 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.53.176.58 - - [11/Feb/2015:21:32:22 -0800] "GET /Wb/Demo/Progress.html HTTP/1.1" 200 23466 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:21:34:13 -0800] "GET /Wb/Adam/AMath.html HTTP/1.1" 200 60604 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:21:34:51 -0800] "GET /Wb/Adam/DolDoc/DocInit.html HTTP/1.1" 200 73019 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +52.53.176.185 - - [11/Feb/2015:21:35:35 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses25.TXT.Z HTTP/1.1" 200 376 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:21:36:24 -0800] "GET /Wb/Apps/Budget/Accts.html HTTP/1.1" 200 2736 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +89.137.79.96 - - [11/Feb/2015:21:37:02 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +222.214.252.177 - - [11/Feb/2015:21:37:40 -0800] "GET / HTTP/1.1" 200 6329 "http://t.co/hheHFEwFTV" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +222.214.252.177 - - [11/Feb/2015:21:37:41 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.53.176.242 - - [11/Feb/2015:21:37:59 -0800] "GET /Wb/Adam/Boot/ HTTP/1.1" 200 2521 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +89.249.211.222 - - [11/Feb/2015:21:38:13 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +89.249.211.222 - - [11/Feb/2015:21:38:13 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:13 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:13 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:14 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:14 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:14 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:14 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:14 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:14 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:14 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:14 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:14 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:15 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:15 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:15 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:15 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:15 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:15 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:15 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:15 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:15 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:16 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:16 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:16 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +38.122.192.140 - - [11/Feb/2015:21:38:16 -0800] "GET / HTTP/1.1" 200 6329 "http://www.netnews.at/?ratgeber=webhosting-provider-competition" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +56.210.117.225 - - [11/Feb/2015:21:39:42 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5" "templeos.org" +56.210.117.225 - - [11/Feb/2015:21:39:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5" "templeos.org" +58.71.218.57 - - [11/Feb/2015:21:42:31 -0800] "GET /logs/ HTTP/1.1" 200 5473 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +58.71.218.57 - - [11/Feb/2015:21:42:34 -0800] "GET /logs/access.log HTTP/1.1" 200 216479 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.214.252.177 - - [11/Feb/2015:21:43:30 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +27.241.156.119 - - [11/Feb/2015:21:45:58 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +129.226.244.66 - - [11/Feb/2015:21:47:26 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +52.53.176.75 - - [11/Feb/2015:21:52:31 -0800] "GET /Wb/Adam/Boot/BootIns.html HTTP/1.1" 200 138815 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +246.2.100.15 - - [11/Feb/2015:21:54:13 -0800] "GET /Wb/Kernel/KbdMouse/ HTTP/1.1" 200 1700 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:21:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +216.115.61.234 - - [11/Feb/2015:21:55:41 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +216.115.61.234 - - [11/Feb/2015:21:55:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +216.115.61.234 - - [11/Feb/2015:21:56:55 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +216.115.61.234 - - [11/Feb/2015:21:58:21 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +216.115.61.234 - - [11/Feb/2015:21:58:21 -0800] "GET /Wb/Home/Wb2/Imgs/MenuV0104.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +216.115.61.234 - - [11/Feb/2015:21:58:21 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:22:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +27.24.108.122 - - [11/Feb/2015:22:00:27 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.24.108.122 - - [11/Feb/2015:22:00:27 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +27.241.156.119 - - [11/Feb/2015:22:00:44 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Img008.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +47.161.53.121 - - [11/Feb/2015:22:02:42 -0800] "GET /Wb/Doc/RedSea.html HTTP/1.1" 200 23788 "-" "mifetcher/1.0" "www.templeos.org" +47.161.53.78 - - [11/Feb/2015:22:02:42 -0800] "GET /Wb/Demo/Exceptions.html HTTP/1.1" 200 19013 "-" "mifetcher/1.0" "www.templeos.org" +52.53.176.100 - - [11/Feb/2015:22:03:33 -0800] "GET /Wb/Home/?S=A HTTP/1.1" 200 663 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +52.53.176.235 - - [11/Feb/2015:22:04:02 -0800] "GET /Wb/Apps/ToTheFront/?N=A HTTP/1.1" 200 1814 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +129.226.244.238 - - [11/Feb/2015:22:04:51 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +92.101.67.98 - - [11/Feb/2015:22:07:35 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:22:10:44 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/06/Rant140626.TXT.Z HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +129.226.244.66 - - [11/Feb/2015:22:12:30 -0800] "GET /Wb/Adam/Gr/SpriteEd.html HTTP/1.1" 200 639471 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +52.53.176.73 - - [11/Feb/2015:22:13:39 -0800] "GET /Wb/Compiler/Back1b.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +98.159.204.65 - - [11/Feb/2015:22:13:40 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141012.html HTTP/1.1" 404 89 "http://doska-vsem.ru/" "Mozilla/5.0 (compatible; Add Catalog/2.1;)" "www.templeos.org" +98.159.204.65 - - [11/Feb/2015:22:13:41 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141012.html HTTP/1.1" 404 89 "http://doska-vsem.ru/" "Mozilla/5.0 (compatible; Add Catalog/2.1;)" "www.templeos.org" +98.159.204.65 - - [11/Feb/2015:22:13:41 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141012.html HTTP/1.1" 404 89 "http://doska-vsem.ru/" "Mozilla/5.0 (compatible; Add Catalog/2.1;)" "www.templeos.org" +135.231.146.192 - - [11/Feb/2015:22:15:31 -0800] "GET /Wb/Accts/TS/Wb2/Games.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +135.231.146.192 - - [11/Feb/2015:22:15:38 -0800] "GET /Wb/Accts/TS/Wb2/Games.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +135.231.146.192 - - [11/Feb/2015:22:19:11 -0800] "GET /Wb/Kernel/Adam1.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +135.231.146.192 - - [11/Feb/2015:22:19:21 -0800] "GET /Wb/Accts/Adam3.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +135.231.146.192 - - [11/Feb/2015:22:21:14 -0800] "GET /Wb/Accts/TS/Wb2/LineCnt.html HTTP/1.1" 404 89 "-" "AlienBlue/2.9.2 CFNetwork/711.1.16 Darwin/14.0.0" "www.templeos.org" +135.231.146.192 - - [11/Feb/2015:22:21:15 -0800] "GET /Wb/Accts/TS/Wb2/LineCnt.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +135.231.146.192 - - [11/Feb/2015:22:21:18 -0800] "GET /Wb/Accts/TS/Wb2/SymsAlpha.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466" "www.templeos.org" +202.176.251.152 - - [11/Feb/2015:22:22:23 -0800] "GET /Wb/PersonalNotes.html HTTP/1.1" 200 2556 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +223.88.111.136 - - [11/Feb/2015:22:22:32 -0800] "GET /Wb/Doc/TOSZ.html HTTP/1.1" 200 3187 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:22:24:23 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/Rant130926.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:22:24:24 -0800] "GET /Wb/Adam/Hash2a.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +228.141.169.196 - - [11/Feb/2015:22:24:24 -0800] "GET /Wb/Compiler/Hash1b.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +189.34.163.43 - - [11/Feb/2015:22:27:47 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +189.34.163.43 - - [11/Feb/2015:22:27:47 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2013/12/Rant131224.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +189.34.163.43 - - [11/Feb/2015:22:27:47 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +74.51.200.50 - - [11/Feb/2015:22:28:29 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +74.51.200.50 - - [11/Feb/2015:22:28:29 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +52.53.176.185 - - [11/Feb/2015:22:29:24 -0800] "GET /Wb/Home/Wb2/Files/Words/?N=A HTTP/1.1" 200 1997 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:22:30:49 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +52.53.176.236 - - [11/Feb/2015:22:35:47 -0800] "GET /Wb/Accts/TS/TAD/PersonalMenu.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +74.51.144.214 - - [11/Feb/2015:22:38:30 -0800] "GET /Wb/Adam/WordStat/WSMain.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:17 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:18 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:18 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:18 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:18 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:18 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:19 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:19 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:19 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:20 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:20 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:21 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +175.107.111.93 - - [11/Feb/2015:22:41:21 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +122.43.121.5 - - [11/Feb/2015:22:41:58 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +122.43.121.5 - - [11/Feb/2015:22:42:11 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +240.177.94.44 - - [11/Feb/2015:22:42:13 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +240.177.94.44 - - [11/Feb/2015:22:42:52 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +190.248.157.66 - - [11/Feb/2015:22:43:24 -0800] "GET /images/Machine.jpg HTTP/1.1" 200 90402 "http://motherboard.vice.com/read/gods-lonely-programmer" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +190.248.157.66 - - [11/Feb/2015:22:43:51 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +190.248.157.66 - - [11/Feb/2015:22:44:07 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +175.181.130.173 - - [11/Feb/2015:22:46:49 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Uzbl (Webkit 2.4) (Linux x86_64 [x86_64])" "www.templeos.org" +70.112.108.22 - - [11/Feb/2015:22:48:48 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +70.112.108.22 - - [11/Feb/2015:22:49:04 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +111.127.160.133 - - [11/Feb/2015:22:50:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36 OPR/28.0.1750.15 (Edition beta)" "www.templeos.org" +111.127.160.133 - - [11/Feb/2015:22:50:35 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36 OPR/28.0.1750.15 (Edition beta)" "www.templeos.org" +129.226.244.80 - - [11/Feb/2015:22:50:36 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +111.127.160.133 - - [11/Feb/2015:22:50:56 -0800] "GET /Wb/Home/Wb2/Files HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36 OPR/28.0.1750.15 (Edition beta)" "www.templeos.org" +111.127.160.133 - - [11/Feb/2015:22:50:56 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36 OPR/28.0.1750.15 (Edition beta)" "www.templeos.org" +39.83.94.17 - - [11/Feb/2015:22:55:35 -0800] "GET /Wb/Doc/MultiCore.html HTTP/1.1" 200 5292 "-" "Mozilla/5.0 (compatible; XoviBot/2.0; +http://www.xovibot.net/)" "www.templeos.org" +185.106.116.254 - - [11/Feb/2015:22:57:24 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +74.50.246.196 - - [11/Feb/2015:22:57:37 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Linux; Android 5.0.1; LG-D838 Build/LRX21Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +74.50.246.196 - - [11/Feb/2015:22:57:58 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 5.0.1; LG-D838 Build/LRX21Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +74.50.246.196 - - [11/Feb/2015:22:57:59 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 5.0.1; LG-D838 Build/LRX21Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +74.50.246.196 - - [11/Feb/2015:22:58:03 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Linux; Android 5.0.1; LG-D838 Build/LRX21Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +74.50.246.196 - - [11/Feb/2015:22:58:04 -0800] "GET /Wb/Home/Wb2/Imgs/MenuV0104.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Linux; Android 5.0.1; LG-D838 Build/LRX21Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +185.106.116.254 - - [11/Feb/2015:22:58:33 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +185.106.116.254 - - [11/Feb/2015:22:59:15 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +74.51.215.137 - - [11/Feb/2015:22:59:39 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.it/" "Mozilla/5.0 (Linux; Android 4.4.4; A0001 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +74.51.215.185 - - [11/Feb/2015:22:59:42 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.4; A0001 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:23:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +52.53.176.242 - - [11/Feb/2015:23:04:32 -0800] "GET /Wb/Apps/Logic/Logic.html HTTP/1.1" 200 320827 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +56.200.27.17 - - [11/Feb/2015:23:08:10 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +149.76.214.50 - - [11/Feb/2015:23:08:19 -0800] "GET /files/DICTIONARY.TXT HTTP/1.1" 200 8060928 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org" +27.210.37.110 - - [11/Feb/2015:23:15:49 -0800] "GET /Wb/Adam/Gr/GrBitMap.html HTTP/1.1" 200 1037461 "-" "Twitterbot/1.0" "www.templeos.org" +151.69.116.248 - - [11/Feb/2015:23:18:55 -0800] "GET /robots.txt HTTP/1.1" 404 89 "http://www.templeos.org/robots.txt" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)" "www.templeos.org" +122.43.121.5 - - [11/Feb/2015:23:19:26 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +122.43.121.5 - - [11/Feb/2015:23:22:17 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 3600 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:23:24:57 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses31.html HTTP/1.1" 200 2957 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +224.115.18.243 - - [11/Feb/2015:23:29:31 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "http://r.search.yahoo.com/_ylt=AwrTcc8oVtxURO4AV.8PxQt.;_ylu=X3oDMTEzbmdoYXFmBHNlYwNzcgRwb3MDMgRjb2xvA2dxMQR2dGlkA1lIUzAwNF8x/RV=2/RE=1423754920/RO=10/RU=http%3a%2f%2fwww.templeos.org%2fWb%2fMisc%2fPCIDevices.html/RK=0/RS=hR1HRa9C620s_g4BfdgysJyCuro-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +108.204.215.78 - - [11/Feb/2015:23:31:38 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +108.204.215.78 - - [11/Feb/2015:23:31:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +108.204.215.78 - - [11/Feb/2015:23:31:57 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +108.204.215.78 - - [11/Feb/2015:23:32:43 -0800] "GET /Wb/Home/Wb2/Files HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +108.204.215.78 - - [11/Feb/2015:23:32:44 -0800] "GET /Wb/Home/Wb2/Files/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +228.141.141.213 - - [11/Feb/2015:23:36:28 -0800] "GET /Wb/Demo/Carry.html HTTP/1.1" 200 14681 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +58.128.177.232 - - [11/Feb/2015:23:50:51 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/03/Rant140305.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +52.53.176.185 - - [11/Feb/2015:23:51:52 -0800] "GET /Wb/Adam/AExts.HPP.Z HTTP/1.1" 200 2002 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +70.90.114.220 - - [11/Feb/2015:23:53:53 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0213A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +70.90.114.220 - - [11/Feb/2015:23:53:53 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0213A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +131.8.134.171 - - [11/Feb/2015:23:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" diff --git a/Demo/WebLogExample/access_150213.LOG b/Demo/WebLogExample/access_150213.LOG new file mode 100644 index 0000000..48130c1 --- /dev/null +++ b/Demo/WebLogExample/access_150213.LOG @@ -0,0 +1,656 @@ +169.198.20.168 - - [12/Feb/2015:00:00:27 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=0523ff5c0c3046e85673af71613146f3&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +169.198.20.168 - - [12/Feb/2015:00:00:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +169.198.20.168 - - [12/Feb/2015:00:00:45 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +9.106.116.227 - - [12/Feb/2015:00:11:06 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Page2RSS/0.7; +http://page2rss.com/)" "www.templeos.org" +235.120.208.236 - - [12/Feb/2015:00:16:13 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +235.120.208.236 - - [12/Feb/2015:00:17:08 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +104.166.59.246 - - [12/Feb/2015:00:18:20 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +15.88.141.246 - - [12/Feb/2015:00:20:54 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "templeos.org" +146.194.101.244 - - [12/Feb/2015:00:21:10 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +203.99.207.249 - - [12/Feb/2015:00:21:26 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 3600 "http://templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +231.231.121.94 - - [12/Feb/2015:00:22:55 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +9.183.112.172 - - [12/Feb/2015:00:24:05 -0800] "GET /Wb/Adam/?M=A HTTP/1.1" 200 6239 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +9.183.112.172 - - [12/Feb/2015:00:24:05 -0800] "GET /Wb/Adam/DolDoc/?M=A HTTP/1.1" 200 5668 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:00:24:42 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +92.78.238.59 - - [12/Feb/2015:00:25:38 -0800] "GET / HTTP/1.1" 200 6329 "-" "NetLyzer FastProbe" "www.templeos.org" +42.209.145.57 - - [12/Feb/2015:00:25:53 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.be/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +42.209.145.57 - - [12/Feb/2015:00:25:55 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:00:26:06 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:00:26:08 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:00:27:52 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:00:27:54 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:00:31:02 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +147.59.227.112 - - [12/Feb/2015:00:31:06 -0800] "GET /Wb/Accts/TS/Wb2/Videos.html HTTP/1.1" 404 89 "-" "Pinterest/0.2 (+http://www.pinterest.com/)" "www.templeos.org" +34.87.144.98 - - [12/Feb/2015:00:34:59 -0800] "HEAD /TempleOSCD.ISO HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 2.0.50727)" "www.templeos.org" +164.151.148.185 - - [12/Feb/2015:00:37:23 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:25.2) Gecko/20150122 PaleMoon/25.2.1" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:00:39:13 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +15.88.190.80 - - [12/Feb/2015:00:46:19 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +252.248.116.59 - - [12/Feb/2015:00:47:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +119.152.47.77 - - [12/Feb/2015:00:51:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:00:51:21 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +154.241.32.105 - - [12/Feb/2015:00:53:33 -0800] "GET /Wb/Accts/TS/Wb2/AfterEgypt03.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +152.130.74.187 - - [12/Feb/2015:00:53:58 -0800] "GET / HTTP/1.1" 200 6329 "http://www.haosou.com/s?ie=utf-8&src=hao_start_new&shb=1&q=templeos" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" "www.templeos.org" +181.41.2.88 - - [12/Feb/2015:00:54:47 -0800] "GET /Wb/Home/Wb2/Files/Text/Talmud.TXT HTTP/1.1" 200 849716 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:00:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +184.209.164.221 - - [12/Feb/2015:00:58:45 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:01:00:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +211.64.68.214 - - [12/Feb/2015:01:03:26 -0800] "HEAD / HTTP/1.1" 200 0 "-" "-" "www.templeos.org" +211.64.68.214 - - [12/Feb/2015:01:03:29 -0800] "GET / HTTP/1.1" 200 6329 "-" "-" "www.templeos.org" +92.71.193.114 - - [12/Feb/2015:01:05:49 -0800] "GET /Wb/Doc/Tips.html HTTP/1.1" 200 34154 "-" "Mozilla/5.0 (compatible; XoviBot/2.0; +http://www.xovibot.net/)" "www.templeos.org" +211.54.162.154 - - [12/Feb/2015:01:06:08 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141010.html HTTP/1.1" 404 89 "http://www.templeos.org/Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141010.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 YaBrowser/14.10.2062.12061 Safari/537.36" "www.templeos.org" +175.213.170.33 - - [12/Feb/2015:01:06:26 -0800] "GET / HTTP/1.1" 200 6329 "http://semalt.semalt.com/crawler.php?u=http://templeos.org" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "templeos.org" +35.18.127.92 - - [12/Feb/2015:01:06:50 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2013/12/Rant131215.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +154.247.1.105 - - [12/Feb/2015:01:09:23 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +154.247.1.105 - - [12/Feb/2015:01:09:25 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:01:10:47 -0800] "GET /logs/ HTTP/1.1" 200 5619 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:01:10:51 -0800] "GET /logs/access_150212.log HTTP/1.1" 200 241474 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:01:10:54 -0800] "GET /logs/access.log HTTP/1.1" 200 9450 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +52.209.6.251 - - [12/Feb/2015:01:21:38 -0800] "GET /Wb/Home/Wb2/Files/HDAudio/?N=D HTTP/1.1" 200 1843 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +18.14.185.120 - - [12/Feb/2015:01:24:19 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org" +18.14.185.120 - - [12/Feb/2015:01:25:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org" +18.14.185.120 - - [12/Feb/2015:01:25:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org" +18.14.185.120 - - [12/Feb/2015:01:25:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org" +18.14.185.120 - - [12/Feb/2015:01:25:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org" +18.14.185.120 - - [12/Feb/2015:01:25:12 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org" +40.180.77.60 - - [12/Feb/2015:01:27:45 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +40.180.77.60 - - [12/Feb/2015:01:27:46 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +146.238.106.94 - - [12/Feb/2015:01:28:49 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141012.html HTTP/1.1" 404 89 "http://prigatour.ru/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 95)" "www.templeos.org" +146.238.106.94 - - [12/Feb/2015:01:28:50 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/10/Rant141012.html HTTP/1.1" 404 89 "http://prigatour.ru/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 95)" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:07 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:07 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:07 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:08 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:08 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:08 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:08 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +232.34.252.227 - - [12/Feb/2015:01:31:10 -0800] "GET / HTTP/1.1" 200 6329 "https://www.facebook.com/wlboards" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +89.43.54.153 - - [12/Feb/2015:01:35:28 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +18.14.185.120 - - [12/Feb/2015:01:35:51 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org" +18.14.185.120 - - [12/Feb/2015:01:35:57 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org" +154.241.32.105 - - [12/Feb/2015:01:36:16 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "templeos.org" +52.209.44.201 - - [12/Feb/2015:01:36:36 -0800] "GET /Wb/Adam/TaskSettings.html HTTP/1.1" 200 83993 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +126.171.105.135 - - [12/Feb/2015:01:36:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:37:07 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +126.171.105.135 - - [12/Feb/2015:01:37:07 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +126.171.105.135 - - [12/Feb/2015:01:37:08 -0800] "GET /Wb/Doc/DemoIndex.html HTTP/1.1" 200 32945 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:37:15 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:37:25 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 3616 "http://www.templeos.org/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:38:46 -0800] "GET /Wb/Apps/AfterEgypt/Comics/ HTTP/1.1" 200 20959 "http://www.templeos.org/Wb/Adam/God/HSNotes.html" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:38:52 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses10.html HTTP/1.1" 200 2819 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:39:02 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses08.TXT.Z HTTP/1.1" 200 334 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:39:08 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses01.html HTTP/1.1" 200 2935 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:39:27 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses02.html HTTP/1.1" 200 3489 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +105.108.89.16 - - [12/Feb/2015:01:39:38 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "-" "mifetcher/1.0" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:39:43 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses04.html HTTP/1.1" 200 2928 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:40:09 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses16.html HTTP/1.1" 200 3688 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:40:36 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses19.TXT.Z HTTP/1.1" 200 337 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:40:46 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Img057.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:40:48 -0800] "GET /images/Frosting.jpg HTTP/1.1" 200 21326 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:40:59 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses21.html HTTP/1.1" 200 2793 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:41:08 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses22.html HTTP/1.1" 200 3461 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:41:20 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses47.html HTTP/1.1" 200 2840 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +214.230.48.12 - - [12/Feb/2015:01:41:27 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com.au/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +214.230.48.12 - - [12/Feb/2015:01:41:28 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:41:38 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses82.html HTTP/1.1" 200 3178 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:41:47 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses81.html HTTP/1.1" 200 2882 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:42:00 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses79.html HTTP/1.1" 200 3113 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:42:05 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses76.html HTTP/1.1" 200 2797 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:42:13 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses76.TXT.Z HTTP/1.1" 200 256 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:42:15 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses73.html HTTP/1.1" 200 3025 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:42:27 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses72.html HTTP/1.1" 200 2907 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:42:33 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses71.html HTTP/1.1" 200 3232 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:42:55 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses66.html HTTP/1.1" 200 3038 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:43:03 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses64.html HTTP/1.1" 200 3401 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +132.112.187.174 - - [12/Feb/2015:01:43:34 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses15.html HTTP/1.1" 200 3322 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org" +146.195.0.189 - - [12/Feb/2015:01:44:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org" +146.195.0.189 - - [12/Feb/2015:01:44:42 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.pl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=CHbcVNKBEomrU7OohJAL&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=-KufQKn-X7wsUR4BfrmDww&bvm=bv.85761416,d.d24" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +146.195.0.189 - - [12/Feb/2015:01:44:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +146.195.0.189 - - [12/Feb/2015:01:44:52 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.pl/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org" +146.195.0.189 - - [12/Feb/2015:01:44:53 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.pl/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org" +146.195.0.189 - - [12/Feb/2015:01:45:18 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:45:44 -0800] "GET /Wb/Apps/Psalmody/Examples/blinded.html HTTP/1.1" 200 24692 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:47:21 -0800] "GET /Wb/Demo/SortFileExample/SortedF64.html HTTP/1.1" 200 2725 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +15.88.213.93 - - [12/Feb/2015:01:47:29 -0800] "GET /TempleOS.html HTTP/1.1" 200 12685 "-" "DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +52.161.63.49 - - [12/Feb/2015:01:48:58 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); 360Spider(compatible; HaosouSpider; http://www.haosou.com/help/help_3_2.html)" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:49:19 -0800] "GET /Wb/Apps/Psalmody/Examples/dialogue.html HTTP/1.1" 200 32954 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:49:40 -0800] "GET /Wb/Apps/Logic/Logic.html HTTP/1.1" 200 320827 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:49:58 -0800] "GET /Wb/Demo/SortFileExample/UnsortedF64.html HTTP/1.1" 200 2727 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:50:19 -0800] "GET /Wb/Demo/Graphics/PanText.html HTTP/1.1" 200 11763 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:50:54 -0800] "GET /Wb/Demo/Graphics/MathAudioDemo.html HTTP/1.1" 200 49751 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:50:59 -0800] "GET /Certs/virtual-notary-cert-randomnum-44155.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +48.13.74.61 - - [12/Feb/2015:01:51:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +46.48.190.210 - - [12/Feb/2015:01:51:21 -0800] "GET /Wb/Demo/ReverseFileExample/Reverse.html HTTP/1.1" 200 14781 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +96.11.7.33 - - [12/Feb/2015:01:52:13 -0800] "GET /Wb/Apps/Span/?M=A HTTP/1.1" 200 2804 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +147.255.165.35 - - [12/Feb/2015:01:55:51 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +129.14.210.30 - - [12/Feb/2015:01:56:13 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +129.14.210.30 - - [12/Feb/2015:01:56:17 -0800] "GET /Wb/Home/Wb2/History.html HTTP/1.1" 200 7745 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:01:57:18 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses01.TXT.Z HTTP/1.1" 200 324 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +96.11.7.225 - - [12/Feb/2015:01:58:16 -0800] "GET /Wb/Home/Wb2/Files/Text/Darwin.TXT HTTP/1.1" 200 851968 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +13.92.170.164 - - [12/Feb/2015:01:59:23 -0800] "GET / HTTP/1.1" 200 6329 "http://forum.ubuntu-it.org/viewtopic.php?f=13&t=304452&start=2940" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +13.92.170.164 - - [12/Feb/2015:01:59:24 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:02:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:02:00:04 -0800] "GET /Wb/Apps/AfterEgypt/ HTTP/1.1" 200 4643 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:02:00:13 -0800] "GET /Wb/Accts/PersonalNotes.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +154.241.32.105 - - [12/Feb/2015:02:02:02 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +154.241.32.105 - - [12/Feb/2015:02:02:05 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Rant131230.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +92.248.212.126 - - [12/Feb/2015:02:02:14 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=0523ff5c0c3046e85673af71613146f3&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +163.236.58.23 - - [12/Feb/2015:02:05:34 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com.hk/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +163.236.58.23 - - [12/Feb/2015:02:06:37 -0800] "GET /Wb/Home/Wb2/Files/Movies.html HTTP/1.1" 200 9318 "http://www.templeos.org/Wb/Home/Wb2/Files/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:02:07:07 -0800] "GET /Certs/virtual-notary-cert-randomnum-43249.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +249.107.121.250 - - [12/Feb/2015:02:07:17 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/10/Rant131007.html HTTP/1.1" 404 89 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36" "www.templeos.org" +117.175.238.94 - - [12/Feb/2015:02:08:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205" "www.templeos.org" +42.122.6.164 - - [12/Feb/2015:02:11:32 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:02:11:46 -0800] "GET /Wb/Doc/HelpIndex.html HTTP/1.1" 200 19954 "http://www.templeos.org/Wb/Doc/Credits.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +163.236.58.23 - - [12/Feb/2015:02:11:49 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 1966080 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +231.231.121.111 - - [12/Feb/2015:02:12:14 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:02:13:04 -0800] "GET /Wb/Doc/GuideLines.html HTTP/1.1" 200 19765 "http://www.templeos.org/Wb/Doc/HelpIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:02:13:15 -0800] "GET /Wb/Doc/MultiTasking.html HTTP/1.1" 200 6972 "http://www.templeos.org/Wb/Doc/HelpIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +96.103.90.46 - - [12/Feb/2015:02:15:20 -0800] "GET /Wb/Home/Wb2/Files HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +96.103.90.46 - - [12/Feb/2015:02:15:20 -0800] "GET /Wb/Home/Wb2/Files/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +96.103.90.46 - - [12/Feb/2015:02:15:22 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 3600 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +213.15.135.144 - - [12/Feb/2015:02:15:25 -0800] "GET /Wb/Doc/DemoIndex.html HTTP/1.1" 200 32945 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +97.150.165.238 - - [12/Feb/2015:02:19:56 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=0523ff5c0c3046e85673af71613146f3&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +137.214.97.64 - - [12/Feb/2015:02:24:49 -0800] "GET / HTTP/1.1" 200 6329 "http://www.losethos.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +137.214.97.64 - - [12/Feb/2015:02:24:50 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" +42.122.6.164 - - [12/Feb/2015:02:29:05 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +96.11.7.217 - - [12/Feb/2015:02:30:08 -0800] "GET /Wb/Demo/ScreenCodes.CPP.Z HTTP/1.1" 200 500 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +40.200.113.75 - - [12/Feb/2015:02:30:17 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.hu/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +40.200.113.75 - - [12/Feb/2015:02:30:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +42.122.6.164 - - [12/Feb/2015:02:31:47 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +40.200.113.75 - - [12/Feb/2015:02:31:49 -0800] "GET /TempleOSUltra.ISO HTTP/1.1" 200 2181120 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +40.200.113.75 - - [12/Feb/2015:02:32:14 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18120704 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +42.122.6.164 - - [12/Feb/2015:02:34:16 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +163.236.58.23 - - [12/Feb/2015:02:34:36 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12685 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +163.236.58.23 - - [12/Feb/2015:02:34:49 -0800] "GET /Wb/Doc/Mysteries.html HTTP/1.1" 200 18410 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +164.234.233.238 - - [12/Feb/2015:02:35:12 -0800] "GET / HTTP/1.1" 200 6345 "http://www.google.com.tr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB0QFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=3YHcVIaqIIXWapjzgOgB&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=E6F-gxSd5V12Ud5QnIp7-g&cad=rja" "Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +122.142.237.243 - - [12/Feb/2015:02:35:56 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt; DTS Agent" "www.templeos.org" +163.236.58.23 - - [12/Feb/2015:02:36:48 -0800] "GET /Wb/Doc/Boot.html HTTP/1.1" 200 10347 "https://www.google.com.hk/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +42.122.6.164 - - [12/Feb/2015:02:36:53 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org" +15.88.213.225 - - [12/Feb/2015:02:41:13 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/06/Rant140601.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +147.107.16.169 - - [12/Feb/2015:02:42:21 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +154.151.49.6 - - [12/Feb/2015:02:45:56 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Blekkobot; ScoutJet; +http://blekko.com/about/blekkobot)" "www.templeos.org" +154.151.49.6 - - [12/Feb/2015:02:45:56 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "-" "Mozilla/5.0 (compatible; Blekkobot; ScoutJet; +http://blekko.com/about/blekkobot)" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:02:47:42 -0800] "GET /Wb/Demo/Snd/ASCIIOrgan.html HTTP/1.1" 200 21538 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:02:49:36 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/08/Rant140823.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +78.41.150.193 - - [12/Feb/2015:02:50:03 -0800] "GET / HTTP/1.1" 200 6329 "http://t.co/hheHFEwFTV" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org" +121.241.57.75 - - [12/Feb/2015:02:50:03 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +121.241.57.75 - - [12/Feb/2015:02:50:03 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +18.199.184.33 - - [12/Feb/2015:02:50:47 -0800] "GET /Wb/Demo/Lectures/Spinning.html HTTP/1.1" 200 46186 "http://www.templeos.org/Wb/Doc/MultiTasking.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +48.231.15.92 - - [12/Feb/2015:02:51:07 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +121.241.57.75 - - [12/Feb/2015:02:51:15 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 1966080 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +181.97.102.9 - - [12/Feb/2015:02:52:01 -0800] "GET /Wb/Doc/Strategy.html HTTP/1.1" 200 10879 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +121.241.57.75 - - [12/Feb/2015:02:52:13 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +48.231.15.92 - - [12/Feb/2015:02:52:41 -0800] "GET /files/SimStrSetUp.zip HTTP/1.1" 200 1376256 "http://www.templeos.org/Wb/Doc/AboutTempleOS.html" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:02:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +231.231.121.94 - - [12/Feb/2015:02:55:42 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +231.231.121.94 - - [12/Feb/2015:02:55:42 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/04/Rant140421.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +199.115.229.107 - - [12/Feb/2015:02:56:18 -0800] "GET / HTTP/1.1" 200 6345 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "templeos.org" +231.231.121.111 - - [12/Feb/2015:02:57:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org" +35.132.148.108 - - [12/Feb/2015:02:57:35 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12685 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:02:57:39 -0800] "GET /Wb/Home/Wb2/LineRep.html HTTP/1.1" 200 110108 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:02:57:44 -0800] "GET /Wb/Kernel/Task.html HTTP/1.1" 200 293248 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +231.231.121.111 - - [12/Feb/2015:02:58:12 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:02:59:20 -0800] "GET /Wb/Doc/CharOverview.html HTTP/1.1" 200 6197 "http://www.templeos.org/Wb/Doc/HelpIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:02:59:23 -0800] "GET /Wb/Doc/CmdLineOverview.html HTTP/1.1" 200 6862 "http://www.templeos.org/Wb/Doc/HelpIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:03:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:03:00:18 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2013/12/Rant131208.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +52.209.6.156 - - [12/Feb/2015:03:10:48 -0800] "GET /Wb/Demo/SortFileExample/SortedF64.html HTTP/1.1" 200 2741 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +219.239.239.165 - - [12/Feb/2015:03:11:14 -0800] "GET /admin.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13" "templeos.org" +15.88.159.150 - - [12/Feb/2015:03:14:38 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.2; LG-D850 Build/KVT49L.D85010f) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +15.88.159.153 - - [12/Feb/2015:03:14:50 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12685 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.2; LG-D850 Build/KVT49L.D85010f) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +113.156.180.233 - - [12/Feb/2015:03:15:53 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18120704 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +15.88.159.153 - - [12/Feb/2015:03:17:28 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (Linux; Android 4.4.2; LG-D850 Build/KVT49L.D85010f) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +15.88.159.153 - - [12/Feb/2015:03:17:28 -0800] "GET /Wb/Home/Wb2/Imgs/MenuV0104.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Linux; Android 4.4.2; LG-D850 Build/KVT49L.D85010f) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +15.88.159.150 - - [12/Feb/2015:03:17:28 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Linux; Android 4.4.2; LG-D850 Build/KVT49L.D85010f) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:03:17:50 -0800] "GET /Wb/Kernel/MemB.html HTTP/1.1" 200 233249 "http://www.templeos.org/Wb/Doc/HolyC.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +96.11.7.110 - - [12/Feb/2015:03:18:13 -0800] "GET /Wb/Home/Wb2/Files/VanGogh/?S=D HTTP/1.1" 200 1007 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +15.79.75.90 - - [12/Feb/2015:03:18:16 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.2; LG-D850 Build/KVT49L.D85010f)" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:03:18:20 -0800] "GET /Wb/Doc/DolDocOverview.html HTTP/1.1" 200 48077 "http://www.templeos.org/Wb/Doc/HolyC.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +104.166.59.246 - - [12/Feb/2015:03:18:21 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +104.166.59.246 - - [12/Feb/2015:03:18:42 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +104.166.59.246 - - [12/Feb/2015:03:19:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18120704 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +46.48.233.255 - - [12/Feb/2015:03:20:24 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +46.48.233.124 - - [12/Feb/2015:03:20:45 -0800] "GET /Wb/Apps/Logic/Run.html HTTP/1.1" 200 3389 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +175.213.82.185 - - [12/Feb/2015:03:20:57 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 3600 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +92.71.193.114 - - [12/Feb/2015:03:21:17 -0800] "GET /Wb/Doc/MultiTasking.html HTTP/1.1" 200 6972 "-" "Mozilla/5.0 (compatible; XoviBot/2.0; +http://www.xovibot.net/)" "www.templeos.org" +121.145.150.227 - - [12/Feb/2015:03:30:33 -0800] "GET / HTTP/1.1" 200 6345 "https://www.google.ro/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +121.145.150.227 - - [12/Feb/2015:03:30:34 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ro/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +121.145.150.227 - - [12/Feb/2015:03:30:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +121.145.150.227 - - [12/Feb/2015:03:30:49 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +92.78.238.59 - - [12/Feb/2015:03:30:59 -0800] "GET / HTTP/1.1" 200 6329 "-" "NetLyzer FastProbe" "www.templeos.org" +117.45.170.127 - - [12/Feb/2015:03:33:40 -0800] "GET /Wb/Compiler/ HTTP/1.1" 200 8721 "http://www.reddit.com/user/TempleOS_Terry_Davis" "Mozilla/5.0 (Windows NT 6.3; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +117.45.170.127 - - [12/Feb/2015:03:34:24 -0800] "GET /Wb/Compiler/UAsm.CPP.Z HTTP/1.1" 200 6806 "http://www.templeos.org/Wb/Compiler/" "Mozilla/5.0 (Windows NT 6.3; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +231.231.121.111 - - [12/Feb/2015:03:40:51 -0800] "GET /Wb/Accts/TS/TAD/Adam3cKeyPlugIns.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +231.231.121.111 - - [12/Feb/2015:03:40:51 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +52.209.44.154 - - [12/Feb/2015:03:42:20 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +154.241.32.105 - - [12/Feb/2015:03:44:33 -0800] "GET /Wb/Compiler/CmpMain.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org" +40.89.142.17 - - [12/Feb/2015:03:47:47 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +40.89.142.17 - - [12/Feb/2015:03:47:48 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +43.222.138.130 - - [12/Feb/2015:03:48:24 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +43.222.138.130 - - [12/Feb/2015:03:48:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +231.231.121.111 - - [12/Feb/2015:03:51:03 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +119.106.127.71 - - [12/Feb/2015:03:51:35 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +129.96.253.131 - - [12/Feb/2015:03:53:29 -0800] "GET / HTTP/1.1" 200 6345 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +147.190.232.70 - - [12/Feb/2015:03:55:02 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +147.190.232.70 - - [12/Feb/2015:03:55:02 -0800] "GET /Wb/Doc/Credits.html HTTP/1.1" 200 9704 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +147.190.232.70 - - [12/Feb/2015:03:55:02 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +105.108.89.95 - - [12/Feb/2015:03:55:04 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "-" "mifetcher/1.0" "www.templeos.org" +147.255.165.35 - - [12/Feb/2015:03:55:34 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +147.59.8.215 - - [12/Feb/2015:03:57:31 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +147.59.8.215 - - [12/Feb/2015:03:57:31 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2013/11/Rant131114.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:04:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +147.255.165.35 - - [12/Feb/2015:04:05:16 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +9.106.116.227 - - [12/Feb/2015:04:12:54 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Page2RSS/0.7; +http://page2rss.com/)" "www.templeos.org" +129.206.157.164 - - [12/Feb/2015:04:13:16 -0800] "GET / HTTP/1.1" 200 6329 "" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0" "www.templeos.org" +184.209.116.147 - - [12/Feb/2015:04:13:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +246.87.33.6 - - [12/Feb/2015:04:14:49 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12685 "-" "Mozilla/5.0 (compatible; Fetcher/0.1)" "www.templeos.org" +70.164.56.211 - - [12/Feb/2015:04:16:13 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +147.190.232.70 - - [12/Feb/2015:04:17:52 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +147.190.232.70 - - [12/Feb/2015:04:17:52 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +147.237.39.74 - - [12/Feb/2015:04:20:32 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141105.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +147.107.16.169 - - [12/Feb/2015:04:22:18 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +100.103.45.112 - - [12/Feb/2015:04:34:03 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +100.103.45.112 - - [12/Feb/2015:04:34:21 -0800] "GET /Wb/Demo/Graphics/Box.html HTTP/1.1" 200 30772 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +100.103.45.112 - - [12/Feb/2015:04:35:41 -0800] "GET /Wb/Kernel/Adam1.html HTTP/1.1" 404 89 "http://www.reddit.com/r/programming/comments/1aqdxn/temple_operating_system_v100_released/?limit=500" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +96.11.7.152 - - [12/Feb/2015:04:36:56 -0800] "GET /Wb/Kernel/KbdMouse/?M=A HTTP/1.1" 200 1700 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +70.164.56.211 - - [12/Feb/2015:04:38:06 -0800] "GET /Wb/Apps/Span/SpanNew.html HTTP/1.1" 200 61518 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +147.190.232.70 - - [12/Feb/2015:04:40:18 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141105.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +147.190.232.70 - - [12/Feb/2015:04:40:18 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +147.190.232.70 - - [12/Feb/2015:04:41:07 -0800] "GET /Wb/Doc/Acknowledgements.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +15.172.25.63 - - [12/Feb/2015:04:41:58 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +147.237.39.74 - - [12/Feb/2015:04:43:15 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +147.237.39.74 - - [12/Feb/2015:04:43:15 -0800] "GET /Wb/Doc/Credits.html HTTP/1.1" 200 9704 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +147.237.39.74 - - [12/Feb/2015:04:43:16 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:04:44:03 -0800] "GET /beacon.nist.gov/rest/record/1416607440 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +117.138.161.230 - - [12/Feb/2015:04:49:22 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +147.10.170.180 - - [12/Feb/2015:04:50:05 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "MetaInspector/3.3.0 (+https://github.com/jaimeiniesta/metainspector)" "www.templeos.org" +18.199.184.33 - - [12/Feb/2015:04:52:39 -0800] "GET /Wb/Apps/AfterEgypt/Comics.html HTTP/1.1" 200 14349 "http://www.templeos.org/Wb/Apps/AfterEgypt/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +147.190.232.70 - - [12/Feb/2015:04:53:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141105.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +43.222.138.130 - - [12/Feb/2015:04:54:16 -0800] "GET /Wb/Home/Wb2/LineRep.html HTTP/1.1" 200 110108 "http://www.templeos.org/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +48.57.255.225 - - [12/Feb/2015:04:54:49 -0800] "GET / HTTP/1.1" 200 6329 "http://dev.by/news/programmist-iz-ssha-10-let-rabotaet-nad-bogougodnoy-operatsionnoy-sistemoy" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +48.57.255.225 - - [12/Feb/2015:04:54:50 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +43.222.138.130 - - [12/Feb/2015:04:54:52 -0800] "GET /Wb/Doc/Features.html HTTP/1.1" 200 8597 "http://www.templeos.org/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +43.222.138.130 - - [12/Feb/2015:04:54:58 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org/TempleOS.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +43.222.138.130 - - [12/Feb/2015:04:55:08 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +100.74.47.132 - - [12/Feb/2015:04:56:54 -0800] "GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 89 "-" "Cake/106 CFNetwork/711.1.16 Darwin/14.0.0" "www.templeos.org" +100.74.47.132 - - [12/Feb/2015:04:56:54 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Cake/106 CFNetwork/711.1.16 Darwin/14.0.0" "www.templeos.org" +147.237.39.74 - - [12/Feb/2015:04:57:04 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/11/Rant141105.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +146.194.101.244 - - [12/Feb/2015:05:00:57 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org" +231.231.121.83 - - [12/Feb/2015:05:02:09 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/10/Rant141010.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +147.237.39.74 - - [12/Feb/2015:05:08:45 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/11/Rant141105.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +52.209.44.183 - - [12/Feb/2015:05:13:53 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/11/Rant131119.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +147.237.39.74 - - [12/Feb/2015:05:15:46 -0800] "GET /Wb/Doc/Acknowledgements.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +174.68.45.78 - - [12/Feb/2015:05:21:24 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +213.123.147.203 - - [12/Feb/2015:05:30:54 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +102.15.126.195 - - [12/Feb/2015:05:33:29 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +176.25.187.205 - - [12/Feb/2015:05:34:06 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +126.171.175.8 - - [12/Feb/2015:05:36:56 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +147.190.232.70 - - [12/Feb/2015:05:38:13 -0800] "GET /Wb/Doc/Acknowledgements.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +147.237.39.74 - - [12/Feb/2015:05:39:47 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +200.33.199.128 - - [12/Feb/2015:05:43:19 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +147.237.39.74 - - [12/Feb/2015:05:46:47 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/11/Rant141105.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +62.16.146.233 - - [12/Feb/2015:05:47:12 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +43.222.138.130 - - [12/Feb/2015:05:50:22 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://what.thedailywtf.com/t/temple-os/3874" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +179.165.230.173 - - [12/Feb/2015:05:52:15 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +179.165.230.173 - - [12/Feb/2015:05:52:16 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org" +39.62.80.146 - - [12/Feb/2015:05:53:22 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=T7DcVKbOKYLIsQTPz4CgAg&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85761416,d.cWc" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +96.11.7.217 - - [12/Feb/2015:05:56:55 -0800] "GET /Wb/Home/Wb2/Files/VanGogh/BMPView.html HTTP/1.1" 200 17528 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +96.11.7.121 - - [12/Feb/2015:05:58:36 -0800] "GET /Wb/Doc/FileMgrPullDown.TXT.Z HTTP/1.1" 200 245 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +179.165.230.173 - - [12/Feb/2015:05:59:54 -0800] "GET /Wb/Home/Wb2/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +179.165.230.173 - - [12/Feb/2015:05:59:54 -0800] "GET /Wb/Home/Wb2/Imgs/MenuV0104.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +179.165.230.173 - - [12/Feb/2015:06:00:08 -0800] "GET /Wb/Doc/HelpIndex.html HTTP/1.1" 200 19954 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +179.165.230.173 - - [12/Feb/2015:06:07:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +154.184.25.71 - - [12/Feb/2015:06:09:19 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +210.214.113.9 - - [12/Feb/2015:06:10:55 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=0523ff5c0c3046e85673af71613146f3&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0" "www.templeos.org" +159.111.232.135 - - [12/Feb/2015:06:12:02 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCkQFjAB&url=http%3A%2F%2Fwww.templeos.org%2F&ei=rLTcVP7mFsmUariigJgN&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85761416,d.d2s" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +159.111.232.135 - - [12/Feb/2015:06:12:03 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +159.111.232.135 - - [12/Feb/2015:06:12:09 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +231.231.121.83 - - [12/Feb/2015:06:15:22 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/05/Rant140529.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +113.156.180.233 - - [12/Feb/2015:06:15:59 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +147.107.16.169 - - [12/Feb/2015:06:16:53 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +48.181.250.233 - - [12/Feb/2015:06:17:53 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=0523ff5c0c3046e85673af71613146f3&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +104.166.59.246 - - [12/Feb/2015:06:19:15 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +181.97.102.9 - - [12/Feb/2015:06:43:00 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +142.64.195.181 - - [12/Feb/2015:06:44:54 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Blekkobot; ScoutJet; +http://blekko.com/about/blekkobot)" "www.templeos.org" +181.168.34.254 - - [12/Feb/2015:06:45:00 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:06:48:19 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/08/Rant140826.TXT.Z HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +126.95.99.251 - - [12/Feb/2015:06:49:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18120704 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +167.185.206.253 - - [12/Feb/2015:06:50:24 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0" "www.templeos.org" +210.5.31.191 - - [12/Feb/2015:06:59:22 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:07:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:07:04:09 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:07:04:16 -0800] "GET /logs/ HTTP/1.1" 200 5619 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +231.231.121.94 - - [12/Feb/2015:07:06:59 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/08/Rant140815.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +231.231.121.94 - - [12/Feb/2015:07:08:34 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/11/Rant141115.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +21.51.229.179 - - [12/Feb/2015:07:08:47 -0800] "HEAD /robots.txt HTTP/1.1" 404 0 "-" "creepyCrawler" "www.templeos.org" +21.51.229.179 - - [12/Feb/2015:07:08:50 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "-" "creepyCrawler" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:07:12:41 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/05/Img002.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:07:13:12 -0800] "GET /beacon.nist.gov/rest/record/1419884640 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +96.11.7.225 - - [12/Feb/2015:07:20:03 -0800] "GET /Wb/Apps/KeepAway/KeepAway.html HTTP/1.1" 200 300132 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +147.116.185.54 - - [12/Feb/2015:07:22:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1" "templeos.org" +130.173.25.185 - - [12/Feb/2015:07:30:00 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +96.11.7.221 - - [12/Feb/2015:07:31:15 -0800] "GET /Wb/Apps/Psalmody/Examples/personal.html HTTP/1.1" 200 18195 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +118.138.223.250 - - [12/Feb/2015:07:38:05 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org" +96.11.7.110 - - [12/Feb/2015:07:41:29 -0800] "GET /Wb/Home/Wb2/Files/Text/Quix.html HTTP/1.1" 200 1310720 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:52 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:52 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:52 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:52 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:54 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:54 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:54 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:55 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:55 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:56 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:42:56 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +15.88.171.25 - - [12/Feb/2015:07:43:16 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:07:44:21 -0800] "GET /logs/ HTTP/1.1" 200 5619 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:07:44:24 -0800] "GET /logs/access.log HTTP/1.1" 200 79776 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +225.70.228.47 - - [12/Feb/2015:07:48:17 -0800] "GET / HTTP/1.1" 200 6329 "-" "NerdyBot" "templeos.org" +147.190.232.70 - - [12/Feb/2015:07:51:16 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:32 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:33 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:33 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:34 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:34 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:34 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:34 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:35 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:35 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:35 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:36 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:36 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:07:51:37 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:07:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +231.141.194.237 - - [12/Feb/2015:07:56:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Jakarta Commons-HttpClient/3.1" "www.templeos.org" +196.121.253.165 - - [12/Feb/2015:07:56:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +154.119.160.119 - - [12/Feb/2015:08:00:14 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +8.177.213.37 - - [12/Feb/2015:08:08:59 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +147.203.164.194 - - [12/Feb/2015:08:11:06 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22" "www.templeos.org" +52.209.6.68 - - [12/Feb/2015:08:22:10 -0800] "GET /Wb/Kernel/BIOS32.html HTTP/1.1" 200 132777 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +64.124.225.255 - - [12/Feb/2015:08:32:33 -0800] "GET /Wb/Kernel/Dsk/DskCFile.html HTTP/1.1" 200 138681 "-" "Mozilla/5.0 (compatible; SeznamBot/3.2; +http://fulltext.sblog.cz/)" "www.templeos.org" +34.168.143.76 - - [12/Feb/2015:08:39:43 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" "www.templeos.org" +91.143.212.182 - - [12/Feb/2015:08:49:30 -0800] "GET /Wb/Accts/TS/Wb2/TAD/TADRants2014.html HTTP/1.1" 404 89 "http://www.reddit.com/r/TempleOS_Official/comments/2pdlh3/post_what_god_said_ill_help_interpret/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +91.143.212.182 - - [12/Feb/2015:08:51:23 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +91.143.212.182 - - [12/Feb/2015:08:53:36 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:08:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:09:00:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:09:04:22 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +137.212.38.203 - - [12/Feb/2015:09:04:59 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.ro/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=N93cVOnJL4P6UuHAgPAK&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=SQaGbZqrSucJbyJlooXu0w&bvm=bv.85970519,d.d24&cad=rjt" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5" "www.templeos.org" +137.212.38.203 - - [12/Feb/2015:09:05:13 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5" "www.templeos.org" +137.212.38.203 - - [12/Feb/2015:09:08:51 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18120704 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:09:10:04 -0800] "GET /logs/access.log HTTP/1.1" 200 87413 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +147.65.183.50 - - [12/Feb/2015:09:11:18 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Googlebot (gocrawl v0.4)" "templeos.org" +119.244.85.31 - - [12/Feb/2015:09:11:26 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "-" "tamucsce463crawler/1.3" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:09:13:06 -0800] "GET /logs/access.log HTTP/1.1" 200 87817 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:09:14:21 -0800] "GET /logs/access.log HTTP/1.1" 200 87953 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +243.2.207.229 - - [12/Feb/2015:09:14:53 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "https://www.google.co.jp/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2296.0 Safari/537.36" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:09:17:19 -0800] "GET /logs/access.log HTTP/1.1" 200 88339 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +39.54.105.239 - - [12/Feb/2015:09:17:33 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20100101 Firefox/10.0.12 Iceweasel/10.0.12" "www.templeos.org" +103.33.209.79 - - [12/Feb/2015:09:18:33 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +147.9.124.63 - - [12/Feb/2015:09:18:49 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2" "www.templeos.org" +206.158.99.175 - - [12/Feb/2015:09:19:16 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +206.158.99.175 - - [12/Feb/2015:09:19:44 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +96.11.7.33 - - [12/Feb/2015:09:24:07 -0800] "GET /Wb/Apps/Budget/Install.html HTTP/1.1" 200 5452 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +194.117.217.157 - - [12/Feb/2015:09:25:14 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" "www.templeos.org" +194.117.217.157 - - [12/Feb/2015:09:28:10 -0800] "GET /Wb/Doc/DemoIndex.html HTTP/1.1" 200 32945 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" "www.templeos.org" +194.117.217.157 - - [12/Feb/2015:09:28:45 -0800] "GET /Wb/Demo/Games/Rocket.html HTTP/1.1" 200 84868 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" "www.templeos.org" +96.11.7.33 - - [12/Feb/2015:09:29:14 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses66.TXT.Z HTTP/1.1" 200 321 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:09:35:55 -0800] "GET /Certs/virtual-notary-cert-randomnum-39951.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +119.252.163.148 - - [12/Feb/2015:09:36:33 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "https://www.facebook.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +90.249.171.8 - - [12/Feb/2015:09:36:34 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +119.252.163.148 - - [12/Feb/2015:09:36:52 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +119.252.163.148 - - [12/Feb/2015:09:37:13 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +96.11.7.116 - - [12/Feb/2015:09:43:58 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "templeos.org" +96.11.7.110 - - [12/Feb/2015:09:44:24 -0800] "GET /Wb/Apps/Span/Install.html HTTP/1.1" 200 2921 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +219.83.23.44 - - [12/Feb/2015:09:46:46 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:09:48:08 -0800] "GET /logs/access.log HTTP/1.1" 200 92353 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +98.39.241.90 - - [12/Feb/2015:09:50:27 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0 (FlipboardProxy/1.1; +http://flipboard.com/browserproxy)" "www.templeos.org" +98.39.241.90 - - [12/Feb/2015:09:50:27 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0 (FlipboardProxy/1.1; +http://flipboard.com/browserproxy)" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:09:52:07 -0800] "GET /logs/access.log HTTP/1.1" 200 92971 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:09:53:41 -0800] "GET /logs/access.log HTTP/1.1" 200 93107 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:09:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +52.209.44.89 - - [12/Feb/2015:09:56:46 -0800] "GET /Wb/Doc/Resource.html HTTP/1.1" 200 3410 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +212.49.142.67 - - [12/Feb/2015:09:58:08 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.53 Safari/537.36" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:10:00:25 -0800] "GET /logs/access.log HTTP/1.1" 200 93942 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:10:03:08 -0800] "GET /Wb/Home/Wb2/TADRant.html HTTP/1.1" 200 4129 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:10:05:37 -0800] "GET /logs/access.log HTTP/1.1" 200 94300 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +212.49.142.67 - - [12/Feb/2015:10:09:40 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18120704 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.53 Safari/537.36" "www.templeos.org" +96.11.7.221 - - [12/Feb/2015:10:12:05 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Rant131219.TXT.Z HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:10:14:08 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/07/Rant140704.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +91.143.212.182 - - [12/Feb/2015:10:16:33 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "templeos.org" +91.143.212.182 - - [12/Feb/2015:10:16:57 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +119.252.163.148 - - [12/Feb/2015:10:17:48 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +91.143.212.182 - - [12/Feb/2015:10:20:52 -0800] "GET /Wb/Apps/AfterEgypt/Comics HTTP/1.1" 301 113 "http://www.templeos.org/Wb/Adam/God/HSNotes.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +91.143.212.182 - - [12/Feb/2015:10:21:12 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses02.html HTTP/1.1" 200 3489 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +231.231.121.83 - - [12/Feb/2015:10:27:03 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/11/Rant141113.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +147.59.8.215 - - [12/Feb/2015:10:27:27 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/09/Rant140906.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org" +147.59.8.215 - - [12/Feb/2015:10:27:27 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org" +172.227.179.168 - - [12/Feb/2015:10:30:31 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:10:30:32 -0800] "GET /logs/access.log HTTP/1.1" 200 97331 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:10:31:40 -0800] "GET /logs/access.log HTTP/1.1" 200 97467 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:10:32:47 -0800] "GET /logs/access.log HTTP/1.1" 200 97603 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +155.156.120.36 - - [12/Feb/2015:10:33:12 -0800] "GET /Wb/Compiler/OpCodes.html HTTP/1.1" 200 60457 "-" "1C+Enterprise/8.3" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:10:33:21 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2014/04/Rant140425.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +147.21.37.102 - - [12/Feb/2015:10:33:33 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +70.111.135.77 - - [12/Feb/2015:10:34:46 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +70.111.135.77 - - [12/Feb/2015:10:34:47 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/Wb/Accts/TS/Wb2/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +96.11.7.221 - - [12/Feb/2015:10:35:07 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses59.TXT.Z HTTP/1.1" 200 347 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +94.32.56.190 - - [12/Feb/2015:10:36:00 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +94.32.56.190 - - [12/Feb/2015:10:36:01 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +147.255.165.35 - - [12/Feb/2015:10:37:25 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +40.144.95.222 - - [12/Feb/2015:10:40:28 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (X11; Linux i686; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org" +84.199.58.67 - - [12/Feb/2015:10:47:13 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +84.199.58.67 - - [12/Feb/2015:10:47:32 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +35.18.127.92 - - [12/Feb/2015:10:49:11 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/05/Rant140524.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +174.68.45.78 - - [12/Feb/2015:10:50:58 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +174.68.45.78 - - [12/Feb/2015:10:51:00 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +15.88.190.80 - - [12/Feb/2015:10:56:47 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +181.246.31.95 - - [12/Feb/2015:10:59:35 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +181.246.31.95 - - [12/Feb/2015:10:59:41 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +181.246.31.95 - - [12/Feb/2015:10:59:57 -0800] "GET /Wb/Home/Wb2/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +88.72.22.42 - - [12/Feb/2015:11:03:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" +96.11.7.221 - - [12/Feb/2015:11:03:36 -0800] "GET /Certs/virtual-notary-cert-randomnum-37403.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +155.8.119.190 - - [12/Feb/2015:11:03:38 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +181.246.31.95 - - [12/Feb/2015:11:04:10 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "http://www.templeos.org/Wb/Home/Wb2/TempleOS.html" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +181.246.31.95 - - [12/Feb/2015:11:10:53 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +203.76.173.241 - - [12/Feb/2015:11:11:00 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/search?hl=en&source=hp&q=temple+os+wiki&gbv=2&oq=temple+os+&gs_l=heirloom-hp.1.0.0l2j0i10j0l4j0i10l3.2920.11390.0.14834.10.8.0.2.2.0.397.1269.1j6j0j1.8.0.msedr...0...1ac.1.34.heirloom-hp..0.10.1297.kuLHHBM9TNI" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.6.24-1.fc14 Firefox/3.6.24" "www.templeos.org" +15.253.91.193 - - [12/Feb/2015:11:16:38 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/Wb/Accts/TS/Wb2/TempleOS.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" "www.templeos.org" +15.253.91.193 - - [12/Feb/2015:11:16:39 -0800] "GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 89 "-" "com.apple.WebKit.WebContent/10600.1.25 CFNetwork/720.1.1 Darwin/14.0.0 (x86_64)" "www.templeos.org" +13.106.49.36 - - [12/Feb/2015:11:21:30 -0800] "GET /Wb/Accts/TS/Wb2/Downloads.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +13.106.49.36 - - [12/Feb/2015:11:21:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +107.209.38.124 - - [12/Feb/2015:11:21:40 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/11/Rant131104.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0" "www.templeos.org" +43.23.138.195 - - [12/Feb/2015:11:23:12 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:11:24:03 -0800] "GET /logs/access.log HTTP/1.1" 200 104622 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +148.236.80.103 - - [12/Feb/2015:11:25:05 -0800] "GET / HTTP/1.1" 200 6329 "http://semalt.semalt.com/crawler.php?u=http://templeos.org" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "templeos.org" +30.122.182.64 - - [12/Feb/2015:11:32:17 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +231.231.121.83 - - [12/Feb/2015:11:32:27 -0800] "GET /Wb/Kernel/KStart.html HTTP/1.1" 200 195552 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:32:52 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 1048576 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:33:00 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 524288 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:33:01 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 589824 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:33:02 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 589824 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:15 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 2204471 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:17 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 2183800 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:37 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 295135 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 185419 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 2883584 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:42 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 168163 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:51 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 32010 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:53 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 16369 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:53 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 2371 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:54 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 23403 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:54 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 2621440 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +30.122.182.64 - - [12/Feb/2015:11:34:54 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 2424832 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org" +89.114.33.147 - - [12/Feb/2015:11:35:11 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +89.114.33.147 - - [12/Feb/2015:11:35:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +129.135.178.96 - - [12/Feb/2015:11:35:41 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0" "www.templeos.org" +27.157.61.98 - - [12/Feb/2015:11:36:47 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) WhiteHat Aviator/37.0.2062.99 Chrome/37.0.2062.99 Safari/537.36" "www.templeos.org" +27.157.61.98 - - [12/Feb/2015:11:37:16 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) WhiteHat Aviator/37.0.2062.99 Chrome/37.0.2062.99 Safari/537.36" "www.templeos.org" +90.249.21.63 - - [12/Feb/2015:11:45:16 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +90.249.21.144 - - [12/Feb/2015:11:45:16 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:11:55:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:12:00:15 -0800] "GET /logs/access.log HTTP/1.1" 200 111429 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +169.64.251.38 - - [12/Feb/2015:12:00:44 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "-" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +147.107.16.169 - - [12/Feb/2015:12:02:28 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +231.231.121.83 - - [12/Feb/2015:12:04:42 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +90.170.33.73 - - [12/Feb/2015:12:09:14 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.17 Safari/537.36" "templeos.org" +90.170.33.73 - - [12/Feb/2015:12:09:22 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.17 Safari/537.36" "www.templeos.org" +94.170.137.209 - - [12/Feb/2015:12:12:54 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +113.156.180.233 - - [12/Feb/2015:12:16:07 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +91.167.213.224 - - [12/Feb/2015:12:20:01 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&sqi=2&ved=0CB4QFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=2grdVK6fOOX-sASm1YHACA&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85970519,d.cWc" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +91.167.213.224 - - [12/Feb/2015:12:20:02 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +104.166.59.246 - - [12/Feb/2015:12:20:37 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +231.231.121.94 - - [12/Feb/2015:12:21:21 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org" +96.11.7.152 - - [12/Feb/2015:12:24:18 -0800] "GET /Wb/Apps/Psalmody/Examples/fog.html HTTP/1.1" 200 26215 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:12:24:21 -0800] "GET /logs/access.log HTTP/1.1" 200 114097 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +69.53.241.54 - - [12/Feb/2015:12:25:36 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/03/Rant140312.html++++++++++++++Result:+%ED%E5+%ED%E0%F8%EB%EE%F1%FC+%F4%EE%F0%EC%FB+%E4%EB%FF+%EE%F2%EF%F0%E0%E2%EA%E8 HTTP/1.1" 404 89 "http://www.templeos.org/Wb/Accts/TS/Wb2/TAD/2014/03/Rant140312.html++++++++++++++Result:+%ED%E5+%ED%E0%F8%EB%EE%F1%FC+%F4%EE%F0%EC%FB+%E4%EB%FF+%EE%F2%EF%F0%E0%E2%EA%E8;" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0" "www.templeos.org" +69.53.241.54 - - [12/Feb/2015:12:25:36 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0" "www.templeos.org" +96.156.190.246 - - [12/Feb/2015:12:26:42 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ro/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +96.156.190.246 - - [12/Feb/2015:12:26:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +169.56.190.145 - - [12/Feb/2015:12:28:15 -0800] "GET /Wb/Home/Wb2/Files/Text/Walden.TXT HTTP/1.1" 200 652722 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36" "www.templeos.org" +96.11.7.217 - - [12/Feb/2015:12:30:10 -0800] "GET /Wb/Adam/Dsk/?M=D HTTP/1.1" 200 1943 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +109.87.221.193 - - [12/Feb/2015:12:30:17 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Linux; Android 4.4.4; XT1080 Build/SU6-7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +92.78.238.59 - - [12/Feb/2015:12:30:19 -0800] "GET / HTTP/1.1" 200 6329 "-" "NetLyzer FastProbe" "www.templeos.org" +9.106.116.227 - - [12/Feb/2015:12:30:55 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Page2RSS/0.7; +http://page2rss.com/)" "www.templeos.org" +18.108.220.160 - - [12/Feb/2015:12:34:05 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:12:38:40 -0800] "GET /Certs/virtual-notary-cert-randomnum-116044.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +154.135.128.45 - - [12/Feb/2015:12:43:16 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +25.166.109.191 - - [12/Feb/2015:12:51:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux) AppleWebKit/535.22 (KHTML, like Gecko) Chrome/18.0.1025.133 Safari/535.22 Midori/0.5" "www.templeos.org" +119.220.39.48 - - [12/Feb/2015:12:52:07 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +102.183.172.182 - - [12/Feb/2015:12:52:12 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.2; SM-P900 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Safari/537.36" "www.templeos.org" +102.183.172.182 - - [12/Feb/2015:12:52:13 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.2; SM-P900 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Safari/537.36" "www.templeos.org" +119.220.39.48 - - [12/Feb/2015:12:52:46 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +185.209.131.243 - - [12/Feb/2015:12:57:17 -0800] "GET /Wb/Doc/ HTTP/1.1" 200 23911 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +185.209.131.243 - - [12/Feb/2015:12:57:22 -0800] "GET /Wb/Doc/DemoIndex.html HTTP/1.1" 200 32945 "http://www.templeos.org/Wb/Doc/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +26.123.207.54 - - [12/Feb/2015:13:00:44 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org" +154.184.25.71 - - [12/Feb/2015:13:06:21 -0800] "GET /Wb/Kernel/Memory.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" +185.209.131.243 - - [12/Feb/2015:13:09:25 -0800] "GET /Wb/Demo/ScreenCodes.html HTTP/1.1" 200 12965 "http://www.templeos.org/Wb/Demo/Graphics/FontEd.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +119.172.104.73 - - [12/Feb/2015:13:26:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +52.209.6.42 - - [12/Feb/2015:13:29:06 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2013/10/Rant131007.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +96.11.7.247 - - [12/Feb/2015:13:30:23 -0800] "GET /ProgRider.jpg HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +135.220.37.139 - - [12/Feb/2015:13:30:47 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "http://motherboard.vice.com/read/gods-lonely-programmer" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +174.228.80.244 - - [12/Feb/2015:13:35:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.fi/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +174.228.80.244 - - [12/Feb/2015:13:35:25 -0800] "GET /TempleOS.html HTTP/1.1" 200 12685 "https://www.google.fi/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org" +135.220.37.139 - - [12/Feb/2015:13:35:57 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +238.136.58.235 - - [12/Feb/2015:13:36:28 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +238.136.58.235 - - [12/Feb/2015:13:36:29 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org" +135.220.37.139 - - [12/Feb/2015:13:37:44 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +249.107.121.250 - - [12/Feb/2015:13:38:10 -0800] "GET /files/DICTIONARY.TXT HTTP/1.1" 200 2686976 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36" "www.templeos.org" +185.209.131.243 - - [12/Feb/2015:13:39:16 -0800] "GET /Wb/Doc/ChangeLog.html HTTP/1.1" 200 39177 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +164.36.111.235 - - [12/Feb/2015:13:44:49 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +227.33.59.91 - - [12/Feb/2015:13:45:47 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4" "www.templeos.org" +69.122.250.171 - - [12/Feb/2015:13:46:00 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/3.0 (compatible; Indy Library)" "templeos.org" +69.122.250.171 - - [12/Feb/2015:13:46:01 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB6; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "templeos.org" +35.18.127.92 - - [12/Feb/2015:13:52:34 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/02/Rant140212.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:14:00:02 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +129.255.215.5 - - [12/Feb/2015:14:00:29 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +5.236.11.104 - - [12/Feb/2015:14:00:39 -0800] "GET / HTTP/1.1" 200 6329 "-" "Screaming Frog SEO Spider/2.55" "www.templeos.org" +81.158.205.125 - - [12/Feb/2015:14:02:00 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com.ua/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +54.95.196.143 - - [12/Feb/2015:14:02:56 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ru/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +54.95.196.143 - - [12/Feb/2015:14:02:58 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +143.9.204.224 - - [12/Feb/2015:14:03:56 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; rv:11.0) like Gecko" "templeos.org" +143.9.204.224 - - [12/Feb/2015:14:04:12 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +143.9.204.224 - - [12/Feb/2015:14:04:13 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org" +227.169.17.38 - - [12/Feb/2015:14:08:07 -0800] "GET /Wb/Doc/CharOverview.html HTTP/1.1" 200 6197 "http://www.google.com/url?sa=t&rct=j&q=ascii+temple&source=web&cd=19&ved=0CDQQFjAIOAo&url=http%3A%2F%2Fwww.templeos.org%2FWb%2FDoc%2FCharOverview.html&ei=MSTdVLjmHpT_sATX64L4BA&usg=AFQjCNEeIHKVUE8TiGGjx2BF_AnsVKDLFQ" "Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53" "www.templeos.org" +54.95.196.143 - - [12/Feb/2015:14:09:44 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +147.107.16.169 - - [12/Feb/2015:14:13:31 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org" +132.172.136.207 - - [12/Feb/2015:14:13:31 -0800] "GET / HTTP/1.1" 200 6329 "http://www.bing.com/search?q=templeos&src=IE-TopResult&FORM=IETR02&conversationid=" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "templeos.org" +132.172.136.207 - - [12/Feb/2015:14:13:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko" "templeos.org" +35.18.127.92 - - [12/Feb/2015:14:16:31 -0800] "GET /beacon.nist.gov/rest/record/1417177380 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +15.172.25.14 - - [12/Feb/2015:14:18:10 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +15.172.25.21 - - [12/Feb/2015:14:18:11 -0800] "GET /Wb/Accts/TS/Wb2/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org" +96.11.7.217 - - [12/Feb/2015:14:19:17 -0800] "GET /Certs/virtual-notary-cert-randomnum-52713.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org" +147.225.152.181 - - [12/Feb/2015:14:30:46 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "http://www.templeos.org/Wb/Doc/Welcome.html" "Mozilla/5.0 (Linux; U; en-US) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) Version/4.0 Kindle/3.0 (screen 600x800; rotate)" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:32:50 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ca/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:32:51 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +78.175.24.35 - - [12/Feb/2015:14:33:32 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.it/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:33:35 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:33:50 -0800] "GET /Wb/Home/Wb2/Videos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +154.16.41.17 - - [12/Feb/2015:14:34:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +89.114.33.147 - - [12/Feb/2015:14:35:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +52.209.44.178 - - [12/Feb/2015:14:36:14 -0800] "GET /Wb/Accts/TS/Wb2/ScreenShots.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +121.27.204.212 - - [12/Feb/2015:14:36:50 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.2.2; PAP3350DUO Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36 OPR/25.0.1619.84037" "www.templeos.org" +164.112.15.206 - - [12/Feb/2015:14:38:53 -0800] "GET / HTTP/1.1" 200 6345 "https://www.google.it/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +54.197.178.70 - - [12/Feb/2015:14:39:42 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Linux; U; Android 4.1.2; it-it; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 ACHEETAHI/2100501038" "www.templeos.org" +15.88.213.225 - - [12/Feb/2015:14:41:34 -0800] "GET /Wb/Accts/TS/Wb2/TAD/2014/11/Rant141119.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:43:12 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:44:20 -0800] "GET /Wb/Demo/Graphics/WallPaperFish.html HTTP/1.1" 200 46592 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +35.18.127.92 - - [12/Feb/2015:14:44:27 -0800] "GET /Wb/Accts/TS/Wb2/WalkThru09.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:44:29 -0800] "GET /Wb/Demo/Graphics/WallPaperFish.html HTTP/1.1" 200 46592 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:45:22 -0800] "GET /Wb/Demo/MultiCore/Clouds.html HTTP/1.1" 200 91139 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:46:33 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.reddit.com/r/TempleOS_Official/comments/2pdlh3/post_what_god_said_ill_help_interpret/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:14:47:33 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +95.33.218.32 - - [12/Feb/2015:14:47:46 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB4QFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=gy3dVIu5DsGngwSqzIGIAQ&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=U01FswCR4r5qIP7l7AkpzQ" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +95.33.218.32 - - [12/Feb/2015:14:47:55 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +95.33.218.32 - - [12/Feb/2015:14:48:02 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7102 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +95.33.218.32 - - [12/Feb/2015:14:48:17 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 404 89 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +95.33.218.32 - - [12/Feb/2015:14:48:18 -0800] "GET /TempleOSUltra.ISO HTTP/1.1" 404 89 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +15.88.87.194 - - [12/Feb/2015:14:49:14 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +15.88.87.150 - - [12/Feb/2015:14:49:14 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +227.162.157.13 - - [12/Feb/2015:14:50:15 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +227.162.157.13 - - [12/Feb/2015:14:51:13 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +227.162.157.13 - - [12/Feb/2015:14:51:27 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +95.33.218.32 - - [12/Feb/2015:14:51:40 -0800] "GET /Wb/Home/Wb2/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Wb2/ScreenShots.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +181.30.110.223 - - [12/Feb/2015:14:52:01 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:14:52:02 -0800] "GET /Wb/Accts/TS/Wb2/TAD/TADRants2014.html HTTP/1.1" 404 89 "http://www.reddit.com/r/TempleOS_Official/comments/2pdlh3/post_what_god_said_ill_help_interpret/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org" +223.247.137.232 - - [12/Feb/2015:14:55:01 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:14:56:25 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +102.57.80.74 - - [12/Feb/2015:14:57:31 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +78.61.116.221 - - [12/Feb/2015:14:58:23 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4" "www.templeos.org" +81.10.199.159 - - [12/Feb/2015:14:58:52 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +213.15.135.170 - - [12/Feb/2015:15:01:43 -0800] "GET /Wb/Adam/Snd/SndMusic.html HTTP/1.1" 200 101731 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +59.184.250.170 - - [12/Feb/2015:15:05:40 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +15.88.70.57 - - [12/Feb/2015:15:05:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 2490368 "-" "Mediapartners-Google" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:15:05:42 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KQDvSR" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:15:05:42 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KQDvSR" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:15:05:42 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KQDvSR" "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))" "www.templeos.org" +67.59.196.244 - - [12/Feb/2015:15:05:43 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KQDvSR" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +78.158.222.119 - - [12/Feb/2015:15:11:04 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.nl/" "Mozilla/5.0 (Linux; Android 4.4.4; A0001 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org" +102.173.16.164 - - [12/Feb/2015:15:12:16 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ca/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" +231.231.121.83 - - [12/Feb/2015:15:15:13 -0800] "GET /Wb/Accts/TS/Wb2/SymsAlpha.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)" "www.templeos.org" +35.18.212.134 - - [12/Feb/2015:15:15:26 -0800] "GET /images/Machine.jpg%22%20%5Ct%20%22_blank HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "templeos.org" +113.156.180.233 - - [12/Feb/2015:15:16:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +113.156.180.233 - - [12/Feb/2015:15:16:18 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +113.156.180.233 - - [12/Feb/2015:15:17:11 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:15:20:36 -0800] "GET /logs/ HTTP/1.1" 200 5619 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +104.166.59.246 - - [12/Feb/2015:15:20:42 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:15:20:42 -0800] "GET /logs/access_150212.log HTTP/1.1" 200 241474 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +104.166.59.246 - - [12/Feb/2015:15:20:44 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 524288 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:15:20:46 -0800] "GET /logs/access_150211.log HTTP/1.1" 200 216999 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:15:20:50 -0800] "GET /logs/access_150210.log HTTP/1.1" 200 407114 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +243.115.35.114 - - [12/Feb/2015:15:20:52 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:15:20:54 -0800] "GET /logs/access_150209.log HTTP/1.1" 200 253126 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +15.88.171.66 - - [12/Feb/2015:15:21:41 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org" +48.70.197.75 - - [12/Feb/2015:15:23:08 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Rant131212.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org" +48.70.197.75 - - [12/Feb/2015:15:23:08 -0800] "GET /Wb/Accts/TS/Wb2/Rants/TAD/2013/12/Rant131212.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org" +131.76.8.94 - - [12/Feb/2015:15:24:26 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +206.158.99.4 - - [12/Feb/2015:15:26:14 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:10 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:10 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:11 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:11 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:11 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:11 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:12 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:12 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:12 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:12 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:12 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:13 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:13 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:13 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org" +94.32.228.154 - - [12/Feb/2015:15:27:14 -0800] "GET / HTTP/1.1" 200 6329 "http://bit.ly/1KR7l9D" "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" "www.templeos.org" +101.198.53.81 - - [12/Feb/2015:15:31:00 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=sTfdVI23ItTcoASO7YCYDA&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85970519,d.cGU" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +101.198.53.81 - - [12/Feb/2015:15:31:00 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org" +35.132.148.108 - - [12/Feb/2015:15:33:33 -0800] "GET /logs/access.log HTTP/1.1" 200 145589 "-" "Wget/1.15 (linux-gnu)" "www.templeos.org" +129.221.158.156 - - [12/Feb/2015:15:34:34 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org/" "Mozilla/5.0 (Fedora 20; rv:31.0) Gecko/31.0 Firefox/31.0" "www.templeos.org" +129.221.158.156 - - [12/Feb/2015:15:34:55 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7102 "http://www.templeos.org/Wb/Home/Wb2/Downloads.html" "Mozilla/5.0 (Fedora 20; rv:31.0) Gecko/31.0 Firefox/31.0" "www.templeos.org" +157.149.42.74 - - [12/Feb/2015:15:35:10 -0800] "GET /Wb/Misc/PCIDevices.html HTTP/1.1" 200 624081 "http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&ved=0CEcQFjAF&url=http%3A%2F%2Fwww.templeos.org%2FWb%2FMisc%2FPCIDevices.html&ei=mDjdVIjSG4qW8QWNqoKYCQ&usg=AFQjCNEY7xTA_W-Qwtbuh2jjy9sAILixkQ" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" +21.6.34.111 - - [12/Feb/2015:15:44:23 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4" "www.templeos.org" diff --git a/Demo/WordSearch.CPP b/Demo/WordSearch.CPP index 4b043a4..8df9852 100644 --- a/Demo/WordSearch.CPP +++ b/Demo/WordSearch.CPP @@ -48,7 +48,7 @@ U0 Search(I64 dx,I64 dy) n=StrLen(buf); for (i=n;i>2;i--) { buf[i]=0; - if ((ptr=WSDWordPtAt(buf)) && *ptr++==WSD_WORD_CHAR && + if ((ptr=ACDWordPtAt(buf)) && *ptr++==ACD_WORD_CHAR && !StrICmp(ptr,buf)) { "%s ",buf; } @@ -91,15 +91,15 @@ I64 WordsCompare(U8 *e1,U8 *e2) } /*Fmt of word lst entry: - U8 WSD_WORD_CHAR + U8 ACD_WORD_CHAR U8 word[] with terminating zero - I16 block; //definition offset in ::/Adam/WordStat/WSDefs.DAT + I16 block; //definition offset in ::/Adam/AutoComplete/ACDefs.DAT */ U0 DisplayWords(I64 n) { I64 i=0,k; - U8 *w1,*w2,*dict=wsd.word_lst; + U8 *w1,*w2,*dict=acd.word_lst; for (i=0;i$FG$ Closes the $FG,7$LTGRAY$FG$ AutoComplete window. +$FG,2$$FG$ Opens the $FG,7$LTGRAY$FG$ AutoComplete window. + +$FG,2$$FG$ Jumps to the source code for 1st symbol in the window. +$FG,2$$FG$ Jumps to the source code for 2nd symbol in the window. +$FG,2$$FG$ Jumps to the source code for n-th symbol in the window. +$FG,2$$FG$ Autocompletes the 1st symbol in the window. +$FG,2$$FG$ Autocompletes the 2nd symbol in the window. +$FG,2$$FG$ Autocompletes the n-th symbol in the window. +$FG,2$$FG$ Jumps to the dictionary for 1st symbol in the window. +$FG,2$$FG$ Jumps to the dictionary for 2nd symbol in the window. +$FG,2$$FG$ Jumps to the dictionary for n-th symbol in the window. +$FG,2$$FG$ Autocompletes the 1st dictionary word in the window. +$FG,2$$FG$ Autocompletes the 2nd dictionary word in the window. +$FG,2$$FG$ Autocompletes the n-th dictionary word in the window. + +If you have the raw Project Gutenberg dictionary file, you can generate the TempleOS processed dictionary files with the stand-alone program $LK,"::/Adam/AutoComplete/ACDictGen.CPP"$. diff --git a/Doc/AutoFile.TXT b/Doc/AutoFile.TXT index eb0982d..fae05c7 100644 --- a/Doc/AutoFile.TXT +++ b/Doc/AutoFile.TXT @@ -1,7 +1,7 @@ -$WW,1$$FG,2$AutoFiles$FG$ are used to generate user input to automate operations. The TempleOS tour is done with an $FG,2$AutoFile$FG$. +$WW,1$$FG,2$AutoFiles$FG$ are used to generate user input to automate operations. The TempleOS tour is done with an $FG,2$AutoFile$FG$. It reminds me of a Unix pipe because $FG,2$StdOut$FG$ of one gets chained into $FG,2$StdIn$FG$ of another. -When an $FG,2$AutoFile$FG$ runs, a child task is $LK,"Spawn",A="MN:Spawn"$()ed which intercepts real user input and generates fake input. AutoFiles are $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ programs run by the child who's stdout goes to the parent's input buffer. $LK,"Msg",A="MN:Msg"$() can be included in an $FG,2$AutoFile$FG$ to send special keys or mouse cmds to the parent. While an $FG,2$AutoFile$FG$ is running, the normal input gets diverted to the AutoFile task and can be filtered and sent back to the parent task. Unless you are driving functions which prompt for data, you can probably use an $FG,2$#include$FG$ file in place of an $FG,2$AutoFile$FG$. +When an $FG,2$AutoFile$FG$ runs, a child task is $LK,"Spawn",A="MN:Spawn"$()ed which intercepts real user input and generates fake input. AutoFiles are $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ programs run by the child whose stdout goes to the parent's input buffer. $LK,"Msg",A="MN:Msg"$() can be included in an $FG,2$AutoFile$FG$ to send special keys or mouse cmds to the parent. While an $FG,2$AutoFile$FG$ is running, the normal input gets diverted to the AutoFile task and can be filtered and sent back to the parent task. Unless you are driving functions which prompt for data, you can probably use an $FG,2$#include$FG$ file in place of an $FG,2$AutoFile$FG$. See $LK,"::/Demo/AutoFile/AFDir.AUT"$. -Note: $LK,"Auto",A="MN:Auto"$("") can be used if all you need is to send ASCII characters. It differs from $LK,"AutoStr",A="MN:AutoStr"$(). You'll probably use $LK,"Auto",A="MN:Auto"$() a lot and not $LK,"AutoStr",A="MN:AutoStr"$(). With $LK,"Auto",A="MN:Auto"$(), for example, you can place answers to the prompts for recompiling the $FG,2$Kernel$FG$ module during $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). +Note: $LK,"Auto",A="MN:Auto"$("") can be used if all you need is to send ASCII characters. It differs from $LK,"AutoStr",A="MN:AutoStr"$(). You'll probably use $LK,"Auto",A="MN:Auto"$() a lot and not $LK,"AutoStr",A="MN:AutoStr"$(). With $LK,"Auto",A="MN:Auto"$(), for example, you can place answers to the prompts for recompiling the $FG,2$Kernel$FG$ module during $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). diff --git a/Doc/Boot.TXT b/Doc/Boot.TXT index deed607..af003d0 100644 Binary files a/Doc/Boot.TXT and b/Doc/Boot.TXT differ diff --git a/Doc/ChangeLog.TXT b/Doc/ChangeLog.TXT index 61c9358..a5522f2 100644 --- a/Doc/ChangeLog.TXT +++ b/Doc/ChangeLog.TXT @@ -2,335 +2,276 @@ Use $LK,"R",A="MN:R"$() to rename if I change a label. -$IV,1$----07/16/14 00:59:22----$IV,0$ +$IV,1$----02/16/15 09:42:32----$IV,0$ + +$IV,1$----02/14/15 05:12:45----$IV,0$ +* Added $LK,"Dump",A="MN:Dump"$(). + +$IV,1$----02/13/15 13:46:14----$IV,0$ +* Got rid of "body_size" in $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$. + +$IV,1$----02/13/15 09:49:33----$IV,0$ +* $BK,1$TempleOS version 3.03 Released$BK,0$ + +$IV,1$----02/12/15 16:10:14----$IV,0$ +* Overhauled $LK,"::/Demo/WebLogExample/WebLogRep.CPP"$. +* Added $LK,"EDF_WAS_WRITE",A="MN:EDF_WAS_WRITE"$. + +$IV,1$----02/12/15 03:48:28----$IV,0$ +* Overhauled $MA-X+PU,"::/Demo/AcctExample",LM="Dir(\"::/Demo/AcctExample\");View;"$. Now, if you have a virtual machine install, you can easily run my exact set-up by copying my files to your $FG,2$/Home$FG$ directory. + +$IV,1$----02/07/15 15:45:49----$IV,0$ +* Tweaked AutoComplete. + +$IV,1$----02/05/15 12:39:06----$IV,0$ +* Fixed minor compiler bug relating to dead code elimination. + +$IV,1$----02/02/15 14:03:28----$IV,0$ +* Added $LK,"::/Demo/Graphics/Lattice.CPP"$. + +$IV,1$----01/29/15 02:58:45----$IV,0$ +* Added $LK,"::/Demo/Directives.CPP"$. +$HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);} +#define __TIME__ #exe{StreamPrint("\"%T\"",Now);} +#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);} +#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);} +#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);} +#define __DIR__ #exe{StreamDir;} +$HL,0$$WW,1$ +$IV,1$----01/28/15 11:40:37----$IV,0$ +* $BK,1$TempleOS version 3.02 Released$BK,0$ +* Overhauled $MA-X+PU,"Tour",LM="User(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$. + +$IV,1$----01/18/15 19:42:50----$IV,0$ +* $LK,"BusyWait",A="MN:BusyWait"$() now uses $LK,"HPET",A="MN:HPET"$(). +* Min RAM requirement is now 512 Meg. +* $LK,"R",A="MN:R"$("TSZ","TOSZ"); +* Added $FG,4$CdLexDir$FG$() and $FG,4$CdSrcDir$FG$(). Now, you can run apps from any directory, not just $FG,2$/Apps$FG$. + +$IV,1$----01/16/15 15:08:58----$IV,0$ +* Changed $LK,"Scale2Mem",A="MN:Scale2Mem"$(). + +$IV,1$----01/15/15 05:11:31----$IV,0$ +* $BK,1$TempleOS version 3.01 Released$BK,0$ + +$IV,1$----01/15/15 03:13:07----$IV,0$ +* Added eye-dropper-like $FG,2$'t'$FG$ for transparent color in the sprite $FG,2$$FG$ editor. +* Got rid of $LK,"CHash",A="MN:CHash"$.next_added. +* Reduced $LK,"TASK_HASH_SIZE",A="MN:TASK_HASH_SIZE"$ size. + +$IV,1$----01/10/15 15:12:30----$IV,0$ +* $LK,"R",A="MN:R"$("Grep","Find"); + +$IV,1$----01/08/15 17:40:37----$IV,0$ +* Undid "Improved $LK,"DCCaptureScreen",A="MN:DCCaptureScreen"$()" from 12/27/14. (It didn't work.) + +$IV,1$----01/06/15 18:58:16----$IV,0$ +* Reorganized $MA-X+PU,"::/Apps/Psalmody",LM="Cd(\"::/Apps/Psalmody\");Dir;View;\n"$. + +$IV,1$----01/04/15 02:20:50----$IV,0$ +* Added $LK,"::/Demo/Graphics/SpriteRaw.CPP"$. + +$IV,1$----01/02/15 04:46:36----$IV,0$ +* Changed Sprite format. Download $FG,2$Cvt300.CPP.Z$FG$ from +$FG,4$$TX,"http://www.templeos.org/Wb/Home/Wb2/Files",HTML="http://www.templeos.org/Wb/Home/Wb2/Files"$$FG$. +* Cleaned-up the $LK,"CSprite",A="MN:CSprite"$ code. + +$IV,1$----12/31/14 15:13:08----$IV,0$ +* $BK,1$TempleOS version 3.00 Released$BK,0$ + +$IV,1$----12/30/14 21:18:04----$IV,0$ +* Added $LK,"::/Demo/RandDemo.CPP"$. + +$IV,1$----12/30/14 00:38:42----$IV,0$ +* $LK,"R",A="MN:R"$("ptr_cnt","ptr_stars_cnt"); +* Moved $LK,"DOCEF_UPDATE_DATA",A="MN:DOCEF_UPDATE_DATA"$ to be next to $LK,"DOCEF_REFRESH_DATA",A="MN:DOCEF_REFRESH_DATA"$. +* Refreshed the $LK,"PCI Device File",A="FI:::/Misc/PCIDevices.TXT"$. + +$IV,1$----12/27/14 18:59:16----$IV,0$ +* Improved $LK,"DCCaptureScreen",A="MN:DCCaptureScreen"$(). + +$IV,1$----12/26/14 22:13:51----$IV,0$ +* Improved $LK,"::/Demo/Games/RawHide.CPP"$. + +$IV,1$----12/25/14 21:08:51----$IV,0$ +* Improved $LK,"::/Demo/Games/BlackDiamond.CPP"$. +* Improved $LK,"::/Demo/Games/DunGen.CPP"$. + +$IV,1$----12/23/14 15:00:28----$IV,0$ +* Changed from many $FG,2$/Accts$FG$ subdirectories to just one directory named $FG,2$/Home$FG$ with default files in root. + +$IV,1$----12/20/14 21:43:31----$IV,0$ +* Changed $FG,4$text.font$FG$ from $FG,2$U8 *$FG$ to $FG,2$U64 *$FG$. + +$IV,1$----12/18/14 18:49:46----$IV,0$ +* Renamed all the files. + +$IV,1$----12/18/14 09:40:06----$IV,0$ +* I got rid of my Logo. I like no logo. +* I got rid of my company name, Trivial Solutions. Instead of "TS", I use "TOS" for Temple Operating System. +* I got rid of all my rants on my website. Now, just one rant. +* I changed from having "TAD" as one of many employees to no different employees. + +$IV,1$----12/15/14 10:05:06----$IV,0$ +* Added $FG,4$$TX,"http://www.reddit/r/TempleOS_Official",HTML="http://www.reddit.com/r/TempleOS_Official"$$FG$. + +$IV,1$----12/15/14 07:23:32----$IV,0$ +* $BK,1$TempleOS version 2.19 Released$BK,0$ +* $LK,"R",A="MN:R"$("SliderCtrl","CtrlSlider"); +* $LK,"R",A="MN:R"$("Set...","...Set"); +* Changed $LK,"DrvMapBlkClean",A="MN:DrvMapBlkClean"$() and $LK,"DrvMapBlkAlloc",A="MN:DrvMapBlkAlloc"$(). + +$IV,1$----12/15/14 02:50:32----$IV,0$ +* Changed AutoComplete colors. +* Got rid of splash screen. +* Added AutoComplete $LK,"StandBy",A="FI:::/Doc/StandBy.TXT"$. + +$IV,1$----12/14/14 12:54:56----$IV,0$ +* Fixed new bug in random routines. + +$IV,1$----12/12/14 08:58:10----$IV,0$ +* $LK,"R",A="MN:R"$("DocGRAFile","DocGRA"); + +$IV,1$----12/04/14 11:00:43----$IV,0$ +* Improved $FG,4$lx->max_line$FG$. + +$IV,1$----12/04/14 05:02:20----$IV,0$ +* Cleaned-up mem code. +* $LK,"R",A="MN:R"$("Allocate","Alloc"); + +$IV,1$----12/03/14 10:05:36----$IV,0$ +* Cleaned-up compiler conditionals. +* Got rid of $FG,4$IC_BR_LBTS$FG$ family in the compiler. + +$IV,1$----11/27/14 18:48:07----$IV,0$ +* $LK,"R",A="MN:R"$("Randomize","Seed"); +* Got rid of $FG,4$Rand2$FG$(). Use $LK,"Seed",A="MN:Seed"$() with non-zero and timer-based will be turned-off. + +$IV,1$----11/21/14 08:25:38----$IV,0$ +* $BK,1$TempleOS version 2.18 Released$BK,0$ +* Improved $LK,"::/Demo/Games/TreeCheckers.CPP"$. + +$IV,1$----11/19/14 22:25:28----$IV,0$ +* Fixed reindent bug. +* $LK,"R",A="MN:R"$("$FG,4$ST_BIBLE_FILE$FG$","$LK,"BIBLE_FILENAME",A="MN:BIBLE_FILENAME"$"); +* Fixed bug with $LK,"DOCG_BL_IV_UL",A="MN:DOCG_BL_IV_UL"$. + +$IV,1$----11/17/14 23:34:09----$IV,0$ +* I got rid of octal and binary char specification in strings. +* Got rid of octal all-together. + +$IV,1$----11/09/14 21:37:49----$IV,0$ +* Changed default plug-in for $FG,2$$FG$ and $FG,2$$FG$. +* Added $FG,2$$FG$ and $FG,2$$FG$ on my personal version $LK,"::/Demo/AcctExample/AdamKeyPlugIns.CPP"$. + +$IV,1$----11/07/14 08:02:04----$IV,0$ +* Improved $LK,"Ui",A="MN:Ui"$(). + +$IV,1$----10/29/14 12:06:42----$IV,0$ +* Changed $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ from relative cluster num to absolute blk num. +* Improved compiler. $LK,"IC_RETURN_VAL",A="MN:IC_RETURN_VAL"$, $LK,"IC_END_EXP",A="MN:IC_END_EXP"$, $LK,"ICF_NO_DEPEND_RESULT",A="MN:ICF_NO_DEPEND_RESULT"$ +* $LK,"R",A="MN:R"$("Partition","Drive"); + +$IV,1$----10/27/14 05:06:15----$IV,0$ +* Overhauled $LK,"KbdBuildSC",A="MN:KbdBuildSC"$(). + +$IV,1$----10/19/14 11:42:47----$IV,0$ +* Updated $LK,"::/Doc/Charter.TXT"$. +* Improved $LK,"::/Demo/Games/FlatTops.CPP"$. + +$IV,1$----10/09/14 21:04:25----$IV,0$ +* Added $FG,2$dither_probability$FG$ to $LK,"DocBMP",A="MN:DocBMP"$() and $LK,"BMPRead",A="MN:BMPRead"$(). + +$IV,1$----09/27/14 22:11:45----$IV,0$ +* $BK,1$TempleOS version 2.17 Released$BK,0$ +* Changed compression format. Uncompress with the old version by $LK,"Move",A="MN:Move"$ing() to a name without $FG,2$.Z$FG$. Then, recompress with the new version of $FG,2$TempleOS$FG$. +* Fixed rare bug in compression. +* $LK,"R",A="MN:R"$("BMPFile","BMP"); +* Added $FG,2$include_zoom$FG$ arg to $LK,"DCCaptureScreen",A="MN:DCCaptureScreen"$(), $LK,"GRACaptureScreen",A="MN:GRACaptureScreen"$() and $LK,"BMPCaptureScreen",A="MN:BMPCaptureScreen"$(). +* Added eye-dropper to sprite $FG,2$$FG$ editor. Press $FG,2$'c'$FG$. +* Improved $LK,"::/Demo/Games/Wenceslas.CPP"$, made it 3D. +* Added pebbles to $LK,"::/Apps/AfterEgypt/HorebBMP.CPP"$ and $LK,"::/Apps/AfterEgypt/HorebBSP.CPP"$. + +$IV,1$----09/21/14 13:07:09----$IV,0$ +* Changed "bit" to "pixel" in $LK,"::/Adam/Gr/GrBitMap.CPP"$. + +$IV,1$----09/19/14 09:43:29----$IV,0$ +* $LK,"R",A="MN:R"$("SpawnUser","User"); +* $LK,"R",A="MN:R"$("SrvUser","PopUpPrint"); +* Added $LK,"::/Doc/TaskSrv.TXT"$. + +$IV,1$----09/17/14 19:51:53----$IV,0$ +* Fixed bug in kernel usage of $LK,"FileRead",A="MN:FileRead"$() and $LK,"FileWrite",A="MN:FileWrite"$(). + +$IV,1$----09/17/14 08:03:33----$IV,0$ +* Cleaned-up $LK,"::/Adam/AUtils.CPP"$. + +$IV,1$----09/15/14 19:49:17----$IV,0$ +* Made assembler size for PUSH IMM into a I32 if it is a label, so you don't have to specify size. + +$IV,1$----09/15/14 15:36:49----$IV,0$ +* $BK,1$TempleOS version 2.16 Released$BK,0$ +* Got rid of auto-fps adjust. More stable. + +$IV,1$----09/11/14 11:58:40----$IV,0$ +* Overhauled $LK,"compiler init tables",A="MN:intermediate_code_table"$. + +$IV,1$----08/29/14 15:45:55----$IV,0$ +* $BK,1$TempleOS version 2.15 Released$BK,0$ + +$IV,1$----08/24/14 22:23:25----$IV,0$ +* Added $LK,"CSysLimitBase",A="MN:CSysLimitBase"$. +* $LK,"R",A="MN:R"$("SYS_BOOT_CODE","SYS_BOOT_SRC"); +* $LK,"R",A="MN:R"$("SoftBoot","RAMReboot"); +* Replaced $FG,4$SYS_GR_MODE$FG$ with $LK,"RLF_VGA",A="MN:RLF_VGA"$. +* Improved $LK,"RAMReboot",A="MN:RAMReboot"$(). + +$IV,1$----08/23/14 07:50:44----$IV,0$ +* Changed key cmd $FG,2$$FG$ to $FG,2$$FG$. + +$IV,1$----08/22/14 12:11:29----$IV,0$ +* $LK,"R",A="MN:R"$("VGA_SC_INDEX","VGAP_INDEX"); + +$IV,1$----08/18/14 16:25:32----$IV,0$ +* $BK,1$TempleOS version 2.14 Released$BK,0$ + +$IV,1$----08/11/14 16:13:49----$IV,0$ +* $LK,"R",A="MN:R"$("BOOT_HIGH_LOC","BOOT_HIGH_LOC_CD"); + +$IV,1$----08/10/14 11:54:16----$IV,0$ +* Added $LK,"GrRotNormSqr65536",A="MN:GrRotNormSqr65536"$(). +* Improved $LK,"::/Demo/Games/BugBird.CPP"$. + +$IV,1$----08/08/14 18:02:04----$IV,0$ +* Added ::/Apps/Psalmody/Examples/lob.CPP" + +$IV,1$----08/08/14 11:03:13----$IV,0$ +* Improved $LK,"::/Demo/Snd/WaterFowl.CPP"$. +* Added 24-Bit to $LK,"BMPRead",A="MN:BMPRead"$(). + +$IV,1$----08/06/14 05:14:23----$IV,0$ +* Fixed compiler bug in "yoda conditionals". +* Optimized compiler on float comparisons to zero. + +$IV,1$----08/05/14 14:12:02----$IV,0$ +* $BK,1$TempleOS version 2.13 Released$BK,0$ + +$IV,1$----08/04/14 05:06:02----$IV,0$ +* Got rid of markov matrix in AutoComplete. Renamed "WordStat", "AutoComplete". + +$IV,1$----07/30/14 20:27:02----$IV,0$ +* Added symmetry to $LK,"GodDoodleSprite",A="MN:GodDoodleSprite"$(). + +$IV,1$----07/26/14 11:19:00----$IV,0$ +* Got rid of "raw" arg on disk I/O routines for uncompressed data. + +$IV,1$----07/22/14 08:31:58----$IV,0$ +* $BK,1$TempleOS version 2.12 Released$BK,0$ +* Fixed bug in assembler in + MOV R8-R15,UIMM32 $IV,1$----07/12/14 02:06:10----$IV,0$ * Fixed bug clicking on icon. $IV,1$----07/08/14 04:33:20----$IV,0$ * I changed $LK,"GodDoodleSprite",A="MN:GodDoodleSprite"$(). - -$IV,1$----06/30/14 02:32:47----$IV,0$ -* Changed max FPS to 30 instead of 60. -* Got rid of min and max FPS control. -* $LK,"R",A="MN:R"$("refresh","FPS"); - -$IV,1$----06/20/14 12:02:44----$IV,0$ -* $BK,1$TempleOS version 2.11 Released$BK,0$ - -$IV,1$----06/16/14 13:09:10----$IV,0$ -* Added $LK,"DOCT_LST",A="MN:DOCT_LST"$, list widgets. See $LK,"::/Demo/DolDoc/Form.CPP.Z"$. - -$IV,1$----06/13/14 21:27:17----$IV,0$ -* $LK,"R",A="MN:R"$("BootDrv","BootRescueDrv"); -* Fixed bug in "Boot Rescue Drive" feature. - -$IV,1$----06/10/14 03:11:14----$IV,0$ -* $BK,1$TempleOS version 2.10 Released$BK,0$ -* Got rid of $FG,4$ImportHashTable$FG$(). -* Got rid of $FG,4$OldSchool$FG$ demos. -* $FG,2$AOT$FG$ compilation has been removed. Use $FG,2$JIT$FG$. - -$IV,1$----06/02/14 13:52:50----$IV,0$ -* Improved HelpIndex. -* Improved $LK,"::/Apps/TimeOut/TimeOut.CPP.Z"$. - -$IV,1$----05/26/14 16:13:11----$IV,0$ -* $BK,1$TempleOS version 2.09 Released$BK,0$ -* Added BLINK to $LK,"ToHtml",A="MN:ToHtml"$(). -* $LK,"R",A="MN:R"$("DocHome","DocTop"); - -$IV,1$----05/24/14 20:46:11----$IV,0$ -* Got rid of $FG,4$Day$FG$(), $FG,4$Month$FG$(), $FG,4$Year$FG$(), etc. -* $LK,"R",A="MN:R"$("WSDDisplayDefs","WSDDefsPut"); -* $LK,"R",A="MN:R"$("WSDGetDef","WSDDefGet"); -* $LK,"R",A="MN:R"$("WSDGetWord","WSDDefsGet"); -* $LK,"R",A="MN:R"$("WSDPtAtWord","WSWordPtAt"); -* $LK,"R",A="MN:R"$("WSGetHits","WSHitsGet"); - -$IV,1$----05/23/14 04:50:25----$IV,0$ -* $LK,"R",A="MN:R"$("SqrDist","DistSqr"); -* $LK,"R",A="MN:R"$("SqrNorm","NormSqr"); - -$IV,1$----05/16/14 15:43:17----$IV,0$ -* Added $LK,"DOF_DONT_WINMGR_SYNC",A="MN:DOF_DONT_WINMGR_SYNC"$. -* Fetches comments for help index reports. -* Made src line links more accurate. - -$IV,1$----05/15/14 06:45:33----$IV,0$ -* Added INVERT to $LK,"ToHtml",A="MN:ToHtml"$(). - -$IV,1$----05/13/14 07:05:00----$IV,0$ -* $BK,1$TempleOS version 2.08 Released$BK,0$ - -$IV,1$----05/11/14 08:22:44----$IV,0$ -* Added $LK,"Zip",A="MN:Zip"$() and $LK,"Unzip",A="MN:Unzip"$(). - -$IV,1$----05/09/14 09:30:39----$IV,0$ -* Added $LK,"PopUpEd",A="MN:PopUpEd"$(). -* $LK,"R",A="MN:R"$("PopUpViewStr","PopUpViewPrint"); - -$IV,1$----05/07/14 19:12:42----$IV,0$ -* Added classes to help index. -* $LK,"CGrGlbls",A="MN:CGrGlbls"$ gr; -* $LK,"CDolDocGlbls",A="MN:CDolDocGlbls"$ doldoc; -* $LK,"CCmpGlbls",A="MN:CCmpGlbls"$ cmp; -* $LK,"CUasmGlbls",A="MN:CUasmGlbls"$ uasm; -* $LK,"CTextGlbls",A="MN:CTextGlbls"$ text; - -$IV,1$----05/05/14 23:37:52----$IV,0$ -* $LK,"CGodGlbls",A="MN:CGodGlbls"$ god; -* $LK,"CMusicGlbls",A="MN:CMusicGlbls"$ music; -* $LK,"CWordStatGlbls",A="MN:CWordStatGlbls"$ ws; -* $LK,"CWordStatDictGlbls",A="MN:CWordStatDictGlbls"$ wsd; - -$IV,1$----05/05/14 19:54:46----$IV,0$ -* $LK,"CWallPaperGlbls",A="MN:CWallPaperGlbls"$ *wall; -* $LK,"CWinMgrTimingGlbls",A="MN:CWinMgrTimingGlbls"$ *winmgr.t; -* $LK,"CWinMgrGlbls",A="MN:CWinMgrGlbls"$ winmgr; -* $LK,"CSndGlbls",A="MN:CSndGlbls"$ snd; -* $LK,"CDevGlbls",A="MN:CDevGlbls"$ dev; -* $LK,"CDskGlbls",A="MN:CDskGlbls"$ dsk; -* $LK,"CDbgGlbls",A="MN:CDbgGlbls"$ dbg; -* $LK,"CCntsGlbls",A="MN:CCntsGlbls"$ cnts; -* $LK,"CKeyDevGlbls",A="MN:CKeyDevGlbls"$ keydev; -* $LK,"CIPStateGlbls",A="MN:CIPStateGlbls"$ ip; -* $LK,"CMouseStateGlbls",A="MN:CMouseStateGlbls"$ mouse; -* $LK,"CKbdStateGlbls",A="MN:CKbdStateGlbls"$ kbd; - -$IV,1$----05/05/14 09:14:51----$IV,0$ -* Added $MA-X+PU,"::/Apps/Budget",LM="Cd(\"::/Apps/Budget\");Dir;View;\n"$. - -$IV,1$----05/03/14 23:31:50----$IV,0$ -* Added $LK,"DOCEF_USER_DATA",A="MN:DOCEF_USER_DATA"$ $FG,2$arg=$FG$ flag. -* $LK,"R",A="MN:R"$("Backward","Bwd"); -* Added $LK,"::/Apps/Budget/Budget.CPP"$. - -$IV,1$----04/30/14 23:41:42----$IV,0$ -* Added $LK,"CBinFile",A="MN:CBinFile"$.signature. - -$IV,1$----04/29/14 15:43:22----$IV,0$ -* $BK,1$TempleOS version 2.07 Released$BK,0$ - -$IV,1$----04/27/14 05:19:18----$IV,0$ -* Improved documentation. -* Changed $LK,"CBinFile",A="MN:CBinFile"$ format. -* Locked-in 640x480 with $LK,"GrUpdateLine64",A="MN:GrUpdateLine64"$(). - -$IV,1$----04/23/14 22:14:43----$IV,0$ -* Added $LK,"::/Demo/Lectures/NegDisp.CPP"$. -* $LK,"R",A="MN:R"$("GrLineRect4","GrBorder"); -* Changed $LK,"::/Adam/Gr/GrTextBase.CPP"$. -* Fixed terminal button on wallpaper. Yikes! - -$IV,1$----04/21/14 16:29:00----$IV,0$ -* Got rid of $FG,4$Spaces$FG$() and $FG,4$NewLine$FG$(). Replaced $FG,4$NewLine$FG$(5) with "%h*c",5,'\n'; -* Improved profiler. -* Changed $FG,4$CCPU.chained_timer_irq$FG$ to $LK,"CCPU",A="MN:CCPU"$.profiler_timer_irq. - -$IV,1$----04/19/14 18:05:09----$IV,0$ -* Got rid of double spacing. -* Fixed bug in page down. -* Sorted headers and externs. - -$IV,1$----04/18/14 21:45:17----$IV,0$ -* Improved documentation. - -$IV,1$----04/16/14 15:49:13----$IV,0$ -* $BK,1$TempleOS version 2.06 Released$BK,0$ - -$IV,1$----04/15/14 12:29:02----$IV,0$ -* Got rid of lock-to-page and lock-to-center document features. -* Changed $FG,2$$$DA...$$$FG$ data type to use an arg. $FG,2$$$DA,-U64+U16,...$$$FG$ is now changed to $FG,2$$$DA,RT=I16,...$$$FG$. -* $LK,"R",A="MN:R"$("DOCEF1_","DOCEF_"); -* Changed Fs->$LK,"win_inhibits",A="MN:WIF_SELF_FOCUS"$. - -$IV,1$----04/13/14 16:20:11----$IV,0$ -* Added $LK,"LK_DOC",A="MN:LK_DOC"$, $LK,"LK_DOC_ANCHOR",A="MN:LK_DOC_ANCHOR"$, $LK,"LK_DOC_LINE",A="MN:LK_DOC_LINE"$ and $LK,"LK_DOC_FIND",A="MN:LK_DOC_FIND"$. -* $LK,"R",A="MN:R"$("Doc","DolDoc"); -* Improved documentation. -* Added $LK,"::/Demo/LastClass.CPP"$. - -$IV,1$----04/13/14 00:09:48----$IV,0$ -* Got rid of $FG,4$ProfBin()$FG$ and $FG,4$ProfCPU()$FG$. -* $LK,"R",A="MN:R"$("ProfAll","Prof"); -* Improved documentation. -* Changed $LK,"CDoc",A="MN:CDoc"$.desc. - -$IV,1$----04/11/14 16:58:56----$IV,0$ -* Renamed Sprite functions and vars. -* Added $LK,"LexExpressionI64",A="MN:LexExpressionI64"$() and $LK,"LexExpressionF64",A="MN:LexExpressionF64"$(). I'm chagrinned. - -$IV,1$----04/11/14 11:55:36----$IV,0$ -* Added $LK,"FileNameTempTxt",A="MN:FileNameTempTxt"$(). -* $FG,2$$FG$ sprite edit-as-text is now much better. -* Added $LK,"Str2ColorU16",A="MN:Str2ColorU16"$(), $LK,"Str2ColorU32",A="MN:Str2ColorU32"$(), $LK,"LexFirstRem",A="MN:LexFirstRem"$(), $LK,"Sprite2Code",A="MN:Sprite2Code"$() and $LK,"Code2Sprite",A="MN:Code2Sprite"$(). -* $LK,"R",A="MN:R"$("Color2Text","Color2Str"); -* $LK,"R",A="MN:R"$("Sprite2Text","SpriteElem2OneLineSummary"); -* $LK,"R",A="MN:R"$("DocPrintWhole","DocPrintAtomic"); -* Fixed bug in $LK,"GrRect",A="MN:GrRect"$() relating to dithering. -* Got rid of $LK,"CDoc",A="MN:CDoc"$.recalc_start. - -$IV,1$----04/09/14 14:10:17----$IV,0$ -* Fixed compiler bug by adding a pass to overcome an optimization problem. -* Improved $LK,"::/Apps/AfterEgypt/GodTalking.CPP"$. -* Improved $LK,"::/Demo/Graphics/Mountain.CPP"$. -* Improved $LK,"::/Demo/Graphics/Camp.CPP"$. -* Improved $LK,"::/Demo/Graphics/SunMoon.CPP"$. -* Improved $LK,"::/Demo/Games/DunGen.CPP"$. -* Improved $LK,"::/Demo/Games/FlatTops.CPP"$. - -$IV,1$----04/07/14 07:46:56----$IV,0$ -* $BK,1$TempleOS version 2.05 Released$BK,0$ - -$IV,1$----04/05/14 03:09:18----$IV,0$ -* Got rid of $FG,2$Fs->answers_displayed$FG$ and set it to a fixed value of one answer. -* Improved documentation. -* $LK,"R",A="MN:R"$("MusicOrgan","Psalmody"); -* Improved $LK,"AFGetChar",A="MN:AFGetChar"$() and $LK,"AFUntilChar",A="MN:AFUntilChar"$(). - -$IV,1$----04/03/14 05:57:06----$IV,0$ -* Improved $MA-X+PU,"Tour",LM="SpawnUser(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$. -* $LK,"R",A="MN:R"$("ipx","ip.pos.x"); -* $LK,"R",A="MN:R"$("mxx","mouse.pos.x"); -* $LK,"R",A="MN:R"$("mxx_prescale","mouse.prescale.x"); -* $LK,"R",A="MN:R"$("A2Date","Str2Date"); -* $LK,"R",A="MN:R"$("A2I64","Str2I64"); -* $LK,"R",A="MN:R"$("A2F64","Str2F64"); -* $LK,"R",A="MN:R"$("SPrint","StrPrint"); -* $LK,"R",A="MN:R"$("MPrint","MStrPrint"); -* $LK,"R",A="MN:R"$("Scan","StrScan"); - -$IV,1$----04/01/14 08:49:57----$IV,0$ -* Added $LK,"::/Demo/Games/ElephantWalk.CPP"$. - -$IV,1$----03/28/14 22:25:48----$IV,0$ -* $LK,"R",A="MN:R"$("COLOR_TRANSPARENT","TRANSPARENT"); - -$IV,1$----03/26/14 08:40:25----$IV,0$ -* $LK,"R",A="MN:R"$("_ATTR_DIR","RS_ATTR_DIR"); - -$IV,1$----03/24/14 15:17:14----$IV,0$ -* Coined "DolDoc" as a name for the TempleOS document type. -* Added $LK,"::/Demo/DolDoc/ClickCallBack.CPP"$. - -$IV,1$----03/21/14 04:02:29----$IV,0$ -* $BK,1$TempleOS version 2.04 Released$BK,0$ - -$IV,1$----03/19/14 21:54:23----$IV,0$ -* $LK,"R",A="MN:R"$("BulgeBomber","BomberGolf"); -* Added $LK,"::/Demo/Dsk/SerializeTree.CPP"$. -* $LK,"R",A="MN:R"$("DirLstDel","DirTreeDel"); -* Added $LK,"::/Misc/Tour/Tour7.AUT"$ which covers File Masks. -* $LK,"R",A="MN:R"$("MGetS","GetStr"); -* $LK,"R",A="MN:R"$("PmtStr","GetStr"); - -$IV,1$----03/17/14 22:34:11----$IV,0$ -* Changed $FG,2$$$MA$FG$ to use "tag$FG$" instead of "$FG,2$A=$FG$". -* Changed $LK,"DOCEF_HAS_TERMINATOR",A="MN:DOCEF_HAS_TERMINATOR"$ -T to -TRM. -* Changed $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ format. Some flags are not at start. - -$IV,1$----03/07/14 04:54:10----$IV,0$ -* Added $LK,"::/Demo/ReverseFileExample/Reverse.CPP"$. - -$IV,1$----03/03/14 00:18:47----$IV,0$ -* $BK,1$TempleOS version 2.03 Released$BK,0$ -* $LK,"R",A="MN:R"$("A2I","Str2I64"); -* Removed "Binary Type" from $LK,"CDocBin",A="MN:CDocBin"$. Old sprites no longer work. - -$IV,1$----02/25/14 16:09:01----$IV,0$ -* $LK,"R",A="MN:R"$("TaskTextInputQue","TaskText"); -* $LK,"R",A="MN:R"$("TaskExeStrQue","TaskExe"); -* $LK,"R",A="MN:R"$("TaskMsgQue","TaskMsg"); - -$IV,1$----02/21/14 13:56:02----$IV,0$ -* Converted $LK,"Define",A="MN:Define"$() strings to constants. -* $LK,"R",A="MN:R"$("Adam3d","Adam3c"); -* $LK,"R",A="MN:R"$("Adam3e","Adam3d"); -* $LK,"R",A="MN:R"$("Adam3f","Adam3e"); -* $LK,"R",A="MN:R"$("pattern","needle"); - -$IV,1$----02/19/14 22:13:04----$IV,0$ -* $LK,"R",A="MN:R"$("Limit","Clamp"); -* Overhauled $LK,"FileRead",A="MN:FileRead"$() and $LK,"FileWrite",A="MN:FileWrite"$(). -* Got rid of $FG,4$TextFileRead$FG$() and $FG,4$TextFileWrite$FG$(). - -$IV,1$----02/17/14 20:50:58----$IV,0$ -* $BK,1$TempleOS version 2.02 Released$BK,0$ -* Added $FG,2$F7/SHIFT-F7$FG$ for $LK,"GodWord",A="MN:GodWord"$()/$LK,"GodPassage",A="MN:GodPassage"$(). -* Added $FG,2$F6/SHIFT-F6$FG$ for $LK,"GodSong",A="MN:GodSong"$()/$LK,"GodDoodle",A="MN:GodDoodle"$(). -* $LK,"R",A="MN:R"$("Apps/HolySpirit","Adam/God"); -* $LK,"R",A="MN:R"$("DoItOnce","DoOnce"); - -$IV,1$----02/12/14 14:25:59----$IV,0$ -* Added BMP/GRA file save to $FG,2$$FG$. -* Added $FG,2$$FG$ for screen shot to clipboard. -* Reformed $LK,"CGridGlbls",A="MN:CGridGlbls"$ to be simple. - -$IV,1$----02/10/14 09:19:59----$IV,0$ -* Added $LK,"HashPublic",A="MN:HashPublic"$(). -* Changed FUF_WHOLE_LABELS $FG,2$+lf$FG$/$FG,2$+lb$FG$ to $FG,2$+lb$FG$/$FG,2$+la$FG$. -* Got rid of $FG,4$FilesOrder()$FG$, replacing it with $LK,"FUF_CLUSTER_ORDER",A="MN:FUF_CLUSTER_ORDER"$. -* Added $LK,"::/Demo/Graphics/InputPointer.CPP"$. -* Made $LK,"gr.dc",A="MN:CGrGlbls"$ the default device context for graphics routines. - -$IV,1$----01/28/14 01:44:46----$IV,0$ -* In a function with an ASM{} blk, you can now JMP to a function goto label. - -$IV,1$----01/27/14 09:02:20----$IV,0$ -* $BK,1$TempleOS version 2.01 Released$BK,0$ -* In a function with an ASM{} blk, you can now goto an ASM label. - -$IV,1$----01/26/14 03:27:55----$IV,0$ -* Moved $FG,4$fun_class$FG$ to $LK,"CLex",A="MN:CLex"$.htc.fun. -* Got rid of K=1024 sub_fmt flag in $LK,"StrPrintJoin",A="MN:StrPrintJoin"$. -* Changed MapFile code_heap line addresses to 32-bit. -* Got rid of $LK,"CTask",A="MN:CTask"$.user_data1-3. -* Got rid of $FG,4$ExpressionBinDel$FG$(). -* Got rid of $LK,"CIntermediateCode",A="MN:CIntermediateCode"$.ic_ext_body. -* Cleaned-up $LK,"::/Compiler/ExpParser.CPP"$. - -$IV,1$----01/24/14 06:40:47----$IV,0$ -* $LK,"R",A="MN:R"$("DocInsSafe","DocPrintAtomic"); -* $LK,"R",A="MN:R"$("DocPutSPartial","DocPrintPartial"); -* Made private WordStat links WHITE. -* Added "+s" to $LK,"FilesFind",A="MN:FilesFind"$(). -* Added "+x" to $LK,"Size",A="MN:Size"$() and $LK,"SizeRep",A="MN:SizeRep"$(). -* $LK,"R",A="MN:R"$("TreeSizeRep","SizeRep"); -* $LK,"R",A="MN:R"$("LineCntRep","LineRep"); -* $LK,"R",A="MN:R"$("TreeSize","Size"); -* $LK,"R",A="MN:R"$("FileSize","Size"); -* $LK,"R",A="MN:R"$("MergeChk","Merge"); -* Added $LK,"::/Demo/Graphics/Balloon.CPP"$. -* Added warning for 64-bit reg vars. - -$IV,1$----01/13/14 14:39:34----$IV,0$ -* Optimized $FG,2$if (Carry)$FG$. See $LK,"::/Demo/Carry.CPP"$. - -$IV,1$----01/11/14 21:52:00----$IV,0$ -* Added $LK,"BibleLine2Verse",A="MN:BibleLine2Verse"$(). -* Shifted glbl vars from $LK,"::/Kernel/KStart.CPP"$ to $LK,"CSysFixedArea",A="MN:CSysFixedArea"$. -* Added $LK,"OneTimePopUp",A="MN:OneTimePopUp"$() msg to $LK,"::/Apps/X-Caliber/X-Caliber.CPP"$. Delete registry and reboot if you are upgrading. - -$IV,1$----01/09/14 20:51:20----$IV,0$ -* Converted $FG,2$fp_plot()$FG$ graphics routines to Bool with abort. -* Made $LK,"CatPrint",A="MN:CatPrint"$(). -* Added $FG,2$no_mask$FG$ to $LK,"FileAccessNew",A="MN:FileAccessNew"$() and $LK,"CopyTree",A="MN:CopyTree"$(). - -$IV,1$----01/07/14 11:46:38----$IV,0$ -* $BK,1$TempleOS version 2.00 Released$BK,0$ -* Created Lite and UltraLite distros. -* Added score to $LK,"::/Demo/Games/BlackDiamond.CPP"$. -* Improved $LK,"::/Demo/Games/Varoom.CPP"$. - -$IV,1$----01/06/14 19:22:53----$IV,0$ -* Added $LK,"::/Demo/Asm/AsmAndC3.CPP"$. -* Added $FG,4$::/Demo/OldSchool/SingleFileAOT/Single.CPP$FG$ -* Made compiler compile ASM instructions mixed-in with HolyC. -* Improved $LK,"::/Demo/Graphics/Camp.CPP"$. - -$IV,1$----01/03/14 03:39:30----$IV,0$ -* Fixed compiler bug relating to reg vars. Fixed $LK,"IntEntryGet",A="MN:IntEntryGet"$(). - -$IV,1$----01/01/14 13:16:59----$IV,0$ -* Got rid of XSUM in $LK,"CBinFile",A="MN:CBinFile"$ header. diff --git a/Doc/Charter.TXT b/Doc/Charter.TXT index 044e622..623dc42 100644 --- a/Doc/Charter.TXT +++ b/Doc/Charter.TXT @@ -1,31 +1,71 @@ $FG,5$$WW,1$$TX+CX,"TempleOS Charter"$$FG$ -TempleOS is God's official temple. God said to use 640x480 16 color graphics and God said to have a single audio voice. That is like how He specified cubits in the Bible! He also said it must be perfect. God needs a temple as a special beloved place where His people, young and old, can do offerings and consult God in the oracle. Like Solomon's Temple, this is a focal point for the community. Adults can write hymns, psalms (poems of praise) and meditation essays with good support for links to the Bible. Like Cain and Abel, do offerings and learn what God likes and doesn't like. +Why did they make Solomon's Temple? It was a direction to look, to focus on, a special place for meditation, to do offerings, a community center, a home to God's beauty, that encouraged love of God. People cherished God's temple, beautifying it with gold and all fine things to show love of God, as great cathedrals were decorated with astounding, awe-striking intricate art and gargoyles, incredible devotion to God with hours of effort, toiling and slaving-away for the glory of God, for families with children to see stained-glass windows and tomes with ridiculously elaborate calligraphy to show love of God from a people who did little else but show love toward God, lived in dire conditions by today's standards, yet with so much difficulty scraping-by, found the time to devote even all free-time to God! -* TempleOS is, forever, limited to 100,000 lines of code, not including applications and demos. This will ensure it stays out of trouble a thousand years into the future. It will not stray much from my vision. Other, less important, characteristics can be changed but if the 100,000 line limit is kept, it will stay true. + +1 Kings 6:21 (King James) + +$LM,5$6:21 So Solomon overlaid the house within with pure gold: and he made +a partition by the chains of gold before the $FG,4$oracle$FG$; and he overlaid +it with gold. + +6:22 And the whole house he overlaid with gold, until he had finished +all the house: also the whole altar that was by the $FG,4$oracle$FG$ he overlaid +with gold. + +6:23 And within the $FG,4$oracle$FG$ he made two cherubims of olive tree, each +ten cubits high. +$LM,0$ + +* TempleOS is God's official temple. Just like Solomon's temple, this is a community focal point where offerings are made and God's oracle is consulted. + +* God said $FG,2$640x480 16 color$FG$ graphics is a covenant like circumcision. Children will do offerings. Think of 16 colors like the Simpson's cartoons. In the future, even if one GPU were universal, we would keep 640x480 16 color and not use GPU acceleration. Graphics operations should be transparent, not hidden in a GPU. + +* God said to use a single audio voice -- a single frequency with waveforms. + +* God said His temple must be perfect. $FG,4$We don't think twice about breaking compatibility.$FG$ God said we do a seven year release cycle. I say the PC hardware follows a 49 year, jubilee cycle, like broadcast TV upgrades. + +* The vision is the same usage model and niche as the Commodore 64 -- a non-networked, simple machine where programming was the goal, not just a means to an end. However, it is modern, 64-bit and $FG,2$multi-cored$FG$. It is special purpose, not general purpose, so some things it will not do. Also, it's a kayak, not a Titanic. The priority is $FG,2$user developers$FG$, not $FG,2$3rd party developers$FG$. + +* We do not put any hooks for future changes. "Perfect" means we always act as though it is final, for all time. Microsoft allowed the $FG,2$$TX,"Windows BMP",HTML="http://en.wikipedia.org/wiki/BMP_file"$$FG$ file format to adapt to the future and it became grotesque. + +* Low line count is the highest good, so it is easy to learn the whole thing. Users should see the light at the end of the tunnel. One file system, for example, is better than many file systems. + +* There is a limit of 100,000 lines of code for all time, not including applications and demos. $FG,4$Code comments count$FG$, however. $FG,4$3rd party libraries are banned$FG$ because they circumvent the intent of this limit. The vision is a Commodore 64 ROM -- a fixed core API that is the only dependency of applications. Currently, there are $TX,"79,959",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code. -* It must be kept perfect. $FG,4$$BK,1$Backward compatibility is NOT guaranteed.$FG$$BK,0$ +* Minimal abstraction is a goal. Sheep are fools. They always respect a design that is more complicated than another. Any genius can make it complicated. Like in physics, it takes a supra-genius to make it simple. -* TempleOS is $FG,2$ring-0-only$FG$, running everything in kernel mode including applications. You have full access to memory, I/O ports, instructions, etc. at all times, because that's fun. It is simpler and faster, too. +* One platform. $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatibles. Desk-tops are all we design for, but lap-tops can tag-along. -* TempleOS will always $FG,2$identity-map$FG$ memory in a $FG,2$single-address-map$FG$ configuration. (Virtual addresses are always kept equal to physical addresses with a single map for all tasks on all cores.) It's as though paging is not used. +* One driver for each class of device. Limited exceptions are allowed. With divergent device capabilities, it is a nightmare for user applications and what is gained? A three button mouse is like a leg you cannot put weight on. -* TempleOS will always be for one platform -- $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatibles. +* $FG,2$Ring-0-only$FG$. Everything runs in kernel mode, including user applications. -* TempleOS will never have networking, so malware is less of an issue. +* Full access to everything. All memory, I/O ports, instructions, and similar things must never be off-limits. All functions, variables and class members will be accessible. There are no C++ $FG,2$public$FG$/$FG,2$private$FG$ protections and all functions, even secondary ones in the kernel, can be called. -* TempleOS will always have one video mode, $FG,2$640x480$FG$ by 16 colors, unless that mode becomes unavailable on computers in the future. God said this was a covenant, like circumcision. +* $FG,2$Single-address-map$FG$ as though paging is not used. Long mode requires paging, however, so the nearest thing is keeping all memory $FG,2$identity-mapped$FG$. -* TempleOS will always just have PC Speaker sound. +* $FG,4$No networking$FG$, so malware is not an issue. -* TempleOS will always be $FG,2$free$FG$. I might sell applications, support, or, possibly, do adware. +* No encryption or passwords. Files are compressed, not encrypted. -* TempleOS will always be $FG,2$100% open source$FG$ with all source included, unless device drivers or something can only be included with non-disclosure agreements. +* $FG,2$Free$FG$ and $FG,2$public domain$FG$. -* All function args and returns will be 64-bit. No plans for C++. +* $FG,2$100% open source$FG$ with all source included. -* TempleOS documents are not for printing. They're dynamic and intended for the screen. There will always be just one font, a fixed-width font. No Unicode, just Extended ASCII. +* Documents are not for printing. They're dynamic, intended for the screen. -* TempleOS is not for multimedia. Games will be created by programmers, not artists. Sounds and images will be, primarily, calculated in real-time, not fetched. +* Just one 8x8 fixed-width font. $FG,4$No Unicode, just Extended ASCII$FG$. Other countries can make their own versions. The versions should be just for one language and platform. -* All functions, variables and class members will be accessible. There are no C++ $FG,2$public$FG$/$FG,2$private$FG$ protections and all functions, even secondary ones in the kernel, can be called. +* $FG,4$No multimedia$FG$. Sounds and images will be primarily calculated in real-time, not fetched from storage. + +$FG,8$ +* "Commodore 64" was a trademark of Commodore Business Machines. +* "The Simpsons" is a trademark of Fox. +* "Windows" is a trademark of MicroSoft Corp. +$FG$ + + +$FG,5$$WW,1$$TX+CX,"Possible Amendments"$$FG$ + +The compiler's parser makes RISC code which it optimizes to CISC. I discovered this does not matter because the CPU converts it back to RISC and schedules it, internally. A TempleOS zealot with more zeal than I, might say we should save lines-of-code by removing the CISC optimizing. diff --git a/Doc/CmdLineOverview.TXT b/Doc/CmdLineOverview.TXT index 284675b..1b84eb1 100644 --- a/Doc/CmdLineOverview.TXT +++ b/Doc/CmdLineOverview.TXT @@ -2,7 +2,7 @@ $WW,1$$FG,5$$TX+CX,"Command Line Overview"$$FG$ The cmd line feeds into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiler as you type. A statement outside a function executes immediately. Remember to add a semicolon.$WW,1$ -Look-up the function headers with $FG,2$WordStat$FG$ by hitting $FG,2$$FG$ after typing the first few letters. +Look-up the function headers with $FG,2$AutoComplete$FG$ by hitting $FG,2$$FG$ after typing the first few letters. $LK,"Click Here",A="MN:Dir"$ to see the directory cmd header. It accepts default args from C++. @@ -27,14 +27,14 @@ The drive can be specified in a $LK,"Cd",A="MN:Cd"$() command as in: >$FG,2$Cd("B:/Temp");$FG$ B drive >$FG,2$Cd("::/Demo");$FG$ Boot drive ->$FG,2$Cd("HOME/Psalmody");$FG$ HOME is your $LK,"acct dir",A="FF:::/Doc/GuideLines.TXT,ACCT FILES"$. +>$FG,2$Cd("::/Home/Psalmody");$FG$ See $LK,"::/Home dir",A="FF:::/Doc/GuideLines.TXT,/Home Files"$. If a file is not found, $FG,2$.Z$FG$ is added or removed and a search is done, again. If a file is still not found, all parent directories are searched. -You can place macros in your $LK,"PersonalMenu",A="FI:HOME/PersonalMenu.TXT"$ for $LK,"Cd",A="MN:Cd"$() commands. $FG,2$$FG$ to access your menu. +You can place macros in your $LK,"PersonalMenu",A="FI:/Home/PersonalMenu.TXT"$ for $LK,"Cd",A="MN:Cd"$() commands. $FG,2$$FG$ to access your menu. ->$FG,2$Grep("needle","/Demo/*.CPP.Z;*.TXT.Z;");$FG$ See $LK,"File Utils",A="FI:::/Doc/FileUtils.TXT"$. +>$FG,2$Find("needle","/Demo/*.CPP.Z;*.TXT.Z;");$FG$ See $LK,"File Utils",A="FI:::/Doc/FileUtils.TXT"$. $LK,"Cmd Line Routines",A="HI:Cmd Line (Typically)"$ -$MA-X+PU,"Take Tour",LM="SpawnUser(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$ +$MA-X+PU,"Take Tour",LM="User(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$ diff --git a/Doc/CompilerOverview.TXT b/Doc/CompilerOverview.TXT index 4669457..f1eab32 100644 --- a/Doc/CompilerOverview.TXT +++ b/Doc/CompilerOverview.TXT @@ -13,8 +13,15 @@ $FG,2$#else $FG,2$#ifaot,#ifjit $FG$Include code if in $FG,2$AOT$FG$ compiler mode. $FG,2$defined()$FG$ Is a function that can be used in expressions. $FG,2$#help_index$FG$, $FG,2$#help_file$FG$ See $LK,"Help System",A="FI:::/Doc/HelpSystem.TXT"$. - -See $LK,"Scoping and Linkages",A="FI:::/Doc/ImportExports.TXT"$, $LK,"preprocessor",A="FF:::/Compiler/Lex.CPP,KW_DEFINE"$ and $LK,"Compiler Options",A="FI:::/Doc/Options.TXT"$. +$HL,1$$WW,0$ +#define __DATE__ #exe{StreamPrint("\"%D\"",Now);} +#define __TIME__ #exe{StreamPrint("\"%T\"",Now);} +#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);} +#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);} +#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);} +#define __DIR__ #exe{StreamDir;} +$HL,0$$WW,1$ +See $LK,"::/Demo/Directives.CPP"$, $LK,"Scoping and Linkages",A="FI:::/Doc/ImportExports.TXT"$, $LK,"preprocessor",A="FF:::/Compiler/Lex.CPP,KW_DEFINE"$ and $LK,"Compiler Options",A="FI:::/Doc/Options.TXT"$. $FG,5$$TX+CX,"Assembler Directives"$$FG$ diff --git a/Doc/Confuse.TXT b/Doc/Confuse.TXT index b9818ff..611f59a 100644 --- a/Doc/Confuse.TXT +++ b/Doc/Confuse.TXT @@ -1,6 +1,6 @@ $WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$ -* I, $FG,2$Terry A. Davis$FG$, wrote every one of the $TX,"121,847",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"10.9",D="DD_TEMPLEOS_AGE"$ years (full-time). It runs on bare hardware with no layering, libraries, tools, modules or anything from other sources. It's 100% independent and stands alone. It has no networking and certainly doesn't call home. Every line of TempleOS src code is including in all distro's, from the kernel to the compiler to the boot loaders. +* I, $FG,2$Terry A. Davis$FG$, wrote every one of the $TX,"121,138",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"11.0",D="DD_TEMPLEOS_AGE"$ years (full-time). It runs on bare hardware with no layering, libraries, tools, modules or anything from other sources. It's 100% independent and stands alone. It has no networking and certainly doesn't call home. Every line of TempleOS src code is including in all distro's, from the kernel to the compiler to the boot loaders. * TempleOS does not execute code not written by me and any time except for a few $FG,2$BIOS$FG$ calls for configuration. @@ -28,7 +28,7 @@ $WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$ * Files with names ending in $FG,2$.Z$FG$ are compressed, not encrypted. $LK,"Copy",A="MN:Copy"$() or rename them with $LK,"Move",A="MN:Move"$() to store them uncompressed. -* TempleOS is open src and every bit of the src code is included in the distro. Use $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() to compile the kernel and compiler. +* TempleOS is open src and every bit of the src code is included in the distro. Use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() to compile the kernel and compiler. * TempleOS does not use object files or a linker. @@ -38,9 +38,7 @@ $WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$ * No application has a lock on the speaker so apps can interfere with each other and TempleOS makes speaker noise during disk access on purpose. -* During boot, TempleOS reads-in all text files and collects statistic on them. It makes a sparse matrix containing the frequency each word was followed by each other word. This makes it able to predict the next word while you type. This feature is called $FG,2$WordStat$FG$. - -* There are no mem leaks. TempleOS allocates mem as more items are displayed on the screen. TempleOS allocates mem for code as it is compiled at the cmd line. If you $FG,2$#include$FG$ a file twice, it allocates more mem for it. If you have a 50,000 line program with each line taking twenty bytes on a machine with 1 Gig, you could $FG,2$#include$FG$ it a thousand times if it had no data or graphics and no other use of mem. Code entered at the cmd line gets allocated and persists. I don't want to hear any bullshit about leaks unless you actually run-out. If it bothers you, hit $FG,2$$FG$ and $FG,2$, $FG$periodically$FG$. Use the pop-up flag on macros in your menu to spawn new tasks, run applications and free the applications when they are finished and everything will be fine. Small mem chunks stick to the task when they are freed until it is killed. The only way to get in trouble involves allocating multiple Meg chunks and freeing them. These can only be reused if the same size gets allocated again. Use $LK,"HeapLog",A="MN:HeapLog"$() and $LK,"HeapLogRep",A="MN:HeapLogRep"$() to see who allocated mem and didn't free it. +* There are no mem leaks. TempleOS alllocs mem as more items are displayed on the screen. TempleOS alllocs mem for code as it is compiled at the cmd line. If you $FG,2$#include$FG$ a file twice, it alllocs more mem for it. If you have a 50,000 line program with each line taking twenty bytes on a machine with 1 Gig, you could $FG,2$#include$FG$ it a thousand times if it had no data or graphics and no other use of mem. Code entered at the cmd line gets alloced and persists. I don't want to hear any bullshit about leaks unless you actually run-out. If it bothers you, hit $FG,2$$FG$ and $FG,2$, $FG$periodically$FG$. Use the pop-up flag on macros in your menu to spawn new tasks, run applications and free the applications when they are finished and everything will be fine. Small mem chunks stick to the task when they are freed until it is killed. The only way to get in trouble involves allocating multiple Meg chunks and freeing them. These can only be reused if the same size gets alloced again. Use $LK,"HeapLog",A="MN:HeapLog"$() and $LK,"HeapLogRep",A="MN:HeapLogRep"$() to see who alloced mem and didn't free it. * The editor periodically takes a snap-shot for $FG,2$UNDO$FG$ and this looks like a memory leak. diff --git a/Doc/Acknowledgements.TXT b/Doc/Credits.TXT similarity index 85% rename from Doc/Acknowledgements.TXT rename to Doc/Credits.TXT index c16111b..4fe625c 100644 --- a/Doc/Acknowledgements.TXT +++ b/Doc/Credits.TXT @@ -1,18 +1,18 @@ -$WW,1$$FG,5$$TX+CX,"Acknowledgements"$$FG$ +$WW,1$$FG,5$$TX+CX,"Credits"$$FG$ 1) The font, $LK,"::/Kernel/Font8x8.CPP"$, is taken from $FG,4$$TX,"FreeDOS",HTML="http://www.freedos.org"$$FG$. It's public domain. 2) $LK,"ATA Reg and Cmd Definitions",A="MN:ATA_NOP"$ are originally from Linux. Later, I got the spec. -3) The heap algorithm, $LK,"::/Kernel/Mem1b.CPP"$, is adapted from one I saw at Ticketmaster when I worked on their VAX operating system. +3) The heap algorithm, $LK,"::/Kernel/MemB.CPP"$, is adapted from one I saw at Ticketmaster when I worked on their VAX operating system. 4) The LZW compression algorithm, $LK,"::/Kernel/Compress.CPP"$, came from a magazine and I implemented it when I worked for Ticketmaster. -5) The adaptive-step-size-Runge-Kutta algorithm, $LK,"::/Adam/MathODE.CPP"$, is adapted from the book, $UL,1$Numeric Recipies in C$UL,0$. +5) The adaptive-step-size-Runge-Kutta algorithm, $LK,"::/Adam/AMathODE.CPP"$, is adapted from the book, $UL,1$Numeric Recipies in C$UL,0$. 6) The random number generator is from the book, $UL,1$Numeric Recipies in C$UL,0$. -7) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$. +7) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$. The wolf in BlackDiamond is also from there. 8) The $FG,2$FAT32$FG$ file system is owned by MicroSoft. @@ -34,13 +34,13 @@ $WW,1$$FG,5$$TX+CX,"Acknowledgements"$$FG$ 17) God told me to stick with 640x480 16 color, a single audio voice and kept me from zombie-walking into making child windows like $FG,2$Windows$FG$. Instead, I made one window per task with no child windows. He also guided my progress, very obviously. -18) I got $FG,4$$TX,"Webster's Dictionary",HTML="http://www.templeos.org/files/DICTIONARY.TXT"$$FG$ and $FG,4$$TX,"The King James Bible",HTML="http://www.templeos.org/files/BIBLE.TXT"$$FG$ from $FG,4$$TX,"Project Gutenberg",HTML="http://promo.net/pg/"$$FG$. +18) I got $FG,4$$TX,"Webster's Dictionary",HTML="http://www.templeos.org/files/DICTIONARY.TXT"$$FG$ and $FG,4$$TX,"The King James Bible",HTML="http://www.templeos.org/files/BIBLE.TXT"$$FG$ from $FG,4$$TX,"Project Gutenberg",HTML="http://web.archive.org/web/20110730111436/http://promo.net/pg/"$$FG$. 19) John Carmack inspired me to use "$LK,"Clamp",A="MN:Clamp"$" as a name instead of "Limit". He inspired me to use "needle" and "haystack" as names. He inspired me to simplify my Frames-Per-Second code. 20) Bill Gates inspired me to add comments to my $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$. -In short, I wrote every one of the $TX,"121,463",D="DD_TEMPLEOS_LOC"$ lines myself, no $FG,2$GPL$FG$ code, no linkage or dependence on other code. Anyone who says otherwise is being an ass. +In short, I wrote every one of the $TX,"120,532",D="DD_TEMPLEOS_LOC"$ lines myself, no $FG,2$GPL$FG$ code, no linkage or dependence on other code. Anyone who says otherwise is being an ass. $FG,8$ * "MSDOS", "Windows", "MovieMaker" "MS Paint" and "FAT32" are trademarks of MicroSoft Corp. * "SiteBuilder" is a trademark of Yahoo! Inc. diff --git a/Doc/Ctrls.TXT b/Doc/Ctrls.TXT index ac19400..b52e12e 100644 --- a/Doc/Ctrls.TXT +++ b/Doc/Ctrls.TXT @@ -1 +1 @@ -$WW,1$To create a TempleOS graphic ctrl, you define callback functions and insert a $LK,"CCtrl",A="MN:CCtrl"$ structure in the $LK,"CTask",A="MN:CTask"$ queue. See $LK,"::/Demo/Graphics/SliderCtrl.CPP"$, $LK,"::/Demo/Graphics/ScrollBars.CPP"$ and $LK,"TermButtonNew",A="FF:::/Adam/WallPaper.CPP,TermButtonNew"$. There is a template-code ctrl generator, if you press $FG,2$$FG$. +$WW,1$To create a TempleOS graphic ctrl, you define callback functions and insert a $LK,"CCtrl",A="MN:CCtrl"$ structure in the $LK,"CTask",A="MN:CTask"$ queue. See $LK,"::/Demo/Graphics/Slider.CPP"$, $LK,"::/Demo/Graphics/ScrollBars.CPP"$ and $LK,"TermButtonNew",A="FF:::/Adam/WallPaper.CPP,TermButtonNew"$. There is a template-code ctrl generator, if you press $FG,2$$FG$. diff --git a/Doc/Customize.TXT b/Doc/Customize.TXT index ce03954..e548d44 100644 --- a/Doc/Customize.TXT +++ b/Doc/Customize.TXT @@ -1,6 +1,6 @@ -$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:HOME/Adam3aLocalize.CPP,mouse.scale"$. +$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:/Home/AdamLocalize.CPP,mouse.scale"$. -* You can set your local time zone by setting the $RED$local_time_offset$FG$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:HOME/Adam3aLocalize.CPP,local_time"$. +* You can set your local time zone by setting the $RED$local_time_offset$FG$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:/Home/AdamLocalize.CPP,local_time"$. -* Get rid of this msg $LK,"here",A="FF:HOME/DoOnce.CPP,Customize.TXT"$. +* Get rid of this msg $LK,"here",A="FF:/Home/DoOnce.CPP,Customize.TXT"$. diff --git a/Doc/CutCorners.TXT b/Doc/CutCorners.TXT index f498e97..7e620c6 100644 --- a/Doc/CutCorners.TXT +++ b/Doc/CutCorners.TXT @@ -6,8 +6,8 @@ There are a few places where I cut corners in the interest of not junking-up cod * TempleOS does not figure-out $FG,2$FAT32$FG$ short name alias numbers. $LK,"FAT32DirNew",A="MN:FAT32DirNew"$(). It can cause hard drive corruption, so I might have to do it. It would really take a lot of junky code for this hatefully, detestable, legacy issue. "Please don't make me ruin my beautiful shiny-new TempleOS with that!" I am also not enthused about $FG,2$FAT32$FG$ because it is in patent limbo. $FG,2$FAT32$FG$ might get removed from TempleOS. There is the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ 64-bit file system that works perfectly well. $FG,2$FAT32$FG$ is useful, however, because it assists in transferring between dual booted operating systems. -* I changed the $LK,"asm opcodes",A="FI:::/Compiler/OpCodes.TXT"$ names to remove the ambiguity between instructions with different numbers of arguments, making my $LK,"assembler",A="FI:::/Compiler/Assembler.CPP"$ simpler and I did minimal 16-bit asm support, since 64-bit is what you should be using, unless you're doing a $LK,"boot loader",A="FI:::/Adam/Boot/BootCD.CPP"$. +* I changed the $LK,"asm opcodes",A="FI:::/Compiler/OpCodes.TXT"$ names to remove the ambiguity between instructions with different numbers of arguments, making my $LK,"assembler",A="FI:::/Compiler/Asm.CPP"$ simpler and I did minimal 16-bit asm support, since 64-bit is what you should be using, unless you're doing a $LK,"boot loader",A="FI:::/Adam/Boot/BootCD.CPP"$. * There are no file-sharing locks of any kind. You're on your own. -* A hidden window is never refreshed. Certain tasks are never done, therefore. During refresh, the entry count limit of the document buffer is, normally, checked and enforced. If you print to the command-line in a task who's window is covered, no limit on buffer exists and it will allocate memory for the document buffer until the system runs out of memory and crashes. +* A hidden window is never refreshed. Certain tasks are never done, therefore. During refresh, the entry count limit of the document buffer is, normally, checked and enforced. If you print to the command-line in a task whose window is covered, no limit on buffer exists and it will alloc memory for the document buffer until the system runs out of memory and crashes. diff --git a/Doc/D3.TXT b/Doc/D3.TXT index 39ebe37..5226e82 100644 --- a/Doc/D3.TXT +++ b/Doc/D3.TXT @@ -1,3 +1,3 @@ $WW,1$TempleOS has a class for 3 dimensional points consisting of F64s. HolyC is not C++ -- it does not support passing or returning values from functions which are not 64-bits, therefore, it can't be implemented with operator overloading. Making all function args and returns 64-bit is a core prinicple of TempleOS. -As a courtesy, most of the CD3 functions return the addr of the destination vect, so you can nestle calls. They do not allocate new space for the destination vect. +As a courtesy, most of the CD3 functions return the addr of the destination vect, so you can nestle calls. They do not alloc new space for the destination vect. diff --git a/Doc/DbgOverview.TXT b/Doc/DbgOverview.TXT index 28e97a6..75b45f2 100644 --- a/Doc/DbgOverview.TXT +++ b/Doc/DbgOverview.TXT @@ -37,6 +37,6 @@ $ID,-2$ * There is a heap check utility which can find leaks. Use $LK,"HeapLog",A="MN:HeapLog"$(), and $LK,"HeapLogRep",A="MN:HeapLogRep"$(). It's a really simple program which intercepts $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$(). You can customize the code to find other heap issues. -* You can define handler functions for $FG,2$$FG$ keys with $LK,"SetCtrlAltLetCB",A="MN:SetCtrlAltLetCB"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$$FG$ handlers take a scan_code as an arg. +* You can define handler functions for $FG,2$$FG$ keys with $LK,"CtrlAltLetCBSet",A="MN:CtrlAltLetCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$$FG$ handlers take a scan_code as an arg. -* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem allocated off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value. Pick a non-zero value to discover uninitialized var bugs. You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting. +* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem alloced off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value. Pick a non-zero value to discover uninitialized var bugs. You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting. diff --git a/Doc/DbgPSect.TXT b/Doc/DbgPSect.TXT index e22bee5..c3e45b6 100644 --- a/Doc/DbgPSect.TXT +++ b/Doc/DbgPSect.TXT @@ -1,2 +1,2 @@ -$WW,1$Use $FG,2$%p$FG$ to print a pointer with PSect+Offset or use $FG,2$%P$FG$ to print a link to a PSect+Offset. +$WW,1$Use $GREEN$%p$FG$ to print a pointer with PSect+Offset or use $GREEN$%P$FG$ to print a link to a PSect+Offset. \ No newline at end of file diff --git a/Doc/Define.TXT b/Doc/Define.TXT index a3f2754..b3db349 100644 --- a/Doc/Define.TXT +++ b/Doc/Define.TXT @@ -2,6 +2,6 @@ $WW,1$TempleOS has a string indirection feature implemented with the same hash s Each task can load it's own Define strings. Remember, when a $LK,"Hash",A="HI:Hash"$ table is searched for a string, if it is not found, the parent task's table is searched. -The $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ framework supports text that changes based on entries in the task's symbol table. Set a text entry with a $FG,2$D=$FG$ arg, as in $FG,2$$$TX,"",D="DD_MYSTRING"$$$FG$. See $LK,"::/Demo/DolDoc/DefineStr.CPP"$, $LK,"::/Adam/DocDefines.CPP"$ and $LK,"::/Doc/MemOverview.TXT"$. +The $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ framework supports text that changes based on entries in the task's symbol table. Set a text entry with a $FG,2$D=$FG$ arg, as in $FG,2$$$TX,"",D="DD_MYSTRING"$$$FG$. See $LK,"::/Demo/DolDoc/DefineStr.CPP"$, $LK,"::/Adam/ADefine.CPP"$ and $LK,"::/Doc/MemOverview.TXT"$. See $LK,"::/Demo/Define.CPP"$. diff --git a/Doc/Demands.TXT b/Doc/Demands.TXT index 964a349..a795cc3 100644 --- a/Doc/Demands.TXT +++ b/Doc/Demands.TXT @@ -2,99 +2,64 @@ $WW,1$$FG,5$$TX+CX,"Demands"$$FG$ When God publically claims this operating system as His temple, here's what I want: + +$HC,""$ + + * VMware to again support PC Speaker and provide emulation if no PC Speaker is present. -* Windows and Linux to support $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system so I can get rid of 2,000 lines of redundant, blemished code -- FAT32 and ISO9660. God's temple must be perfect. Redundant code for multiple file systems is imperfect. For this operating system, we want low line count. More than one file system type is bad, just as more than one driver for the same type of device is bad. +* Windows, Linux and VMware to support $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system so I can get rid of 2,000 lines of redundant, blemished code -- FAT32 and ISO9660. God's temple must be perfect. Redundant code for multiple file systems is imperfect. For this operating system, we want low line count. More than one file system type is bad, just as more than one driver for the same type of device is bad. $LK,"::/Kernel/Dsk/FileSysRedSea.CPP"$ $LK,"::/Kernel/Dsk/FileSysFAT.CPP"$ :965 -$LK,"::/Kernel/Dsk/FileSysISO1.CPP"$ :284 +$LK,"::/Kernel/Dsk/FileSysISO.CPP"$ :284 $LK,"::/Adam/Boot/DskCDDVD.CPP"$ :536 +$LK,"RClustersBlks",A="MN:RClustersBlks"$() -* Microsoft must cancel SecureBoot because it makes dual booting impossible. TempleOS is an additional operating system that must be used along-side Windows or Linux, not as a replacement. It must dual boot. +* Microsoft must cancel SecureBoot because it makes dual booting impossible. TempleOS is an additional operating system that must be used along-side Windows or Linux, not as a replacement. It must dual boot because it has no networking. Real hardware as opposed to $FG,2$VMware$FG$ is like the difference between looking in a telescope eye piece and some link to a photo on the Internet. God said the C64 generation owned ancestral lands and $FG,2$VMware$FG$ is like being moved on a reservation. It will not stand. -* PC hardware manufacturers: ATA/ATAPI PIO must work. In fact, put them at standard IDE port addresses. Hard disk should be primary master. CDROM/DVD should be secondary master. See what you can do to make flash memory sticks with ATA/ATAPI. +* PC hardware manufacturers: ATA/ATAPI PIO must work. In fact, put them at standard IDE port addresses. Hard disk should be primary master 1F0/3F6. CDROM/DVD should be secondary master 170/376. See what you can do to make flash memory sticks with ATA/ATAPI. +$LK,"/Kernel/Dsk/DskATAId.CPP",A="FI:::/Kernel/Dsk/DskATAId.CPP"$ :280 lines to figure-out I/O ports +$LK,"/Kernel/BIOS32.CPP",A="FI:::/Kernel/BIOS32.CPP"$ :290 * PS/2 emulated keyboard and mouse must work. The BIOS must enable these. * VMware must allow ATAPI interface to real CD/DVD hardware. -* Perhaps, VMware+Intel can enable faster-than-standard x86 IN/OUT instruction timing for ATA/ATAPI PIO, so bandwidth isn't bad. +* Perhaps, VMware+Intel can enable faster-than-standard x86 IN/OUT instruction timing for ATA/ATAPI PIO, so bandwidth isn't bad. $LK,"ATAGetResult",A="MN:ATAGetResult"$(). -* Computers should have a RESET switch and a fast boot option, skipping diagnostics. +* Since I practically don't use paging, perhaps, Intel could add optimizations to long (64-bit) mode for no paging. -* VMware and others should list TempleOS as an official 64-bit operating systems. +* Computers should have a RESET switch and a fast boot option, skipping diagnostics. What the heck, replace UEFI with TempleOS. Poetic justice. -* Windows and Linux must support TempleOS $FG,2$.GRA$FG$ graphics files. These are just right-side-up $FG,2$.BMP$FG$ files with 8-bits-per-pixels 4-bits of color and transparency, with no palette. Compression is an$FG$ LZW compression. $LK,"DCSave",A="MN:DCSave"$(), $LK,"GRAWrite",A="MN:GRAWrite"$(), $LK,"DCLoad",A="MN:DCLoad"$(), and $LK,"GRARead",A="MN:GRARead"$(). $LK,"::/Kernel/Compress.CPP"$ +* VMware and others should list TempleOS as an official 64-bit operating system. + +* Windows and Linux must support TempleOS $FG,2$.GRA$FG$ graphics files. $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$ are much cleaner than $FG,2$.BMP$FG$ files. + +* I want a nice dictionary. Someone needs to do a $LK,"Spell Checker",A="FI:::/Demo/SuggestSpelling.CPP"$. + +* We want the ultimate Bible search engine. + +* I would like the Intel architecture manuals in $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ TXT format so we can put links in the code. + +* We want serial ports with software interface more like old style serial ports, but hardware and speed of USB3. They should have big TX and RX FIFOs and allow flow control to jump the queue. We do not want end-point shit -- just put lots of ports on the PC. (I am just interested in desk-tops.) We need two baud rates, fast and slow. Use PIC IRQ3 and IRQ4 (with big FIFOs we could do without IRQs.) We want two joysticks, easy to set-up. We want it to be easy to connect a microcontroller for general purpose communication. + +* Once in a blue moon, perhaps 49 year jubilee, the hardware gets upgraded and perfected, the same way broadcast TV get upgraded. God still wants 640x480 16 color. ----- - -In other words, all hardware and BIOSes must support TempleOS, dual booted with Windows or Linux. Hypervisors must support it fully. - -It would be nice if TempleOS were burned into BIOS ROMs in the factory, or Intel CPU chips! Then, the oracle code would be guaranteed trustworthy. My hope is that it will be finalized, mostly unchanging for centuries. - -I need a good dictionary and need to fix spellcheck. Maybe, we leave the dictionary out. - -I do not intend to ever support UEFI. That uses elf and various propriatary graphics formats. It requires additional lines of code and offers nothing! +Device Simple Hardware Interface Complicate Interface +--------------- ------------------------------- ----------------------------- + 1040-EZ Tax Form 1040 Regular +Video VGA 640x480 16 Color 20 Differnet GPUs +Sound PC Speaker HD Audio, AC97, Sound Blaster +HardDrive ATA Port I/O, Sync No Interrupt PCI AHCI SATA +CDROM ATAPI Port I/O PCI AHCI SATA +Keyboard/Mouse PS/2 Port I/O USB +During the 49 years jubilee, we do a perfect version of hardware with advances in both simple and complicated interfaces. ATAPI/ATA should be merged and made blemish-free. We want flash memory sticks to interface like hard drives. Design it like the 1040EZ tax form. You do not add extra boxes to get your jollies. - -$FG,5$$TX+CX,"New Rules"$$FG$ - -$HC,""$ - -Guess what, biotches? Daddy's home! $LK,"Deuteronomy,16:16",A="BF:Deuteronomy,16:16",HTML="http://www.biblegateway.com/passage/?search=Deuteronomy%2016:16&version=NIV"$ Y'all have to do three offerings per year in the Temple. - - -These are examples of my offerings. - -1) $TX,"Hymn Videos",HTML="http://www.templeos.org/Wb/Accts/TS/Wb2/Hymns.html"$ - -2) $TX,"Moses Comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics"$ - -$LK,"Psalms,50:11-15",A="BF:Psalms,50:1",HTML="http://www.biblegateway.com/passage/?search=Psalm%%2050:11-15&version=WYC"$ - -$LK,"Malachi,1:1-14",A="BF:Malachi,1:1",HTML="http://www.biblegateway.com/passage/?search=Malachi%%201:1-14&version=NIV"$ - -$LK,"Hosea,6:6",A="BF:Hosea,6:6",HTML="http://www.biblegateway.com/passage/?search=Hosea%%206:6&version=NRSV"$ - - - - - -$FG,5$$TX+CX,"God's Temple"$$FG$ - -God said 640x480 16 color. - -God said single audio voice. (Waveforms okay) - -God said lots of misc stuff, like no child windows. - -I said there is a 100,000 line-of-code limit. - -We have $TX,"81,303",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code, currently, and can expand up to 100,000, but code comments count. I am opening-this-up to letting other people contribute. We'll have some kind of organization. - -When you have a 100,000 line of code limit, you do not get mellow-dramatic code. The vision is a C64, not a manned mission NASA mainframe. If you prance around adding rare-case code, that subtracts from other potential features. So, long as you know that every line of code added, subtracts a feature, we'll be okay. - - -The 640x480 16 color limit is certainly astounding. God said it was for kid offerings, I guess like 8 crayola colors for kindergardeners. If you must make a art drawing for you three yearly offerings, you'll be happy only 16 colors exist. Just think! Everybody's workload on doing offerings is eased by having only 16 colors. Isn't that good? - -Today, God said dull causes craftiness. I think what God means is... on a C64, you saw fantasticly crafty creativity because you were not burdened with high-demand photo-realism graphics and sound. Otherwise, you spend all your energy just burdened with getting something presentable. Now, you will achieve "presentable" easily and advance to embelishing and getting creative. - -God said 640x480 16 color was a covenant, like circumcision. - -The 100,000 line of code limit should ensure God's temple stays on-course for a thousand years. Also, it must be kept perfect. With these, it will not go astray. I could hand it over to NASA (for example) and, so long as they kept the 100,000 line of code limit, it would be in good hands. For the future, I expect low driver-line-count hardware to be created and utilized when all (mostly) computers have advanced to contain it. All computer are 64-bit, now, for example, if you catch my drift. - - - -The original core values for this operating system were based on providing kids, today, what I had as a kid -- Ring-0-Only and Identity-mapped simplicity and accessibility. I had this book, $FG,4$$TX,"Mapping the Commodore 64",HTML="http://unusedino.de/ec64/technical/project64/mapping_c64.html"$$FG$, and it provided years of entertainment. All the public and private operating system code and locations were explained and accessible, useful or not. What I did was learn and tinker. That was the entertainment. - -Today, I imposed the 100,000 line of code limit because -- when you see the light at the end of the tunnel, it is a qualitatively different ball game. - -Look at chapter 6: $TX,"Commodore 64 User's Manual",HTML="http://www.commodore.ca/manuals/c64_users_guide/c64-users_guide.htm"$. The thing you did with a C64 was write BASIC programs with hand-coded binary sprite data statements. Bill Gates would say, "You kids are so lucky today, you can pick from 100 fonts and write HTML webpages." - - -I would hope NASA (If they were caretakers... 'cause SETI or something, LOL) would not need to be told that Ring-0-Only and Identity-Mapped are core values. I thought maybe I wouldn't have to enshrine that and they would, on their own, just know that. You could fix the gaps in address space, very easily, but you lose a big principle -- virtual same as physical. That's worth fight for and sacrificing for. It's simpler. Think of the kids! It's also fast. - +$FG,8$ +* "VMware" is a trademark of VMware, Inc. +* "Linux" is probably a trademark owned by Linus Torvalds. +* "Windows" is a trademark of MicroSoft Corp. diff --git a/Doc/DemoIndex.TXT b/Doc/DemoIndex.TXT index 73f5115..60a9661 100644 --- a/Doc/DemoIndex.TXT +++ b/Doc/DemoIndex.TXT @@ -21,6 +21,7 @@ $LK,"::/Demo/MsgLoop.CPP"$ $LK,"::/Demo/Graphics/Doodle.CPP"$ $LK,"::/Demo/Graphics/Speedline.CPP"$ $LK,"::/Demo/Graphics/Bounce.CPP"$ +$LK,"::/Demo/RandDemo.CPP"$ $LK,"::/Demo/KeyBitMap.CPP"$ $LK,"::/Demo/Graphics/WinZBuf.CPP"$ $LK,"::/Demo/Graphics/Elephant.CPP"$ @@ -41,6 +42,7 @@ $LK,"::/Demo/Games/Halogen.CPP"$ $LK,"::/Demo/Games/TheDead.CPP"$ $LK,"::/Demo/Games/RainDrops.CPP"$ $LK,"::/Demo/Snd/MorseCode.CPP"$ +$LK,"::/Demo/Graphics/Lattice.CPP"$ $LK,"::/Demo/Graphics/Collision.CPP"$ $LK,"::/Demo/Games/BlackDiamond.CPP"$ $LK,"::/Demo/Games/Wenceslas.CPP"$ @@ -68,12 +70,12 @@ $LK,"::/Demo/Graphics/Cartesian.CPP"$ $LK,"::/Demo/Graphics/Hanoi.CPP"$ $LK,"::/Demo/Graphics/Life.CPP"$ $LK,"::/Demo/Games/Zing.CPP"$ -$LK,"::/Demo/Games/ChessNet.CPP"$ +$LK,"::/Demo/Games/TreeCheckers.CPP"$ $LK,"::/Demo/MultiCore/Palindrome.CPP"$ $LK,"::/Demo/MultiCore/MPAdd.CPP"$ $LK,"::/Demo/MultiCore/Lock.CPP"$ $LK,"::/Demo/MultiCore/Clouds.CPP"$ -$LK,"::/Demo/Graphics/SliderCtrl.CPP"$ +$LK,"::/Demo/Graphics/Slider.CPP"$ $LK,"::/Demo/Graphics/WallPaperCtrl.CPP"$ //Press SHIFT-F5 to Adam Include $LK,"::/Demo/Graphics/ScrollBars.CPP"$ $LK,"::/Demo/RegistryDemo.CPP"$ @@ -99,6 +101,7 @@ $LK,"::/Demo/Graphics/Shadow.CPP"$ $LK,"::/Demo/Graphics/Pick3D.CPP"$ $MA-X+PU,"::/Apps/ToTheFront",LM="Cd(\"::/Apps/ToTheFront\");Dir;View;\n"$ $LK,"::/Demo/Graphics/SpriteText.CPP"$ +$LK,"::/Demo/Graphics/SpriteRaw.CPP"$ $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$ $MA-X+PU,"::/Apps/KeepAway",LM="Cd(\"::/Apps/KeepAway\");Dir;View;\n"$ $LK,"::/Demo/Graphics/Camp.CPP"$ @@ -126,6 +129,7 @@ $LK,"::/Demo/PhoneNumWords.CPP"$ $LK,"::/Demo/SuggestSpelling.CPP"$ $LK,"::/Demo/WordSearch.CPP"$ $LK,"::/Demo/Graphics/CommonAncestor.CPP"$ +$LK,"::/Demo/Directives.CPP"$ $LK,"::/Demo/Carry.CPP"$ $LK,"::/Demo/Dsk/DataBase.CPP"$ $LK,"::/Demo/Dsk/FPrintF.CPP"$ diff --git a/Doc/Directives.TXT b/Doc/Directives.TXT new file mode 100644 index 0000000..25e3f6e --- /dev/null +++ b/Doc/Directives.TXT @@ -0,0 +1,8 @@ +$HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);} +#define __TIME__ #exe{StreamPrint("\"%T\"",Now);} +#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);} +#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);} +#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);} +#define __DIR__ #exe{StreamDir;} + +See $LK,"::/Demo/Directives.CPP"$.$HL,0$$WW,1$ diff --git a/Doc/DolDocOverview.TXT b/Doc/DolDocOverview.TXT index 60d738e..75146d6 100644 --- a/Doc/DolDocOverview.TXT +++ b/Doc/DolDocOverview.TXT @@ -118,10 +118,10 @@ Examples: to see 2)$LK,"File link to HelpIndex.TXT with link type file",A="FI:::/Doc/HelpIndex.TXT"$ 3)File link with same tag str. $LK,"::/Doc/HelpIndex.TXT"$ 4)$LK,"File find link searching for 'Admin'",A="FF:::/Doc/HelpIndex.TXT,Admin"$ -5)$LK,"File find link searching for 5th 'CTRL'",A="FF:::/Kernel/Adam1a.HPP,CTRL:5"$ +5)$LK,"File find link searching for 5th 'CTRL'",A="FF:::/Kernel/KernelA.HPP,CTRL:5"$ 6)$LK,"Manual page link",A="MN:Print"$ -7)$LK,"File line num link",A="FL:::/Kernel/Adam1a.HPP,200"$ -8)$LK,"File anchor link -- to see anchor after you click",A="FA:::/Compiler/CmpInit.CPP,IC_INIT_TABLE"$ +7)$LK,"File line num link",A="FL:::/Kernel/KernelA.HPP,200"$ +8)$LK,"File anchor link -- to see anchor after you click",A="FA:::/Kernel/KEnd.CPP,Independent HeapCtrl Example"$ 9)$LK,"Bible Link",A="BF:Acts,2:3"$ The chapter:verse actually just does a text search. 10) $LK,"Help Index Link",A="HI:Doc"$. 11) $LK,"Address Link",A="AD:0x10000"$. @@ -139,7 +139,7 @@ $ID,2$A left macro arg, $FG,2$LM=""$FG$, will send text when the left mouse is c A left auto string, $FG,2$+LA$FG$, flag will cause text to be sent to $LK,"AutoStr",A="MN:AutoStr"$() instead of $LK,"Auto",A="MN:Auto"$(). An AutoStr runs code. Literal text is in quotes and messages are sent with $LK,"Msg",A="MN:Msg"$(). See $MA-X+PU,LM="Dir(\"::/Demo/AutoFile\");View;"$. -Macro's are usually in your $LK,"HOME/PersonalMenu.TXT"$ and have the '$FG,2$+X$FG$' flag set by $LK,"default",A="MN:DocInit"$. Adding '$FG,2$-X$FG$' prevents the usual $FG,2$$FG$ from being sent (which exits the PersonalMenu screen). Note: When you click a macro on the cmd line, it will go to the bottom and execute unless you cancel the $FG,2$$FG$ with a '$FG,2$-X$FG$'. +Macro's are usually in your $LK,"::/Home/PersonalMenu.TXT"$ and have the '$FG,2$+X$FG$' flag set by $LK,"default",A="MN:DocInit"$. Adding '$FG,2$-X$FG$' prevents the usual $FG,2$$FG$ from being sent (which exits the PersonalMenu screen). Note: When you click a macro on the cmd line, it will go to the bottom and execute unless you cancel the $FG,2$$FG$ with a '$FG,2$-X$FG$'. $ID,-2$$TR,"MU Menu Value"$ $ID,2$A left expression arg, $FG,2$LE=$FG$, will return a number when clicked with the left mouse. @@ -202,7 +202,9 @@ $ID,2$A quit flag is similar to a $FG,2$+X$FG$ except a $FG,2$$FG$ in $ID,-2$$TR,"+Z Zero"$ $ID,2$A zero flag on a $FG,2$HX$FG$ entry will cause the offset from zero. A $FG,2$-X$FG$ will show the actual memory addr. By default, $FG,2$HX$FG$ has the zero flag set. $ID,-2$$TR,"+RD Refresh Data"$ -$ID,2$The Refresh Data flag on a $FG,2$DA$FG$ or a $FG,2$CB$FG$ makes the value updated continuously. +$ID,2$The Refresh Data flag on a $FG,2$DA$FG$ or a $FG,2$CB$FG$ makes the value on the screen updated continuously. +$ID,-2$$TR,"+UD Update Data"$ +$ID,2$The Update Data flag on a $FG,2$DA$FG$ or a $FG,2$CB$FG$ makes the value in the $LK,"CDocEntry",A="MN:CDocEntry"$ updated when keys are typed on it. $ID,-2$$TR,"+LC Left CallBack"$ $ID,2$See $LK,"::/Demo/DolDoc/ClickCallBack.CPP"$. $ID,-2$$TR,"+RC Right CallBack"$ @@ -216,9 +218,9 @@ $ID,2$Some cmds need auxilliary strings. $FG,2$A="str"$FG$ means an $LK,"CDocEn $ID,-2$$TR,"D=\"\" Define Str"$ $ID,2$A $FG,2$D=""$FG$ means either a $LK,"define",A="HI:Define"$ str indirection is present on a text widget, or a define list is present on a list widget. -For indirection, the tag will be regenerated by substituting the value of a system $FG,2$#define$FG$ or $LK,"DefineLoad",A="MN:DefineLoad"$() string. See $LK,"::/Demo/DolDoc/DefineStr.CPP"$, $LK,"::/Adam/DocDefines.CPP"$ and $LK,"::/Doc/MemOverview.TXT"$. +For indirection, the tag will be regenerated by substituting the value of a system $FG,2$#define$FG$ or $LK,"DefineLoad",A="MN:DefineLoad"$() string. See $LK,"::/Demo/DolDoc/DefineStr.CPP"$, $LK,"::/Adam/ADefine.CPP"$ and $LK,"::/Doc/MemOverview.TXT"$. -For $FG,2$LS$FG$ widgets, see $LK,"::/Demo/DolDoc/Form.CPP.Z"$. +For $FG,2$LS$FG$ widgets, see $LK,"::/Demo/DolDoc/Form.CPP"$. $ID,-2$$TR,"HTML=\"\""$ $ID,2$The $LK,"ToHtml",A="MN:ToHtml"$() or $LK,"Doc2Html",A="MN:Doc2Html"$() routines will generate a html version of a document. You can cause html link on an item with $FG,2$HTML=""$FG$. $ID,-2$$TR,"LE= Left Expression"$ diff --git a/Doc/Features.TXT b/Doc/Features.TXT index baed318..12d40cf 100644 --- a/Doc/Features.TXT +++ b/Doc/Features.TXT @@ -8,7 +8,7 @@ * Free, $FG,2$public domain$FG$, $FG,2$100% open source$FG$. -* 64-bit $FG,2$compiler/assembler$FG$ for $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$. Truly compiles, not interprets. $FG,2$Just-in-Time$FG$ and $FG,2$Ahead-of-Time$FG$ compilation. With $FG,2$JIT$FG$, no need for object or exe files. +* 64-bit $FG,2$compiler/assembler$FG$ for $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$. Truly compiles, doesn't interpret. $FG,2$Just-in-Time$FG$ and $FG,2$Ahead-of-Time$FG$ compilation. With $FG,2$JIT$FG$, no need for object or exe files. * No 32-bit krufty code. @@ -36,7 +36,7 @@ * Real-time fancy $FG,2$differential-equation solver$FG$ for physics engines, to use in games. (Adaptive step-size Runge-Kutta, interpolated for real-time.) -* Auto-completion, jump-to-source tool called $FG,2$WordStat$FG$ with Dictionary. +* Auto-completion, jump-to-source tool called $FG,2$AutoComplete$FG$ with Dictionary. * Window Manager. Pan screen with $FG,2$$FG$. Zoom screen on mouse cursor with $FG,2$$FG$/$FG,2$$FG$. diff --git a/Doc/GRAFiles.TXT b/Doc/GRAFiles.TXT new file mode 100644 index 0000000..4625511 --- /dev/null +++ b/Doc/GRAFiles.TXT @@ -0,0 +1,32 @@ +$WW,1$GRA graphics files are 8-bits-per-pixels but only 4-bits of color, with transparency and no palette. Compression is the standard TempleOS$FG$ LZW compression. +$HL,1$ +#define DCF_COMPRESSED 1 //This is the only saved flag. + +#define TRANSPARENT 0xFF +#define BLACK 0 +#define BLUE 1 +#define GREEN 2 +#define CYAN 3 +#define RED 4 +#define PURPLE 5 +#define BROWN 6 +#define LTGRAY 7 +#define DKGRAY 8 +#define LTBLUE 9 +#define LTGREEN 10 +#define LTCYAN 11 +#define LTRED 12 +#define LTPURPLE 13 +#define YELLOW 14 +#define WHITE 15 + +class GRAFile +{ + I32 width; + I32 width_internal; //Rounded-up to multiple of 8. + I32 height; + I32 flags; //DCF_COMPRESSED? See $LK,"::/Kernel/Compress.CPP"$. + U8 body[]; +};$HL,0$ + +See $LK,"DCSave",A="MN:DCSave"$(), $LK,"GRAWrite",A="MN:GRAWrite"$(), $LK,"DCLoad",A="MN:DCLoad"$(), and $LK,"GRARead",A="MN:GRARead"$(). diff --git a/Doc/Glossary.TXT b/Doc/Glossary.TXT index e22032c..8a8b205 100644 --- a/Doc/Glossary.TXT +++ b/Doc/Glossary.TXT @@ -2,12 +2,15 @@ $WW,1$$FG,5$$TX+CX,"Glossery"$$FG$ $TR,"Abbreviations"$ $ID,2$$FG,2$Abs$FG$ Absolute +$FG,2$AC$FG$ AutoComplete $FG,2$Acct$FG$ Account +$FG,2$ACD$FG$ AutoComplete Dictionary $FG,2$Addr$FG$ Address +$FG,2$Alloc$FG$ Allocate $FG,2$AOT$FG$ Ahead-of-Time $FG,2$AP$FG$ Application Processor(CPU#>0) $FG,2$Arg$FG$ Argument -$FG,2$Asm$FG$ Assemble or Assembly +$FG,2$Asm$FG$ Assemble, Assembler or Assembly $FG,2$Attr$FG$ Attribute $FG,2$Aux$FG$ Auxilliary $FG,2$BG$FG$ Backround @@ -55,6 +58,7 @@ $FG,2$Gen$FG$ Generate $FG,2$Glbl$FG$ Global $FG,2$Gr$FG$ Graphic $FG,2$IDE$FG$ Integrated Drive Electronics, Integrated Development Environment +$FG,2$Id$FG$ Identification $FG,2$Ident$FG$ Identifier, Identity $FG,2$IDT$FG$ Interrupt Descriptor Table $FG,2$Init$FG$ Initialize @@ -91,11 +95,13 @@ $FG,2$Prec$FG$ Precedence $FG,2$Pri$FG$ Primary $FG,2$Prod$FG$ Product, Production $FG,2$Prof$FG$ Profile, Profiler +$FG,2$Prs$FG$ Parse, Parser $FG,2$Prt$FG$ Partition $FG,2$PSect$FG$ Program Section $FG,2$Pt$FG$ Point $FG,2$Ptr$FG$ Pointer $FG,2$Que$FG$ Queue +$FG,2$Rand$FG$ Random $FG,2$Ref$FG$ Reference $FG,2$Reg$FG$ Register, Registry, Regular $FG,2$Rem$FG$ Remove @@ -127,18 +133,16 @@ $FG,2$Vect$FG$ Vector $FG,2$Vol$FG$ Volume $FG,2$Win$FG$ Window $FG,2$Wiz$FG$ Wizard -$FG,2$WS$FG$ WordStat -$FG,2$WSD$FG$ WordStat Dictionary $ID,-2$$TR,"Task/Process/Thread"$ $ID,2$There is no distinction between $FG,2$task$FG$, $FG,2$process$FG$ or $FG,2$thread$FG$. The $FG,2$Fs$FG$ segment reg is kept pointing to the current task's $LK,"CTask",A="MN:CTask"$. There is only one window per task, and only $FG,2$core#0$FG$ tasks can have windows. Each task has a code and data heap so memory is returned when it dies. Each task has a $LK,"hash",A="HI:Hash"$ symbol table. $ID,-2$$TR,"Adam Task"$ -$ID,2$This is Adam, as in Adam and Eve, the parent of all tasks and immortal. This task is created at start-up and appears in the small window at the top beneath the user windows. On it's heap are all memory objects which you don't want destroyed by a task's death. When created, Adam runs the file $LK,"::/Kernel/Adam1.CPP"$ Normally, $FG,2$Adam1.CPP.Z$FG$ ends by $FG,2$#include$FG$ $LK,"::/Adam/Adam2.CPP"$ where the remainder of the operating system is $FG,2$#include$FG$d. When start-up is finished, the adam task enters a server mode where it accepts requests from other tasks. The $LK,"Adam",A="MN:Adam"$("") routine will make Adam compile and run text src code. $FG,2$#include$FG$ statements can be sent to $LK,"Adam",A="MN:Adam"$(""), creating system-wide code and data which don't disappear when any particular task ends. +$ID,2$This is Adam, as in Adam and Eve, the parent of all tasks and immortal. This task is created at start-up and appears in the small window at the top beneath the user windows. On it's heap are all memory objects which you don't want destroyed by a task's death. When created, Adam runs the file $LK,"::/Adam.CPP"$. When start-up is finished, the adam task enters a server mode where it accepts requests from other tasks. The $LK,"Adam",A="MN:Adam"$("") routine will make Adam compile and run text src code. $FG,2$#include$FG$ statements can be sent to $LK,"Adam",A="MN:Adam"$(""), creating system-wide code and data which don't disappear when any particular task ends. $ID,-2$$TR,"Seth Task"$ $ID,2$$FG,2$Seth$FG$ is Adam and Eve's child. Each CPU core has a special task which is immortal and which is special. The Adam task on $FG,2$CPU#0$FG$ is also it's $FG,2$Seth$FG$ task. $ID,-2$$TR,"Code and Data Heaps"$ -$ID,2$TempleOS uses the asm $FG,2$CALL$FG$ instruction, exclusively, and that instruction is limited to calling routines $FG,2$+/-2 Gig$FG$ from the current code location. To prevent out-of-range issues, I decided to separate code and data, placing all code within the lowest $FG,2$2 Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$. The compiler and $LK,"Load",A="MN:Load"$()er allocate memory from the code heap to store code and glbl vars, unless the compiler option $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ is used. When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory. You can allocate from any heap in any task at any time on any core, even making $LK,"independent",A="MN:MemBlksIndependentAlloc"$ heaps. +$ID,2$TempleOS uses the asm $FG,2$CALL$FG$ instruction, exclusively, and that instruction is limited to calling routines $FG,2$+/-2 Gig$FG$ from the current code location. To prevent out-of-range issues, I decided to separate code and data, placing all code within the lowest $FG,2$2 Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$. The compiler and $LK,"Load",A="MN:Load"$()er alloc memory from the code heap to store code and glbl vars, unless the compiler option $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ is used. When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory. You can alloc from any heap in any task at any time on any core, even making $LK,"independent",A="MN:Mem512Alloc"$ heaps. $ID,-2$$TR,"Parent, Child and PopUp Tasks"$ -$ID,2$Often a task will $LK,"Spawn",A="MN:Spawn"$() or $LK,"PopUp",A="MN:PopUp"$() a task as a helper. The helper is known as a child Task, though you can $LK,"Spawn",A="MN:Spawn"$ a task and assign it a different parent... like $FG,2$Adam$FG$. Links are kept as to who's who's child, so when one task is $LK,"Kill",A="MN:Kill"$()ed the child helper tasks die, too. You can get a report of current system tasks with $LK,"TaskRep",A="MN:TaskRep"$(). There is just one window per task, so child tasks are needed for pop-ups. +$ID,2$Often a task will $LK,"Spawn",A="MN:Spawn"$() or $LK,"PopUp",A="MN:PopUp"$() a task as a helper. The helper is known as a child Task, though you can $LK,"Spawn",A="MN:Spawn"$ a task and assign it a different parent... like $FG,2$Adam$FG$. Links are kept as to who's whose child, so when one task is $LK,"Kill",A="MN:Kill"$()ed the child helper tasks die, too. You can get a report of current system tasks with $LK,"TaskRep",A="MN:TaskRep"$(). There is just one window per task, so child tasks are needed for pop-ups. $ID,-2$$TR,"HolyC"$ $ID,2$$LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ is more than $FG,2$C$FG$ and less than $FG,2$C++$FG$. It has the default args of $FG,2$C++$FG$ and uses $FG,2$class$FG$ in place of $FG,2$struct$FG$. It uses $FG,2$U0,U8,U16,U32,I64$FG$ and $FG,2$I0,I8,I16,I32,I64$FG$ for signed and unsigned integers. It has different $LK,"operator precedence",A="FF:::/Doc/HolyC.TXT,operator precedence"$. It has $FG,2$PASCAL$FG$-like function calls with no parens, but requires an $FG,2$&$FG,2$$FG$ when referring to function addresses. $ID,-2$$TR,"AOT Compile Mode"$ @@ -146,13 +150,13 @@ $ID,2$$FG,2$Ahead-of-Time$FG$ compiling is conventional compilation mode. Do no In $FG,2$AOT$FG$ mode, $FG,2$.PRJ$FG$ files are compiled to $FG,2$.BIN$FG$ files, skipping $FG,2$.OBJ$FG$ files. After compiling, $FG,2$.BIN$FG$ files are $LK,"Load",A="MN:Load"$()ed. -There is no $FG,2$main()$FG$ routine. Instead, statements outside functions are automatically executed upon loading. There is no way to unload except by killing the task. To invoke $FG,2$AOT Compiled Mode$FG$, $LK,"Cmp",A="MN:Cmp"$() is used. The $FG,2$Kernel$FG$ module and compiler are made in $FG,2$AOT$FG$ compiled mode. See $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() which calls $LK,"MakeAll",A="MN:MakeAll"$() where $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$ are created. +There is no $FG,2$main()$FG$ routine. Instead, statements outside functions are automatically executed upon loading. There is no way to unload except by killing the task. To invoke $FG,2$AOT Compiled Mode$FG$, $LK,"Cmp",A="MN:Cmp"$() is used. The $FG,2$Kernel$FG$ module and compiler are made in $FG,2$AOT$FG$ compiled mode. See $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() which calls $LK,"MakeAll",A="MN:MakeAll"$() where $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$ are created. $ID,-2$$TR,"JIT Compile Mode"$ -$ID,2$In $FG,2$just-in-time$FG$ mode, the compiler places code and data in memory allocated from the heap, incrementally, making them immediately ready for in-place execution. This mode is used during cmd line operations. When you $FG,2$#include$FG$ a file, it is compiled function by function and code ends-up all over in the memory, at least in the first 2Gig of memory. The $LK,"ExeFile",A="MN:ExeFile"$() routine is the same as $FG,2$#include$FG$ but can be used in programs. $LK,"ExePrint",A="MN:ExePrint"$() routine will compile and run a string. +$ID,2$In $FG,2$just-in-time$FG$ mode, the compiler places code and data in memory alloced from the heap, incrementally, making them immediately ready for in-place execution. This mode is used during cmd line operations. When you $FG,2$#include$FG$ a file, it is compiled function by function and code ends-up all over in the memory, at least in the first 2Gig of memory. The $LK,"ExeFile",A="MN:ExeFile"$() routine is the same as $FG,2$#include$FG$ but can be used in programs. $LK,"ExePrint",A="MN:ExePrint"$() routine will compile and run a string. $ID,-2$$TR,"Compiler Intermediate Code"$ $ID,2$The compiler generates instructions one step before making actual assembly (machine) language instructions. This code is reverse polish stack machine in nature and can be viewed with $LK,"OTrace",A="MN:OTrace"$(). The compiler does not $FG,2$interpret$FG$ code, except in the process of optimization to make the final machine code. Assembly language output can be viewed when code is compiled with the $LK,"CTrace",A="MN:CTrace"$(), or, afterward, with $LK,"U",A="MN:U"$() or $LK,"Uf",A="MN:Uf"$(""). -$ID,-2$$TR,"Partition/Drive"$ -$ID,2$There is no distinction between $FG,2$partition$FG$ or $FG,2$drive$FG$. They are specified with a single letter from $FG,2$A$FG$-$FG,2$Z$FG$. +$ID,-2$$TR,"Drive/Partition"$ +$ID,2$There is no distinction between $FG,2$drive$FG$ or $FG,2$partition$FG$. They are specified with a single letter from $FG,2$A$FG$-$FG,2$Z$FG$. '$FG,2$:$FG$' is the boot drive. @@ -194,7 +198,7 @@ $FG,5$*.DAT.Z;*.DAT$FG$ $FG,5$*.ISO$FG$ CD-ROM image file--ISO9660. $FG,5$*.AUT.Z;*.AUT$FG$ - $FG,2$AutoFile$FG$ Basically a HolyC program who's stdout goes to the input of a task when $LK,"AutoFile",A="MN:AutoFile"$() is called. + $FG,2$AutoFile$FG$ Basically a HolyC program whose stdout goes to the input of a task when $LK,"AutoFile",A="MN:AutoFile"$() is called. $FG,5$*.GRA.Z;*.GRA$FG$ Graphics file @@ -235,7 +239,7 @@ $ID,2$The CPU FS segment reg. This reg points to the current task's $LK,"CTask" $ID,-2$$TR,"Gs"$ $ID,2$The CPU GS segment reg. This reg points to the current core's $LK,"CCPU",A="MN:CCPU"$. $ID,-2$$TR,"Heap"$ -$ID,2$Programs can dynamically request chunks of memory allocated from a $FG,2$heap$FG$ using $LK,"MAlloc",A="MN:MAlloc"$(). They must $LK,"Free",A="MN:Free"$() it when finished. Ptrs are used to refer to the chunk. The $FG,2$heap$FG$ is dynamically allocated mem. +$ID,2$Programs can dynamically request chunks of memory alloced from a $FG,2$heap$FG$ using $LK,"MAlloc",A="MN:MAlloc"$(). They must $LK,"Free",A="MN:Free"$() it when finished. Ptrs are used to refer to the chunk. The $FG,2$heap$FG$ is dynamically alloced mem. $ID,-2$$TR,"Root"$ $ID,2$The base of a binary tree or the head of a queue is the $FG,2$root$FG$. (I don't like the word $FG,2$head$FG$.) $ID,-2$$TR,"Join"$ diff --git a/Doc/GraphicsOverview.TXT b/Doc/GraphicsOverview.TXT index 3909b27..d0360df 100644 Binary files a/Doc/GraphicsOverview.TXT and b/Doc/GraphicsOverview.TXT differ diff --git a/Doc/Grub.TXT b/Doc/Grub.TXT index e3f04de..9f2ab02 100644 --- a/Doc/Grub.TXT +++ b/Doc/Grub.TXT @@ -2,7 +2,7 @@ $FG,5$$TX+CX,"The Grub Master Bootloader"$$FG$ $WW,1$Here are my $FG,2$grub.cfg$FG$ file entries for my TempleOS partitions. I don't have the patience to do it correctly and GRUB obfuscates. Chain loading is just the normal way an operating system like Windows boots. They do drives, zero-based, and partitions on drives, one-based. They call traditional partitioning a "msdos" partition and I presume, if there is a new way to partition drives, it has a new name. -In addition to a Windows and a Linux partition, I have a Primary TempleOS $FG,2$'D'$FG$, Backup TempleOS $FG,2$'E'$FG$ and a Transfer $FG,2$'I'$FG$ partition for transferring between Windows and TempleOS. "hd0" is 1st hard drive, zero-based numbering. "msdos1" is partition #1, traditional msdos partitioning. I keep $FG,2$'D'$FG$, $FG,2$'E'$FG$, and $FG,2$'I'$FG$ identical by frequently copying all files and I use $FG,2$'I'$FG$ to transfer files. They only need to be a couple Gig in size. Every time I copy files, use $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() to $LK,"MakeAll",A="MN:MakeAll"$ and prepare the partition $LK,"boot sector",A="FI:::/Adam/Boot/BootHD.CPP"$ for chainloading by patching the new block address and size of $FG,2$Kernel.BIN.C$FG$. +In addition to a Windows and a Linux partition, I have a Primary TempleOS $FG,2$'D'$FG$, Backup TempleOS $FG,2$'E'$FG$ and a Transfer $FG,2$'I'$FG$ partition for transferring between Windows and TempleOS. "hd0" is 1st hard drive, zero-based numbering. "msdos1" is partition #1, traditional msdos partitioning. I keep $FG,2$'D'$FG$, $FG,2$'E'$FG$, and $FG,2$'I'$FG$ identical by frequently copying all files and I use $FG,2$'I'$FG$ to transfer files. They only need to be a couple Gig in size. Every time I copy files, use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() to $LK,"MakeAll",A="MN:MakeAll"$ and prepare the partition $LK,"boot sector",A="FI:::/Adam/Boot/BootHD.CPP"$ for chainloading by patching the new block address and size of $FG,2$Kernel.BIN.C$FG$. menuentry "TempleOS D" { insmod chain diff --git a/Doc/GuideLines.TXT b/Doc/GuideLines.TXT index b608909..458fc36 100644 --- a/Doc/GuideLines.TXT +++ b/Doc/GuideLines.TXT @@ -1,6 +1,6 @@ $WW,1$$FG,5$$TX+CX,"Directory Structure"$$FG$ -$FG,2$/Accts$FG$ Each subdirectory is an acct. When you boot, you can select an acct to login to, unless you compile Kernel soas to pick one. Your acct directory is your $FG,2$HOME$FG$ directory and all your user data should be placed in here to ease backing-up your data. When you Install an application it will create a subdirectory of your $FG,2$HOME$FG$ directory for storage. +$FG,2$/Home$FG$ All your user data should be placed in here to ease backing-up your data. When you install an application it will create a subdirectory of your $FG,2$/Home$FG$ directory for storage. $FG,2$/Apps$FG$ Applications are placed in subdirectories of $FG,2$/Apps$FG$. Applications should have a file called $FG,2$Install.CPP.Z$FG$ which will install the app for the current user acct. The file, $FG,2$Load.CPP.Z$FG$ will load the application into mem. The file, $FG,2$Run.CPP.Z$FG$, will usually load and execute the app. To add an app to your PersonalMenu, use $FG,2$$FG$, insert a macro with the PopUp option checked and invoke the $FG,2$Run.CPP.Z$FG$ file. @@ -8,27 +8,27 @@ $FG,2$/Demo$FG$ Here you can find lots of sample code to do various things. $FG,2$/Doc$FG$ Here you can find documentation. -$FG,2$/Kernel$FG$ The core of the operating system is found here. Since priviledge levels are not used, calling it a $FG,2$kernel$FG$ is deceptive. It is $FG,2$AOT$FG$ compiled by $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). It is loaded by the boot loader and must fit in 640K. +$FG,2$/Kernel$FG$ The core of the operating system is found here. Since priviledge levels are not used, calling it a $FG,2$kernel$FG$ is deceptive. It is $FG,2$AOT$FG$ compiled by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). It is loaded by the boot loader and must fit in 640K. -$FG,2$/Compiler$FG$ The compiler module src code is found here. The compiler is $FG,2$AOT$FG$ compiled to produce a binary file which is loaded at boot. It, too, is $FG,2$AOT$FG$ compiled by $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). +$FG,2$/Compiler$FG$ The compiler module src code is found here. The compiler is $FG,2$AOT$FG$ compiled to produce a binary file which is loaded at boot. It, too, is $FG,2$AOT$FG$ compiled by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). $FG,2$/Adam$FG$ The non-kernel part of the operating system is found here. It is $FG,2$JIT$FG$ compiled during boot. -$FG,5$$TX+CX,"Acct Files"$$FG$ +$FG,5$$TX+CX,"::/Home Files"$$FG$ -You can add and remove accts by making or removing directories in the $FG,2$::/Accts$FG$ directory. An empty account directory should be valid because it will get default files from the parent directory. Compile the $LK,"Kernel",A="MN:MakeOSPrtBootInstall"$ to set the active acct or cause it to prompt an account at boot. +An empty $FG,2$::/Home$FG$ directory should be valid because it will get default files from the root directory. -$LK,"HOME/PersonalMenu.TXT"$ a menu viewed with the $FG,2$$FG$ key or by clicking "$FG,2$MENU$FG$" in the upper left border area of a window. +$LK,"::/Home/PersonalMenu.TXT"$ a menu viewed with the $FG,2$$FG$ key or by clicking "$FG,2$MENU$FG$" in the upper left border area of a window. -$LK,"HOME/PersonalNotes.TXT"$ a personal note file viewed with the $FG,2$$FG$ key. +$LK,"::/Home/PersonalNotes.TXT"$ a personal note file viewed with the $FG,2$$FG$ key. -$LK,"HOME/Adam3.CPP"$ files invoked when the adam task starts-up. Customize these! +$FG,4$::/Home/Adam*$FG$ Copy $FG,2$Adam*$FG$ files from the root into $FG,2$::/Home$FG$ and customize them. These files are invoked when the adam task starts-up. -$LK,"HOME/DoOnce.CPP"$ a file invoked at the start-up of the first user. Customize this! +$LK,"::/Home/DoOnce.CPP"$ a file invoked at the start-up of the first user. Customize this! -$LK,"HOME/Registry.CPP"$ can be edited by hand or deleted to reset to defaults. Takes affect next boot. +$LK,"::/Home/Registry.CPP"$ can be edited by hand or deleted to reset to defaults. Takes affect next boot. @@ -40,15 +40,15 @@ $FG,5$$TX+CX,"Application Policies"$$FG$ * Make a file called $FG,2$Run.CPP.Z$FG$ to load and run the application, preferable by $FG,2$#include$FG$ing the $FG,2$Load.CPP.Z$FG$ file. -* Place user data in a subdirectory of $FG,2$HOME$FG$, preferably naming the subdirectory the same as the $FG,2$/Apps$FG$ subdirectory. Or, place data in the $FG,2$Registry.CPP.Z$FG$ file. See $LK,"::/Demo/RegistryDemo.CPP"$. +* Place user data in a subdirectory of $FG,2$/Home$FG$, preferably naming the subdirectory the same as the $FG,2$/Apps$FG$ subdirectory. Or, place data in the $FG,2$Registry.CPP.Z$FG$ file. See $LK,"::/Demo/RegistryDemo.CPP"$. -* If the app needs files in the $FG,2$HOME$FG$ directory, make an $FG,2$/Apps$FG$ file called $FG,2$Install.CPP.Z$FG$ or $FG,2$Install.AUT.Z$FG$ to create the $FG,2$HOME$FG$ subdirectory and do similar stuff. +* If the app needs files in the $FG,2$/Home$FG$ directory, make an $FG,2$/Apps$FG$ file called $FG,2$Install.CPP.Z$FG$ or $FG,2$Install.AUT.Z$FG$ to create the $FG,2$/Home$FG$ subdirectory. $FG,5$$TX+CX,"Programming Guidelines"$$FG$ -* Virtual mem/Paging is not used -- it is identity mapped in $FG,2$x86_64$FG$ mode. The stk does not grow, so allocate enough when the task (process) is $LK,"Spawn",A="MN:Spawn"$ed and use the heap for most things. (The $FG,2$heap$FG$ refers to $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$().) +* Virtual mem/Paging is not used -- it is identity mapped in $FG,2$x86_64$FG$ mode. The stk does not grow, so alloc enough when the task (process) is $LK,"Spawn",A="MN:Spawn"$ed and use the heap for most things. (The $FG,2$heap$FG$ refers to $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$().) * See $LK,"Naming Convention",A="FF:::/Doc/Glossary.TXT,Naming Convention"$ and $LK,"Abbreviations",A="FF:::/Doc/Glossary.TXT,Abbreviations"$. @@ -76,7 +76,7 @@ $FG,5$$TX+CX,"Programming Guidelines"$$FG$ $FG,5$$TX+CX,"Hash Sym Tables"$$FG$ -* See $LK,"::/Adam/Hash2a.CPP"$ for examples of how the hash tables are set-up. Basically, syms are placed into hash tables and child process hash tables are chained to parents. This provides scopes for vars and functions. +* See $LK,"::/Adam/AHash.CPP"$ for examples of how the hash tables are set-up. Basically, syms are placed into hash tables and child process hash tables are chained to parents. This provides scopes for vars and functions. * $FG,2$adam_task->hash_table$FG$ holds the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ syms loaded in on start-up. @@ -94,7 +94,7 @@ $FG,5$$TX+CX,"Assembly Language"$$FG$ * Don't change the segment regs unless interrupts are off. It's hard to do, anyway. $LK,"SET_FS_BASE",A="MN:SET_FS_BASE"$ and $LK,"SET_GS_BASE",A="MN:SET_GS_BASE"$. -* When interacting with $LK,"HolyC",A="FI:::/Doc/HolyC.TXT.Z"$ compiled code, preserve $FG,2$RBP, RSI, RDI, R10-R15$FG$ because the compiler uses these for reg vars. You are free to clobber $FG,2$RAX, RBX, RCX, RDX$FG$, $FG,2$R8$FG$ and $FG,2$R9$FG$. See $LK,"Compiler Reg Masks",A="MN:REG_VARS_MASK"$, $LK,"PUSH_C_REGS",A="MN:PUSH_C_REGS"$ and $LK,"POP_C_REGS",A="MN:POP_C_REGS"$ +* When interacting with $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiled code, preserve $FG,2$RBP, RSI, RDI, R10-R15$FG$ because the compiler uses these for reg vars. You are free to clobber $FG,2$RAX, RBX, RCX, RDX$FG$, $FG,2$R8$FG$ and $FG,2$R9$FG$. See $LK,"Compiler Reg Masks",A="MN:REG_VARS_MASK"$, $LK,"PUSH_C_REGS",A="MN:PUSH_C_REGS"$ and $LK,"POP_C_REGS",A="MN:POP_C_REGS"$ * I recommend using the standard stk frame for functions because $LK,"Caller",A="MN:Caller"$() is used to display the call stk, such as for the wallpaper. $FG,2$ PUSH RBP diff --git a/Doc/HelpIndex.TXT b/Doc/HelpIndex.TXT index 9045352..efadf0d 100644 Binary files a/Doc/HelpIndex.TXT and b/Doc/HelpIndex.TXT differ diff --git a/Doc/HolyC.TXT b/Doc/HolyC.TXT index df5e951..812ccb0 100644 --- a/Doc/HolyC.TXT +++ b/Doc/HolyC.TXT @@ -14,7 +14,7 @@ $FG,2$ U0 void, but ZERO size! I32 int U32 unsigned int I64 long (64-bit) - I64 unsigned long (64-bit) + U64 unsigned long (64-bit) F64 double$FG$ $FG,4$no F32 float.$FG$ @@ -182,7 +182,7 @@ $FG$$ID,-2$ * There is no question-colon operator. -* TempleOS $LK,"operator precedence",A="FF:::/Compiler/CmpInit.CPP,cmp.binary_ops"$ +* TempleOS $LK,"operator precedence",A="FF:::/Compiler/CInit.CPP,cmp.binary_ops"$ $FG,2$`$FG$,$FG,2$>>$FG$,$FG,2$<<$FG$ $FG,2$*$FG$,$FG,2$/$FG$,$FG,2$%$FG$ $FG,2$&$FG$ @@ -212,7 +212,7 @@ $FG$$ID,-2$ * "$FG,2$$$$FG$" is an escape character. Two dollar signs signify an ordinary $$. See $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$. In $FG,2$asm$FG$ or $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ code, it also refers to the instruction's address or the offset in a $FG,2$class$FG$ definition. -* $FG,2$union$FG$ is more like a class, so you don't reference it with a $FG,2$union$FG$ label after you define it. Some common unions are declared in $LK,"Adam1a.HPP",A="MN:U16"$ for 1,2,4 and 8 byte objects. If you place a type in front of a union declaration, that is the type when used by itself. See $LK,"::/Demo/SubIntAccess.CPP"$. +* $FG,2$union$FG$ is more like a class, so you don't reference it with a $FG,2$union$FG$ label after you define it. Some common unions are declared in $LK,"KernelA.HPP",A="MN:U16"$ for 1,2,4 and 8 byte objects. If you place a type in front of a union declaration, that is the type when used by itself. See $LK,"::/Demo/SubIntAccess.CPP"$. * $FG,2$class$FG$ member vars can have meta data. $FG,2$fmtstr$FG$ and $FG,2$fmtdata$FG$ are two meta data types now used. All compiler structures are saved and you can access the compiler's info about classes and vars. See $LK,"::/Demo/ClassMeta.CPP"$ and $LK,"DocFormDo",A="MN:DocFormDo"$(). @@ -226,7 +226,7 @@ $FG$$ID,-2$ * $FG,2$lock{}$FG$ can be used to apply asm $FG,2$LOCK$FG$ prefixes to code for safe multicore read-modify-write accesses. The code bracked with have $FG,2$LOCK$FG$ asm prefix's applied to relevant instructions within. It's a little shoddy. See $LK,"::/Demo/MultiCore/Lock.CPP"$. -* There is a function called $LK,"MSize",A="MN:MSize"$() which gives the size of an object allocated off the heap. For larger size allocations, the system rounds-up to a power of two, so $FG,2$MSize()$FG$ lets you know the real size and you can take full advantage of it. +* There is a function called $LK,"MSize",A="MN:MSize"$() which gives the size of an object alloced off the heap. For larger size allocations, the system rounds-up to a power of two, so $FG,2$MSize()$FG$ lets you know the real size and you can take full advantage of it. * You can $LK,"Free",A="MN:Free"$() a $FG,2$NULL$FG$ ptr. Useful variants of $LK,"MAlloc",A="MN:MAlloc"$() can be found $LK,"Here",A="MN:CAlloc"$. Each task has a heap and you can $FG,2$MAlloc$FG$ and $FG,2$Free$FG$ off of other task's heaps, or make an independent heap with $LK,"HeapCtrlBPInit",A="MN:HeapCtrlBPInit"$(). diff --git a/Doc/Install.TXT b/Doc/Install.TXT index 5969d64..c353e0e 100644 --- a/Doc/Install.TXT +++ b/Doc/Install.TXT @@ -4,7 +4,7 @@ Burn a CD with software that supports ISO files. Then, boot it. It's a live CD Dual booting with another operating system is the best way to use TempleOS. I only use it in a virtual machine because it won't boot natively on my machine, though. For native dual booting, you need a partition for TempleOS. Windows often comes with a restore disk that does not allow repartitioning. I recommend connecting a spare additional hard drive and using the $FG,2$BIOS$FG$ to select which drive to boot. -If you boot the CD/DVD-ROM and log-in as the "Install" account it will automate much of this. +The $LK,"::/Misc/OSInstall.CPP"$ script will automate much of this. It runs if you boot the CD/DVD-ROM. See $LK,"Boot.TXT",A="FI:::/Doc/Boot.TXT"$ for an overview of booting. See $LK,"Requirements",A="FI:::/Doc/Requirements.TXT"$ for supported hardware. See $LK,"Upgrading",A="FI:::/Doc/Upgrade.TXT"$ if you are upgrading. @@ -23,20 +23,20 @@ $BK,1$WARNING:$BK,0$ This command erases everything on a hard drive. It repart $BK,1$WARNING:$BK,0$ This command doesn't play well with other operating systems. You'll need to do a $LK,"MasterBootZero",A="MN:MasterBootZero"$() to restore your drive to a state where other operating systems can partition it. $ID,-2$ -$ID,-2$2) $LK,"Fmt",A="MN:Fmt"$($FG,2$'D'$FG$,$FG,2$TRUE,FALSE,PT_FAT32$FG$) -$ID,2$This command formats a partition with $FG,2$FAT32$FG$ or the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system type. Use the drive letter of the partition in place of $FG,2$'D'$FG$. +$ID,-2$2) $LK,"Fmt",A="MN:Fmt"$($FG,2$'D'$FG$,$FG,2$TRUE,FALSE,DVT_FAT32$FG$) +$ID,2$This command formats a drive with $FG,2$FAT32$FG$ or the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system type. Use the drive letter of the partition in place of $FG,2$'D'$FG$. $BK,1$WARNING:$BK,0$ If you are upgrading, be sure not to lose the file, $FG,2$/0000Boot/OldMBR.BIN.C$FG$. $ID,-2$3) $LK,"CopyTree",A="MN:CopyTree"$($FG,2$"T:/"$FG$,$FG,2$"D:/"$FG$) $ID,2$This command is used to copy files onto a hard drive partition from the CD-ROM. Use the drive letter of the partition in place of $FG,2$'D'$FG$. -$ID,-2$4) $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$($FG,2$'D'$FG$) -$ID,2$This command recompiles the source code on a partition and writes to the $UL,1$partition's$UL,0$ boot record. You'll need to reenter the $LK,"Mount",A="MN:Mount"$ information so it can be stored in the kernel. +$ID,-2$4) $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$($FG,2$'D'$FG$) +$ID,2$This command recompiles the source code on a drive and writes to the $UL,1$drive's$UL,0$ boot record. You'll need to reenter the $LK,"Mount",A="MN:Mount"$ information so it can be stored in the kernel. $ID,-2$5) Use Linux's $LK,"Grub",A="FI:::/Doc/Grub.TXT"$ or TempleOS' $LK,"MasterBootIntall",A="MN:MasterBootIntall"$($FG,2$'D'$FG$) $ID,2$ -The $LK,"MasterBootIntall",A="MN:MasterBootIntall"$() command places a boot loader on a drive to boot partitions. It saves the old master boot record to $FG,2$/0000Boot/OldMBR.BIN.C$FG$ and replaces it. When you boot, you will have the option of booting the old master boot record. This command can be skipped if you already have a boot loader. Be sure not to lose the copy of the old boot record, like if you reformat the partition. +The $LK,"MasterBootIntall",A="MN:MasterBootIntall"$() command places a boot loader on a drive. It saves the old master boot record to $FG,2$/0000Boot/OldMBR.BIN.C$FG$ and replaces it. When you boot, you will have the option of booting the old master boot record. This command can be skipped if you already have a boot loader. Be sure not to lose the copy of the old boot record, like if you reformat the drive. Delete $FG,2$/0000Boot/OldMBR.BIN.C$FG$ if you want to get a fresh copy of a mbr, like if installing from your own custom CD containing it's own $FG,2$/0000Boot/OldMBR.BIN.C$FG$ onto a system with a non-TempleOS boot loader. diff --git a/Doc/KeyAlloc.TXT b/Doc/KeyAlloc.TXT index 995332c..2603f09 100644 --- a/Doc/KeyAlloc.TXT +++ b/Doc/KeyAlloc.TXT @@ -10,9 +10,9 @@ $FG,2$$FG$ and $FG,2$$FG$ Free for user configuration $FG,2$$FG$ Extended ASCII (3 digit decimal number). -$FG,2$$FG$ and $FG,2$$FG$ Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor. I reserve the right to allocate these, but in the mean time, you can define your own handlers with $LK,"SetCtrlAltLetCB",A="MN:SetCtrlAltLetCB"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$$FG$ handlers take a scan_code as an arg. +$FG,2$$FG$ and $FG,2$$FG$ Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor. I reserve the right to alloc these, but in the mean time, you can define your own handlers with $LK,"CtrlAltLetCBSet",A="MN:CtrlAltLetCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$$FG$ handlers take a scan_code as an arg. -$FG,2$$FG$ Auto-completes wordstat words. +$FG,2$$FG$ Auto-completes local words. $FG,2$$FG$ $FG$Auto-completes dictionary words. @@ -20,8 +20,8 @@ $FG,2$$FG$ $FG$Jumps to src code. $FG,2$$FG$ Jumps to dictionary definition. -$FG,2$$FG$ and $FG,2$$FG$ $FG$I reserve the right to allocate these, but there are some free now. +$FG,2$$FG$ and $FG,2$$FG$ $FG$I reserve the right to alloc these, but there are some free now. -$FG,2$$FG$ and $FG,2$$FG$ I reserve the right to allocate to these. There are not many free. +$FG,2$$FG$ and $FG,2$$FG$ I reserve the right to alloc to these. There are not many free. $AN,"",A="PutKeyHandling"$ See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$. diff --git a/Doc/Lex.TXT b/Doc/Lex.TXT index 08f6a77..8cea6b3 100644 --- a/Doc/Lex.TXT +++ b/Doc/Lex.TXT @@ -1,3 +1,3 @@ -$WW,1$The compiler's lexical analyzer can be used in your programs to simplify parsing. See $LK,"Doc Parsing",A="FF:::/Adam/DolDoc/DocPlain.CPP,LexNew"$ or $LK,"Parse Opcode File",A="FF:::/Compiler/CmpInit.CPP,Opcodes.TXT"$. +$WW,1$The compiler's lexical analyzer can be used in your programs to simplify parsing. See $LK,"Doc Parsing",A="FF:::/Adam/DolDoc/DocPlain.CPP,LexNew"$ or $LK,"Parse Opcode File",A="FF:::/Compiler/CInit.CPP,Opcodes.TXT"$. See $LK,"Tokens",A="MN:TK_IDENT"$. diff --git a/Doc/MemOverview.TXT b/Doc/MemOverview.TXT index 5b576af..3f20db8 100644 Binary files a/Doc/MemOverview.TXT and b/Doc/MemOverview.TXT differ diff --git a/Doc/Menus.TXT b/Doc/Menus.TXT index 61896fc..3e42b17 100644 --- a/Doc/Menus.TXT +++ b/Doc/Menus.TXT @@ -1,4 +1,4 @@ -$WW,1$A menu appears when you move the mouse to the top of the screen. Menus are created with $LK,"MenuPush",A="MN:MenuPush"$(), $LK,"MenuFilePush",A="MN:MenuFilePush"$(), $LK,"MenuNew",A="MN:MenuNew"$() or $LK,"MenuFile",A="MN:MenuFile"$() and assigned to $FG,4$Fs->cur_menu$FG$. The format is: +$WW,1$A pull-down menu appears when you move the mouse to the top of the screen. Menus are created with $LK,"MenuPush",A="MN:MenuPush"$(), $LK,"MenuFilePush",A="MN:MenuFilePush"$(), $LK,"MenuNew",A="MN:MenuNew"$() or $LK,"MenuFile",A="MN:MenuFile"$() and assigned to $FG,4$Fs->cur_menu$FG$. The format is: $FG,2$ File diff --git a/Doc/MultiCore.TXT b/Doc/MultiCore.TXT index d462e7c..5f83822 100644 --- a/Doc/MultiCore.TXT +++ b/Doc/MultiCore.TXT @@ -1,14 +1,12 @@ -$WW,1$$FG,5$$TX+CX,"MutliCore"$$FG$ - -TempleOS does master-slave multicore instead of SMP. $FG,2$Core#0$FG$ is the master. The master core assigns computational jobs to other cores. It is symmetrical, however, in the sense that you can freely do file access and heap allocations because there are locks. See $LK,"::/Demo/MultiCore/LoadTest.CPP"$. TempleOS does not move tasks between cores. +$WW,1$TempleOS does master-slave multicore instead of SMP. $GREEN$Core#0$FG$ is the master. The master core assigns computational jobs to other cores. It is symmetrical, however, in the sense that you can freely do file access and heap allocations because there are locks. See $LK,"::/Demo/MultiCore/LoadTest.CPP"$. TempleOS does not move tasks between cores. Only tasks on core#0 can have windows, but other cores can help render them. -Each core has a $FG,2$seth task$FG$ which is the father of all tasks on that core. Adam is the seth task on core 0. +Each core has a $GREEN$seth task$FG$ which is the father of all tasks on that core. Adam is the seth task on core 0. You give a job to a seth task with $LK,"JobQue",A="MN:JobQue"$() and get the result with $LK,"GetResult",A="MN:GetResult"$(). You spawn a task on another core with $LK,"Spawn",A="MN:Spawn"$(). -Note: You must use the $FG,2$LOCK$FG$ asm prefix when changing shared structures in a multicore environment. The $LK,"LBts",A="MN:LBts"$(), $LK,"LBtr",A="MN:LBtr"$() and $LK,"LBtc",A="MN:LBtc"$() instructions have $FG,2$LOCK$FG$ prefixes. The compiler has a $FG,2$lock{}$FG$ feature but it doesn't work well. See $LK,"::/Demo/MultiCore/Lock.CPP"$. +Note: You must use the $GREEN$LOCK$FG$ asm prefix when changing shared structures in a multicore environment. The $LK,"LBts",A="MN:LBts"$(), $LK,"LBtr",A="MN:LBtr"$() and $LK,"LBtc",A="MN:LBtc"$() instructions have $GREEN$LOCK$FG$ prefixes. The compiler has a $GREEN$lock{}$FG$ feature but it doesn't work well. See $LK,"::/Demo/MultiCore/Lock.CPP"$. See $LK,"::/Demo/Graphics/Transform.CPP"$. See $LK,"::/Kernel/MultiProc.CPP"$. diff --git a/Doc/MultiTasking.TXT b/Doc/MultiTasking.TXT index a4d1ef1..1e65c74 100644 --- a/Doc/MultiTasking.TXT +++ b/Doc/MultiTasking.TXT @@ -1,6 +1,8 @@ $FG,5$$TX+CX,"MultiTasking"$$FG$ -$WW,1$TempleOS is a preemptive multitasking operating system. However, you can turn-off preemption on a task by task basis and the task will not yield ctrl unless it volunteers with $LK,"Yield",A="MN:Yield"$(), $LK,"Sleep",A="MN:Sleep"$() or a call to I/O which yields ctrl. Use the $LK,"Preempt",A="MN:Preempt"$() cmd to turn on or off preemption. This is useful when you have multiple tasks modifying data structures, simultaneously. Interrupts still occur when preemption is off. Turning-off preemption does not protect against multicore simultaneous access. +$WW,1$TempleOS is a preemptive multitasking operating system. However, you can turn-off preemption on a task by task basis and the task will not yield ctrl unless it volunteers with $LK,"Yield",A="MN:Yield"$(), $LK,"Sleep",A="MN:Sleep"$() or a call to I/O which yields ctrl. + +Use the $LK,"Preempt",A="MN:Preempt"$() cmd to turn on or off preemption. This is useful when you have multiple tasks modifying data structures, simultaneously. Interrupts still occur when preemption is off. Turning-off preemption does not protect against multicore simultaneous access. $BK,1$Preemption is turned-off by default when a task is $LK,"Spawn",A="MN:Spawn"$()ed.$BK,0$ @@ -15,7 +17,7 @@ Disk requests are not broken into pieces for sharing. Therefore, if one task ma $FG,5$$TX+CX,"Interrupts"$$FG$ -You can turn on and off interrupts in your user programs. This is part of the mission statement, giving complete freedom to programmers. Use $FG,2$CLI$FG$ or $FG,2$STI$FG$. TempleOS currently doesn't use interrupt besides the timer and keyboard and sometimes mouse interrupt. Since the interrupt flag is part of your task context and since you are voluntarily swapped-out if you call $LK,"GetChar",A="MN:GetChar"$() or whatever, you won't even notice if you turn-off interrupts at the cmd prompt because you are being swapped-out and interrupts are being turned-on by the next task. +You can turn on and off interrupts in your user programs. This is part of the mission statement, giving complete freedom to programmers. Use $FG,2$CLI$FG$ or $FG,2$STI$FG$. TempleOS currently doesn't use interrupt besides the timer, keyboard and sometimes mouse interrupt. Since the interrupt flag is part of your task context and since you are voluntarily swapped-out if you call $LK,"GetChar",A="MN:GetChar"$() or whatever, you won't even notice if you turn-off interrupts at the cmd prompt because you are being swapped-out and interrupts are being turned-on by the next task. I saw no reason to make the hard drive or CD-ROM code interrupt driven -- it just creates potential compatibility issues. On a home system, you do one thing at a time, mostly. TempleOS can do multiple things at once, but not as efficiently as a server operating system. It would bogg down with a hundred tasks asking for service. It is much simpler, though, the way it is. diff --git a/Doc/Mysteries.TXT b/Doc/Mysteries.TXT index edea3da..df8f941 100644 --- a/Doc/Mysteries.TXT +++ b/Doc/Mysteries.TXT @@ -4,7 +4,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$ * TempleOS identity-maps all memory, all the time. There is no $FG,2$high half$FG$ memory space. TempleOS is ring-0-only, so everything is kernel, even user programs. There is a special task called $FG,2$Adam$FG$ and he doesn't die, so his heap never gets freed. That's as close to $FG,2$kernel memory$FG$ as it gets. -* TempleOS puts all code in the lowest 2 Gig, so that $FG,2$REL32$FG$ addressing can be used. TempleOS is 64-bit, but I just thought $FG,2$2 Gig$FG$ was enough for code. It actually puts global variables there, too, but you can turn that off with $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$. $LK,"MAlloc",A="MN:MAlloc"$() can allocate any memory, of course. +* TempleOS puts all code in the lowest 2 Gig, so that $FG,2$REL32$FG$ addressing can be used. TempleOS is 64-bit, but I just thought $FG,2$2 Gig$FG$ was enough for code. It actually puts global variables there, too, but you can turn that off with $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$. $LK,"MAlloc",A="MN:MAlloc"$() can alloc any memory, of course. * TempleOS doesn't use software interrupts or $FG,2$SYSCALL$FG$ instructions because it never needs to change out of ring-0, even running user programs. Calls are always $FG,2$CALL REL32$FG$ instructions. @@ -14,7 +14,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$ * If you use $LK,"Grub",A="FI:::/Doc/Grub.TXT"$, you $FG,2$chain-load$FG$ like Windows. You can use the TempleOS boot-loader. $LK,"Master-Boot-Loader-Stage1",A="FI:::/Adam/Boot/BootMHD.CPP"$, $LK,"Master-Boot-Loader-Stage2",A="FI:::/Adam/Boot/BootMHD2.CPP"$, $LK,"Partition-Boot-Loader",A="FI:::/Adam/Boot/BootHD.CPP"$, $LK,"CD-DVD-Boot-Loader",A="FI:::/Adam/Boot/BootCD.CPP"$. -* The boot-loaders must be patched by you running $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() or $LK,"MasterBootIntall",A="MN:MasterBootIntall"$(). Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart.CPP"$ if you relocate it. +* The boot-loaders must be patched by you running $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() or $LK,"MasterBootIntall",A="MN:MasterBootIntall"$(). Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart.CPP"$ if you relocate it. * TempleOS is 64-bit. Like all PC operating systems, the boot-loader starts in 16-bit real-mode. TempleOS calls a few $FG,2$BIOS$FG$ info routines, switches to VGA-640x480x4bit, switches to 32-bit, then, 64-bit mode. There is an odd thing called a $FG,2$$TX,"PCI BIOS",HTML="http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf"$$FG$ which is 32-bit used for $FG,2$PCI$FG$ config space access. TempleOS calls $LK,"that",A="FI:::/Kernel/BIOS32.CPP"$ a couple times. It must temporarily drop-out-of 64-bit mode for that and stop multi-tasking. @@ -28,7 +28,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$ * TempleOS has a dictionary that is shipped compressed. When you boot the first time it is uncompressed. TempleOS has a Windows utility for uncompressing. That utility needs $FG,2$Microsoft DLL$FG$ files. TempleOS does not use any libraries, modules or code from other sources -- I wrote it all from scratch and it is self-contained. -* There are no OBJ or EXE files. There are only two files compiled ahead-of-time -- $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$. You can delete them and recompile with $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). TempleOS is $TX,"120,723",D="DD_TEMPLEOS_LOC"$ lines. Roughly 50,000 is compiled AOT and 50,000 during boot $FG,2$JIT$FG$. The rest is $FG,2$JIT$FG$ demos and applications. +* There are no OBJ or EXE files. There are only two files compiled ahead-of-time -- $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$. You can delete them and recompile with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). TempleOS is $TX,"120,629",D="DD_TEMPLEOS_LOC"$ lines. Roughly 50,000 is compiled AOT and 50,000 during boot $FG,2$JIT$FG$. The rest is $FG,2$JIT$FG$ demos and applications. * A major difference between TempleOS and other systems is that the heap and compiler sym table are associated with tasks, not applications. @@ -36,7 +36,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$ * The compiler only creates $FG,2$pos independent$FG$ code. You can't create code which is loaded at a fixed, specified location. The code is pos independent by virtue of the fact that abs addresses get patched. -* Binary executable files have export syms which are loaded into the sym tables. The operating system $FG,2$Kernel$FG$ has such an export table. In addition, some map files are processed to provide more information on syms -- src file links. This is how the $LK,"Man",A="MN:Man"$()/$FG,2$WORDSTAT$FG$ feature can find src lines. +* Binary executable files have export syms which are loaded into the sym tables. The operating system $FG,2$Kernel$FG$ has such an export table. In addition, some map files are processed to provide more information on syms -- src file links. This is how the $LK,"Man",A="MN:Man"$()/$FG,2$AUTOCOMPLETE$FG$ feature can find src lines. * $FG,2$#assert$FG$ might print a message at COMPILE time, not run time. @@ -44,9 +44,9 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$ * When compilation takes place, the structures used by the compiler stick around. Data on classes can be accessed by code. See $LK,"ClassRep",A="MN:ClassRep"$(). -* Filenames ending in $FG,2$.Z$FG$ are automatically compressed and uncompressed when writing to disk. File size in directory listing is the compressed size. See $LK,"::/Doc/TSZ.TXT"$ for uncompressing from $FG,2$WINDOWS$FG$. +* Filenames ending in $FG,2$.Z$FG$ are automatically compressed and uncompressed when writing to disk. File size in directory listing is the compressed size. See $LK,"::/Doc/TOSZ.TXT"$ for uncompressing from $FG,2$Linux$FG$. -* Some memory objects are allocated when needed and will decrease the available memory displayed. A task keeps mem objects smaller than a couple blocks in it's own separate heap when freed and these are not counted in the available system free memory, though they are free. They get returned to the system when the task is killed. To get a sense of this, compile the operating system and see the amount of mem used. Then, compile it again and far less will be allocated. This is because it is reusing the small chunks. See $LK,"Memory Overview",A="FI:::/Doc/MemOverview.TXT"$ and $LK,"Memory Routines",A="HI:Memory"$. $MA-X+PU,"Click Here",LM="MemRep;View;"$ for a $LK,"MemRep",A="MN:MemRep"$. +* Some memory objects are alloced when needed and will decrease the available memory displayed. A task keeps mem objects smaller than a couple blocks in it's own separate heap when freed and these are not counted in the available system free memory, though they are free. They get returned to the system when the task is killed. To get a sense of this, compile the operating system and see the amount of mem used. Then, compile it again and far less will be alloced. This is because it is reusing the small chunks. See $LK,"Memory Overview",A="FI:::/Doc/MemOverview.TXT"$ and $LK,"Memory Routines",A="HI:Memory"$. $MA-X+PU,"Click Here",LM="MemRep;View;"$ for a $LK,"MemRep",A="MN:MemRep"$. * The cursor location is stored as an $FG,2$ASCII 5$FG$ in files. $FG,2$ASCII 31$FG$ is $FG,2$SHIFT-SPACE$FG$, a character which does not get converted to tabs by space-to-tabs, $LK,"S2T",A="MN:S2T"$(). The $FG,2$ASCII 28$FG$ is $FG,2$SHIFT-ESC$FG$. @@ -54,7 +54,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$ * Sprites can be stored as vector graphics so they might take shockingly little room. They can be converted to bitmaps. -* If you change code in the $FG,2$/Adam$FG$, $FG,2$/Adam$FG$ or your $FG,2$HOME$FG$ directory, you don't need to recompile, you just need to reboot because those directories get recompiled when you boot. It uses JIT compilation. There is no $FG,2$.BIN$FG$ file for $FG,2$JIT$FG$ compilation. +* If you change code in the $FG,2$/Adam$FG$ or your $FG,2$/Home$FG$ directory, you don't need to recompile, you just need to reboot because those directories get recompiled when you boot. It uses JIT compilation. There is no $FG,2$.BIN$FG$ file for $FG,2$JIT$FG$ compilation. * If not found, $FG,2$.Z$FG$ is added or removed and a search is done again. If a file is still not found, the parent directories are searched for a file of the same name. @@ -64,4 +64,5 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$ $FG,8$ * "Windows" is a trademark of MicroSoft Corp. +* "Linux" is probably a trademark owned by Linus Torvalds. $FG$ \ No newline at end of file diff --git a/Doc/Print.TXT b/Doc/Print.TXT index 1dd688b..21e6abe 100644 --- a/Doc/Print.TXT +++ b/Doc/Print.TXT @@ -8,7 +8,7 @@ See $LK,"StrPrintJoin",A="MN:StrPrintJoin"$(). $ID,2$$FG,2$'t'$FG$ truncate to . $FG,2$','$FG$ add commas every three digits or four nibbles. -$FG,2$'$$'$FG$ makes $FG,2$%Q$FG$ convert $FG,2$'$$'$FG$ to $FG,2$"\044"$FG$. +$FG,2$'$$'$FG$ makes $FG,2$%Q$FG$ convert $FG,2$'$$'$FG$ to $FG,2$"\x24"$FG$. $FG,2$'/'$FG$ makes $FG,2$%Q$FG$ and $FG,2$%q$FG$ convert $FG,2$'%'$FG$ to $FG,2$"%%"$FG$. $ID,-2$ : @@ -31,7 +31,7 @@ $FG,2$"%h*c",25,'\n';$FG$ 25 new-lines. $FG,2$"%F"$FG$ text file. -$FG,2$"%p"$FG$ ptr. +$FG,2$"%dv"$FG$ ptr. $FG,2$"%P"$FG$ link to ptr. @@ -77,6 +77,9 @@ $LK,"AFPrint",A="MN:AFPrint"$(I64 mS,U8 *fmt,...) $LK,"PutChars",A="MN:PutChars" $LK,"RawPrint",A="MN:RawPrint"$(I64 mS,U8 *fmt,...) sends direct to screen memory, bypassing window manager. +$LK,"User",A="MN:User"$(U8 *fmt,...) Spawns a user and execute a string on start-up. + +$LK,"PopUpPrint",A="MN:PopUpPrint"$(U8 *fmt,...) compiles and execute a string in a pop-up win. Note: It returns the result of the last executed expression. $LK,"PopUpViewPrint",A="MN:PopUpViewPrint"$(U8 *fmt,...) creates a pop-up window and views text. $BK,1$Note:$BK,0$ Use $FG,2$Print("%s",src)$FG$ if you need an unmodified string. diff --git a/Doc/Quirks.TXT b/Doc/Quirks.TXT index 74d6665..cc2fb31 100644 --- a/Doc/Quirks.TXT +++ b/Doc/Quirks.TXT @@ -20,7 +20,7 @@ A) $LK,"DocBottom",A="MN:DocBottom"$() followed by $LK,"DocClear",A="MN:DocClear B) Disable window mgr button click checking with $FG,4$Fs->win_inhibit$FG$ set to mask $LK,"WIF_SELF_IP_L",A="MN:WIF_SELF_IP_L"$|$LK,"WIF_FOCUS_TASK_IP_L_D",A="MN:WIF_FOCUS_TASK_IP_L_D"$|$LK,"WIF_SELF_IP_R",A="MN:WIF_SELF_IP_R"$|$LK,"WIF_FOCUS_TASK_IP_R_D",A="MN:WIF_FOCUS_TASK_IP_R_D"$. This inhibits window mgr operations but still generates messages from button clicks. $ID,-2$ -* $FG,2$switch/case$FG$ statements allocate a single jump table--do not use with wide, sparse ranges of case values. +* $FG,2$switch/case$FG$ statements alloc a single jump table--do not use with wide, sparse ranges of case values. * Don't do a $FG,2$goto$FG$ out of a $FG,2$try{}$FG$. diff --git a/Doc/RedSea.TXT b/Doc/RedSea.TXT index 40f27ed..408f10d 100644 --- a/Doc/RedSea.TXT +++ b/Doc/RedSea.TXT @@ -1,9 +1,14 @@ $WW,1$$FG,5$$TX+CX,"RedSea File System"$$FG$ -The RedSea file system is a simple, 64-bit, file system which is, basically, FAT32 with fixed-sized 64-byte directory entries and no FAT table, just an allocation bitmap. It has no clustered-blocks, just 512 byte sectors. Files are stored in contiguous blocks and cannot grow in size. +The RedSea file system is a simple, 64-bit, file system which is similar to FAT32, but with absolute block addresses instead of clusters, fixed-sized 64-byte directory entries and no FAT table, just an allocation bitmap. A cluster is just one 512 byte sector. Files are stored in contiguous blocks and cannot grow in size. $HL,1$#define CDIR_FILENAME_LEN 38 //Must include terminator zero +The following bit field shows valid 8-Bit ASCII filename characters. + +U32 chars_bitmap_filename[8]= +{0x0000000, 0x03FF73FB, 0xEFFFFFFF, 0x2FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}; + public class CDirEntry //64-byte fixed-size { U16 attr; //See $LK,"RS_ATTR_DIR",A="MN:RS_ATTR_DIR"$. I would like to change these. @@ -13,15 +18,16 @@ public class CDirEntry //64-byte fixed-size CDate datetime; //See $LK,"DateTime",A="::/Doc/TimeDate.TXT"$, $LK,"Implementation of DateTime",A="FI:::/Kernel/Date.CPP"$ }; -public class CBootStruct //RedSea is type FAT32 in partition table to fool BIOS +public class CRedSeaBoot //RedSea is type FAT32 in partition table to fool BIOS. { U8 jump_and_nop[3]; - U8 signature,reserved[4]; //MBR_PT_REDSEA=0x88. Distinguish from real FAT32 + U8 signature,reserved[4]; //MBR_PT_REDSEA=0x88. Distinguish from real FAT32. + I64 base_offset; //For CD/DVD image copy. I64 sects; I64 root_cluster; I64 bitmap_sects; I64 unique_id; - U8 code[470]; + U8 code[462]; U16 signature2; //0xAA55 }; $HL,0$ @@ -32,7 +38,4 @@ See $LK,"implementation of LZW compression",A="::/Kernel/Compress.CPP"$. I hope to do a ISO9660 replacement that consists of a hard-drive partition image copied onto a CD/DVD starting at about sector 20 with EL TORITO booting. 512-byte sectors will be placed on top of 2048-byte CD/DCD sectors, so there will be four blocks per CD/DVD sector. -There is no bad block table and no redundant allocation table. When I was a teenager, I used a raw disk block editing program to look at directory blocks and follow chains of blocks on my Commodore 64. I undeleted files. My goal in designing the RedSea system is to be as simple as possible, for kids. - -$FG,8$ -* "Commodore 64" was a trademark of Commodore Business Machines. +There is no bad block table and no redundant allocation table. diff --git a/Doc/Requirements.TXT b/Doc/Requirements.TXT index 118d02c..43af90a 100644 --- a/Doc/Requirements.TXT +++ b/Doc/Requirements.TXT @@ -4,13 +4,13 @@ $FG,5$User Skills Required$FG$ * Knowledge of the $FG,2$C$FG$ programming language. $FG,5$Supported Hardware$FG$ -* $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatible computer. (Obviously, you need 64-bit hardware for a 64-bit operating system.) +* $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatible computer. (Obviously, you need 64-bit hardware for a 64-bit operating system.) * 640x480 16 color VGA graphics. * Most$FG$ keyboards and mice. -* Minimum 256 Meg RAM; Maximum $TX,"128 Gig",D="DD_MAPPED_MEM_SPACE_GIG"$ RAM (easily increased). +* Minimum $TX,"512 Meg",D="DD_MEM_MIN_MEG"$ RAM; Maximum $TX,"128 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ RAM (easily increased). * Internal PC Speakers. diff --git a/Doc/Splash.TXT b/Doc/Splash.TXT deleted file mode 100644 index f922fe5..0000000 --- a/Doc/Splash.TXT +++ /dev/null @@ -1,34 +0,0 @@ - -$TX+CX,"TempleOS V2.06",D="DD_OS_NAME_VERSION"$ - - - - - - - - - - - -$SP+CX,"",BI=1,BP="::/Misc/StockSprites.TXT,TempleOSLogo"$ - - - - - - - - - - - -$TX+CX,"God on Tap!"$ - -$CM-RE+CX,LE=-9$ $FG,2$$FG$ Word -$CM-RE+CX,LE=-9$$FG,2$$FG$ Passage -$CM-RE+CX,LE=-9$ $FG,2$$FG$ Song -$CM-RE+CX,LE=-9$$FG,2$$FG$ Doodle - -$LK+CX,"Trivial Solutions",A="FI:::/Doc/TrivialSolutions.TXT"$ - diff --git a/Doc/Sprite.TXT b/Doc/Sprite.TXT index 60d5d7e..6a93c54 100644 --- a/Doc/Sprite.TXT +++ b/Doc/Sprite.TXT @@ -1,6 +1,6 @@ -$WW,1$A $FG,4$CSprite$FG$, is an ordered list of $LK,"these",A="MN:SPT_END"$ elements, created with $FG,2$$FG$$FG$. Normally, they are packed together in a list and the address of the first is passed to routines. +$WW,1$A $LK,"CSprite",A="MN:CSprite"$ is an ordered list of $LK,"these",A="MN:SPT_END"$ elements, created with $FG,2$$FG$$FG$. Normally, they are packed together in a list and the address of the first is passed to routines. -See $LK,"::/Demo/Graphics/SpritePlot.CPP"$, $LK,"::/Demo/Graphics/SpritePlot3D.CPP"$, $LK,"::/Demo/Graphics/SpritePut.CPP"$ and $LK,"SpriteMeshEd",A="MN:SpriteMeshEd"$(). +See $LK,"::/Demo/Graphics/SpritePlot.CPP"$, $LK,"::/Demo/Graphics/SpritePlot3D.CPP"$, $LK,"::/Demo/Graphics/SpritePut.CPP"$, $LK,"::/Demo/Graphics/SpriteRaw.CPP"$ and $LK,"SpriteMeshEd",A="MN:SpriteMeshEd"$(). Be aware that copying $FG,2$SP$FG$, $FG,2$IB$FG$, or $FG,2$IS$FG$ entries with the clipboard results in duplicate entries with different nums. You can manually remove dups by editing with $FG,2$$FG$ and setting to the original num. diff --git a/Doc/SpriteBitMap.TXT b/Doc/SpriteBitMap.TXT index 4072dc2..e217573 100644 --- a/Doc/SpriteBitMap.TXT +++ b/Doc/SpriteBitMap.TXT @@ -1,3 +1,5 @@ $WW,1$$FG,5$$TX+CX,"Sprite BitMap Menu Help"$$FG$ Bitmaps have a background color. If you delete to the clipboard, what's left will be background colored. + +While drawing, you can usually press $FG,2$'c'$FG$ to eye-dropper the color under the mouse. Press $FG,2$'t'$FG$ for transparent. diff --git a/Doc/SpriteMain.TXT b/Doc/SpriteMain.TXT index 335fe4d..63c07c8 100644 --- a/Doc/SpriteMain.TXT +++ b/Doc/SpriteMain.TXT @@ -7,3 +7,5 @@ After you create a 3D Mesh, you can edit it by selecting it in the side-bar so i You can convert all elements to a BitMap if END is RED in the side-bar and you CONVERT-TO-BITMAP. Later, you can edit that bitmap by selecting it in the side bar so it is colored RED and clicking EDIT-BITMAP. If you have a 3D icon, you might want to place a background-colored rectangle under the 3D icon, so it hovers above. Use TRANSFORM-OFF and TRANSFORM-ON. You will also need to set the Z offset of the icon. Go to the Edit menu and select EDIT-AS-TEXT and change the third INT to Z offset. Good luck. + +While inserting vector elements, you can usually press $FG,2$'c'$FG$ to eye-dropper the color under the mouse. Press $FG,2$'t'$FG$ for transparent. diff --git a/Doc/StandBy.TXT b/Doc/StandBy.TXT new file mode 100644 index 0000000..dcbf958 --- /dev/null +++ b/Doc/StandBy.TXT @@ -0,0 +1,18 @@ +$FG,5$$TX+CX,"AutoComplete is in StandBy"$$FG$ + +$FG,4$$TX+CX+L+PU+UL,"System Keys Quick Guide",A="::/Doc/HelpIndex.TXT"$$FG$ +$FG,4$$TX+CX,"(Works Everywhere)"$$FG$ +$FG,2$ $FG$Left-Click +$FG,2$ $FG$Right-Click +$FG,2$ $FG$Help +$FG,2$ $FG$Personal Menu +$FG,2$ $FG$Save & Exit +$FG,2$ $FG$Abort & Exit +$FG,2$ $FG$Pull-Down Menu + +$FG,4$$TX+CX+L+PU+UL,"Tongues",A="::/Adam/God/HSNotes.TXT"$$FG$ +$FG,4$$TX+CX,"(Works Everywhere)"$$FG$ +$FG,2$ $FG$God Word +$FG,2$ $FG$God Passage +$FG,2$ $FG$God Song +$FG,2$ $FG$God Doodle \ No newline at end of file diff --git a/Doc/Start.TXT b/Doc/Start.TXT index c4e7d94..0757892 100644 --- a/Doc/Start.TXT +++ b/Doc/Start.TXT @@ -1,29 +1,5 @@ -$FG,5$$TX+CX,"TempleOS"$$FG$ -$LK+CX,"Trivial Solutions",A="FI:::/Doc/TrivialSolutions.TXT"$ +$WW+H,1$$PURPLE$$TX+CX,"TempleOS V2.18",D="DD_OS_NAME_VERSION"$$FG$ -$WW+H,1$$TR-C,"Keyboard Ctrls"$ -$ID,2$$FG,2$Enter$FG$ Right-click menu -$FG,2$Space Bar$FG$ Edit (view) -$FG,2$Esc$FG$ Save and exit -$FG,2$Shift-Esc$FG$ Abort -$FG,2$Ctrl-m$FG$ Personal Menu -$FG,2$Windows Key $FG$Pull-down Menu -$MA+LA-X,"F1",LM="Msg(MSG_KEY_DOWN,0,SC_F1);"$ Help -Other keys: $MA-X+PU,"Key Map",LM="KeyMap;View;\n"$ -$ID,-2$ -$TR-C,"Mouse Ctrls"$ -$ID,2$$FG,2$Right-Click$FG$ Right-click menu -$FG,2$Left-Click$FG$ Edit (view) -$FG,2$Double-Left$FG$ Save and exit -$FG,2$Double-Right$FG$ Abort -$FG,2$Top of Screen$FG$ Pull-down menu -$ID,-2$ -$TR-C,"Keyboard-Mouse Ctrls"$ -$ID,2$$FG,2$Ctrl-LeftDrag$FG$ Grab-Scroll Window -$FG,2$Ctrl-Right$FG$ Null scrolling -$FG,2$Ctrl-Alt-z$FG$ Zoom screen on Mouse -$FG,2$Ctrl-Alt-Z$FG$ Unzoom screen on Mouse -$ID,-2$ -Remember to terminate cmds with a semicolon. +$TX+CX,"Public Domain Operating System"$ $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$, $LK,"Quick Start: Cmd line",A="FI:::/Doc/CmdLineOverview.TXT"$ diff --git a/Doc/Strategy.TXT b/Doc/Strategy.TXT index f3d0b9c..c071175 100644 --- a/Doc/Strategy.TXT +++ b/Doc/Strategy.TXT @@ -1,21 +1,38 @@ -$WW,1$$FG,5$$TX+CX,"Strategic Decisions Making"$ -$TX+CX,"TempleOS Simple"$ +$WW,1$$FG,5$$TX+CX,"Decisions Making TempleOS Simple"$ $FG$ -The $FG,2$$TX,"trivial solution",HTML="http://en.wikipedia.org/wiki/Trivial_solution"$$FG$ in math is the simple, obvious answer. TempleOS has many examples of using trivial solutions. +Everybody is obsessed, Jedi mind-tricked, by the notion that when you scale-up, it doesn't get bad, it gets worse. They automatically think things are going to get bigger. Guess what happens when you scale down? It doesn't get good, it gets better! + +I limited it to 100,000 lines of code, forever! I never need a linker or make utility and I can use small labels. + +People mock Bill Gates for, "640K should be enough." I say, "2 Gig for code should be enough." The same people who mock Bill Gates are probably just like the black woman who sued for a trillion dollars. + +My Dad worked on converting the Titan missile to the Gemini Mission rocket. It had to be "man-rated". You can bet that everything got an order of magnitude more complexity and documentation. My vision is a souped-up C64, not a 1970's mainframe; a kayak, not a Titanic. + +Linux is a semi-tractor -- you need professional drivers for 20 gears. Linux has file permissions. Common people are hurt by file permissions. + +Windows is a car. + +TempleOS is a motorcycle -- if you lean-over too far, a motorcycle will crash. Don't do that! There are no side air bags on a motorcycle. DOS and C64 had no memory protections and ran in ring-0, with no security. This saves an order of magnitude complexity. + +Linux and Windows are general purpose operating systems. They attempt to do any task you want. TempleOS cherry-picks tasks and is designed to do the same things a C64 did. This saves and order of magnitude complexity. For example, the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system allocates just contiguous files -- you load and save whole files at once. A benefit is this allows compression. Also, TempleOS does not do networking or multimedia. In theory, memory will fragment with lots of big files. The system would fall to pieces with multimedia, but God said 640x480 16 color is a permanent covenant like circumcision. + +A three button mouse is like a leg you cannot put weight on. TempleOS just does hardware everybody has, with no divergent code bases for each machine's custom hardware. There is one graphics driver instead of 50 for different GPUs. This saves an order of magnitude complexity and makes for a delightful API, so developer's code is not like a frayed rope end. + + * Everything runs in kernel, $FG,2$ring 0$FG$, mode. -* $FG,2$One memory map$FG$ for all tasks on all cores with virtual addresses set equal to physical. +* $FG,2$One memory map$FG$ for all tasks on all cores with virtual addresses set equal to physical, just as though paging is not used. * One platform -- $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC's, no 32-bit support. -* No security. +* No security or cryptography. * No networking. * Least (greatest) common denominator hardware support. Mostly, one driver for each device class. I can't be in the business of different drivers. Compatibility is the greatest challenge for PC operating systems. Disk code does not use interrupts, avoiding compatibility risks. $FG,2$PS/2$FG$ keyboard/mouse is used instead of $FG,2$USB$FG$, also more compatible. -* $FG,2$640x480$FG$ 16 colors. Updates whole screen at $FG,2$60 fps$FG$, optimized for full screen games where $FG,2$InvalidRectangle$FG$s are counter-productive. +* $FG,2$640x480$FG$ 16 colors. Updates whole screen at $FG,2$30 fps$FG$, optimized for full screen games where $FG,2$InvalidRectangle$FG$s are counter-productive. * One font, 8x8. Text and graphic layers done in software with text normally on an 8x8 grid. It can run in Text mode if graphic initialization fails. @@ -25,7 +42,7 @@ The $FG,2$$TX,"trivial solution",HTML="http://en.wikipedia.org/wiki/Trivial_solu * Whole files are processed almost exclusively, allowing compression. -* One language and compiler for command-line, scripts, songs, automations and code. +* $LK,"One language",A="FI:::/Doc/HolyC.TXT"$ and compiler for command-line, scripts, songs, automations and code. * One editor/word processor/browser for the command-line window, source code, documentation browser, dialog forms. diff --git a/Doc/TOSZ.TXT b/Doc/TOSZ.TXT new file mode 100644 index 0000000..c3c9f96 --- /dev/null +++ b/Doc/TOSZ.TXT @@ -0,0 +1,10 @@ +$WW,1$$FG,5$$TX+CX,"Linux TOSZ Utility"$$FG$ + + +$FG,2$TOSZ [-ascii] filename$FG$ + +Will uncompress a single file from within Linux. The $FG,2$-ascii$FG$ flag will convert the irregular TempleOS ASCII 5 and ASCII 31 characters to spaces. (ASCII 5 is used to mark the cursor pos and ASCII 31 is used for shifted space characters and will cause problems unless you convert them.) + +$FG,8$ +* "Linux" is probably a trademark owned by Linus Torvalds. +$FG$ \ No newline at end of file diff --git a/Doc/TSZ.TXT b/Doc/TSZ.TXT deleted file mode 100644 index 949ad73..0000000 --- a/Doc/TSZ.TXT +++ /dev/null @@ -1,21 +0,0 @@ -$WW,1$$FG,5$$TX+CX,"Linux TSZ Utility"$$FG$ - - -$FG,2$TSZ [-ascii] filename$FG$ - -Will uncompress a single file from within Linux. The $FG,2$-ascii$FG$ flag will convert the irregular TempleOS ASCII 5 and ASCII 31 characters to spaces. (ASCII 5 is used to mark the cursor pos and ASCII 31 is used for shifted space characters and will cause problems unless you convert them.) - - -$FG,5$$TX+CX,"Windows TSZ Utility"$$FG$ - -$FG,2$TSZ$FG$ will uncompress TempleOS files you have gotten to Windows. There are two ways to get files from TempleOS to Windows -- via CD-ROM or via a $FG,2$FAT32$FG$ partition. - - -$FG,2$TSZ [-ascii] dirname$FG$: - -will uncompress all TempleOS files with names ending in "$FG,2$.Z$FG$" in a Windows directory and in all subdirectories. The $FG,2$-ascii$FG$ flag used in combination will convert the irregular TempleOS ASCII 5 and ASCII 31 characters to spaces. (ASCII 5 is used to mark the cursor pos and ASCII 31 is used for shifted space characters and will cause problems unless you convert them.) Note: If you pick names not ending in "$FG,2$.Z$FG$", they will not need to be uncompressed. You can $LK,"Move",A="MN:Move"$() or $LK,"Copy",A="MN:Copy"$() them to a name not ending in "$FG,2$.Z$FG$" and they will be stored uncompressed. - -$FG,8$ -* "Windows" is a trademark of MicroSoft Corp. -* "Linux" is probably a trademark owned by Linus Torvalds. -$FG$ \ No newline at end of file diff --git a/Doc/TaskSrv.TXT b/Doc/TaskSrv.TXT new file mode 100644 index 0000000..f6e41d1 Binary files /dev/null and b/Doc/TaskSrv.TXT differ diff --git a/Doc/TextBase.TXT b/Doc/TextBase.TXT index cb8c20a..f75dae4 100644 --- a/Doc/TextBase.TXT +++ b/Doc/TextBase.TXT @@ -1,4 +1,4 @@ -$WW,1$$LK,"gr.text_base",A="MN:CGrGlbls"$ must be updated 60fps in your Fs->draw_it() callback. You probably want $LK,"GrPrint",A="MN:GrPrint"$() or just $LK,"Print",A="MN:Print"$(). The $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ code takes care of plotting text to $LK,"gr.text_base",A="MN:CGrGlbls"$. +$WW,1$$LK,"gr.text_base",A="MN:CGrGlbls"$ must be updated 30fps in your Fs->draw_it() callback. You probably want $LK,"GrPrint",A="MN:GrPrint"$() or just $LK,"Print",A="MN:Print"$(). The $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ code takes care of plotting text to $LK,"gr.text_base",A="MN:CGrGlbls"$. Bits 0-7 8-Bit ASCII Screen Code Bits 8-11 Foreground $LK,"color",A="MN:BLACK"$ diff --git a/Doc/Tips.TXT b/Doc/Tips.TXT index 1e9dfd7..614eec1 100644 --- a/Doc/Tips.TXT +++ b/Doc/Tips.TXT @@ -2,16 +2,18 @@ $WW,1$$FG,5$$TX+CX,"Tips"$$FG$ * Turn-off or reboot ($FG,2$$FG$) at any time, except during disk writes. Writes are not cached. +* Use $LK,"Seed",A="MN:Seed"$() and the cmd-line to switch $LK,"Rand",A="MN:Rand"$() to non-timer mode and replay games you like. + * 64-bit values are most efficient for the compiler. * See $MA-X+PU,"Key Map",LM="KeyMap;View;\n"$ for a list of defined keys. Define your own keys in $LK,"MyPutKey",A="MN:MyPutKey"$(). See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$. -* $FG,2$$FG$ maximizes a window. $FG,2$$FG$ closes WordStat. $FG,2$$FG$ brings back WordStat. $FG,2$$FG$ vertically tiles windows. $FG,2$$FG$ horizontally tiles windows. The $FG,2$ALT$FG$ keys are defined in $LK,"::/Accts/Adam3cKeyPlugIns.CPP"$. You can customize them. +* $FG,2$$FG$ maximizes a window. $FG,2$$FG$ closes AutoComplete. $FG,2$$FG$ brings back AutoComplete. $FG,2$$FG$ vertically tiles windows. $FG,2$$FG$ horizontally tiles windows. The $FG,2$ALT$FG$ keys are defined in $LK,"::/Home/AdamKeyPlugIns.CPP"$. You can customize them. -* If you make changes to TempleOS files in your $FG,2$HOME$FG$ directory, generally you reboot to make them take effect. (You don't compile anything.) You should have two TempleOS partitions on your hard drive because a syntax error in a start-up file will make the partition unbootable. Boot to the second partition or boot to a standard TempleOS CD-ROM and use $LK,"Mount",A="MN:Mount"$() to mount your hard drive. +* If you make changes to TempleOS files in your $FG,2$/Home$FG$ directory, generally you reboot to make them take effect. (You don't compile anything.) You should have two TempleOS partitions on your hard drive because a syntax error in a start-up file will make the partition unbootable. Boot to the second partition or boot to a standard TempleOS CD-ROM and use $LK,"Mount",A="MN:Mount"$() to mount your hard drive. * I copy my files to a mirrored identical partition, periodically with $LK,"CopyTree",A="MN:CopyTree"$() commands in scripts. I do merge commands with a menu entry like this: -$FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes. +$FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes. * $FG,2$$FG$ at the cmd line to access your PersonalMenu. Place macros there with $FG,2$$FG$, or icon-like sprites with $FG,2$$FG$. Use the $FG,2$Pop-Up$FG$ option on macros to $LK,"Spawn",A="MN:Spawn"$() a task to run a file. It dies when it is finished. This returns mem to the system. Be sure to press $FG,2$$FG$ to save your macro/menu area after making changes. @@ -19,19 +21,19 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes. * Use the PullDown menu at the top of the screen to learn commands, or for finding the keyboard controls to games. -* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:HOME/Adam3aLocalize.CPP,mouse.scale"$. +* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:/Home/AdamLocalize.CPP,mouse.scale"$. -* You can set your local time zone by setting the $LK,"local_time_offset",A="MN:local_time_offset"$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:HOME/Adam3aLocalize.CPP,local_time"$. +* You can set your local time zone by setting the $LK,"local_time_offset",A="MN:local_time_offset"$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:/Home/AdamLocalize.CPP,local_time"$. * $FG,2$$FG$ in the editor to reindent a $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ function or renumber an asm routine's local labels. * You can use $FG,2$filter_lines$FG$ in the editor text search form ($FG,2$$FG$) to temporarily display just lines near each match. A value of $FG,2$filter lines$FG$ set to $FG,2$5$FG$ will display lines within 5 lines of matches. Then, you can do another find to a different string and achieve a $FG,2$AND$FG$ search. When finished, press $FG,2$$FG$. -* You can recompile and reinstall the kernel with $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). You'll probably want to make a function for recompiling that uses the $LK,"Auto",A="MN:Auto"$() function to answer the cfg questions. See my technique $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TSAdam.CPP,1"$ $LK,"Update Funs",A="FL:::/Demo/AcctExample/TSDistro.CPP,1"$. +* You can recompile and reinstall the kernel with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). You'll probably want to make a function for recompiling that uses the $LK,"Auto",A="MN:Auto"$() function to answer the cfg questions. See my technique $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$. -* $LK,"Scale2Mem",A="MN:Scale2Mem"$(min,max,limit=2*1024*1024*1024) can be used for cfg questions when recompiling. The $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() cfg prompts accept expressions, not just numbers. The dft disk cache is $FG,2$Scale2Mem(0x80000,0x8000000)$FG$. +* $LK,"Scale2Mem",A="MN:Scale2Mem"$(min,max,limit=2*1024*1024*1024) can be used for cfg questions when recompiling. The $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() cfg prompts accept expressions, not just numbers. The dft disk cache is $FG,2$Scale2Mem(0x80000,0x8000000)$FG$. -* You can permanently disable $FG,2$WordStat$FG$ commenting-out $LK,"WSInit",A="FF:HOME/Adam3eSys.CPP,WSInit"$() in $LK,"HOME/Adam3eSys.CPP",A="FF:HOME/Adam3eSys.CPP,WSInit"$. +* You can permanently disable $FG,2$AutoComplete$FG$ commenting-out $LK,"ACInit",A="FF:/Home/AdamSys.CPP,ACInit"$() in $LK,"::/Home/AdamSys.CPP",A="FF:/Home/AdamSys.CPP,ACInit"$. * Boolean expressions $BK,1$not$BK,0$ in $FG,2$if$FG$ statements don't have short circuit logic and are compiled inefficiently. @@ -41,9 +43,9 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes. * Many data structures have a $FG,2$user_data$FG$ member. Those are available for you to store a data item, for convenience. $LK,"CTask",A="MN:CTask"$, $LK,"CDocEntry",A="MN:CDocEntry"$ and $LK,"CDirEntry",A="MN:CDirEntry"$ have them. You shouldn't encounter conflicts with TempleOS using them. -* If, for some strange reason, you wanted to reduce mem usage, make a smaller disk cache when you recompile the kernel; disabling $FG,2$WordStat$FG$; Specify smaller stk sizes when doing $LK,"Spawn",A="MN:Spawn"$(), chang $LK,"DFT_STK",A="MN:DFT_STK"$, and using $LK,"DocMax",A="MN:DocMax"$() to reduce the cmd line buffer size. +* If, for some strange reason, you wanted to reduce mem usage, make a smaller disk cache when you recompile the kernel; disabling $FG,2$AutoComplete$FG$; Specify smaller stk sizes when doing $LK,"Spawn",A="MN:Spawn"$(), chang $LK,"DFT_STK",A="MN:DFT_STK"$, and using $LK,"DocMax",A="MN:DocMax"$() to reduce the cmd line buffer size. -* Filenames ending in "$FG,2$.Z$FG$" will be automatically compressed and uncompressed when read or written. The compression method is not supported by other operating systems. You can store files uncompressed by $LK,"Move",A="MN:Move"$()ing them to a filename not ending in "$FG,2$.Z$FG$". See $LK,"::/Doc/TSZ.TXT"$ if you want to uncompress while in $FG,2$WINDOWS$FG$. +* Filenames ending in "$FG,2$.Z$FG$" will be automatically compressed and uncompressed when read or written. The compression method is not supported by other operating systems. You can store files uncompressed by $LK,"Move",A="MN:Move"$()ing them to a filename not ending in "$FG,2$.Z$FG$". See $LK,"::/Doc/TOSZ.TXT"$ if you want to uncompress while in $FG,2$Linux$FG$. * $LK,"Merge",A="MN:Merge"$() can be used to see what's changed. The $FG,2$+d$FG$ flag will show differences of files which have changed and allow you to merge code. (The $FG,2$+r$FG$ flag will recurse.) @@ -53,7 +55,7 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes. * You can use $LK,"OptOn",A="MN:OptOn"$($LK,"OPTf_WARN_DUP_TYPES",A="MN:OPTf_WARN_DUP_TYPES"$) to find unnecessary local var type statements. -* $LK,"OptEqu",A="MN:OptEqu"$($LK,"OPTf_ECHO",A="MN:OPTf_ECHO"$,ON) can be placed in $LK,"Adam1.CPP",A="FI:::/Kernel/Adam1.CPP"$ to echo start-up scripts. +* $LK,"OptEqu",A="MN:OptEqu"$($LK,"OPTf_ECHO",A="MN:OPTf_ECHO"$,ON) can be placed in $LK,"Adam.CPP",A="FI:::/Adam.CPP"$ to echo start-up scripts. * Use $LK,"Plain",A="MN:Plain"$() to edit a plain text file. You'll need this if your file has $FG,2$$$$FG$'s. Use the $LK,"::/Misc/ToDolDoc.CPP"$ utility to convert plain text to DolDoc's. @@ -71,9 +73,11 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes. * You can save a sprite as a $FG,2$.BMP$FG$ file in $FG,2$$FG$ on the Sprite BitMap Menu. -* There are handy functions--$FG,2$F(),R(),FD()$FG$ and $FG,2$RD()$FG$ which are defined in $LK,"HOME/Adam3dWrappers.CPP"$. You're encouraged to change them, since they're in acct files. They will perform find-and-replace operations accross multiple files. The $FG,2$+l$FG$ flag is particularly useful since it limits to whole labels. The $FG,2$+lb$FG$ and $FG,2$+la$FG$ flags limit to whole labels just before or after. You are encouraged to add or modify handy wrapper functions to make cmd line operations easier. +* You can eye-dropper colors in the $FG,2$$FG$ sprite editor by pressing $FG,2$'c'$FG$. Press $FG,2$'t'$FG$ for transparent. -* When using $LK,"Grep",A="MN:Grep"$() while modifying code, work from the bottom-up so that line numbers are correct. If you work top-down, then inserting or deleting lines causes the lower file links will be incorrect. +* There are handy functions--$FG,2$F(),R(),FD()$FG$ and $FG,2$RD()$FG$ which are defined in $LK,"::/Home/AdamWrappers.CPP"$. You are encouraged to change them and add more. They will perform find-and-replace operations accross multiple files. The $FG,2$+l$FG$ flag is particularly useful since it limits to whole labels. The $FG,2$+lb$FG$ and $FG,2$+la$FG$ flags limit to whole labels just before or after. You are encouraged to add or modify handy wrapper functions to make cmd line operations easier. + +* When using $LK,"Find",A="MN:Find"$() while modifying code, work from the bottom-up so that line numbers are correct. If you work top-down, then inserting or deleting lines causes the lower file links will be incorrect. * You can save files after making changes, anytime you are within the editor, like when viewing help/macro files. $FG,2$$FG$ saves as, $FG,2$$FG$ saves with the same name in the scrolling title bar. Hitting $FG,2$$FG$ will exit and save. ($FG,2$$FG$ will abort). You can save the cmd line window to a file, too, since you're actually in the editor when you're at the cmd line. @@ -85,15 +89,13 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes. * Use $LK,"View",A="MN:View"$() in Pop-up macros to linger until the user presses $FG,2$$FG$ or $FG,2$$FG$. -* You can access the word under the cursor at $LK,"ws.cur_word",A="MN:CWordStatGlbls"$, but you should probably turn-off preemption or interrupts momentarily to copy it. +* You can access the word under the cursor at $LK,"ac.cur_word",A="MN:CAutoCompleteGlbls"$, but you should probably turn-off preemption or interrupts momentarily to copy it. -* You can reactivate $FG,2$WordStat$FG$ after closing it by pressing $FG,2$$FG$ or $FG,2$$FG$ if you have it defined. - -* If you use consistent var names for items of different classes, you'll usually be able to use $FG,2$WordStat$FG$'s autocomplete for member vars. I always use $FG,2$lx$FG$ for $LK,"CLex",A="MN:CLex"$ ptrs; $FG,2$doc$FG$ for $LK,"CDoc",A="MN:CDoc"$ ptrs; $FG,2$doc_e$FG$ or $FG,2$doc_ce$FG$ for $LK,"CDocEntry",A="MN:CDocEntry"$ ptrs, etc. +* You can reactivate $FG,2$AutoComplete$FG$ after closing it by pressing $FG,2$$FG$ or $FG,2$$FG$ if you have it defined. * $LK,"Preempt",A="MN:Preempt"$() is used to keep a task from being interrupted and swapped-out. It has a similar effect to turning-off interrupts. Each task has it's own preemption ctrl. A task with preemption turned-off can voluntarily $LK,"Yield",A="MN:Yield"$() with preemption off. -* You can set a color for different drives with $LK,"SetDrvTextAttr",A="MN:SetDrvTextAttr"$(). Place calls to this in $LK,"HOME/Adam3aLocalize.CPP"$. +* You can set a color for different drives with $LK,"DrvTextAttrSet",A="MN:DrvTextAttrSet"$(). Place calls to this in $LK,"::/Home/AdamLocalize.CPP"$. * $FG,2$$FG$ to toggle to/from plain text just the $LK,"CDoc",A="MN:CDoc"$ cmd under the cursor. See $LK,"::/Demo/DolDoc/TextDemo.CPP"$. @@ -119,7 +121,7 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes. * Using a sub-int array, $FG,2$i.u8[3]$FG$, for example, will force a local var to non-reg. -* You can delete the $FG,4$HOME/Registry.CPP.Z$FG$ file. The policy is that deleting it will restore defaults. It is a text doc, if you want to edit it. Be careful of tree indentations. +* You can delete the $FG,4$/Home/Registry.CPP.Z$FG$ file. The policy is that deleting it will restore defaults. It is a text doc, if you want to edit it. Be careful of tree indentations. * Study $LK,"::/Adam/Utils/MemRep.CPP"$ and $LK,"WallPaper",A="MN:WallPaper"$() to learn how the system resources are put together. @@ -146,3 +148,7 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes. * With $FG,2$sub_switch_start$FG$/$FG,2$sub_switch_end$FG$, common trailing code is fast. Common leading code is slow.$FG$ * The first line of the $MA-X+PU,"Psalmody",LM="#include \"::/Apps/Psalmody/Run\"\n"$ $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ song files is a comment with a category recognized by $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$(). The categories are $FG,2$"no nothing"$FG$, $FG,2$"has words"$FG$, $FG,2$"has graphics"$FG$, or $FG,2$"special"$FG$. The third character in the song comment is a digit rating number, shown in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$(). You can set the song rating in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$() by pressing $FG,2$0$FG$-$FG,2$9$FG$. You can press $FG,2$$FG$ to delete songs. + +$FG,8$ +* "Linux" is probably a trademark owned by Linus Torvalds. +$FG$ \ No newline at end of file diff --git a/Doc/Upgrade.TXT b/Doc/Upgrade.TXT index 2288808..6369097 100644 --- a/Doc/Upgrade.TXT +++ b/Doc/Upgrade.TXT @@ -1,7 +1,5 @@ -$WW,1$$PURPLE$$TX+CX,"Upgrading TempleOS"$$FG$ +$WW,1$$FG,5$$TX+CX,"Upgrading TempleOS"$$FG$ -To upgrade, you generally boot the new TempleOS CD/DVD, install on top of your partition, modify your files and set it to boot your account by executing $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). Often, your code will have to be modified to work with the new version. See $LK,"Change Log",A="FI:::/Doc/ChangeLog.TXT"$. You might have to boot an alternate partition or the CD and modify your code until it boots okay. - -The $GREEN$INSTALL$FG$ option when you boot a CD will install on top of an existing install if you tell it not to reformat. +To upgrade, you generally boot the new TempleOS CD/DVD, install on top of your drive, modify your files and set it to boot your account by executing $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). Often, your code will have to be modified to work with the new version. See $LK,"Change Log",A="FI:::/Doc/ChangeLog.TXT"$. You might have to boot an alternate drive or the CD and modify your code until it boots okay. See the $LK,"Installing",A="FI:::/Doc/Install.TXT"$ documentation. diff --git a/Doc/Welcome.TXT b/Doc/Welcome.TXT index b9bd4a2..f63fbe5 100644 --- a/Doc/Welcome.TXT +++ b/Doc/Welcome.TXT @@ -1,12 +1,13 @@ $WW,1$$FG,5$$TX+CX,"Welcome to TempleOS"$$FG$ -$LK,"Trivial Solutions",A="FI:::/Doc/TrivialSolutions.TXT"$'s TempleOS is a x86_64, multi-cored, multi-tasking, ring-0-only, single-address_mapped (identity), operating system for recreational programming: +TempleOS is a x86_64, multi-cored, multi-tasking, ring-0-only, single-address_mapped (identity-mapped), operating system for recreational programming. Paging is almost not used. +The people whom can most benefit are: $ID,2$* Professionals doing hobby projects * Teenagers doing projects * Non-professional, older-persons projects $ID,-2$ -Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with. As it turns-out, simplicity makes it faster in some ways, too. It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed. It's only $TX,"120,677",D="DD_TEMPLEOS_LOC"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a "hello world" application in one line of code and can put graphics on the screen with a three line program! +Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with. As it turns-out, simplicity makes it faster in some ways, too. It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed. It's only $TX,"120,471",D="DD_TEMPLEOS_LOC"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a "hello world" application in one line of code and can put graphics on the screen with a three line program! It's a kayak, not a Titanic -- it will crash if you do something wrong. You quickly reboot, however. DOS and the 8-bit home computers of the 80's worked fine without memory protection and most computers in the world -- the embedded ones -- operate without protection. The resulting simplicity of no protections is why TempleOS has value. In facts, that's the point of TempleOS. See the $LK,"TempleOS Charter",A="FI:::/Doc/Charter.TXT"$. @@ -14,7 +15,7 @@ Conventional thinking is "failure is not an option" for general purpose operatin Two things to know about TempleOS are that $UL,1$tasks$UL,0$ have $LK,"MAlloc",A="MN:MAlloc"$/$LK,"Free",A="MN:Free"$ heap memory, not applications, and tasks have compiler symbol tables that persist at a scope like environment variables in other operating systems, and the symbols can include functions. -In other operating systems, I hated learning one language for command line scripts and another for programming. With $FG,2$TempleOS$FG$, the command line feeds right into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiler, line by line, and it places code into memory it $LK,"MAlloc",A="MN:MAlloc"$()s. The compiler is paused at the command line, waiting for input. Naturally, you $FG,2$#include$FG$ a program to load it into memory and, usually, start it. During the boot process, many files get $LK,"compiled",A="FI:::/Kernel/Adam1.CPP"$ before you have access to the command line. (Don't worry, booting takes only a couple of seconds.) All the header declarations for the operating system are compiled and are available for use in your programs without needing to $FG,2$#include $FG$them. Everything is truly compiled to native $FG,2$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ machine code, nothing is $FG,2$interpreted$FG$ and there is no $FG,2$byte code$FG$. +In other operating systems, I hated learning one language for command line scripts and another for programming. With $FG,2$TempleOS$FG$, the command line feeds right into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiler, line by line, and it places code into memory it $LK,"MAlloc",A="MN:MAlloc"$()s. The compiler is paused at the command line, waiting for input. Naturally, you $FG,2$#include$FG$ a program to load it into memory and, usually, start it. During the boot process, many files get $LK,"compiled",A="FI:::/Adam.CPP"$ before you have access to the command line. (Don't worry, booting takes only a couple of seconds.) All the header declarations for the operating system are compiled and are available for use in your programs without needing to $FG,2$#include $FG$them. Everything is truly compiled to native $FG,2$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ machine code, nothing is $FG,2$interpreted$FG$ and there is no $FG,2$byte code$FG$. Statements at the global scope -- outside the scope of functions -- execute immediately. There is no $FG,2$main()$FG$ function. Instead, you give meaningful names to what would be $FG,2$main()$FG$ functions and you invoke them by calling them with a statement in the global scope, usually at the bottom of your file. @@ -52,9 +53,9 @@ TempleOS is for hobbyist programmers on single user (at a time) home computers, There is no distinction between the terms $FG,2$task$FG$, $FG,2$process$FG$ or $FG,2$thread$FG$. All have a task record, $LK,"CTask",A="MN:CTask"$, pointed to by the $FG,2$FS$FG$ segment reg and are accessed with $FG,4$Fs->$FG$ while $FG,4$Gs->$FG$ points to a $LK,"CCPU",A="MN:CCPU"$ for the current CPU core. Each task can have just one window, but a task can have children with windows. (The segment regs are just used as extra regs -- there is nothing segmented about TempleOS' memory.) -In TempleOS, $FG,2$Adam$FG$ refers to a task that is the father of all tasks. He's never supposed to die. Since tasks inherit the symbols of parents, system-wide stuff is associated with $FG,2$Adam$FG$. His heap is like kernel memory in other operating systems. Since $FG,2$Adam$FG$ is immortal, it's safe to allocate objects, not tied to any mortal task, from $FG,2$Adam$FG$'s heap. He stays in a server mode, taking requests, so you can ask him to $FG,2$#include$FG$ something, placing that code system-wide. A funny story is that originally I called it the $FG,2$root$FG$ task and even had a $FG,2$/Root$FG$ directory ;-) $FG,2$Adam$FG$ executes $LK,"::/Kernel/Adam1.CPP"$ at boot time. +In TempleOS, $FG,2$Adam$FG$ refers to a task that is the father of all tasks. He's never supposed to die. Since tasks inherit the symbols of parents, system-wide stuff is associated with $FG,2$Adam$FG$. His heap is like kernel memory in other operating systems. Since $FG,2$Adam$FG$ is immortal, it's safe to alloc objects, not tied to any mortal task, from $FG,2$Adam$FG$'s heap. He stays in a server mode, taking requests, so you can ask him to $FG,2$#include$FG$ something, placing that code system-wide. A funny story is that originally I called it the $FG,2$root$FG$ task and even had a $FG,2$/Root$FG$ directory ;-) $FG,2$Adam$FG$ executes $LK,"::/Adam.CPP"$ at boot time. -For easy back-ups, place everything you author in your $FG,2$HOME$FG$ directory and subdirectories. Then, use $LK,"CopyTree",A="MN:CopyTree"$(). That should make upgrading easy, too. To make an account use $LK,"MkDir",A="MN:MkDir"$() to create a directory under $FG,2$/Accts$FG$. It will be $FG,2$HOME$FG$ if you boot to it. Recompile with $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() and make it boot your acct. Customizable start-up scripts go in your $FG,2$HOME$FG$ directory. The default start-up scripts are in $FG,2$/Accts$FG$, the parent of all accounts. Copy the start-up files you wish to customize into $FG,2$HOME$FG$ and modify them. See $LK,"Acct Files",A="FF:::/Doc/GuideLines.TXT,ACCT FILES"$. You can make your own distro that includes everything and is a bootable live CD with $LK,"::/Misc/MakeDistro.CPP"$. +For easy back-ups, place everything you author in your $FG,2$/Home$FG$ directory and subdirectories. Then, use $LK,"CopyTree",A="MN:CopyTree"$(). That should make upgrading easy, too. Customizable start-up scripts go in your $FG,2$/Home$FG$ directory. The default start-up scripts are in the root directory. Copy the start-up files you wish to customize into $FG,2$/Home$FG$ and modify them. See $LK,"Home Files",A="FF:::/Doc/GuideLines.TXT,/Home Files"$. You can make your own distro that includes everything and is a bootable live CD with $LK,"::/Misc/MakeDistro.CPP"$. Typically, your usage pattern through the day will be repeatedly left or right clicking on filenames in a cmd line $LK,"Dir",A="MN:Dir"$() listing. You left-click files to edit them and right-click to $FG,2$#include$FG$ them. To begin a project, type $LK,"Ed",A="MN:Ed"$("filename");, supplying a filename. You can also run programs with $FG,2$$FG$ when in the editor. $FG,2$$FG$ to save and exit the file. You'll need to do a new $LK,"Dir",A="MN:Dir"$() cmd, periodically, so make a macro on your PersonalMenu. Access your PersonalMenu by pressing $FG,2$$FG$, cursoring until you are on top of it and pressing $FG,2$$FG$. @@ -65,22 +66,22 @@ $FG,2$$FG$ brings-up the file manager. It's pretty crappy. I find I do $FG,2$$FG$ toggles window border. $FG,2$$FG$ maximizes a window. -$FG,2$$FG$ closes WordStat. -$FG,2$$FG$ brings back WordStat. +$FG,2$$FG$ closes AutoComplete. +$FG,2$$FG$ brings back AutoComplete. $FG,2$$FG$ vertically tiles windows. $FG,2$$FG$ horizontally tiles windows. -The $FG,2$ALT$FG$ keys are defined in $LK,"HOME/Adam3cKeyPlugIns.CPP"$. You can customize them. +The $FG,2$ALT$FG$ keys are defined in $LK,"::/Home/AdamKeyPlugIns.CPP"$. You can customize them. $FG,2$$FG$ creates a new terminal window. $FG,2$$FG$ kills a window. You'll do these periodically. -$LK,"Grep",A="MN:Grep"$() is your best friend. There's a wrapper function called $LK,"F",A="MN:F"$() in your $FG,2$HOME/Adam3dWrappers.CPP.Z$FG$ file. Feel free to make wrapper functions for functions you use often and customize the args. By the way, $LK,"Grep",A="MN:Grep"$() or $LK,"R",A="MN:R"$() can be used to replace strings across multiple files. You can access $LK,"Grep",A="MN:Grep"$() using $FG,2$$FG$. +$LK,"Find",A="MN:Find"$() is your best friend. There's a wrapper function called $LK,"F",A="MN:F"$() in your $FG,2$/Home/AdamWrappers.CPP.Z$FG$ file. Feel free to make wrapper functions for functions you use often and customize the args. By the way, $LK,"Find",A="MN:Find"$() or $LK,"R",A="MN:R"$() can be used to replace strings across multiple files. You can access $LK,"Find",A="MN:Find"$() using $FG,2$$FG$. -As you browse code, use the $FG,2$WordStat$FG$ window to look-up functions, etc. $FG,2$$FG$ (or whatever number) to follow a sym to it's source. You can browse deeper and deeper. You go back with $FG,2$$FG$. +As you browse code, use the $FG,2$AutoComplete$FG$ window to look-up functions, etc. $FG,2$$FG$ (or whatever number) to follow a sym to it's source. You can browse deeper and deeper. You go back with $FG,2$$FG$. Use the $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$ or $LK,"Demo Index",A="FI:::/Doc/DemoIndex.TXT"$ to find-out what exists. Press $FG,2$$FG$ for help or use the links on your menu ($FG,2$$FG$). Also, look in the $FG,2$/Demo$FG$ or $FG,2$/Apps$FG$ directories for inspiration. -$MA-X+PU,"Take Tour",LM="SpawnUser(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$ +$MA-X+PU,"Take Tour",LM="User(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$ $FG,8$ * "Windows" is a trademark of MicroSoft Corp. diff --git a/Doc/WordStat.TXT b/Doc/WordStat.TXT deleted file mode 100644 index 990bee7..0000000 --- a/Doc/WordStat.TXT +++ /dev/null @@ -1,7 +0,0 @@ -$FG,2$$WW,1$WordStat$FG$ collects statistics from all text files in subdirectories when you call $LK,"WSInit",A="MN:WSInit"$(). It counts which words follow which other words with what frequency in a big sparse matrix. - -It provides auto-complete typing and jump-to-code or jump-to-dictionary_definition functionality. - -Tip: If you use consistent var names for items of different classes, you'll usually be able to autocomplete the member vars. I always use $FG,2$lx$FG$ for $LK,"CLex",A="MN:CLex"$ ptrs; $FG,2$doc$FG$ for $LK,"CDoc",A="MN:CDoc"$ ptrs; $FG,2$doc_e$FG$ or $FG,2$doc_ce$FG$ for $LK,"CDocEntry",A="MN:CDocEntry"$ ptrs, etc. - -If you have the raw Project Gutenberg dictionary file, you can generate the TempleOS processed dictionary files with the stand-alone program $LK,"::/Adam/WordStat/WSDictGen.CPP"$. diff --git a/Kernel.BIN.C b/Kernel.BIN.C index 2f8af68..280a565 100644 Binary files a/Kernel.BIN.C and b/Kernel.BIN.C differ diff --git a/Kernel/Adam1.CPP b/Kernel/Adam1.CPP deleted file mode 100644 index f1482f7..0000000 --- a/Kernel/Adam1.CPP +++ /dev/null @@ -1,11 +0,0 @@ -//This is executed by Adam at boot. -//See $LK,"Adam1 Start-up",A="FF:::/Kernel/KEnd.CPP,Adam1:2"$ -extern I8i OptEqu(I64i num,I8i val); -OptEqu(0,0); //(0,0)=EchoOff (0,1)=EchoOn -#include "/Kernel/Adam1a.HPP" -#include "/Compiler/CmpDefs.HPP" -#include "/Kernel/Adam1b.HPP" -#include "/Kernel/Adam1c.HPP" -#include "/Compiler/Cmp.HPP" -Cd("/Adam");; -#include "Adam2" diff --git a/Kernel/BIOS32.CPP b/Kernel/BIOS32.CPP index e355598..5177864 100644 --- a/Kernel/BIOS32.CPP +++ b/Kernel/BIOS32.CPP @@ -85,9 +85,9 @@ _FAR_CALL32:: PUSH U64 FS:CTask.addr[RAX] PUSH U64 GS:CCPU.addr[RAX] MOV U64 [C32_RSP],RSP - PUSH U32 CGDT.ds //STKSEG - PUSH U32 0x9C000 //STK - PUSH U32 0 //FLAGS--interrupts off + PUSH U32 CGDT.ds //STKSEG + PUSH U32 BOOT_RAM_LIMIT //STK + PUSH U32 0 //FLAGS--interrupts off PUSH U32 CGDT.cs32 LEA RAX,[@@15] PUSH RAX @@ -132,15 +132,10 @@ C32_ADD:: DU32 0; MOV U32 [C32_ESI],ESI MOV U32 [C32_EDI],EDI - CALL INIT_EM64T -USE64 - MOV AX,CGDT.ds - MOV DS,AX - MOV ES,AX - MOV SS,AX - - MOV RSP,U64 [C32_RSP] + PUSH U32 0 //Return from next call will be 64-bit + CALL SYS_EM64T +USE64 MOV RSP,U64 [C32_RSP] POP RAX CALL SET_GS_BASE POP RAX diff --git a/Kernel/Compress.CPP b/Kernel/Compress.CPP index af1a02f..dc78e3e 100644 --- a/Kernel/Compress.CPP +++ b/Kernel/Compress.CPP @@ -1,4 +1,4 @@ -//See $LK,"::/Doc/Acknowledgements.TXT"$. +//See $LK,"::/Doc/Credits.TXT"$. //See $LK,"CArcCompress",A="MN:CArcCompress"$, $LK,"CArcEntry",A="MN:CArcEntry"$, and $LK,"CArcCtrl",A="MN:CArcCtrl"$ asm { @@ -153,12 +153,14 @@ ac_done: c->src_pos=src_ptr-c->src_buf; } -U0 ArcFinishCompression(CArcCtrl *c) +Bool ArcFinishCompression(CArcCtrl *c) {//Do closing touch on archivew ctrl struct. if (c->dst_pos+c->cur_bits_in_use<=c->dst_size) { BFieldOrU32(c->dst_buf,c->dst_pos,c->saved_basecode); c->dst_pos+=c->next_bits_in_use; - } + return TRUE; + } else + return FALSE; } U0 ArcExpandBuf(CArcCtrl *c) @@ -217,7 +219,7 @@ U0 ArcExpandBuf(CArcCtrl *c) c->dst_pos=dst_ptr-c->dst_buf; } -CArcCtrl *ArcCtrlNew(Bool expand,Bool seven_bit) +CArcCtrl *ArcCtrlNew(Bool expand,I64 compression_type=CT_8_BIT) {//MAlloc archive ctrl struct. CArcCtrl *c; c=CAlloc(sizeof(CArcCtrl)); @@ -225,7 +227,7 @@ CArcCtrl *ArcCtrlNew(Bool expand,Bool seven_bit) c->stk_base=MAlloc(ARC_MAX_ENTRY+1); c->stk_ptr=c->stk_base; } - if (seven_bit) + if (compression_type==CT_7_BIT) c->min_bits=7; else c->min_bits=8; @@ -246,27 +248,49 @@ U0 ArcCtrlDel(CArcCtrl *c) Free(c); } -CArcCompress *CompressBuf(U8 *src,I64 size,I64 flags=0,CTask *mem_task=NULL) +U8 *ExpandBuf(CArcCompress *r,CTask *mem_task=NULL) +{//See $LK,"::/Demo/Dsk/SerializeTree.CPP"$. + CArcCtrl *c; + U8 *result=MAlloc(r->expanded_size+1,mem_task); + result[r->expanded_size]=0; //terminate + switch (r->compression_type) { + case CT_NONE: + MemCpy(result,&r->body,r->expanded_size); + break; + case CT_7_BIT: + case CT_8_BIT: + c=ArcCtrlNew(TRUE,r->compression_type); + c->src_size=r->compressed_size<<3; + c->src_pos=sizeof(CArcCompress)<<3; + c->src_buf=r; + c->dst_size=r->expanded_size; + c->dst_buf=result; + c->dst_pos=0; + ArcExpandBuf(c); + ArcCtrlDel(c); + break; + default: + throw('Compress'); + } + return result; +} + +CArcCompress *CompressBuf(U8 *src,I64 size,CTask *mem_task=NULL) {//See $LK,"::/Demo/Dsk/SerializeTree.CPP"$. CArcCompress *result; - I64 size_out; - Bool seven_bit=ArcDetermineCompressionType(src,size)==CT_7_BIT; - CArcCtrl *c=ArcCtrlNew(FALSE,seven_bit); + I64 size_out,compression_type=ArcDetermineCompressionType(src,size); + CArcCtrl *c=ArcCtrlNew(FALSE,compression_type); c->src_size=size; c->src_buf=src; c->dst_size=(size+sizeof(CArcCompress))<<3; c->dst_buf=CAlloc(c->dst_size>>3); c->dst_pos=sizeof(CArcCompress)<<3; ArcCompressBuf(c); - ArcFinishCompression(c); - if (c->src_pos==c->src_size) { + if (ArcFinishCompression(c) && c->src_pos==c->src_size) { size_out=(c->dst_pos+7)>>3; result=MAlloc(size_out,mem_task); MemCpy(result,c->dst_buf,size_out); - if (seven_bit) - result->compression_type=CT_7_BIT; - else - result->compression_type=CT_8_BIT; + result->compression_type=compression_type; result->compressed_size=size_out; } else { result=MAlloc(size+sizeof(CArcCompress),mem_task); @@ -275,32 +299,7 @@ CArcCompress *CompressBuf(U8 *src,I64 size,I64 flags=0,CTask *mem_task=NULL) result->compressed_size=size+sizeof(CArcCompress); } result->expanded_size=size; - result->flags=flags; Free(c->dst_buf); ArcCtrlDel(c); return result; } - -U8 *ExpandBuf(CArcCompress *r,CTask *mem_task=NULL) -{//See $LK,"::/Demo/Dsk/SerializeTree.CPP"$. - CArcCtrl *c; - Bool seven_bit; - U8 *result=MAlloc(r->expanded_size+1,mem_task); - result[r->expanded_size]=0; //terminate - seven_bit= r->compression_type==CT_7_BIT; - if (r->compression_type==CT_NONE) - MemCpy(result,&r->body,r->expanded_size); - else { - c=ArcCtrlNew(TRUE,seven_bit); - c->src_size=r->compressed_size<<3; - c->src_pos=sizeof(CArcCompress)<<3; - c->src_buf=r; - c->dst_size=r->expanded_size; - c->dst_buf=result; - c->dst_pos=0; - ArcExpandBuf(c); - ArcCtrlDel(c); - } - return result; -} - diff --git a/Kernel/Display.CPP b/Kernel/Display.CPP index 660a54d..a9f9e86 100644 --- a/Kernel/Display.CPP +++ b/Kernel/Display.CPP @@ -47,36 +47,36 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$(). } else if (Bt(chars_bitmap_displayable,ch)) { row=text.raw_col/text.cols%text.rows; col=text.raw_col%text.cols; - if (!sys_bios_gr_mode) { //if text mode + if (!Bt(&sys_run_level,RLf_VGA)) { //if text mode if (text.raw_flags&RWF_SCROLL && text.raw_col && !row && !col) { - MemCpy(VGA_TEXT_MEM_BASE,VGA_TEXT_MEM_BASE+text.cols, + MemCpy(VGAM_TEXT,VGAM_TEXT+text.cols, text.cols*(text.rows-1)*2); - MemSet(VGA_TEXT_MEM_BASE+text.cols*(text.rows-1)*2,0,text.cols*2); + MemSet(VGAM_TEXT+text.cols*(text.rows-1)*2,0,text.cols*2); text.raw_col-=text.cols; row=text.rows-1; } - ptr=VGA_TEXT_MEM_BASE+(row*text.cols+col)*2; + ptr=VGAM_TEXT+(row*text.cols+col)*2; ptr[0]=ch; ptr[1]=BLACK<<4+WHITE; } else { - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,0x0F); //All planes -- WHITE + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,0x0F); //All planes -- WHITE if (text.raw_flags&RWF_SCROLL && text.raw_col && !row && !col) { //Scroll cached image MemCpy(text.raw_screen_image,text.raw_screen_image+GR_WIDTH*FONT_HEIGHT>>3, GR_WIDTH*(GR_HEIGHT-FONT_HEIGHT)>>3); MemSet(text.raw_screen_image+GR_WIDTH*(GR_HEIGHT-FONT_HEIGHT)>>3,0,GR_WIDTH*FONT_HEIGHT>>3); - MemCpy(VGA_GRAPHIC_MEM_BASE,text.raw_screen_image,GR_WIDTH*GR_HEIGHT>>3); + MemCpy(VGAM_GRAPHICS,text.raw_screen_image,GR_WIDTH*GR_HEIGHT>>3); text.raw_col-=text.cols; row=text.rows-1; } PUSHFD CLI ptr=ptr1=col+row*GR_WIDTH*FONT_HEIGHT>>3; - ptr+=VGA_GRAPHIC_MEM_BASE; + ptr+=VGAM_GRAPHICS; ptr1+=text.raw_screen_image; //Write to cached image as well - ptr2=&text.font[(ch&255)*FONT_HEIGHT]; + ptr2=&text.font[ch&255]; for (i=0;i>3; diff --git a/Kernel/Dsk/Dsk1a.CPP b/Kernel/Dsk/Dsk1a.CPP deleted file mode 100644 index 5ab0a6f..0000000 --- a/Kernel/Dsk/Dsk1a.CPP +++ /dev/null @@ -1,721 +0,0 @@ -Bool BlkDevLock(CBlkDev *bdev) -{//Make this task have exclusive access to BlkDev. - BlkDevChk(bdev); - while (bdev->lock_fwding) - bdev=bdev->lock_fwding; - if (!Bt(&bdev->locked_flags,BDlf_LOCKED) || bdev->owning_task!=Fs) { - while (LBts(&bdev->locked_flags,BDlf_LOCKED)) - Yield; - bdev->owning_task=Fs; - return TRUE; - } else - return FALSE; -} - -Bool PrtLock(CPrt *p) -{//Make this task have exclusive access to Prt & BlkDev. - PrtChk(p); - BlkDevLock(p->bdev); - if (!Bt(&p->locked_flags,Plf_LOCKED) || p->owning_task!=Fs) { - while (LBts(&p->locked_flags,Plf_LOCKED)) - Yield; - p->owning_task=Fs; - return TRUE; - } else - return FALSE; -} - -Bool BlkDevUnlock(CBlkDev *bdev,Bool rst=FALSE) -{//Release exclusive lock on access to BlkDev. - BlkDevChk(bdev); - while (bdev->lock_fwding) - bdev=bdev->lock_fwding; - if (Bt(&bdev->locked_flags,BDlf_LOCKED) && bdev->owning_task==Fs) { - if (rst) - bdev->flags&=~(BDF_INITIALIZED|BDF_INIT_IN_PROGRESS); - bdev->owning_task=NULL; - LBtr(&bdev->locked_flags,BDlf_LOCKED); - Yield; //Prevent deadlock - return TRUE; - } else - return FALSE; -} - -Bool PrtUnlock(CPrt *p,Bool rst=FALSE) -{//Release exclusive lock on access to Prt & BlkDev. - PrtChk(p); - if (Bt(&p->locked_flags,Plf_LOCKED) && p->owning_task==Fs) { - BlkDevUnlock(p->bdev,rst); - p->owning_task=NULL; - LBtr(&p->locked_flags,Plf_LOCKED); - Yield; //Prevent deadlock - return TRUE; - } else - return FALSE; -} - -Bool BlkDevInit(CBlkDev *bdev) -{ - CPrt *p=Drv2Prt(bdev->first_drv_let); - Bool old_preempt=Preempt(OFF),result=FALSE; - - if (!LBts(&bdev->flags,BDf_INITIALIZED)) { - bdev->flags|=BDF_INIT_IN_PROGRESS; - switch(bdev->type) { - case BDT_RAM: - if (!bdev->RAM_dsk) { - bdev->RAM_dsk=AMAlloc((bdev->max_blk+1)<max_blk=MSize(bdev->RAM_dsk)>>BLK_SIZE_BITS-1; - } - p->type=PT_REDSEA; - p->size=bdev->max_blk+1; - if (RedSeaFSDrvValidate(bdev->first_drv_let)) - RedSeaFSPrtInit(p); - else - RedSeaFSFmt(bdev->first_drv_let); - result=TRUE; - break; - case BDT_ATA: - bdev->max_reads=128; - bdev->max_writes=1; - result=ATAInit(bdev); - break; - case BDT_ATAPI: - //0xFFFF*4 is too big for my taste - bdev->max_reads=0x800*4; - //max of maybe a quarter of disk cache - if (bdev->max_reads>dsk.cache_size/BLK_SIZE/4) - bdev->max_reads=dsk.cache_size/BLK_SIZE/4 & ~3; - if (bdev->max_reads<128) - bdev->max_reads=128; - bdev->max_writes=0xFFFF*4; - if (result=ATAInit(bdev)) - p->size=bdev->max_blk+1; - break; - } - if (result && bdev->flags & BDF_READ_CACHE) - DskCacheInvalidate(p); - bdev->flags&=~BDF_INIT_IN_PROGRESS; - } else - result=TRUE; - Preempt(old_preempt); - return result; -} - -U0 BlkDevsRelease() -{//When task dies, release all owned BlkDevs. - I64 i; - CBlkDev *bdev; - for (i=0;iowning_task==Fs && bdev->bd_signature==BD_SIGNATURE_VAL) - BlkDevUnlock(bdev,TRUE); - } -} - -U0 PrtsRelease() -{//When task dies, release all owned Prts. - I64 i; - CPrt *p; - for (i=0;iowning_task==Fs && p->pt_signature==PRT_SIGNATURE_VAL) - PrtUnlock(p,TRUE); - } -} - -CPrt *PrtMakeFree(U8 drv_let) -{//Make a slot free for a new partition, like during $LK,"Mount",A="MN:Mount"$(). -//!!! drv_let is not a $LK,"remapped",A="MN:MapDrv"$ prt. - I64 i=ToUpper(drv_let)-'A'; - CPrt *result; - if (!(0<=idrv_let='A'+i; - return result; -} - -CPrt *PrtNextFree(U8 first_drv_let='C') -{//Locate free slot for new partition, like during $LK,"Mount",A="MN:Mount"$(). -//!!! first_drv_let is not a $LK,"remapped",A="MN:MapDrv"$ prt. - I64 i=ToUpper(first_drv_let)-'A'; - if (!(0<=ibd_signature!=BD_SIGNATURE_VAL) { - MemSet(result,0,sizeof(CBlkDev)); - result->first_drv_let=first_drv_let; - result->type=type; - if (type==BDT_ATAPI) - result->flags=BDF_REMOVABLE; - else - result->flags=0; - if (type!=BDT_RAM) - result->flags|=BDF_READ_CACHE; - - if (type==BDT_ATAPI) { - result->blk_size=CD_BLK_SIZE; - result->flags|=BDF_READ_ONLY; - } else - result->blk_size=BLK_SIZE; - - result->max_blk=0xEFFFFFFF; - return result; - } - } while (++icur_map_blk); - Free(p->buffered_map_dirty_bits); - p->num_buffered_map_blks=num_blks; - p->cur_map_blk=AMAlloc(num_blks<buffered_map_dirty_bits=ACAlloc((num_blks+7)>>3); - p->cur_map_blk_num=0; - RBlks(p,p->cur_map_blk,p->map1,p->num_buffered_map_blks); -} - -U0 CleanMAPBuf(CPrt *p,I64 MAP_select=-1) -{ - I64 i; - if ((MAP_select==-1 || !MAP_select) && p->map1!=p->map2) - for (i=0;inum_buffered_map_blks;i++) - if (Bt(p->buffered_map_dirty_bits,i)) - WBlks(p,p->cur_map_blk(I64)+i<map1+i+p->cur_map_blk_num,1); - if (MAP_select==-1 || MAP_select==1 || p->map1==p->map2) - for (i=0;inum_buffered_map_blks;i++) - if (LBtr(p->buffered_map_dirty_bits,i)) - WBlks(p,p->cur_map_blk(I64)+i<map2+i+p->cur_map_blk_num,1); -} - -U0 SetFSBuf(CPrt *p,I64 c,I64 map_select=-1) -{ - I64 MAP_blk_num; - if (c==INVALID_CLUSTER) - throw('Prt'); - if (p->type==PT_FAT32) - MAP_blk_num=c>>(BLK_SIZE_BITS-2); - else - MAP_blk_num=c>>(BLK_SIZE_BITS+3); - if (MAP_blk_num!=p->cur_map_blk_num) { - CleanMAPBuf(p,map_select); - p->cur_map_blk_num=MAP_blk_num; - if (map_select==-1 || !map_select) - RBlks(p,p->cur_map_blk,p->map1+p->cur_map_blk_num,1); - else - RBlks(p,p->cur_map_blk,p->map2+p->cur_map_blk_num,1); - } -} - -#define ZERO_BUF_SIZE 2048 -U0 WZeroBlks(CPrt *p,I64 blk,I64 cnt) -{//Fill blk cnt with zeros in Prt. - I64 n; - U8 *z=CAlloc(ZERO_BUF_SIZE<ZERO_BUF_SIZE && p->bdev->type!=BDT_RAM) { - progress1=0; progress1_max=cnt; - StrCpy(progress1_desc,"Zeroing"); - show_progress=TRUE; - } else - show_progress=FALSE; - while (cnt>0) { - n=cnt; - if (n>ZERO_BUF_SIZE) - n=ZERO_BUF_SIZE; - WBlks(p,z,blk,n); - blk+=n; - cnt-=n; - if (show_progress) - progress1+=n; - Yield; //Prevent locking - } - Free(z); - if (show_progress) { - *progress1_desc=0; - progress1=progress1_max=0; - } -} - -Bool SetDrvType(U8 drv_let,I64 type=PT_REDSEA) -{//Very dangerous - I64 i,j,ext_base,prt_num,offset,cur_type; - CMasterBoot mbr; - CBlkDev *bdev=Drv2BlkDev(drv_let); - prt_num=bdev->first_drv_let-'A'; - switch (bdev->type) { - case BDT_ATA: - offset=0; - ext_base=INVALID_CLUSTER; - while (TRUE) { - ATAReadBlks(bdev,&mbr,offset,1); - j=-1; - for (i=0;i<4;i++) { - cur_type=mbr.p[i].type; - if (cur_type) { - if (cur_type==5 || cur_type==15) - j=i; - else { - if (prt_num+'A'==ToUpper(drv_let)) { - switch (type) { - case PT_REDSEA: - mbr.p[i].type=MBR_PT_REDSEA; - break; - case PT_FAT32: - mbr.p[i].type=MBR_PT_FAT32a; - break; - default: - Dbg; - } - mbr.p[i].active=0x80; - ATAWriteBlks(bdev,&mbr,offset,1); - return TRUE; - } - prt_num++; - } - } - } - if (j<0) - break; - if (!mbr.p[j].offset) - break; - if (ext_base==INVALID_CLUSTER) { - offset=mbr.p[j].offset; - ext_base=offset; - } else - offset=mbr.p[j].offset+ext_base; - } - break; - } -} - -Bool RBlks(CPrt *p,U8 *buf, I64 blk, I64 cnt) -{//Read blk cnt from Prt to buf. - Bool result=TRUE,unlock; - CBlkDev *bdev=p->bdev; - if (cnt<=0) return TRUE; - PrtChk(p); - try { - unlock=PrtLock(p); - BlkDevInit(bdev); - if (p->offset && blkoffset || blk+cnt>p->offset+p->size) - throw('Prt'); - - if (bdev->flags & BDF_READ_CACHE) - RCache(p,&buf,&blk,&cnt); - if (cnt>0) { - switch (bdev->type) { - case BDT_RAM: - MemCpy(buf,bdev->RAM_dsk+blk<last_time=tS; - if (bdev->flags & BDF_READ_CACHE) - DskCacheAdd(p,buf,blk,cnt); - } - if (unlock) - PrtUnlock(p); - } catch - if (unlock) - PrtUnlock(p); - return result; -} - -Bool WBlks(CPrt *p,U8 *buf, I64 blk, I64 cnt) -{//Write blk cnt from buf to Prt. - Bool result=TRUE,unlock; - CBlkDev *bdev=p->bdev; - if (cnt<=0) return TRUE; - PrtChk(p); - try { - unlock=PrtLock(p); - BlkDevInit(bdev); - if (bdev->flags&BDF_READ_ONLY && - !(bdev->flags & BDF_READ_ONLY_OVERRIDE)) - throw('BlkDev'); - if (p->offset && blkoffset || blk+cnt>p->offset+p->size) - throw('Prt'); - if (cnt>0) { - switch (bdev->type) { - case BDT_RAM: - MemCpy(bdev->RAM_dsk+blk<last_time=tS; - if (bdev->flags & BDF_READ_CACHE) - DskCacheAdd(p,buf,blk,cnt); - } - if (unlock) - PrtUnlock(p); - } catch - if (unlock) - PrtUnlock(p); - return result; -} - -U0 DskCacheInvalidate(CPrt *p) -{//Needed for removable media. Called by $LK,"ChgDsk",A="MN:ChgDsk"$(). - Bool unlock; - CBlkDev *bdev=p->bdev; - PrtChk(p); - try { - unlock=PrtLock(p); - BlkDevInit(bdev); - if (bdev->flags & BDF_READ_CACHE) - DskCacheInvalidate2(p); - if (p->type==PT_ISO9660) { - if (!(bdev->flags & BDF_READ_ONLY_OVERRIDE)) - ISOPrtInit(p,(32767/bdev->blk_size+1)* - bdev->blk_size>>BLK_SIZE_BITS); - } - if (unlock) - PrtUnlock(p); - } catch - if (unlock) - PrtUnlock(p); -} - -U0 ChgDsk(U8 drv_let=0) -{//Change disk. (Needed for removable media.) - CPrt *p=Drv2Prt(drv_let); - CBlkDev *bdev=p->bdev; - Bool old_preempt=Preempt(OFF); - if (!(bdev->flags&BDF_INITIALIZED)) - BlkDevInit(bdev); - else if (bdev->flags&BDF_REMOVABLE) - DskCacheInvalidate(p); - Drv(drv_let); - RedSeaFSFreeFreeLst(p); - Preempt(old_preempt); -} - -U8 *DrvSerialNum(U8 drv_let=0) -{//20 bytes max. - CBlkDev *bdev=Drv2BlkDev(drv_let); - U16 *st,*result=NULL; - I64 i; - if (bdev->dev_id_record) { - st=CAlloc(20+1); - for (i=0;i<10;i++) - st[i]=EndianU16(bdev->dev_id_record[10+i]); - result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING); - Free(st); - } - return result; -} - -U8 *DrvModelNum(U8 drv_let=0) -{//40 bytes max. - CBlkDev *bdev=Drv2BlkDev(drv_let); - U16 *st,*result=NULL; - I64 i; - if (bdev->dev_id_record) { - st=CAlloc(40+1); - for (i=0;i<20;i++) - st[i]=EndianU16(bdev->dev_id_record[27+i]); - result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING); - Free(st); - } - return result; -} - -U0 PrtRep() -{//Partition report. - CPrt *p; - CBlkDev *bdev; - I64 i,drv_let; - U8 *st; - "\nDefined Partitions:\n\n"; - for (i=0,p=dsk.prts;ipt_signature==PRT_SIGNATURE_VAL) { - bdev=p->bdev; - drv_let=Prt2Drv(p); - if (Bt(&p->type,PTf_DISABLE)) - "$$RED$$X"; - else if (drv_let==*sys_acct) - "$$GREEN$$:"; - else - '' CH_SPACE; - "$$PURPLE$$%C %-8Z %-9Z %04X %04X %02X$$FG$$\n", - drv_let,p->type.u16[0],"ST_PRT_TYPES", - bdev->type,"ST_BLKDEV_TYPES",bdev->base0,bdev->base1,bdev->unit; - if (st=DrvModelNum(drv_let)) { - " $$CYAN$$Model# :%s$$FG$$\n",st; - Free(st); - } - if (st=DrvSerialNum(drv_let)) { - " $$CYAN$$Serial#:%s$$FG$$\n",st; - Free(st); - } - " %016X-%016X\n", - p->offset,p->offset+p->size-1; - p->offset,p->offset+p->size-1; - } - } -} - -I64 ClusterNumNext(CPrt *p,I64 c,I64 cnt=1) -{//Return next cnt'th cluster in chain. - Bool unlock; - PrtChk(p); - if (cnt<=0) return c; - try { - unlock=PrtLock(p); - switch (p->type) { - case PT_ISO9660: - case PT_REDSEA: - c+=cnt; - break; - case PT_FAT32: - while (cnt-->0 && 0cur_map_blk[c & (BLK_SIZE/4-1)]; - } - if (!(0data+c*p->spc; -} - -I64 RClustersBlks(CPrt *p,U8 *buf,I64 c,I64 blks) -{//Accepts blk count, so padding on last cluster is not read. - I64 i; - Bool unlock; - PrtChk(p); - if (blks<=0) return c; - try { - unlock=PrtLock(p); - switch (p->type) { - case PT_ISO9660: - case PT_REDSEA: - RBlks(p,buf,p->data+c*p->spc,blks); - c+=(blks+p->spc-1)/p->spc; - break; - case PT_FAT32: - while (blks && 0p->spc) - i=p->spc; - RBlks(p,buf,p->data+c*p->spc,i); - buf+=i<spc); -} - -Bool CFileNameTo(U8 *dst,U8 *src) -{ - MemSet(dst,0,CDIR_FILENAME_LEN); - if (!FileNameChk(src)) - return FALSE; - StrCpy(dst,src); - return TRUE; -} - -I64 Name2DirCluster(CPrt *p,U8 *dirname) -{ - Bool cont=TRUE,unlock; - I64 cur_dir_cluster; - CDirEntry de; - U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); - PrtChk(p); - try { - unlock=PrtLock(p); - cur_dir_cluster=p->root_cluster; - while (*buf && cont) { - StrFirstRem(buf,"/",buf2); - if (*buf2) { - switch (p->type) { - case PT_REDSEA: - cont=RedSeaFSFileFind(p,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - case PT_FAT32: - cont=FAT32FileFind(p,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - case PT_ISO9660: - cont=ISO1FileFind(p,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - default: - Dbg; - } - cur_dir_cluster=de.cluster; - } - } - if (!cont) { - "%s ",dirname; - PrintErr("File not found.\n"); - cur_dir_cluster=0; - } - if (unlock) - PrtUnlock(p); - } catch - if (unlock) - PrtUnlock(p); - Free(buf); - Free(buf2); - return cur_dir_cluster; -} - -I64 Name2ParentDirCluster(CPrt *p,U8 *dirname) -{ - Bool cont=TRUE,unlock; - I64 cur_dir_cluster,cur_dir_cluster2; - CDirEntry de; - U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); - PrtChk(p); - try { - unlock=PrtLock(p); - cur_dir_cluster=cur_dir_cluster2=p->root_cluster; - while (*buf && cont) { - cur_dir_cluster2=cur_dir_cluster; - StrFirstRem(buf,"/",buf2); - if (*buf2) { - switch (p->type) { - case PT_REDSEA: - cont=RedSeaFSFileFind(p,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - case PT_FAT32: - cont=FAT32FileFind(p,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - case PT_ISO9660: - cont=ISO1FileFind(p,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - default: - Dbg; - } - cur_dir_cluster=de.cluster; - } - } - if (!cont) { - "%s ",dirname; - PrintErr("File not found.\n"); - cur_dir_cluster2=0; - } - if (unlock) - PrtUnlock(p); - } catch - if (unlock) - PrtUnlock(p); - Free(buf); - Free(buf2); - return cur_dir_cluster2; -} - -I64 WClustersBlks(CPrt *p,U8 *buf,I64 c,I64 blks) -{//Accepts blk count, so padding on last cluster is not written. - I64 i; - Bool unlock; - PrtChk(p); - if (blks<=0) return c; - try { - unlock=PrtLock(p); - switch (p->type) { - case PT_REDSEA: - WBlks(p,buf,p->data+c*p->spc,blks); - c=0; - break; - case PT_FAT32: - while (blks) { - if (!(0p->spc) - i=p->spc; - WBlks(p,buf,p->data+c*p->spc,i); - buf+=i<spc); -} - -I64 ClustersAlloc(CPrt *p,I64 c=0,I64 cnt=1,Bool contiguous=FALSE) -{//Alloc cluster cnt into chain. -//c=0 means first cluster in chain - PrtChk(p); - if (cnt<=0) return c; - switch (p->type) { - case PT_REDSEA: - return RedSeaFSAllocClusters(p,cnt); - case PT_FAT32: - if (contiguous) { - if (c) throw('File'); - return FAT32AllocContiguousClusters(p,cnt); - } else - return FAT32AllocClusters(p,c,cnt); - default: - Dbg; - } -} diff --git a/Kernel/Dsk/DskA.CPP b/Kernel/Dsk/DskA.CPP new file mode 100644 index 0000000..6dce1e7 --- /dev/null +++ b/Kernel/Dsk/DskA.CPP @@ -0,0 +1,731 @@ +Bool BlkDevLock(CBlkDev *bd) +{//Make this task have exclusive access to BlkDev. + BlkDevChk(bd); + while (bd->lock_fwding) + bd=bd->lock_fwding; //If two blkdevs on same controller, use just one lock + if (!Bt(&bd->locked_flags,BDlf_LOCKED) || bd->owning_task!=Fs) { + while (LBts(&bd->locked_flags,BDlf_LOCKED)) + Yield; + bd->owning_task=Fs; + return TRUE; + } else + return FALSE; +} + +Bool DrvLock(CDrv *dv) +{//Make this task have exclusive access to drv & BlkDev. + DrvChk(dv); + BlkDevLock(dv->bd); + if (!Bt(&dv->locked_flags,DVlf_LOCKED) || dv->owning_task!=Fs) { + while (LBts(&dv->locked_flags,DVlf_LOCKED)) + Yield; + dv->owning_task=Fs; + return TRUE; + } else + return FALSE; +} + +Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE) +{//Release exclusive lock on access to BlkDev. + BlkDevChk(bd); + while (bd->lock_fwding) + bd=bd->lock_fwding; //If two blkdevs on same controller, use just one lock + if (Bt(&bd->locked_flags,BDlf_LOCKED) && bd->owning_task==Fs) { + if (rst) + bd->flags&=~(BDF_INITIALIZED|BDF_INIT_IN_PROGRESS); + bd->owning_task=NULL; + LBtr(&bd->locked_flags,BDlf_LOCKED); + Yield; //Prevent deadlock + return TRUE; + } else + return FALSE; +} + +Bool DrvUnlock(CDrv *dv,Bool rst=FALSE) +{//Release exclusive lock on access to drv & BlkDev. + DrvChk(dv); + if (Bt(&dv->locked_flags,DVlf_LOCKED) && dv->owning_task==Fs) { + BlkDevUnlock(dv->bd,rst); + dv->owning_task=NULL; + LBtr(&dv->locked_flags,DVlf_LOCKED); + Yield; //Prevent deadlock + return TRUE; + } else + return FALSE; +} + +Bool BlkDevInit(CBlkDev *bd) +{ + CDrv *dv=Let2Drv(bd->first_drv_let); + Bool old_preempt=Preempt(OFF),result=FALSE; + + if (!LBts(&bd->flags,BDf_INITIALIZED)) { + bd->flags|=BDF_INIT_IN_PROGRESS; + switch(bd->type) { + case BDT_RAM: + if (!bd->RAM_dsk) { + bd->RAM_dsk=AMAlloc((bd->max_blk+1)<max_blk=MSize(bd->RAM_dsk)>>BLK_SIZE_BITS-1; + } + dv->type=DVT_REDSEA; + dv->size=bd->max_blk+1; + if (RedSeaDrvValidate(bd->first_drv_let)) + RedSeaDrvInit(dv); + else + RedSeaFmt(bd->first_drv_let); + result=TRUE; + break; + case BDT_ATA: + bd->max_reads=128; + bd->max_writes=1; + result=ATAInit(bd); + break; + case BDT_ATAPI: + //0xFFFF*4 is too big for my taste + bd->max_reads=0x800*4; + //max of maybe a quarter of disk cache + if (bd->max_reads>dsk.cache_size/BLK_SIZE/4) + bd->max_reads=dsk.cache_size/BLK_SIZE/4 & ~3; + if (bd->max_reads<128) + bd->max_reads=128; + bd->max_writes=0xFFFF*4; + if (result=ATAInit(bd)) + dv->size=bd->max_blk+1; + break; + } + if (result && bd->flags & BDF_READ_CACHE) + DskCacheInvalidate(dv); + bd->flags&=~BDF_INIT_IN_PROGRESS; + } else + result=TRUE; + Preempt(old_preempt); + return result; +} + +U0 BlkDevsRelease() +{//When task dies, release all owned BlkDevs. + I64 i; + CBlkDev *bd; + for (i=0;iowning_task==Fs && bd->bd_signature==BD_SIGNATURE_VAL) + BlkDevUnlock(bd,TRUE); + } +} + +U0 DrvsRelease() +{//When task dies, release all owned drvs. + I64 i; + CDrv *dv; + for (i=0;iowning_task==Fs && dv->dv_signature==DRV_SIGNATURE_VAL) + DrvUnlock(dv,TRUE); + } +} + +CDrv *DrvMakeFree(U8 drv_let) +{//Make a slot free for a new drv, like during $LK,"Mount",A="MN:Mount"$(). +//!!! drv_let is not a $LK,"remapped",A="MN:MapDrv"$ drv. + I64 i=ToUpper(drv_let)-'A'; + CDrv *result; + if (!(0<=idrv_let='A'+i; + return result; +} + +CDrv *DrvNextFree(U8 first_drv_let='C') +{//Locate free slot for new drv, like during $LK,"Mount",A="MN:Mount"$(). +//!!! first_drv_let is not a $LK,"remapped",A="MN:MapDrv"$ drv. + I64 i=ToUpper(first_drv_let)-'A'; + if (!(0<=ibd_signature!=BD_SIGNATURE_VAL) { + MemSet(result,0,sizeof(CBlkDev)); + result->first_drv_let=first_drv_let; + result->type=type; + if (type==BDT_ATAPI) + result->flags=BDF_REMOVABLE; + else + result->flags=0; + if (type!=BDT_RAM) + result->flags|=BDF_READ_CACHE; + + if (type==BDT_ATAPI) { + result->blk_size=CD_BLK_SIZE; + result->flags|=BDF_READ_ONLY; + } else + result->blk_size=BLK_SIZE; + + result->max_blk=0xEFFFFFFF; + return result; + } + } while (++icur_map_blk); + dv->cur_map_blk=AMAlloc(BLK_SIZE); + dv->cur_map_blk_num=0; + dv->map_blk_dirty=0; + RBlks(dv,dv->cur_map_blk,dv->map1,1); +} + +U0 DrvMapBlkClean(CDrv *dv,I64 map_select=3) +{ + if (dv->type==DVT_FAT32 || dv->type==DVT_REDSEA) { + if ((map_select==3 || !map_select) && dv->map1!=dv->map2 && + Bt(&dv->map_blk_dirty,0)) + WBlks(dv,dv->cur_map_blk(I64),dv->map1+dv->cur_map_blk_num,1); + if (map_select==3 || map_select==1 || dv->map1==dv->map2 && + LBtr(&dv->map_blk_dirty,0)) + WBlks(dv,dv->cur_map_blk(I64),dv->map2+dv->cur_map_blk_num,1); + } +} + +U0 DrvMapBlkSet(CDrv *dv,I64 c,I64 map_select=3) +{ + I64 map_blk_num; + if (c==INVALID_CLUSTER) + throw('Drv'); + switch (dv->type) { + case DVT_FAT32: + map_blk_num=c>>(BLK_SIZE_BITS-2); + break; + case DVT_REDSEA: + map_blk_num=(c-dv->data_area)>>(BLK_SIZE_BITS+3); + break; + default: + throw('Drv'); + } + if (map_blk_num!=dv->cur_map_blk_num) { + DrvMapBlkClean(dv,map_select); + dv->cur_map_blk_num=map_blk_num; + if (map_select==3 || !map_select) + RBlks(dv,dv->cur_map_blk,dv->map1+dv->cur_map_blk_num,1); + else + RBlks(dv,dv->cur_map_blk,dv->map2+dv->cur_map_blk_num,1); + } +} + +#define ZERO_BUF_SIZE 2048 +U0 WZeroBlks(CDrv *dv,I64 blk,I64 cnt) +{//Fill blk cnt with zeros in Drv. + I64 n; + U8 *z=CAlloc(ZERO_BUF_SIZE<ZERO_BUF_SIZE && dv->bd->type!=BDT_RAM) { + progress1=0; progress1_max=cnt; + StrCpy(progress1_desc,"Zeroing"); + show_progress=TRUE; + } else + show_progress=FALSE; + while (cnt>0) { + n=cnt; + if (n>ZERO_BUF_SIZE) + n=ZERO_BUF_SIZE; + WBlks(dv,z,blk,n); + blk+=n; + cnt-=n; + if (show_progress) + progress1+=n; + Yield; //Prevent locking + } + Free(z); + if (show_progress) { + *progress1_desc=0; + progress1=progress1_max=0; + } +} + +Bool DrvTypeSet(U8 drv_let,I64 type=DVT_REDSEA) +{//Very dangerous + I64 i,j,ext_base,drv_num,offset,cur_type; + CMasterBoot mbr; + CBlkDev *bd=Let2BlkDev(drv_let); + drv_num=bd->first_drv_let-'A'; + switch (bd->type) { + case BDT_ATA: + offset=0; + ext_base=INVALID_CLUSTER; + while (TRUE) { + ATAReadBlks(bd,&mbr,offset,1); + j=-1; + for (i=0;i<4;i++) { + cur_type=mbr.p[i].type; + if (cur_type) { + if (cur_type==5 || cur_type==15) + j=i; + else { + if (drv_num+'A'==ToUpper(drv_let)) { + switch (type) { + case DVT_REDSEA: + mbr.p[i].type=MBR_PT_REDSEA; + break; + case DVT_FAT32: + mbr.p[i].type=MBR_PT_FAT32a; + break; + default: + throw('Drv'); + } + mbr.p[i].active=0x80; + ATAWriteBlks(bd,&mbr,offset,1); + return TRUE; + } + drv_num++; + } + } + } + if (j<0) + break; + if (!mbr.p[j].offset) + break; + if (ext_base==INVALID_CLUSTER) { + offset=mbr.p[j].offset; + ext_base=offset; + } else + offset=mbr.p[j].offset+ext_base; + } + break; + } +} + +Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt) +{//Read blk cnt from Drv to buf. + Bool result=TRUE,unlock; + CBlkDev *bd=dv->bd; + if (cnt<=0) return TRUE; + DrvChk(dv); + try { + unlock=DrvLock(dv); + BlkDevInit(bd); + if (dv->base_offset && blkbase_offset || blk+cnt>dv->base_offset+dv->size) + throw('Drv'); + + if (bd->flags & BDF_READ_CACHE) + RCache(dv,&buf,&blk,&cnt); + if (cnt>0) { + switch (bd->type) { + case BDT_RAM: + MemCpy(buf,bd->RAM_dsk+blk<last_time=tS; + if (bd->flags & BDF_READ_CACHE) + DskCacheAdd(dv,buf,blk,cnt); + } + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); + return result; +} + +Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt) +{//Write blk cnt from buf to Drv. + Bool result=TRUE,unlock; + CBlkDev *bd=dv->bd; + if (cnt<=0) return TRUE; + DrvChk(dv); + try { + unlock=DrvLock(dv); + BlkDevInit(bd); + if (bd->flags&BDF_READ_ONLY && !(bd->flags & BDF_READ_ONLY_OVERRIDE)) + throw('BlkDev'); + if (dv->base_offset && blkbase_offset || blk+cnt>dv->base_offset+dv->size) + throw('Drv'); + if (cnt>0) { + switch (bd->type) { + case BDT_RAM: + MemCpy(bd->RAM_dsk+blk<last_time=tS; + if (bd->flags & BDF_READ_CACHE) + DskCacheAdd(dv,buf,blk,cnt); + } + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); + return result; +} + +U0 DskCacheInvalidate(CDrv *dv) +{//Needed for removable media. Called by $LK,"ChgDsk",A="MN:ChgDsk"$(). + Bool unlock; + CBlkDev *bd=dv->bd; + DrvChk(dv); + try { + unlock=DrvLock(dv); + BlkDevInit(bd); + if (bd->flags & BDF_READ_CACHE) + DskCacheInvalidate2(dv); + if (dv->type==DVT_ISO9660 && !(bd->flags & BDF_READ_ONLY_OVERRIDE)) + ISODrvInit(dv,(32767/bd->blk_size+1)*bd->blk_size>>BLK_SIZE_BITS); + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); +} + +U0 ChgDsk(U8 drv_let=0) +{//Change disk. (Needed for removable media.) + CDrv *dv=Let2Drv(drv_let); + CBlkDev *bd=dv->bd; + Bool old_preempt=Preempt(OFF); + if (!(bd->flags&BDF_INITIALIZED)) + BlkDevInit(bd); + else if (bd->flags&BDF_REMOVABLE) + DskCacheInvalidate(dv); + Drv(drv_let); + RedSeaFreeFreeLst(dv); + Preempt(old_preempt); +} + +U8 *DrvSerialNum(U8 drv_let=0) +{//20 bytes max. + CBlkDev *bd=Let2BlkDev(drv_let); + U16 *st,*result=NULL; + I64 i; + if (bd->dev_id_record) { + st=CAlloc(20+1); + for (i=0;i<10;i++) + st[i]=EndianU16(bd->dev_id_record[10+i]); + result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING); + Free(st); + } + return result; +} + +U8 *DrvModelNum(U8 drv_let=0) +{//40 bytes max. + CBlkDev *bd=Let2BlkDev(drv_let); + U16 *st,*result=NULL; + I64 i; + if (bd->dev_id_record) { + st=CAlloc(40+1); + for (i=0;i<20;i++) + st[i]=EndianU16(bd->dev_id_record[27+i]); + result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING); + Free(st); + } + return result; +} + +U0 DrvRep() +{//Drive report. + CDrv *dv; + CBlkDev *bd; + I64 i,drv_let; + U8 *st; + "\nDefined Drives:\n\n"; + for (i=0,dv=dsk.drvs;idv_signature==DRV_SIGNATURE_VAL) { + bd=dv->bd; + drv_let=Drv2Let(dv); + if (Bt(&dv->type,DVTf_DISABLE)) + "$$RED$$X"; + else if (drv_let==dsk.boot_drv_let) + "$$GREEN$$:"; + else + '' CH_SPACE; + "$$PURPLE$$%C %-8Z %-9Z %04X %04X %02X$$FG$$\n", + drv_let,dv->type.u16[0],"ST_DRV_TYPES", + bd->type,"ST_BLKDEV_TYPES",bd->base0,bd->base1,bd->unit; + if (st=DrvModelNum(drv_let)) { + " $$CYAN$$Model# :%s$$FG$$\n",st; + Free(st); + } + if (st=DrvSerialNum(drv_let)) { + " $$CYAN$$Serial#:%s$$FG$$\n",st; + Free(st); + } + " %016X-%016X\n", + dv->base_offset,dv->base_offset+dv->size-1; + dv->base_offset,dv->base_offset+dv->size-1; + } + } +} + +I64 ClusterNumNext(CDrv *dv,I64 c,I64 cnt=1) +{//Return next cnt'th cluster in chain. + Bool unlock; + DrvChk(dv); + if (cnt<=0) return c; + try { + unlock=DrvLock(dv); + switch (dv->type) { + case DVT_ISO9660: + case DVT_REDSEA: + c+=cnt; + break; + case DVT_FAT32: + while (cnt-->0 && 0cur_map_blk[c & (BLK_SIZE/4-1)]; + } + if (!(0type) { + case DVT_REDSEA: + return c; + case DVT_ISO9660: + case DVT_FAT32: + return dv->data_area+c*dv->spc; + default: + throw('Drv'); + } +} + +I64 RClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks) +{//Accepts blk count, so padding on last cluster is not read. + I64 i; + Bool unlock; + DrvChk(dv); + if (blks<=0) return c; + try { + unlock=DrvLock(dv); + switch (dv->type) { + case DVT_ISO9660: + RBlks(dv,buf,dv->data_area+c*dv->spc,blks); + c+=(blks+dv->spc-1)/dv->spc; + break; + case DVT_REDSEA: + RBlks(dv,buf,c,blks); + c+=blks; + break; + case DVT_FAT32: + while (blks && 0dv->spc) + i=dv->spc; + RBlks(dv,buf,dv->data_area+c*dv->spc,i); + buf+=i<spc); +} + +Bool CFileNameTo(U8 *dst,U8 *src) +{ + MemSet(dst,0,CDIR_FILENAME_LEN); + if (!FileNameChk(src)) + return FALSE; + StrCpy(dst,src); + return TRUE; +} + +I64 Name2DirCluster(CDrv *dv,U8 *dirname) +{ + Bool cont=TRUE,unlock; + I64 cur_dir_cluster; + CDirEntry de; + U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); + DrvChk(dv); + try { + unlock=DrvLock(dv); + cur_dir_cluster=dv->root_cluster; + while (*buf && cont) { + StrFirstRem(buf,"/",buf2); + if (*buf2) { + switch (dv->type) { + case DVT_REDSEA: + cont=RedSeaFileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + case DVT_FAT32: + cont=FAT32FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + case DVT_ISO9660: + cont=ISO1FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + default: + throw('Drv'); + } + cur_dir_cluster=de.cluster; + } + } + if (!cont) { + "%s ",dirname; + PrintErr("File not found.\n"); + cur_dir_cluster=0; + } + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); + Free(buf); + Free(buf2); + return cur_dir_cluster; +} + +I64 Name2ParentDirCluster(CDrv *dv,U8 *dirname) +{ + Bool cont=TRUE,unlock; + I64 cur_dir_cluster,cur_dir_cluster2; + CDirEntry de; + U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); + DrvChk(dv); + try { + unlock=DrvLock(dv); + cur_dir_cluster=cur_dir_cluster2=dv->root_cluster; + while (*buf && cont) { + cur_dir_cluster2=cur_dir_cluster; + StrFirstRem(buf,"/",buf2); + if (*buf2) { + switch (dv->type) { + case DVT_REDSEA: + cont=RedSeaFileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + case DVT_FAT32: + cont=FAT32FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + case DVT_ISO9660: + cont=ISO1FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + default: + throw('Drv'); + } + cur_dir_cluster=de.cluster; + } + } + if (!cont) { + "%s ",dirname; + PrintErr("File not found.\n"); + cur_dir_cluster2=0; + } + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); + Free(buf); + Free(buf2); + return cur_dir_cluster2; +} + +I64 WClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks) +{//Accepts blk count, so padding on last cluster is not written. + I64 i; + Bool unlock; + DrvChk(dv); + if (blks<=0) return c; + try { + unlock=DrvLock(dv); + switch (dv->type) { + case DVT_REDSEA: + WBlks(dv,buf,c,blks); + c=0; + break; + case DVT_FAT32: + while (blks) { + if (!(0dv->spc) + i=dv->spc; + WBlks(dv,buf,dv->data_area+c*dv->spc,i); + buf+=i<spc); +} + +I64 ClustersAlloc(CDrv *dv,I64 c=0,I64 cnt=1,Bool contiguous=FALSE) +{//Alloc cluster cnt into chain. +//c=0 means first cluster in chain + DrvChk(dv); + if (cnt<=0) return c; + switch (dv->type) { + case DVT_REDSEA: + return RedSeaAllocClusters(dv,cnt); + case DVT_FAT32: + if (contiguous) { + if (c) throw('File'); + return FAT32AllocContiguousClusters(dv,cnt); + } else + return FAT32AllocClusters(dv,c,cnt); + default: + throw('Drv'); + } +} diff --git a/Kernel/Dsk/DskATA.CPP b/Kernel/Dsk/DskATA.CPP index 7616408..e86a2ca 100644 --- a/Kernel/Dsk/DskATA.CPP +++ b/Kernel/Dsk/DskATA.CPP @@ -1,81 +1,81 @@ -U0 ATABlkSelect(CBlkDev *bdev,I64 blk,I64 cnt) +U0 ATABlkSelect(CBlkDev *bd,I64 blk,I64 cnt) { - if (bdev->type!=BDT_ATAPI && bdev->base1) - OutU8(bdev->base1+ATAR1_CTRL,0x8); - if (bdev->flags & BDF_EXT_SIZE) { - OutU8(bdev->base0+ATAR0_NSECT,cnt.u8[1]); - OutU8(bdev->base0+ATAR0_SECT,blk.u8[3]); - OutU8(bdev->base0+ATAR0_LCYL,blk.u8[4]); - OutU8(bdev->base0+ATAR0_HCYL,blk.u8[5]); - OutU8(bdev->base0+ATAR0_NSECT,cnt); - OutU8(bdev->base0+ATAR0_SECT,blk); - OutU8(bdev->base0+ATAR0_LCYL,blk.u8[1]); - OutU8(bdev->base0+ATAR0_HCYL,blk.u8[2]); - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); - } else { - OutU8(bdev->base0+ATAR0_NSECT,cnt); - OutU8(bdev->base0+ATAR0_SECT,blk); - OutU8(bdev->base0+ATAR0_LCYL,blk.u8[1]); - OutU8(bdev->base0+ATAR0_HCYL,blk.u8[2]); - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4|blk.u8[3]); + if (bd->type!=BDT_ATAPI && bd->base1) + OutU8(bd->base1+ATAR1_CTRL,0x8); + if (bd->flags & BDF_EXT_SIZE) { //48 Bit LBA? + OutU8(bd->base0+ATAR0_NSECT,cnt.u8[1]); + OutU8(bd->base0+ATAR0_SECT,blk.u8[3]); + OutU8(bd->base0+ATAR0_LCYL,blk.u8[4]); + OutU8(bd->base0+ATAR0_HCYL,blk.u8[5]); + OutU8(bd->base0+ATAR0_NSECT,cnt); + OutU8(bd->base0+ATAR0_SECT,blk); + OutU8(bd->base0+ATAR0_LCYL,blk.u8[1]); + OutU8(bd->base0+ATAR0_HCYL,blk.u8[2]); + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); + } else { //28 Bit LBA + OutU8(bd->base0+ATAR0_NSECT,cnt); + OutU8(bd->base0+ATAR0_SECT,blk); + OutU8(bd->base0+ATAR0_LCYL,blk.u8[1]); + OutU8(bd->base0+ATAR0_HCYL,blk.u8[2]); + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4|blk.u8[3]); } } -Bool ATAWaitNotBUSY(CBlkDev *bdev,F64 timeout) +Bool ATAWaitNotBUSY(CBlkDev *bd,F64 timeout) { I64 i; do { for (i=0;i<3;i++) - if (!(InU8(bdev->base0+ATAR0_STAT)&ATAS_BSY)) + if (!(InU8(bd->base0+ATAR0_STAT)&ATAS_BSY)) return TRUE; Yield; } while (!(0base0+ATAR0_STAT)&ATAS_DRQ) + if (InU8(bd->base0+ATAR0_STAT)&ATAS_DRQ) return TRUE; Yield; } while (!(0flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_FEAT,0); - OutU8(bdev->base0+ATAR0_CMD,ATA_NOP); - return ATAWaitNotBUSY(bdev,timeout); + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_FEAT,0); + OutU8(bd->base0+ATAR0_CMD,ATA_NOP); + return ATAWaitNotBUSY(bd,timeout); } -U0 ATACmd(CBlkDev *bdev,U8 cmd) +U0 ATACmd(CBlkDev *bd,U8 cmd) { - OutU8(bdev->base0+ATAR0_FEAT,0); - OutU8(bdev->base0+ATAR0_CMD,cmd); - bdev->last_time=tS; + OutU8(bd->base0+ATAR0_FEAT,0); + OutU8(bd->base0+ATAR0_CMD,cmd); + bd->last_time=tS; PortNop; } -Bool ATAGetResult(CBlkDev *bdev,F64 timeout,U8 *buf,I64 cnt,I64 _avail,Bool one_read) +Bool ATAGetResult(CBlkDev *bd,F64 timeout,U8 *buf,I64 cnt,I64 _avail,Bool one_read) { I64 avail,overflow; - bdev->flags&=~BDF_LAST_WAS_WRITE; + bd->flags&=~BDF_LAST_WAS_WRITE; MemSet(buf,0,cnt); while (cnt>0) { - if (!ATAWaitDRQ(bdev,timeout)) + if (!ATAWaitDRQ(bd,timeout)) return FALSE; if (_avail) avail=_avail; else - avail=InU8(bdev->base0+ATAR0_HCYL)<<8+InU8(bdev->base0+ATAR0_LCYL); + avail=InU8(bd->base0+ATAR0_HCYL)<<8+InU8(bd->base0+ATAR0_LCYL); if (avail) { if (avail>cnt) { overflow=avail-cnt; @@ -83,13 +83,13 @@ Bool ATAGetResult(CBlkDev *bdev,F64 timeout,U8 *buf,I64 cnt,I64 _avail,Bool one_ } else overflow=0; if (avail&2) - RepInU16(buf,avail>>1,bdev->base0+ATAR0_DATA); + RepInU16(buf,avail>>1,bd->base0+ATAR0_DATA); else - RepInU32(buf,avail>>2,bdev->base0+ATAR0_DATA); + RepInU32(buf,avail>>2,bd->base0+ATAR0_DATA); cnt-=avail; buf+=avail; while (overflow>0) { - InU16(bdev->base0+ATAR0_DATA); + InU16(bd->base0+ATAR0_DATA); overflow-=2; if (0base0+ATAR0_DATA,EndianU16(argv[i])); - bdev->last_time=tS; + OutU16(bd->base0+ATAR0_DATA,EndianU16(argv[i])); + bd->last_time=tS; } return TRUE; } -Bool ATAPISetMaxSpeed(CBlkDev *bdev) +Bool ATAPISetMaxSpeed(CBlkDev *bd) { - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_LCYL,0); - OutU8(bdev->base0+ATAR0_HCYL,0); - ATACmd(bdev,ATA_PACKET); - ATAPIWritePktWord(bdev,0,0xBB00,0xFFFF,0xFFFF,0,0,0); - return ATAWaitNotBUSY(bdev,0); + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_LCYL,0); + OutU8(bd->base0+ATAR0_HCYL,0); + ATACmd(bd,ATA_PACKET); + ATAPIWritePktWord(bd,0,0xBB00,0xFFFF,0xFFFF,0,0,0); + return ATAWaitNotBUSY(bd,0); } -Bool ATAPISeek(CBlkDev *bdev,I64 native_blk) +Bool ATAPISeek(CBlkDev *bd,I64 native_blk) { - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_LCYL,0); - OutU8(bdev->base0+ATAR0_HCYL,0); - ATACmd(bdev,ATA_PACKET); - ATAPIWritePktWord(bdev,0,0x2B00,native_blk>>16,native_blk,0,0,0); - return ATAWaitNotBUSY(bdev,0); + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_LCYL,0); + OutU8(bd->base0+ATAR0_HCYL,0); + ATACmd(bd,ATA_PACKET); + ATAPIWritePktWord(bd,0,0x2B00,native_blk>>16,native_blk,0,0,0); + return ATAWaitNotBUSY(bd,0); } -Bool ATAPIStartStop(CBlkDev *bdev,F64 timeout,Bool start) +Bool ATAPIStartStop(CBlkDev *bd,F64 timeout,Bool start) { I64 i; if (start) i=0x100; else i=0; - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - ATACmd(bdev,ATA_PACKET); + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + ATACmd(bd,ATA_PACKET); //Start/Stop - if (ATAPIWritePktWord(bdev,timeout,0x1B00,0,i,0,0,0)) - return ATAWaitNotBUSY(bdev,timeout); + if (ATAPIWritePktWord(bd,timeout,0x1B00,0,i,0,0,0)) + return ATAWaitNotBUSY(bd,timeout); else return FALSE; } -I64 ATAGetDevId(CBlkDev *bdev,F64 timeout,U16 **_id_record) +I64 ATAGetDevId(CBlkDev *bd,F64 timeout,U16 **_id_record) { U16 *id_record; if (_id_record) *_id_record=NULL; - if (bdev->type!=BDT_ATAPI && bdev->base1) - OutU8(bdev->base1+ATAR1_CTRL,0x8); - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (bd->type!=BDT_ATAPI && bd->base1) + OutU8(bd->base1+ATAR1_CTRL,0x8); + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - ATACmd(bdev,ATA_ID_DEV); - if (!ATAWaitNotBUSY(bdev,timeout)) + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + ATACmd(bd,ATA_ID_DEV); + if (!ATAWaitNotBUSY(bd,timeout)) return BDT_NULL; - if (InU8(bdev->base0+ATAR0_STAT)&ATAS_ERR) + if (InU8(bd->base0+ATAR0_STAT)&ATAS_ERR) return BDT_ATAPI; id_record=ACAlloc(512); - if (!ATAGetResult(bdev,timeout,id_record,512,512,FALSE)) { + if (!ATAGetResult(bd,timeout,id_record,512,512,FALSE)) { Free(id_record); return BDT_NULL; } @@ -183,111 +183,111 @@ I64 ATAGetDevId(CBlkDev *bdev,F64 timeout,U16 **_id_record) return BDT_ATA; } -I64 ATAReadNativeMax(CBlkDev *bdev,F64 timeout) +I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout) {//Returns zero on err I64 result=0; Bool okay=TRUE; - if (bdev->type==BDT_ATAPI) { - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (bd->type==BDT_ATAPI) { + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - ATACmd(bdev,ATA_DEV_RST); - if (!ATAWaitNotBUSY(bdev,0)) + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + ATACmd(bd,ATA_DEV_RST); + if (!ATAWaitNotBUSY(bd,0)) okay=FALSE; } else { - while (InU8(bdev->base0+ATAR0_STAT) & ATAS_BSY) { - if (bdev->flags&BDF_LAST_WAS_WRITE) - OutU16(bdev->base0+ATAR0_DATA,0); + while (InU8(bd->base0+ATAR0_STAT) & ATAS_BSY) { + if (bd->flags&BDF_LAST_WAS_WRITE) + OutU16(bd->base0+ATAR0_DATA,0); else - InU16(bdev->base0+ATAR0_DATA); + InU16(bd->base0+ATAR0_DATA); Yield; if (0dev_id_record); - if (ATAGetDevId(bdev,timeout,&bdev->dev_id_record)==BDT_NULL) + Free(bd->dev_id_record); + if (ATAGetDevId(bd,timeout,&bd->dev_id_record)==BDT_NULL) okay=FALSE; else - BEqu(&bdev->flags,BDf_EXT_SIZE,Bt(&bdev->dev_id_record[86],10)); + BEqu(&bd->flags,BDf_EXT_SIZE,Bt(&bd->dev_id_record[86],10)); } if (okay) { - if (bdev->flags & BDF_EXT_SIZE && bdev->base1) { - OutU8(bdev->base1+ATAR1_CTRL,0x8); - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); - ATACmd(bdev,ATA_READ_NATIVE_MAX_EXT); - if (ATAWaitNotBUSY(bdev,timeout)) { - result.u8[0]=InU8(bdev->base0+ATAR0_SECT); - result.u8[1]=InU8(bdev->base0+ATAR0_LCYL); - result.u8[2]=InU8(bdev->base0+ATAR0_HCYL); + if (bd->flags & BDF_EXT_SIZE && bd->base1) { + OutU8(bd->base1+ATAR1_CTRL,0x8); + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); + ATACmd(bd,ATA_READ_NATIVE_MAX_EXT); + if (ATAWaitNotBUSY(bd,timeout)) { + result.u8[0]=InU8(bd->base0+ATAR0_SECT); + result.u8[1]=InU8(bd->base0+ATAR0_LCYL); + result.u8[2]=InU8(bd->base0+ATAR0_HCYL); - OutU8(bdev->base1+ATAR1_CTRL,0x80); - result.u8[3]=InU8(bdev->base0+ATAR0_SECT); - result.u8[4]=InU8(bdev->base0+ATAR0_LCYL); - result.u8[5]=InU8(bdev->base0+ATAR0_HCYL); + OutU8(bd->base1+ATAR1_CTRL,0x80); + result.u8[3]=InU8(bd->base0+ATAR0_SECT); + result.u8[4]=InU8(bd->base0+ATAR0_LCYL); + result.u8[5]=InU8(bd->base0+ATAR0_HCYL); if (result>>24==result&0xFFFFFF) {//Kludge to make qemu-kvm work - bdev->flags&=~BDF_EXT_SIZE; + bd->flags&=~BDF_EXT_SIZE; result&=0xFFFFFF; } } } else { - if (bdev->type!=BDT_ATAPI && bdev->base1) - OutU8(bdev->base1+ATAR1_CTRL,0x8); - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - ATACmd(bdev,ATA_READ_NATIVE_MAX); - if (ATAWaitNotBUSY(bdev,timeout)) { - result.u8[0]=InU8(bdev->base0+ATAR0_SECT); - result.u8[1]=InU8(bdev->base0+ATAR0_LCYL); - result.u8[2]=InU8(bdev->base0+ATAR0_HCYL); - result.u8[3]=InU8(bdev->base0+ATAR0_SELECT) & 0xF; + if (bd->type!=BDT_ATAPI && bd->base1) + OutU8(bd->base1+ATAR1_CTRL,0x8); + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + ATACmd(bd,ATA_READ_NATIVE_MAX); + if (ATAWaitNotBUSY(bd,timeout)) { + result.u8[0]=InU8(bd->base0+ATAR0_SECT); + result.u8[1]=InU8(bd->base0+ATAR0_LCYL); + result.u8[2]=InU8(bd->base0+ATAR0_HCYL); + result.u8[3]=InU8(bd->base0+ATAR0_SELECT) & 0xF; } } } - return bdev->max_blk=result; + return bd->max_blk=result; } -I64 ATAPIReadCapacity(CBlkDev *bdev,I64 *_blk_size=NULL) +I64 ATAPIReadCapacity(CBlkDev *bd,I64 *_blk_size=NULL) {//Supposedly this can return a result +/- 75 sects. //Error might just be for music. - Bool unlock=BlkDevLock(bdev); + Bool unlock=BlkDevLock(bd); U32 buf[2]; - if (ATAWaitNotBUSY(bdev,0)) { - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (ATAWaitNotBUSY(bd,0)) { + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_LCYL,8); - OutU8(bdev->base0+ATAR0_HCYL,0); - ATACmd(bdev,ATA_PACKET); - ATAPIWritePktWord(bdev,0,0x2500,0,0,0,0,0); - if (!ATAGetResult(bdev,0,buf,8,0,TRUE)) + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_LCYL,8); + OutU8(bd->base0+ATAR0_HCYL,0); + ATACmd(bd,ATA_PACKET); + ATAPIWritePktWord(bd,0,0x2500,0,0,0,0,0); + if (!ATAGetResult(bd,0,buf,8,0,TRUE)) buf[0]=buf[1]=0; } else buf[0]=buf[1]=0; - if (unlock) BlkDevUnlock(bdev); + if (unlock) BlkDevUnlock(bd); if (_blk_size) *_blk_size=EndianU32(buf[1]); return EndianU32(buf[0]); } -CATAPITrack *ATAPIReadTrackInfo(CBlkDev *bdev,I64 blk) +CATAPITrack *ATAPIReadTrackInfo(CBlkDev *bd,I64 blk) { CATAPITrack *result=CAlloc(sizeof(CATAPITrack)); - Bool unlock=BlkDevLock(bdev); - if (ATAWaitNotBUSY(bdev,0)) { - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + Bool unlock=BlkDevLock(bd); + if (ATAWaitNotBUSY(bd,0)) { + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_LCYL,sizeof(CATAPITrack)&0xFF); - OutU8(bdev->base0+ATAR0_HCYL,sizeof(CATAPITrack)>>8); - ATACmd(bdev,ATA_PACKET); - ATAPIWritePktWord(bdev,0,0x5200,blk.u16[1],blk.u16[0], + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_LCYL,sizeof(CATAPITrack)&0xFF); + OutU8(bd->base0+ATAR0_HCYL,sizeof(CATAPITrack)>>8); + ATACmd(bd,ATA_PACKET); + ATAPIWritePktWord(bd,0,0x5200,blk.u16[1],blk.u16[0], (sizeof(CATAPITrack)&0xFF00)>>8,(sizeof(CATAPITrack)&0x00FF)<<8,0); - if (!ATAGetResult(bdev,0,result,sizeof(CATAPITrack),0,TRUE)) { + if (!ATAGetResult(bd,0,result,sizeof(CATAPITrack),0,TRUE)) { Free(result); result=NULL; } @@ -295,160 +295,160 @@ CATAPITrack *ATAPIReadTrackInfo(CBlkDev *bdev,I64 blk) Free(result); result=NULL; } - if (unlock) BlkDevUnlock(bdev); + if (unlock) BlkDevUnlock(bd); return result; } -Bool ATAInit(CBlkDev *bdev) +Bool ATAInit(CBlkDev *bd) { - Bool unlock=BlkDevLock(bdev),okay=FALSE; + Bool unlock=BlkDevLock(bd),okay=FALSE; - if (bdev->type==BDT_ATAPI) - bdev->flags&=~BDF_EXT_SIZE; + if (bd->type==BDT_ATAPI) + bd->flags&=~BDF_EXT_SIZE; else - bdev->flags|=BDF_EXT_SIZE; + bd->flags|=BDF_EXT_SIZE; - if (ATAReadNativeMax(bdev,tS+0.1)) { + if (ATAReadNativeMax(bd,tS+0.1)) { - ATABlkSelect(bdev,bdev->max_blk,0); - if (bdev->flags&BDF_EXT_SIZE) - ATACmd(bdev,ATA_SET_MAX_EXT); + ATABlkSelect(bd,bd->max_blk,0); + if (bd->flags&BDF_EXT_SIZE) + ATACmd(bd,ATA_SET_MAX_EXT); else - ATACmd(bdev,ATA_SET_MAX); - if (ATAWaitNotBUSY(bdev,0)) { + ATACmd(bd,ATA_SET_MAX); + if (ATAWaitNotBUSY(bd,0)) { okay=TRUE; - if (bdev->type==BDT_ATAPI) { - if (ATAPIStartStop(bdev,0,TRUE)) { - if(!ATAPISetMaxSpeed(bdev)) + if (bd->type==BDT_ATAPI) { + if (ATAPIStartStop(bd,0,TRUE)) { + if(!ATAPISetMaxSpeed(bd)) okay=FALSE; } else okay=FALSE; } } } - if (unlock) BlkDevUnlock(bdev); + if (unlock) BlkDevUnlock(bd); return okay; } -Bool ATAPIWaitReady(CBlkDev *bdev,F64 timeout) +Bool ATAPIWaitReady(CBlkDev *bd,F64 timeout) { do { - if (!ATAWaitNotBUSY(bdev,timeout) || - !ATANop(bdev,timeout) || - !ATAPIStartStop(bdev,timeout,TRUE)) + if (!ATAWaitNotBUSY(bd,timeout) || + !ATANop(bd,timeout) || + !ATAPIStartStop(bd,timeout,TRUE)) return FALSE; - if (InU8(bdev->base0+ATAR0_STAT) & ATAS_DRDY && - !InU8(bdev->base0+ATAR0_FEAT)); + if (InU8(bd->base0+ATAR0_STAT) & ATAS_DRDY && + !InU8(bd->base0+ATAR0_FEAT)); return TRUE; - ATAInit(bdev); + ATAInit(bd); Yield; } while (!(0flags & BDF_EXT_SIZE) - ATACmd(bdev,ATA_READ_MULTI_EXT); + ATABlkSelect(bd,blk,cnt); + if (bd->flags & BDF_EXT_SIZE) + ATACmd(bd,ATA_READ_MULTI_EXT); else - ATACmd(bdev,ATA_READ_MULTI); - if (!ATAGetResult(bdev,tS+1.0,buf,cnt*bdev->blk_size,BLK_SIZE,FALSE)) { + ATACmd(bd,ATA_READ_MULTI); + if (!ATAGetResult(bd,tS+1.0,buf,cnt*bd->blk_size,BLK_SIZE,FALSE)) { if (retries--) { - ATAWaitNotBUSY(bdev,0); + ATAWaitNotBUSY(bd,0); goto retry; } else throw('BlkDev'); } - dsk.read_cnt+=(cnt*bdev->blk_size)>>BLK_SIZE_BITS; - if (unlock) BlkDevUnlock(bdev); + dsk.read_cnt+=(cnt*bd->blk_size)>>BLK_SIZE_BITS; + if (unlock) BlkDevUnlock(bd); } I64 ATAProbe(I64 base0,I64 base1,I64 unit) { - CBlkDev bdev; - MemSet(&bdev,0,sizeof(CBlkDev)); - bdev.type=BDT_ATAPI; - bdev.base0=base0; - bdev.base1=base1; - bdev.unit=unit; - bdev.blk_size=CD_BLK_SIZE; - return ATAGetDevId(&bdev,tS+0.1,NULL); + CBlkDev bd; + MemSet(&bd,0,sizeof(CBlkDev)); + bd.type=BDT_ATAPI; + bd.base0=base0; + bd.base1=base1; + bd.unit=unit; + bd.blk_size=CD_BLK_SIZE; + return ATAGetDevId(&bd,tS+0.1,NULL); } -Bool ATAPIReadBlks2(CBlkDev *bdev,F64 timeout,U8 *buf, I64 native_blk, I64 cnt,Bool lock) +Bool ATAPIReadBlks2(CBlkDev *bd,F64 timeout,U8 *buf, I64 native_blk, I64 cnt,Bool lock) { Bool result=FALSE,unlock; if (cnt<=0) return FALSE; if (lock) - unlock=BlkDevLock(bdev); - if (ATAPIWaitReady(bdev,timeout)) { - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + unlock=BlkDevLock(bd); + if (ATAPIWaitReady(bd,timeout)) { + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_LCYL,bdev->blk_size); - OutU8(bdev->base0+ATAR0_HCYL,bdev->blk_size.u8[1]); - ATACmd(bdev,ATA_PACKET); - if (ATAPIWritePktWord(bdev,timeout,0xA800, + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_LCYL,bd->blk_size); + OutU8(bd->base0+ATAR0_HCYL,bd->blk_size.u8[1]); + ATACmd(bd,ATA_PACKET); + if (ATAPIWritePktWord(bd,timeout,0xA800, native_blk.u16[1],native_blk,cnt.u16[1],cnt,0) && - ATAGetResult(bdev,timeout,buf,cnt*bdev->blk_size,0,FALSE)) { - dsk.read_cnt+=(cnt*bdev->blk_size)>>BLK_SIZE_BITS; + ATAGetResult(bd,timeout,buf,cnt*bd->blk_size,0,FALSE)) { + dsk.read_cnt+=(cnt*bd->blk_size)>>BLK_SIZE_BITS; result=TRUE; } } -// ATAPIStartStop(bdev,0,FALSE); - if (lock && unlock) BlkDevUnlock(bdev); +// ATAPIStartStop(bd,0,FALSE); + if (lock && unlock) BlkDevUnlock(bd); return result; } -U0 ATAPIReadBlks(CBlkDev *bdev,U8 *buf, I64 blk, I64 cnt) +U0 ATAPIReadBlks(CBlkDev *bd,U8 *buf, I64 blk, I64 cnt) { - CPrt *p=Drv2Prt(bdev->first_drv_let); - I64 retry,spc=bdev->blk_size>>BLK_SIZE_BITS,n,blk2, - l2=bdev->max_reads<<1+spc<<1; + CDrv *dv=Let2Drv(bd->first_drv_let); + I64 retry,spc=bd->blk_size>>BLK_SIZE_BITS,n,blk2, + l2=bd->max_reads<<1+spc<<1; U8 *cd_buf=MAlloc(l2<0) { - if (blk<=bdev->max_reads) + if (blk<=bd->max_reads) blk2=0; else - blk2=FloorU64(blk-bdev->max_reads,spc); - if (blk2+l2>p->size) - l2=p->size-blk2; + blk2=FloorU64(blk-bd->max_reads,spc); + if (blk2+l2>dv->size) + l2=dv->size-blk2; n=(l2+spc-1)/spc; retry=4; while (--retry) - if (ATAPIReadBlks2(bdev,tS+7.0+0.004*n,cd_buf,blk2/spc,n,TRUE)) + if (ATAPIReadBlks2(bd,tS+7.0+0.004*n,cd_buf,blk2/spc,n,TRUE)) //n is 0x800 if max_reads. Up to 8 additional seconds break; if (!retry) - ATAPIReadBlks2(bdev,0,cd_buf,blk2/spc,n,TRUE); - if (bdev->flags & BDF_READ_CACHE) - DskCacheAdd(p,cd_buf,blk2,n*spc); + ATAPIReadBlks2(bd,0,cd_buf,blk2/spc,n,TRUE); + if (bd->flags & BDF_READ_CACHE) + DskCacheAdd(dv,cd_buf,blk2,n*spc); MemCpy(buf,cd_buf+(blk-blk2)<bdev; + CBlkDev *bd=dv->bd; while (cnt>0) { n=cnt; - if (n>bdev->max_reads) - n=bdev->max_reads; - if (bdev->type==BDT_ATAPI) - ATAPIReadBlks(bdev,buf,blk,n); + if (n>bd->max_reads) + n=bd->max_reads; + if (bd->type==BDT_ATAPI) + ATAPIReadBlks(bd,buf,blk,n); else - ATAReadBlks(bdev,buf,blk,n); + ATAReadBlks(bd,buf,blk,n); buf+=n<flags&BDF_EXT_SIZE) - ATACmd(bdev,ATA_WRITE_MULTI_EXT); + ATABlkSelect(bd,blk,cnt); + if (bd->flags&BDF_EXT_SIZE) + ATACmd(bd,ATA_WRITE_MULTI_EXT); else - ATACmd(bdev,ATA_WRITE_MULTI); - bdev->flags|=BDF_LAST_WAS_WRITE; + ATACmd(bd,ATA_WRITE_MULTI); + bd->flags|=BDF_LAST_WAS_WRITE; while (cnt>0) { timeout=tS+1.0; while (TRUE) { - i=InU8(bdev->base0+ATAR0_STAT); + i=InU8(bd->base0+ATAR0_STAT); if (!(i & ATAS_DRDY)||!(i & ATAS_DRQ)) { Yield; } else break; if (/* i&ATAS_ERR||*/ tS>timeout) { if (retries--) { - ATAWaitNotBUSY(bdev,0); + ATAWaitNotBUSY(bd,0); goto retry; } else throw('BlkDev'); @@ -487,401 +487,120 @@ retry: } sects_avail=1; U32s_avail=sects_avail<>2; - RepOutU32(buf,U32s_avail,bdev->base0+ATAR0_DATA); + RepOutU32(buf,U32s_avail,bd->base0+ATAR0_DATA); buf+=U32s_avail<<2; cnt-=sects_avail; retries=3; } - ATAWaitNotBUSY(bdev,0); - if (unlock) BlkDevUnlock(bdev); + ATAWaitNotBUSY(bd,0); + if (unlock) BlkDevUnlock(bd); } -Bool ATAPISync(CBlkDev *bdev) +Bool ATAPISync(CBlkDev *bd) { Bool okay=TRUE; - if (!ATAWaitNotBUSY(bdev,0)) + if (!ATAWaitNotBUSY(bd,0)) okay=FALSE; else { - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_LCYL,0); - OutU8(bdev->base0+ATAR0_HCYL,0); - ATACmd(bdev,ATA_PACKET); - ATAPIWritePktWord(bdev,0,0x3500,0,0,0,0,0); - if (!ATAWaitNotBUSY(bdev,0)) + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_LCYL,0); + OutU8(bd->base0+ATAR0_HCYL,0); + ATACmd(bd,ATA_PACKET); + ATAPIWritePktWord(bd,0,0x3500,0,0,0,0,0); + if (!ATAWaitNotBUSY(bd,0)) okay=FALSE; } return okay; } -U0 ATAPIClose(CBlkDev *bdev,I64 close_field=0x200,I64 track=0) +U0 ATAPIClose(CBlkDev *bd,I64 close_field=0x200,I64 track=0) {//0x200 CD/DVD part 1 // 0x300 DVD part 2 - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_LCYL,0); - OutU8(bdev->base0+ATAR0_HCYL,0); - ATACmd(bdev,ATA_PACKET); - ATAPIWritePktWord(bdev,0,0x5B00,close_field,track,0,0,0); - ATAWaitNotBUSY(bdev,0); + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_LCYL,0); + OutU8(bd->base0+ATAR0_HCYL,0); + ATACmd(bd,ATA_PACKET); + ATAPIWritePktWord(bd,0,0x5B00,close_field,track,0,0,0); + ATAWaitNotBUSY(bd,0); } -U0 ATAPIWriteBlks(CBlkDev *bdev,U8 *buf, I64 native_blk, I64 cnt) +U0 ATAPIWriteBlks(CBlkDev *bd,U8 *buf, I64 native_blk, I64 cnt) { I64 U32s_avail; U8 *buf2; - ATAWaitNotBUSY(bdev,0); - ATAPISeek(bdev,native_blk); + ATAWaitNotBUSY(bd,0); + ATAPISeek(bd,native_blk); - OutU8(bdev->base0+ATAR0_FEAT,0); - OutU8(bdev->base0+ATAR0_LCYL,bdev->blk_size); - OutU8(bdev->base0+ATAR0_HCYL,bdev->blk_size.u8[1]); - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + OutU8(bd->base0+ATAR0_FEAT,0); + OutU8(bd->base0+ATAR0_LCYL,bd->blk_size); + OutU8(bd->base0+ATAR0_HCYL,bd->blk_size.u8[1]); + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_CMD,ATA_PACKET); - ATAPIWritePktWord(bdev,0,0x0400,native_blk.u16[1],native_blk,cnt.u16[1],cnt,0); - bdev->flags|=BDF_LAST_WAS_WRITE; - ATAWaitNotBUSY(bdev,0); + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_CMD,ATA_PACKET); + ATAPIWritePktWord(bd,0,0x0400,native_blk.u16[1],native_blk,cnt.u16[1],cnt,0); + bd->flags|=BDF_LAST_WAS_WRITE; + ATAWaitNotBUSY(bd,0); - ATAPISeek(bdev,native_blk); + ATAPISeek(bd,native_blk); - if (bdev->flags & BDF_EXT_SIZE) - OutU8(bdev->base0+ATAR0_SELECT,0xEF|bdev->unit<<4); + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4); else - OutU8(bdev->base0+ATAR0_SELECT,0xE0|bdev->unit<<4); - OutU8(bdev->base0+ATAR0_LCYL,bdev->blk_size); - OutU8(bdev->base0+ATAR0_HCYL,bdev->blk_size.u8[1]); - ATACmd(bdev,ATA_PACKET); - ATAPIWritePktWord(bdev,0,0xAA00,native_blk.u16[1],native_blk,cnt.u16[1],cnt,0); - buf2=buf+bdev->blk_size*cnt; + OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); + OutU8(bd->base0+ATAR0_LCYL,bd->blk_size); + OutU8(bd->base0+ATAR0_HCYL,bd->blk_size.u8[1]); + ATACmd(bd,ATA_PACKET); + ATAPIWritePktWord(bd,0,0xAA00,native_blk.u16[1],native_blk,cnt.u16[1],cnt,0); + buf2=buf+bd->blk_size*cnt; while (bufbase0+ATAR0_HCYL)<<8+InU8(bdev->base0+ATAR0_LCYL))>>2; + ATAWaitDRQ(bd,0); + U32s_avail=(InU8(bd->base0+ATAR0_HCYL)<<8+InU8(bd->base0+ATAR0_LCYL))>>2; if (buf+U32s_avail<<2>buf2) U32s_avail=(buf2-buf)>>2; if (U32s_avail) { - RepOutU32(buf,U32s_avail,bdev->base0+ATAR0_DATA); + RepOutU32(buf,U32s_avail,bd->base0+ATAR0_DATA); buf+=U32s_avail<<2; dsk.write_cnt+=U32s_avail>>(BLK_SIZE_BITS-2); } } - ATAWaitNotBUSY(bdev,0); + ATAWaitNotBUSY(bd,0); } -Bool ATAWBlks(CPrt *p,U8 *buf, I64 blk, I64 cnt) +Bool ATAWBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt) { I64 n,spc; - CBlkDev *bdev=p->bdev; + CBlkDev *bd=dv->bd; Bool unlock; - spc=bdev->blk_size>>BLK_SIZE_BITS; - if (bdev->type==BDT_ATAPI) { - unlock=BlkDevLock(bdev); - ATAPIWaitReady(bdev,0); + spc=bd->blk_size>>BLK_SIZE_BITS; + if (bd->type==BDT_ATAPI) { + unlock=BlkDevLock(bd); + ATAPIWaitReady(bd,0); } while (cnt>0) { n=cnt; - if (n>bdev->max_writes) - n=bdev->max_writes; - if (bdev->type==BDT_ATAPI) - ATAPIWriteBlks(bdev,buf,blk/spc,(n+spc-1)/spc); + if (n>bd->max_writes) + n=bd->max_writes; + if (bd->type==BDT_ATAPI) + ATAPIWriteBlks(bd,buf,blk/spc,(n+spc-1)/spc); else - ATAWriteBlks(bdev,buf,blk,n); + ATAWriteBlks(bd,buf,blk,n); buf+=n<type==BDT_ATAPI) { - ATAPISync(bdev); -// ATAPIStartStop(bdev,0,FALSE); - if (unlock) BlkDevUnlock(bdev); + if (bd->type==BDT_ATAPI) { + ATAPISync(bd); +// ATAPIStartStop(bd,0,FALSE); + if (unlock) BlkDevUnlock(bd); } return TRUE; } - -Bool BootCdProbe(CBlkDev *bdev) -{ - CKernel *img=CAlloc(CD_BLK_SIZE); - I64 i; - Bool result=FALSE; - "Port: %04X,%04X Unit: %02X ",bdev->base0,bdev->base1,bdev->unit; - if (ATAProbe(bdev->base0,bdev->base1,bdev->unit)==BDT_ATAPI) { - " ATAPI"; - if (ATAPIStartStop(bdev,tS+5.0,TRUE)) { - " Started"; - for (i=0;i<2;i++) {//Retry - if (ATAPIReadBlks2(bdev,tS+7.0,img,sys_boot_code.u16[1],1,FALSE)) { - if (img->compile_time==sys_compile_time) { - " Found"; - return TRUE; - } else - " Read"; - } else - " NoRead"; - } - } - } - " Nope\n"; - Free(img); - return result; -} - -Bool BootCdProbeAll(CBlkDev *bdev) -{ - I64 d1,d2,i,j,k; - - bdev->base1=0; - for (k=0;k<256;k++) { - i=-1; - while (TRUE) { - j=PCIClassFind(0x010100+k,++i); - if (j<0) - break; - "Subcode:0x%X Bus:0x%X Dev:0x%X Fun:0x%X\n",k,j.u8[2],j.u8[1],j.u8[0]; - d1=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x10); - d2=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x14); - if (d1&1 && d2&1) { - if (bdev->base0=d1&-8) { - bdev->unit=0; - if (BootCdProbe(bdev)) - return TRUE; - bdev->unit=1; - if (BootCdProbe(bdev)) - return TRUE; - } - } - d1=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x18); - d2=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x1C); - if (d1&1 && d2&1) { - if (bdev->base0=d1&-8) { - bdev->unit=0; - if (BootCdProbe(bdev)) - return TRUE; - bdev->unit=1; - if (BootCdProbe(bdev)) - return TRUE; - } - } - } - } - - d1=0x1F0; - d2=0x3F6; - if (bdev->base0=d1&-8) { - bdev->unit=0; - if (BootCdProbe(bdev)) - return TRUE; - bdev->unit=1; - if (BootCdProbe(bdev)) - return TRUE; - } - - d1=0x170; - d2=0x376; - if (bdev->base0=d1&-8) { - bdev->unit=0; - if (BootCdProbe(bdev)) - return TRUE; - bdev->unit=1; - if (BootCdProbe(bdev)) - return TRUE; - } -} - -U0 ATARepEntry(I64 base0,I64 base1,I64 unit,I64 irq,U8 *msg,CATARep **_root,I64 *num_hints) -{ - I64 type; - base0&=-8; - base1&=-4; - CATARep *tempha; - if (type=ATAProbe(base0,base1,unit)) { - *num_hints+=1; - "\n\n$$PURPLE$$ $$BT+X,\"%d\",LM=\"%d\\n\"$$$$FG$$$$LM,4$$",*num_hints,*num_hints; - if (type==BDT_ATA) - "$$RED$$ATA "; - else - "$$RED$$ATAPI "; - "$$LTBLUE$$%s$$FG$$\nBase0:0x%04X Base1:0x%04X\nIrq:0x%02X Unit:%d$$LM,0$$\n",msg,base0,base1,irq,unit; - if (_root) { - tempha=CAlloc(sizeof(CATARep)); - tempha->next=*_root; - *_root=tempha; - tempha->num=*num_hints; - tempha->type=type; - tempha->base0=base0; - tempha->base1=base1; - tempha->unit=unit; - } - } -} - -Bool ATARepExitAllApplications() -{ - "\nWe're going to probe hardware.\n" - "$$RED$$Exit all other applications.$$FG$$\n" - "Press '$$PURPLE$$p$$FG$$' to probe or '$$PURPLE$$s$$FG$$' to skip.\n"; - if (ToUpper(GetChar(,FALSE))=='S') - return TRUE; - else - return FALSE; -} - -public I64 ATARep(Bool pmt=TRUE,Bool just_ide=FALSE,CATARep **_root=NULL) -{//Report possible ATA devices by probing. Hard disks and CD/DVDs. - I64 d1,d2,d3,i,j,k,cnt=0,unlock_flags=0,num_hints=0; -#assert NUM_BLKDEVS<=64 - Bool old_preempt; - - if (_root) *_root=NULL; - - if (pmt && ATARepExitAllApplications) - return 0; - - old_preempt=Preempt(OFF); - for (i=0;icatch_except=TRUE; - bdev=NULL; - } - Silent(was_silent); - while (tempha) { - if (!result && bdev && bdev->type==tempha->type) { - if (bdev->type==BDT_ATAPI && - bdev->base0==tempha->base0 && bdev->unit==tempha->unit) - result=atapi_drv=tempha; - else if (bdev->type==BDT_ATA && bdev->base0==tempha->base0 && - bdev->base1==tempha->base1 && bdev->unit==tempha->unit) - result=ata_drv=tempha; - } - if (!result || result->type!=tempha->type) { - if (tempha->type==BDT_ATA) { - if (!ata_drv || tempha->unitunit || - tempha->unit==ata_drv->unit && tempha->numnum) - ata_drv=tempha; - } else if (tempha->type==BDT_ATAPI) { - if (!atapi_drv || tempha->unitunit || - tempha->unit==atapi_drv->unit && tempha->numnum) - atapi_drv=tempha; - } - } - tempha=tempha->next; - } - if (_ata_drv) *_ata_drv =ata_drv; - if (_atapi_drv) *_atapi_drv=atapi_drv; - return result; -} - -CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit) -{ - CBlkDev *result; - if (0<=first_drv_let-'A'unit=unit; - result->base0=base0; - result->base1=base1; - if (BlkDevAdd(result,FALSE,FALSE)) - return result; - } - return NULL; -} - -I64 AutoMountIDE() -{//Try to mount hard drive and CD/DVD, automatically. (Kernel.Cfg option). -//It uses 'C' and 'T' as first drive letters or whatever you set -//in config when compiling Kernel.BIN. - I64 result=0; - CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL,*tempha; - ATARep(FALSE,TRUE,&root); - ATAIDDrvs(root,*sys_acct,&ata_drv,&atapi_drv); - if (ata_drv && ATAMount(dsk.first_hd_drv_let,BDT_ATA, - ata_drv->base0,ata_drv->base1,ata_drv->unit)) - result++; - if (atapi_drv && ATAMount(dsk.first_cd_drv_let,BDT_ATAPI, - atapi_drv->base0,atapi_drv->base1,atapi_drv->unit)) - result++; - tempha=root; - while (tempha) { - if (tempha!=ata_drv && tempha!=atapi_drv) { - if (tempha->type==BDT_ATA && ATAMount(dsk.first_hd_drv_let,BDT_ATA, - tempha->base0,tempha->base1,tempha->unit)) - result++; - else if (tempha->type==BDT_ATAPI && ATAMount(dsk.first_cd_drv_let,BDT_ATAPI, - tempha->base0,tempha->base1,tempha->unit)) - result++; - } - tempha=tempha->next; - } - LinkedLstDel(root); - dsk.auto_mount_ide_cnt=result; - return result; -} diff --git a/Kernel/Dsk/DskATAId.CPP b/Kernel/Dsk/DskATAId.CPP new file mode 100644 index 0000000..44b07e7 --- /dev/null +++ b/Kernel/Dsk/DskATAId.CPP @@ -0,0 +1,279 @@ +Bool BootCdProbe(CBlkDev *bd) +{ + CKernel *img=CAlloc(CD_BLK_SIZE); + I64 i; + Bool result=FALSE; + "Port: %04X,%04X Unit: %02X ",bd->base0,bd->base1,bd->unit; + if (ATAProbe(bd->base0,bd->base1,bd->unit)==BDT_ATAPI) { + " ATAPI"; + if (ATAPIStartStop(bd,tS+5.0,TRUE)) { + " Started"; + for (i=0;i<2;i++) {//Retry + if (ATAPIReadBlks2(bd,tS+7.0,img,sys_boot_src.u16[1],1,FALSE)) { + if (img->compile_time==sys_compile_time) { + " Found"; + return TRUE; + } else + " Read"; + } else + " NoRead"; + } + } + } + " Nope\n"; + Free(img); + return result; +} + +Bool BootCdProbeAll(CBlkDev *bd) +{ + I64 d1,d2,i,j,k; + + bd->base1=0; + for (k=0;k<256;k++) { + i=-1; + while (TRUE) { + j=PCIClassFind(0x010100+k,++i); + if (j<0) + break; + "Subcode:0x%X Bus:0x%X Dev:0x%X Fun:0x%X\n",k,j.u8[2],j.u8[1],j.u8[0]; + d1=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x10); + d2=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x14); + if (d1&1 && d2&1) { + if (bd->base0=d1&~7) { + bd->unit=0; + if (BootCdProbe(bd)) + return TRUE; + bd->unit=1; + if (BootCdProbe(bd)) + return TRUE; + } + } + d1=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x18); + d2=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x1C); + if (d1&1 && d2&1) { + if (bd->base0=d1&~7) { + bd->unit=0; + if (BootCdProbe(bd)) + return TRUE; + bd->unit=1; + if (BootCdProbe(bd)) + return TRUE; + } + } + } + } + + d1=0x1F0; + d2=0x3F6; + if (bd->base0=d1&~7) { + bd->unit=0; + if (BootCdProbe(bd)) + return TRUE; + bd->unit=1; + if (BootCdProbe(bd)) + return TRUE; + } + + d1=0x170; + d2=0x376; + if (bd->base0=d1&~7) { + bd->unit=0; + if (BootCdProbe(bd)) + return TRUE; + bd->unit=1; + if (BootCdProbe(bd)) + return TRUE; + } +} + +U0 ATARepEntry(I64 base0,I64 base1,I64 unit,I64 irq,U8 *msg,CATARep **_root,I64 *num_hints) +{ + I64 type; + base0&=-8; + base1&=-4; + CATARep *tempha; + if (type=ATAProbe(base0,base1,unit)) { + *num_hints+=1; + "\n\n$$PURPLE$$ $$BT+X,\"%d\",LM=\"%d\\n\"$$$$FG$$$$LM,4$$",*num_hints,*num_hints; + if (type==BDT_ATA) + "$$RED$$ATA "; + else + "$$RED$$ATAPI "; + "$$LTBLUE$$%s$$FG$$\nBase0:0x%04X Base1:0x%04X\nIrq:0x%02X Unit:%d$$LM,0$$\n",msg,base0,base1,irq,unit; + if (_root) { + tempha=CAlloc(sizeof(CATARep)); + tempha->next=*_root; + *_root=tempha; + tempha->num=*num_hints; + tempha->type=type; + tempha->base0=base0; + tempha->base1=base1; + tempha->unit=unit; + } + } +} + +Bool ATARepExitAllApplications() +{ + "\nWe're going to probe hardware.\n" + "$$RED$$Exit all other applications.$$FG$$\n" + "Press '$$PURPLE$$p$$FG$$' to probe or '$$PURPLE$$s$$FG$$' to skip.\n"; + if (ToUpper(GetChar(,FALSE))=='S') + return TRUE; + else + return FALSE; +} + +public I64 ATARep(Bool pmt=TRUE,Bool just_ide=FALSE,CATARep **_root=NULL) +{//Report possible ATA devices by probing. Hard disks and CD/DVDs. + I64 d1,d2,d3,i,j,k,cnt=0,unlock_flags=0,num_hints=0; +#assert NUM_BLKDEVS<=64 + Bool old_preempt; + + if (_root) *_root=NULL; + + if (pmt && ATARepExitAllApplications) + return 0; + + old_preempt=Preempt(OFF); + for (i=0;icatch_except=TRUE; + bd=NULL; + } + Silent(was_silent); + while (tempha) { + if (!result && bd && bd->type==tempha->type) { + if (bd->type==BDT_ATAPI && + bd->base0==tempha->base0 && bd->unit==tempha->unit) + result=atapi_drv=tempha; + else if (bd->type==BDT_ATA && bd->base0==tempha->base0 && + bd->base1==tempha->base1 && bd->unit==tempha->unit) + result=ata_drv=tempha; + } + if (!result || result->type!=tempha->type) { + if (tempha->type==BDT_ATA) { + if (!ata_drv || tempha->unitunit || + tempha->unit==ata_drv->unit && tempha->numnum) + ata_drv=tempha; + } else if (tempha->type==BDT_ATAPI) { + if (!atapi_drv || tempha->unitunit || + tempha->unit==atapi_drv->unit && tempha->numnum) + atapi_drv=tempha; + } + } + tempha=tempha->next; + } + if (_ata_drv) *_ata_drv =ata_drv; + if (_atapi_drv) *_atapi_drv=atapi_drv; + return result; +} + +CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit) +{ + CBlkDev *result; + if (0<=first_drv_let-'A'unit=unit; + result->base0=base0; + result->base1=base1; + if (BlkDevAdd(result,FALSE,FALSE)) + return result; + } + return NULL; +} + +I64 AutoMountIDE() +{//Try to mount hard drive and CD/DVD, automatically. (Kernel.Cfg option). +//It uses 'C' and 'T' as first drive letters or whatever you set +//in config when compiling Kernel.BIN. + I64 result=0; + CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL,*tempha; + ATARep(FALSE,TRUE,&root); + ATAIDDrvs(root,dsk.boot_drv_let,&ata_drv,&atapi_drv); + if (ata_drv && ATAMount(dsk.first_hd_drv_let,BDT_ATA, + ata_drv->base0,ata_drv->base1,ata_drv->unit)) + result++; + if (atapi_drv && ATAMount(dsk.first_cd_drv_let,BDT_ATAPI, + atapi_drv->base0,atapi_drv->base1,atapi_drv->unit)) + result++; + tempha=root; + while (tempha) { + if (tempha!=ata_drv && tempha!=atapi_drv) { + if (tempha->type==BDT_ATA && ATAMount(dsk.first_hd_drv_let,BDT_ATA, + tempha->base0,tempha->base1,tempha->unit)) + result++; + else if (tempha->type==BDT_ATAPI && ATAMount(dsk.first_cd_drv_let,BDT_ATAPI, + tempha->base0,tempha->base1,tempha->unit)) + result++; + } + tempha=tempha->next; + } + LinkedLstDel(root); + dsk.auto_mount_ide_cnt=result; + return result; +} diff --git a/Kernel/Dsk/DskAddDev.CPP b/Kernel/Dsk/DskAddDev.CPP index 1cdd272..e9bab07 100644 --- a/Kernel/Dsk/DskAddDev.CPP +++ b/Kernel/Dsk/DskAddDev.CPP @@ -1,18 +1,18 @@ -U0 SetBlkDevLockFwding(CBlkDev *bdev) -{ - CBlkDev *bdev1; +U0 BlkDevLockFwdingSet(CBlkDev *bd) +{ //If two blkdevs on same controller, use just one lock + CBlkDev *bd1; I64 i; - switch (bdev->type) { + switch (bd->type) { case BDT_RAM: break; case BDT_ATA: case BDT_ATAPI: for (i=0;ibd_signature==BD_SIGNATURE_VAL && bdev!=bdev1 && - (bdev1->type==BDT_ATAPI || bdev1->type==BDT_ATA) && - bdev1->base0==bdev->base0) { - bdev->lock_fwding=bdev1; + bd1=&dsk.blkdevs[i]; + if (bd1->bd_signature==BD_SIGNATURE_VAL && bd!=bd1 && + (bd1->type==BDT_ATAPI || bd1->type==BDT_ATA) && + bd1->base0==bd->base0) { + bd->lock_fwding=bd1; break; } } @@ -20,74 +20,74 @@ U0 SetBlkDevLockFwding(CBlkDev *bdev) } } -I64 BlkDevAdd(CBlkDev *bdev,Bool one_prt,Bool make_free) +I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) { I64 i,j,ext_base,offset,result=0; - CPrt *p; - CBootStruct br; + CDrv *dv; + CRedSeaBoot br; CMasterBoot mbr; - bdev->bd_signature=BD_SIGNATURE_VAL; + bd->bd_signature=BD_SIGNATURE_VAL; if (make_free) - p=PrtMakeFree(bdev->first_drv_let+result); + dv=DrvMakeFree(bd->first_drv_let+result); else - p=PrtNextFree(bdev->first_drv_let+result); - p->bdev=bdev; - p->size=bdev->max_blk+1; - switch (bdev->type) { + dv=DrvNextFree(bd->first_drv_let+result); + dv->bd=bd; + dv->size=bd->max_blk+1; + switch (bd->type) { case BDT_RAM: - p->pt_signature=PRT_SIGNATURE_VAL; - p->type=PT_REDSEA; + dv->dv_signature=DRV_SIGNATURE_VAL; + dv->type=DVT_REDSEA; //This is to force creation of a RAM //drive during boot, so it is probably //MAlloced to the same addr and can //be assumed to be already formatted. //If this line is removed, RAM Drives -//will be allocated on a just-in-time +//will be alloced on a just-in-time //basis. - if (BlkDevInit(bdev)) + if (BlkDevInit(bd)) result++; else - p->pt_signature=0; + dv->dv_signature=0; break; case BDT_ATA: - p->pt_signature=PRT_SIGNATURE_VAL; //Temporarily validate - if (!BlkDevInit(bdev)) - p->pt_signature=0; //Revoke validation + dv->dv_signature=DRV_SIGNATURE_VAL; //Temporarily validate + if (!BlkDevInit(bd)) + dv->dv_signature=0; //Revoke validation else { - p->pt_signature=0; //Revoke validation - if (one_prt) { - p->pt_signature=PRT_SIGNATURE_VAL; + dv->dv_signature=0; //Revoke validation + if (one_drv) { + dv->dv_signature=DRV_SIGNATURE_VAL; result++; - p->type=PT_REDSEA; - p->size=bdev->max_blk+1; + dv->type=DVT_REDSEA; + dv->size=bd->max_blk+1; //The following read is a test read. //if it hangs, the drive is not supported. - ATAReadBlks(bdev,&mbr,0,1); + ATAReadBlks(bd,&mbr,0,1); break; } offset=0; ext_base=INVALID_CLUSTER; while (TRUE) { - ATAReadBlks(bdev,&mbr,offset,1); + ATAReadBlks(bd,&mbr,offset,1); if (mbr.signature!=0xAA55) break; j=-1; for (i=0;i<4;i++) { if (mbr.p[i].type) { if (make_free) - p=PrtMakeFree(bdev->first_drv_let+result); + dv=DrvMakeFree(bd->first_drv_let+result); else - p=PrtNextFree(bdev->first_drv_let+result); - p->bdev=bdev; - p->offset=mbr.p[i].offset+offset; - p->size =mbr.p[i].size; + dv=DrvNextFree(bd->first_drv_let+result); + dv->bd=bd; + dv->base_offset=mbr.p[i].offset+offset; + dv->size =mbr.p[i].size; switch (mbr.p[i].type) { case MBR_PT_REDSEA: - p->pt_signature=PRT_SIGNATURE_VAL; + dv->dv_signature=DRV_SIGNATURE_VAL; result++; - p->type=PT_REDSEA; - RedSeaFSPrtInit(p); + dv->type=DVT_REDSEA; + RedSeaDrvInit(dv); break; case MBR_PT_FAT32a: case MBR_PT_FAT32b: @@ -95,30 +95,30 @@ I64 BlkDevAdd(CBlkDev *bdev,Bool one_prt,Bool make_free) case MBR_PT_FAT32d: case MBR_PT_FAT32e: case MBR_PT_FAT32f: - ATAReadBlks(bdev,&br,p->offset,1); - p->pt_signature=PRT_SIGNATURE_VAL; + ATAReadBlks(bd,&br,dv->base_offset,1); + dv->dv_signature=DRV_SIGNATURE_VAL; result++; if (br.signature==MBR_PT_REDSEA) { - p->type=PT_REDSEA; - RedSeaFSPrtInit(p); + dv->type=DVT_REDSEA; + RedSeaDrvInit(dv); } else { - p->type=PT_FAT32; - FAT32PrtInit(p); + dv->type=DVT_FAT32; + FAT32DrvInit(dv); } break; case MBR_PT_NTFS: - p->pt_signature=PRT_SIGNATURE_VAL; + dv->dv_signature=DRV_SIGNATURE_VAL; result++; - p->type=PT_NTFS; + dv->type=DVT_NTFS; break; case 5: case 15: j=i; break; default: - p->pt_signature=PRT_SIGNATURE_VAL; + dv->dv_signature=DRV_SIGNATURE_VAL; result++; - p->type=PT_UNKNOWN; + dv->type=DVT_UNKNOWN; } } } @@ -135,26 +135,26 @@ I64 BlkDevAdd(CBlkDev *bdev,Bool one_prt,Bool make_free) } break; case BDT_ATAPI: - p->pt_signature=PRT_SIGNATURE_VAL; + dv->dv_signature=DRV_SIGNATURE_VAL; result++; - p->type=PT_ISO9660; //Start with this - p->size =0; + dv->type=DVT_ISO9660; //Start with this + dv->size =0; break; } if (result) - SetBlkDevLockFwding(bdev); + BlkDevLockFwdingSet(bd); else - MemSet(bdev,0,sizeof(CBlkDev)); + MemSet(bd,0,sizeof(CBlkDev)); return result; } Bool DrvEnable(U8 drv_let,Bool val) {//Can unmount or remount, but not mount the first time. - CPrt *p; + CDrv *dv; Bool result=FALSE; try { - p=Drv2Prt(drv_let); - result=!LBEqu(&p->type,PTf_DISABLE,!val); + dv=Let2Drv(drv_let); + result=!LBEqu(&dv->type,DVTf_DISABLE,!val); } catch Fs->catch_except=TRUE; return result; @@ -172,14 +172,14 @@ CATARep *ATARepFind(CATARep *haystack_root,I64 needle_num) U0 Mount(Bool repartition=FALSE) {//Mount a drive. - CBlkDev *bdev; - I64 first_prt_num,type,unit,num_hints; + CBlkDev *bd; + I64 first_drv_num,type,unit,num_hints; U8 blks_buf[128],addr_buf[128],base0_buf[128],base1_buf[128]; Bool add; CATARep *root,*tempha; do { - PrtRep; + DrvRep; "\n****** Mount Drives ******\n" "The first drive letter is the letter\n" "of the first partition. If adding\n" @@ -187,9 +187,9 @@ U0 Mount(Bool repartition=FALSE) "If more than one partition is present\n" "they will be lettered in sequence.\n" "\nFirst Drive Letter ($$PURPLE$$$$FG$$ to exit):"; - first_prt_num=ToUpper(GetChar)-'A'; + first_drv_num=ToUpper(GetChar)-'A'; '\n'; - if (0<=first_prt_numunit=unit; + bd=BlkDevNextFree(first_drv_num+'A',type); + bd->unit=unit; if (type==BDT_RAM) { if (!*addr_buf) StrCpy(addr_buf,"0"); - bdev->RAM_dsk=Str2I64(addr_buf); - bdev->max_blk=Str2I64(blks_buf)-1; + bd->RAM_dsk=Str2I64(addr_buf); + bd->max_blk=Str2I64(blks_buf)-1; } if (type==BDT_ATA || type==BDT_ATAPI) { - bdev->base0=Str2I64(base0_buf); - bdev->base1=Str2I64(base1_buf); + bd->base0=Str2I64(base0_buf); + bd->base1=Str2I64(base1_buf); } add=TRUE; if (type==BDT_ATA && repartition) { "\nReformat WHOLE drive!"; if (YorN) { - if (!BlkDevAdd(bdev,TRUE,TRUE)) + if (!BlkDevAdd(bd,TRUE,TRUE)) "\n\n$$BK,1$$$$RED$$Operation Failed$$BK,0$$$$FG$$\n\n"; else - CallExtStr("PrtDsk",bdev->first_drv_let); + CallExtStr("PrtDsk",bd->first_drv_let); add=FALSE; } } - if (add && !BlkDevAdd(bdev,FALSE,TRUE)) + if (add && !BlkDevAdd(bd,FALSE,TRUE)) "\n\n$$BK,1$$$$RED$$Operation Failed$$BK,0$$$$FG$$\n\n"; } else "\n\n$$BK,1$$$$RED$$Operation Failed$$BK,0$$$$FG$$\n\n"; } - } while (0<=first_prt_numbase0=SysGetI64; - bdev->base1=0; - bdev->unit =0; - if (bdev->base0) { + bd->base0=SysGetI64; + bd->base1=0; + bd->unit =0; + if (bd->base0) { "\nUnit (0 or 1): "; do ch=GetChar(,FALSE); while (!('0'<=ch<='1')); '' ch; - bdev->unit=ch-'0'; - dsk.cdrom_boot_is_good=BootCdProbe(bdev); + bd->unit=ch-'0'; + dsk.cdrom_boot_is_good=BootCdProbe(bd); return TRUE; } else { dsk.cdrom_boot_is_good=FALSE; @@ -314,12 +315,12 @@ Bool GetBaseUnit(CBlkDev *bdev) U0 BlkDevsInitAll() { - CBlkDev *bdev; + CBlkDev *bd; I64 i; dsk.blkdevs=CAlloc(sizeof(CBlkDev)*NUM_BLKDEVS); - dsk.prts=CAlloc(sizeof(CPrt)*NUM_PRTS); - for (i=0;iopts[CFG_AUTO_MOUNT_IDE]) @@ -328,5 +329,5 @@ U0 BlkDevsInitAll() StreamDoc(kernel_cfg->add_dev); StreamPrint("#exe {OptOn(OPTf_WARN_PAREN);}"); }; - PrtRep; + DrvRep; } diff --git a/Kernel/Dsk/Dsk1b.CPP b/Kernel/Dsk/DskB.CPP similarity index 63% rename from Kernel/Dsk/Dsk1b.CPP rename to Kernel/Dsk/DskB.CPP index a851fa1..72c8f0f 100644 --- a/Kernel/Dsk/Dsk1b.CPP +++ b/Kernel/Dsk/DskB.CPP @@ -1,9 +1,9 @@ -Bool MapDrv(U8 drv_let,CPrt *p) +Bool MapDrv(U8 drv_let,CDrv *dv) {//Make drive letter map to another. drv_let=ToUpper(drv_let); if ('A'<=drv_let<='Z') { - dsk.drv_to_prt[drv_let-'A']=p; - p->drv_let=drv_let; + dsk.let_to_drv[drv_let-'A']=dv; + dv->drv_let=drv_let; return TRUE; } else return FALSE; @@ -11,22 +11,22 @@ Bool MapDrv(U8 drv_let,CPrt *p) Bool Drv(U8 drv_let) {//Set drive. You can set drive with $LK,"Cd",A="MN:Cd"$() as well. - CPrt *p=Drv2Prt(drv_let); - CBlkDev *bdev=p->bdev; - BlkDevChk(bdev); - if (p!=Fs->cur_prt) { - if (bdev->flags & BDF_REMOVABLE && !(bdev->flags & BDF_INITIALIZED)) - ChgDsk(Prt2Drv(p)); - if (bdev->type==BDT_RAM) - BlkDevInit(bdev); + CDrv *dv=Let2Drv(drv_let); + CBlkDev *bd=dv->bd; + BlkDevChk(bd); + if (dv!=Fs->cur_dv) { + if (bd->flags & BDF_REMOVABLE && !(bd->flags & BDF_INITIALIZED)) + ChgDsk(Drv2Let(dv)); + if (bd->type==BDT_RAM) + BlkDevInit(bd); } - Fs->cur_prt=p; + Fs->cur_dv=dv; Free(Fs->cur_dir); Fs->cur_dir=StrNew("/"); - switch (p->type) { - case PT_REDSEA: - case PT_FAT32: - case PT_ISO9660: + switch (dv->type) { + case DVT_REDSEA: + case DVT_FAT32: + case DVT_ISO9660: return TRUE; default: PrintErr("File System Not Supported\n"); @@ -34,19 +34,21 @@ Bool Drv(U8 drv_let) } } -Bool Cd(U8 *dirname,Bool make_dirs=FALSE) +Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE) {//Change directory. Optionally, make directories, too. I64 maxlen,cur_dir_cluster=0; U8 *chg_to_buf,*new_cur_dir,*buf; - CPrt *p; + CDrv *dv; Bool result=TRUE; - if (!*dirname) + if (!dirname) + dirname="::/Home"; + else if (!*dirname) return TRUE; if (dirname[1]==':') { if (*dirname==':') { - if (Fs->cur_prt->drv_let!=*sys_acct && !Drv(*dirname)) + if (Fs->cur_dv!=Let2Drv(':') && !Drv(*dirname)) return FALSE; - } else if (Fs->cur_prt!=Drv2Prt(*dirname) && !Drv(*dirname)) + } else if (Fs->cur_dv!=Let2Drv(*dirname) && !Drv(*dirname)) return FALSE; dirname+=2; } @@ -70,38 +72,31 @@ Bool Cd(U8 *dirname,Bool make_dirs=FALSE) if (!*new_cur_dir) StrCpy(new_cur_dir,"/"); } else if (StrCmp(buf,".") && *buf) { - if (!StrCmp(buf,"HOME")) { - result=Cd(sys_acct); - Free(new_cur_dir); - new_cur_dir=MAlloc(maxlen+StrLen(sys_acct)); - StrCpy(new_cur_dir,sys_acct+2); - } else { - p=Fs->cur_prt; - cur_dir_cluster=Name2DirCluster(p,new_cur_dir); - switch (p->type) { - case PT_REDSEA: - result=RedSeaFSCd(buf,cur_dir_cluster); - break; - case PT_FAT32: - result=FAT32Cd(buf,cur_dir_cluster); - break; - case PT_ISO9660: - result=ISO1Cd(buf,cur_dir_cluster); - break; - default: - PrintErr("File System Not Supported\n"); - result=FALSE; - } - if (!result && make_dirs) { - Free(Fs->cur_dir); - Fs->cur_dir=StrNew(new_cur_dir); - result=MkDir(buf); - } - if (result) { - if (StrCmp(new_cur_dir,"/")) - CatPrint(new_cur_dir,"/"); - CatPrint(new_cur_dir,buf); - } + dv=Fs->cur_dv; + cur_dir_cluster=Name2DirCluster(dv,new_cur_dir); + switch (dv->type) { + case DVT_REDSEA: + result=RedSeaCd(buf,cur_dir_cluster); + break; + case DVT_FAT32: + result=FAT32Cd(buf,cur_dir_cluster); + break; + case DVT_ISO9660: + result=ISO1Cd(buf,cur_dir_cluster); + break; + default: + PrintErr("File System Not Supported\n"); + result=FALSE; + } + if (!result && make_dirs) { + Free(Fs->cur_dir); + Fs->cur_dir=StrNew(new_cur_dir); + result=MkDir(buf); + } + if (result) { + if (StrCmp(new_cur_dir,"/")) + CatPrint(new_cur_dir,"/"); + CatPrint(new_cur_dir,buf); } } } @@ -114,17 +109,17 @@ Bool Cd(U8 *dirname,Bool make_dirs=FALSE) } U0 FileAccessDel(CFileAccess *fa) -{//Change back to old cur_dir and prt. - CBlkDev *bdev; +{//Change back to old cur_dir and drv. + CBlkDev *bd; if (!fa) return; - bdev=fa->old_prt->bdev; - if (!(bdev->flags & BDF_INIT_IN_PROGRESS)) { + bd=fa->old_dv->bd; + if (!(bd->flags & BDF_INIT_IN_PROGRESS)) { if (fa->old_dir) { - Drv(Prt2Drv(fa->old_prt)); + Drv(Drv2Let(fa->old_dv)); Cd(fa->old_dir); } } else { - Fs->cur_prt=fa->old_prt; + Fs->cur_dv=fa->old_dv; Free(Fs->cur_dir); Fs->cur_dir=StrNew("/"); } @@ -134,23 +129,21 @@ U0 FileAccessDel(CFileAccess *fa) } CFileAccess *FileAccessNew(U8 *_mask,Bool make_mask=FALSE,Bool make_dirs=FALSE,Bool no_mask=FALSE) -{//Save cur_dir and prt. Change to new dir. +{//Save cur_dir and drv. Change to new dir. Bool valid=TRUE,old_silent; U8 *buf,*mask,*temp_mask; CFileAccess *fa=CAlloc(sizeof(CFileAccess)); mask=MStrUtil(_mask,SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); temp_mask=mask; fa->old_dir=StrNew(Fs->cur_dir); - fa->old_prt=Fs->cur_prt; + fa->old_dv=Fs->cur_dv; if (*mask && mask[1]==':') { - if (Fs->cur_prt!=Drv2Prt(*mask) && !Drv(*mask)) + if (Fs->cur_dv!=Let2Drv(*mask) && !Drv(*mask)) valid=FALSE; mask+=2; } - if (StrMatch("HOME",mask) && Fs->cur_prt!=Drv2Prt(*sys_acct)) - Drv(*sys_acct); - fa->p=Fs->cur_prt; - PrtChk(fa->p); + fa->dv=Fs->cur_dv; + DrvChk(fa->dv); buf=MAlloc(StrLen(mask)+2); StrCpy(buf,mask); fa->mask=MAlloc(StrLen(mask)+2); @@ -169,7 +162,7 @@ CFileAccess *FileAccessNew(U8 *_mask,Bool make_mask=FALSE,Bool make_dirs=FALSE,B fa->mask=StrNew("*"); } else { if (!make_dirs || FileNameChk(fa->mask)) { - old_silent=Silent(ON); + old_silent=Silent; //Try mask to see if Dir. If Dir, change to dir and set to "*". if (Cd(fa->mask,make_dirs)) { Free(fa->mask); @@ -184,7 +177,6 @@ CFileAccess *FileAccessNew(U8 *_mask,Bool make_mask=FALSE,Bool make_dirs=FALSE,B if (!valid) { FileAccessDel(fa); fa=NULL; -// throw('File'); } return fa; } @@ -219,7 +211,7 @@ $LK,"DirTreeDel",A="MN:DirTreeDel"$() or $LK,"DirTreeDel2",A="MN:DirTreeDel2"$() Bool IsDir(U8 *dir_name) {//Is a str a valid, existing Dir? U8 *mask=MStrPrint("%s/*",dir_name); - Bool result,old_silent=Silent(ON); + Bool result,old_silent=Silent; CFileAccess *fa; if (fa=FileAccessNew(mask)) { FileAccessDel(fa); @@ -248,14 +240,14 @@ I64 Del(U8 *files_find_mask,Bool print_msg=TRUE) I64 result=0; CFileAccess *fa; if (fa=FileAccessNew(files_find_mask)) { - switch (fa->p->type) { - case PT_REDSEA: - result=RedSeaFSFilesDel(fa->p,Fs->cur_dir,fa->mask,0,FALSE,print_msg); + switch (fa->dv->type) { + case DVT_REDSEA: + result=RedSeaFilesDel(fa->dv,Fs->cur_dir,fa->mask,0,FALSE,print_msg); break; - case PT_FAT32: - result=FAT32FilesDel(fa->p,Fs->cur_dir,fa->mask,0,FALSE,print_msg); + case DVT_FAT32: + result=FAT32FilesDel(fa->dv,Fs->cur_dir,fa->mask,0,FALSE,print_msg); break; - case PT_ISO9660: + case DVT_ISO9660: PrintErr("Not Writable\n"); break; default: @@ -266,7 +258,7 @@ I64 Del(U8 *files_find_mask,Bool print_msg=TRUE) return result; } -U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL,Bool raw=FALSE) +U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL) {//Read whole file from disk. CHashGeneric *temph; U8 *absname,*altname,*curname,*result=NULL; @@ -275,8 +267,8 @@ U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL,Bool raw=FALSE) CArcCompress *ac; absname=FileNameAbs(filename); altname=ToggleZorNotZ(absname); - if (!raw && ((temph=HashFind(absname,adam_task->hash_table,HTT_FILE))|| - (temph=HashFind(altname,adam_task->hash_table,HTT_FILE)))) { + if ((temph=HashFind(absname,adam_task->hash_table,HTT_FILE))|| + (temph=HashFind(altname,adam_task->hash_table,HTT_FILE))) { size=temph->user_data1; result=MAlloc(size+1); MemCpy(result,temph->user_data0,size); @@ -289,15 +281,15 @@ U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL,Bool raw=FALSE) else curname=altname; if (fa=FileAccessNew(curname)) { - switch (fa->p->type) { - case PT_REDSEA: - result=RedSeaFSFileRead(fa->p,Fs->cur_dir,fa->mask,&size,&attr); + switch (fa->dv->type) { + case DVT_REDSEA: + result=RedSeaFileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); break; - case PT_FAT32: - result=FAT32FileRead(fa->p,Fs->cur_dir,fa->mask,&size,&attr); + case DVT_FAT32: + result=FAT32FileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); break; - case PT_ISO9660: - result=ISO1FileRead(fa->p,Fs->cur_dir,fa->mask,&size,&attr); + case DVT_ISO9660: + result=ISO1FileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); break; default: PrintErr("File System Not Supported\n"); @@ -315,15 +307,15 @@ U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL,Bool raw=FALSE) if (fa=FileAccessNew(curname)) { while (!result && StrCmp(Fs->cur_dir,"/")) { Cd(".."); - switch (Fs->cur_prt->type) { - case PT_REDSEA: - result=RedSeaFSFileRead(fa->p,Fs->cur_dir,fa->mask,&size,&attr); + switch (Fs->cur_dv->type) { + case DVT_REDSEA: + result=RedSeaFileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); break; - case PT_FAT32: - result=FAT32FileRead(fa->p,Fs->cur_dir,fa->mask,&size,&attr); + case DVT_FAT32: + result=FAT32FileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); break; - case PT_ISO9660: - result=ISO1FileRead(fa->p,Fs->cur_dir,fa->mask,&size,&attr); + case DVT_ISO9660: + result=ISO1FileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); break; default: PrintErr("File System Not Supported\n"); @@ -336,10 +328,10 @@ U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL,Bool raw=FALSE) "%s ",filename; PrintErr("File not found.\n"); } - if (result && !raw && attr & RS_ATTR_RESIDENT) + if (result && attr & RS_ATTR_RESIDENT) HashGenericAdd(curname,HTT_FILE,AMAllocIdentical(result),size,0,adam_task); } - if (result && !raw && attr & RS_ATTR_COMPRESSED) { + if (result && attr & RS_ATTR_COMPRESSED) { ac=result; size=ac->expanded_size; result=ExpandBuf(ac); @@ -359,7 +351,7 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0) U8 *altname,*curname,*full_name=NULL; CDirEntry de; CFileAccess *fa; - Bool result=FALSE; + Bool result=FALSE,old_silent; if (fuf_flags&~FUG_FILE_FIND) throw('FUF'); if (!filename) return FALSE; @@ -373,23 +365,31 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0) curname=filename; else curname=altname; - if (fa=FileAccessNew(curname)) { - cur_dir_cluster=Name2DirCluster(fa->p,Fs->cur_dir); - switch (fa->p->type) { - case PT_REDSEA: - result=RedSeaFSFileFind(fa->p,cur_dir_cluster,fa->mask,&de,fuf_flags); + old_silent=Silent; + if (!(fa=FileAccessNew(curname))) + Silent(old_silent); + else { + Silent(old_silent); + cur_dir_cluster=Name2DirCluster(fa->dv,Fs->cur_dir); + switch (fa->dv->type) { + case DVT_REDSEA: + result=RedSeaFileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); break; - case PT_FAT32: - result=FAT32FileFind(fa->p,cur_dir_cluster,fa->mask,&de,fuf_flags); + case DVT_FAT32: + result=FAT32FileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); break; - case PT_ISO9660: - result=ISO1FileFind(fa->p,cur_dir_cluster,fa->mask,&de,fuf_flags); + case DVT_ISO9660: + result=ISO1FileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); break; default: PrintErr("File System Not Supported\n"); } - if (result && _de) - full_name=MStrPrint("%C:%s/%s",Fs->cur_prt->drv_let,Fs->cur_dir,de.name); + if (result && _de) { + if (StrCmp(Fs->cur_dir,"/")) + full_name=MStrPrint("%C:%s/%s",Drv2Let(Fs->cur_dv),Fs->cur_dir,de.name); + else + full_name=MStrPrint("%C:/%s",Drv2Let(Fs->cur_dv),de.name); + } FileAccessDel(fa); } } @@ -398,27 +398,35 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0) curname=filename; else curname=altname; - if (fa=FileAccessNew(curname)) { - cur_dir_cluster=Name2DirCluster(fa->p,Fs->cur_dir); + old_silent=Silent; + if (!(fa=FileAccessNew(curname))) + Silent(old_silent); + else { + Silent(old_silent); + cur_dir_cluster=Name2DirCluster(fa->dv,Fs->cur_dir); while (!result && StrCmp(Fs->cur_dir,"/")) { Cd(".."); - cur_dir_cluster=Name2DirCluster(fa->p,Fs->cur_dir); - switch (fa->p->type) { - case PT_REDSEA: - result=RedSeaFSFileFind(fa->p,cur_dir_cluster,fa->mask,&de,fuf_flags); + cur_dir_cluster=Name2DirCluster(fa->dv,Fs->cur_dir); + switch (fa->dv->type) { + case DVT_REDSEA: + result=RedSeaFileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); break; - case PT_FAT32: - result=FAT32FileFind(fa->p,cur_dir_cluster,fa->mask,&de,fuf_flags); + case DVT_FAT32: + result=FAT32FileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); break; - case PT_ISO9660: - result=ISO1FileFind(fa->p,cur_dir_cluster,fa->mask,&de,fuf_flags); + case DVT_ISO9660: + result=ISO1FileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); break; default: PrintErr("File System Not Supported\n"); } } - if (result && _de) - full_name=MStrPrint("%C:%s/%s",Fs->cur_prt->drv_let,Fs->cur_dir,de.name); + if (result && _de) { + if (StrCmp(Fs->cur_dir,"/")) + full_name=MStrPrint("%C:%s/%s",Drv2Let(Fs->cur_dv),Fs->cur_dir,de.name); + else + full_name=MStrPrint("%C:/%s",Drv2Let(Fs->cur_dv),de.name); + } FileAccessDel(fa); } } @@ -434,7 +442,7 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0) } I64 FileWrite(U8 *filename,U8 *fbuf, - I64 size,CDate cdt=0,I64 attr=0,Bool raw=FALSE) + I64 size,CDate cdt=0,I64 attr=0) {//Write whole file to disk. I64 c=0; CHashGeneric *temph; @@ -442,34 +450,34 @@ I64 FileWrite(U8 *filename,U8 *fbuf, U8 *fbuf2,*absname=FileNameAbs(filename); if (fa=FileAccessNew(filename,FALSE,TRUE)) { attr=FileAttr(fa->mask,attr); - if (attr&RS_ATTR_COMPRESSED && !raw) { + if (attr&RS_ATTR_COMPRESSED) { fbuf=CompressBuf(fbuf,size); size=fbuf(CArcCompress *)->compressed_size; fbuf2=fbuf; } else fbuf2=NULL; if (!cdt) cdt=Now; - switch (fa->p->type) { - case PT_REDSEA: - c=RedSeaFSFileWrite(fa->p,Fs->cur_dir,fa->mask,fbuf,size,cdt,attr); + switch (fa->dv->type) { + case DVT_REDSEA: + c=RedSeaFileWrite(fa->dv,Fs->cur_dir,fa->mask,fbuf,size,cdt,attr); break; - case PT_FAT32: - c=FAT32FileWrite(fa->p,Fs->cur_dir,fa->mask,fbuf,size,cdt,attr); + case DVT_FAT32: + c=FAT32FileWrite(fa->dv,Fs->cur_dir,fa->mask,fbuf,size,cdt,attr); break; - case PT_ISO9660: + case DVT_ISO9660: PrintErr("Not Writable\n"); break; default: PrintErr("File System Not Supported\n"); } if (temph=HashFind(absname,adam_task->hash_table,HTT_FILE)) { - if (!raw && attr & RS_ATTR_RESIDENT) { + if (attr & RS_ATTR_RESIDENT) { Free(temph->user_data0); temph->user_data0=AMAllocIdentical(fbuf); temph->user_data1=size; } else HashRemDel(temph,adam_task->hash_table); - } else if (!raw && attr & RS_ATTR_RESIDENT) + } else if (attr & RS_ATTR_RESIDENT) HashGenericAdd(absname,HTT_FILE,AMAllocIdentical(fbuf),size,0,adam_task); Free(fbuf2); FileAccessDel(fa); diff --git a/Kernel/Dsk/Dsk1c.CPP b/Kernel/Dsk/DskC.CPP similarity index 74% rename from Kernel/Dsk/Dsk1c.CPP rename to Kernel/Dsk/DskC.CPP index 4dbef2a..2f255c8 100644 --- a/Kernel/Dsk/Dsk1c.CPP +++ b/Kernel/Dsk/DskC.CPP @@ -93,14 +93,14 @@ Bool MkDir(U8 *filename) else { "Make Directory:%s\n",filename; name=MStrUtil(fa->mask,SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); - switch (fa->p->type) { - case PT_REDSEA: - result=RedSeaFSMkDir(fa->p,Fs->cur_dir,name); + switch (fa->dv->type) { + case DVT_REDSEA: + result=RedSeaMkDir(fa->dv,Fs->cur_dir,name); break; - case PT_FAT32: - result=FAT32MkDir(fa->p,Fs->cur_dir,name); + case DVT_FAT32: + result=FAT32MkDir(fa->dv,Fs->cur_dir,name); break; - case PT_ISO9660: + case DVT_ISO9660: PrintErr("Not Writable\n"); break; default: @@ -119,14 +119,14 @@ I64 SysDel(U8 *wild,Bool make_mask) //this is dangerous I64 result=0; CFileAccess *fa; if (fa=FileAccessNew(wild,make_mask)) { - switch (fa->p->type) { - case PT_REDSEA: - result=RedSeaFSFilesDel(fa->p,Fs->cur_dir,fa->mask,0,TRUE,TRUE); + switch (fa->dv->type) { + case DVT_REDSEA: + result=RedSeaFilesDel(fa->dv,Fs->cur_dir,fa->mask,0,TRUE,TRUE); break; - case PT_FAT32: - result=FAT32FilesDel(fa->p,Fs->cur_dir,fa->mask,0,TRUE,TRUE); + case DVT_FAT32: + result=FAT32FilesDel(fa->dv,Fs->cur_dir,fa->mask,0,TRUE,TRUE); break; - case PT_ISO9660: + case DVT_ISO9660: PrintErr("Not Writable\n"); break; default: @@ -137,39 +137,39 @@ I64 SysDel(U8 *wild,Bool make_mask) //this is dangerous return result; } -U0 Fmt(I64 drv_let,Bool quick=TRUE,Bool confirm=TRUE,I64 type=PT_FAT32) +U0 Fmt(I64 drv_let,Bool quick=TRUE,Bool confirm=TRUE,I64 type=DVT_FAT32) {//Format hard drive or RAM drive. //$BK,1$Warning:$BK,0$ Destroys all previous info. //quick=FALSE means fill entire drive //with zeros. -//Choose $LK,"PT_FAT32",A="MN:PT_FAT32"$ or $LK,"PT_REDSEA",A="MN:PT_REDSEA"$. +//Choose $LK,"DVT_FAT32",A="MN:DVT_FAT32"$ or $LK,"DVT_REDSEA",A="MN:DVT_REDSEA"$. //You don't format a CD-ROM with this. - CPrt *p=Drv2Prt(drv_let); + CDrv *dv=Let2Drv(drv_let); Bool old_silent=IsSilent; if (confirm && !AreYouSure) return; - if (!p) { + if (!dv) { PrintErr("Invalid Drive\n"); return; } switch (type) { - case PT_REDSEA: - Silent(ON); + case DVT_REDSEA: + Silent; Drv(drv_let); Silent(old_silent); - RedSeaFSFmt(drv_let,quick); - DskCacheInvalidate(Drv2Prt(drv_let)); + RedSeaFmt(drv_let,quick); + DskCacheInvalidate(Let2Drv(drv_let)); Drv(drv_let); break; - case PT_FAT32: - Silent(ON); + case DVT_FAT32: + Silent; Drv(drv_let); Silent(old_silent); FAT32Fmt(drv_let,quick); - DskCacheInvalidate(Drv2Prt(drv_let)); + DskCacheInvalidate(Let2Drv(drv_let)); Drv(drv_let); break; - case PT_ISO9660: + case DVT_ISO9660: PrintErr("Not Writable\n"); break; default: @@ -179,34 +179,34 @@ U0 Fmt(I64 drv_let,Bool quick=TRUE,Bool confirm=TRUE,I64 type=PT_FAT32) U0 CDImageRead(U8 cd_drv_let,U8 *out_name) {//Read entire CD/DVD image into ISO file. - CBlkDev *bdev=Drv2BlkDev(cd_drv_let); - CPrt *p=Drv2Prt(cd_drv_let); + CBlkDev *bd=Let2BlkDev(cd_drv_let); + CDrv *dv=Let2Drv(cd_drv_let); U8 *buf=MAlloc(COPY_BUF_BLKS<blk_size>>BLK_SIZE_BITS,blk=0,cnt,retry; - BlkDevInit(bdev); - if (bdev->type!=BDT_ATAPI) + I64 n,spc=bd->blk_size>>BLK_SIZE_BITS,blk=0,cnt,retry; + BlkDevInit(bd); + if (bd->type!=BDT_ATAPI) throw('BlkDev'); if (!out_name) out_name=dsk.dft_iso_filename; - cnt=CeilU64(p->size,spc); + cnt=CeilU64(dv->size,spc); while (cnt>0) { if (cnt>COPY_BUF_BLKS) n=COPY_BUF_BLKS; else n=cnt; - if (n>bdev->max_reads) - n=bdev->max_reads; + if (n>bd->max_reads) + n=bd->max_reads; retry=4; while (--retry) - if (ATAPIReadBlks2(bdev,tS+7.0+0.004*n/spc,buf,blk/spc,n/spc,TRUE)) + if (ATAPIReadBlks2(bd,tS+7.0+0.004*n/spc,buf,blk/spc,n/spc,TRUE)) //n is 0x800 if max_reads. Up to 8 additional seconds break; if (!retry) - ATAPIReadBlks2(bdev,0,buf,blk/spc,n/spc,TRUE); + ATAPIReadBlks2(bd,0,buf,blk/spc,n/spc,TRUE); FWBlks(f,buf,blk,n); cnt-=n; @@ -222,7 +222,7 @@ class CDualBuf U8 *buf0,*buf1; I64 in_buf,out_buf,cnt; U8 *filename; - CBlkDev *CD_bdev; + CBlkDev *cd_bd; }; U0 CDImageWriteTask(CDualBuf *d) @@ -240,8 +240,8 @@ U0 CDImageWriteTask(CDualBuf *d) n=COPY_BUF_BLKS; else n=cnt; - if (n>d->CD_bdev->max_writes) - n=d->CD_bdev->max_writes; + if (n>d->cd_bd->max_writes) + n=d->cd_bd->max_writes; if (d->in_buf&1) buf=d->buf1; else @@ -261,8 +261,8 @@ U0 CDImageWrite(U8 cd_drv_let,U8 *in_name=NULL,I64 media_type=MT_CD) CDualBuf *d=CAlloc(sizeof(CDualBuf)); U8 *buf,*in_name2,*in_name3; I64 i,n,spc,blk=0,cnt; - CPrt *p=Drv2Prt(cd_drv_let); - CBlkDev *bdev=p->bdev,*bdev2; + CDrv *dv=Let2Drv(cd_drv_let); + CBlkDev *bd=dv->bd,*bd2; CTask *task; Bool old_preempt; CFile *f; @@ -278,25 +278,25 @@ U0 CDImageWrite(U8 cd_drv_let,U8 *in_name=NULL,I64 media_type=MT_CD) } cnt=(FSize(f)+BLK_SIZE-1)>>BLK_SIZE_BITS; FClose(f); - if (bdev->type!=BDT_ATAPI) + if (bd->type!=BDT_ATAPI) throw('BlkDev'); - bdev2=Drv2BlkDev(*in_name2); - while (bdev2->lock_fwding) - bdev2=bdev2->lock_fwding; - if ((bdev2->type==BDT_ATA || bdev2->type==BDT_ATAPI) && - bdev2->base0==bdev->base0) { + bd2=Let2BlkDev(*in_name2); + while (bd2->lock_fwding) + bd2=bd2->lock_fwding; //If two blkdevs on same controller, use just one lock + if ((bd2->type==BDT_ATA || bd2->type==BDT_ATAPI) && + bd2->base0==bd->base0) { "Can't Burn CD on same ATA ctrller as File.\n\n"; throw('BlkDev'); } - bdev->flags|=BDF_READ_ONLY_OVERRIDE; - BlkDevInit(bdev); - spc=bdev->blk_size>>BLK_SIZE_BITS; - if (p->sizesize=cnt; + bd->flags|=BDF_READ_ONLY_OVERRIDE; + BlkDevInit(bd); + spc=bd->blk_size>>BLK_SIZE_BITS; + if (dv->sizesize=cnt; d->filename=in_name2; - d->CD_bdev=bdev; + d->cd_bd=bd; d->buf0=MAlloc(COPY_BUF_BLKS<buf1=MAlloc(COPY_BUF_BLKS<cnt=cnt; @@ -307,8 +307,8 @@ U0 CDImageWrite(U8 cd_drv_let,U8 *in_name=NULL,I64 media_type=MT_CD) while (d->in_buf<=d->out_buf) Yield; - BlkDevLock(bdev); - ATAPIWaitReady(bdev,0); + BlkDevLock(bd); + ATAPIWaitReady(bd,0); progress1=0; progress1_max=cnt; StrCpy(progress1_desc,"Writing"); @@ -317,43 +317,43 @@ U0 CDImageWrite(U8 cd_drv_let,U8 *in_name=NULL,I64 media_type=MT_CD) n=COPY_BUF_BLKS; else n=cnt; - if (n>bdev->max_writes) - n=bdev->max_writes; + if (n>bd->max_writes) + n=bd->max_writes; if (d->out_buf&1) buf=d->buf1; else buf=d->buf0; while (d->in_buf<=d->out_buf) Yield; - ATAPIWriteBlks(bdev,buf,blk/spc,(n+spc-1)/spc); + ATAPIWriteBlks(bd,buf,blk/spc,(n+spc-1)/spc); d->out_buf++; cnt-=n; blk+=n; progress1+=n; } - ATAPISync(bdev); + ATAPISync(bd); progress1=0; progress1_max=2; StrCpy(progress1_desc,"Closing"); for (i=0;i<2;i++) { - ATAPIClose(bdev,0x100,i); //Close tracks + ATAPIClose(bd,0x100,i); //Close tracks progress1++; } - ATAPISync(bdev); + ATAPISync(bd); - ATAPIClose(bdev,0x200); //close disk - ATAPISync(bdev); + ATAPIClose(bd,0x200); //close disk + ATAPISync(bd); if (media_type==MT_DVD) { - ATAPIClose(bdev,0x300); - ATAPISync(bdev); + ATAPIClose(bd,0x300); + ATAPISync(bd); } *progress1_desc=0; progress1=progress1_max=0; - bdev->flags&=~BDF_READ_ONLY_OVERRIDE; - BlkDevUnlock(bdev); + bd->flags&=~BDF_READ_ONLY_OVERRIDE; + BlkDevUnlock(bd); Free(d->buf0); Free(d->buf1); Free(in_name2); diff --git a/Kernel/Dsk/DskCFile.CPP b/Kernel/Dsk/DskCFile.CPP index 19483d9..3fb7eb6 100644 --- a/Kernel/Dsk/DskCFile.CPP +++ b/Kernel/Dsk/DskCFile.CPP @@ -22,15 +22,15 @@ CFile *FOpen(U8 *filename,U8 *flags,I64 cnt=0) f->max_blk=MAX_I64; f->file_cluster_num=INVALID_CLUSTER; full_name=FileNameAbs(filename); - f->p=Drv2Prt(*full_name); - if (f->p->type==PT_REDSEA) + f->dv=Let2Drv(*full_name); + if (f->dv->type==DVT_REDSEA) contiguous=TRUE; if (contiguous) { f->flags|=FF_CONTIGUOUS; - if (f->p->type!=PT_REDSEA && !(FileAttr(filename) & RS_ATTR_CONTIGUOUS)) + if (f->dv->type!=DVT_REDSEA && !(FileAttr(filename) & RS_ATTR_CONTIGUOUS)) throw('File'); } - f->cluster_buf=CAlloc(f->p->spc<cluster_buf=CAlloc(f->dv->spc<flags=f->flags|FF_WRITE|FF_NEEDS_WRITE; if (StrOcc(flags,'+')) { @@ -47,10 +47,10 @@ CFile *FOpen(U8 *filename,U8 *flags,I64 cnt=0) if (fa=FileAccessNew(full_name)) { StrCpy(f->de.name,fa->mask); if (cnt>0) {//We pre-alloc the whole thing. - f->de.cluster=ClustersAlloc(f->p,0, - (cnt+f->p->spc-1)/f->p->spc,contiguous); + f->de.cluster=ClustersAlloc(f->dv,0, + (cnt+f->dv->spc-1)/f->dv->spc,contiguous); f->de.size=cnt<p,Fs->cur_dir,&f->de,TRUE); + DirNew(fa->dv,Fs->cur_dir,&f->de,TRUE); f->flags&=~FF_NEW_FILE; } FileAccessDel(fa); @@ -75,7 +75,7 @@ U0 FClose(CFile *f) CFileAccess *fa; if (f) { if (f->flags & FF_BUF_DIRTY) { - WClusters(f->p,f->cluster_buf,f->cluster,1); + WClusters(f->dv,f->cluster_buf,f->cluster,1); f->flags&=~FF_BUF_DIRTY; } if (f->flags & FF_NEEDS_WRITE) { @@ -83,9 +83,9 @@ U0 FClose(CFile *f) if (!(f->flags & FF_USE_OLD_DATETIME)) f->de.datetime=Now; if (f->flags & FF_NEW_FILE) - DirNew(fa->p,Fs->cur_dir,&f->de,TRUE); + DirNew(fa->dv,Fs->cur_dir,&f->de,TRUE); else - DirNew(fa->p,Fs->cur_dir,&f->de,FALSE); + DirNew(fa->dv,Fs->cur_dir,&f->de,FALSE); FileAccessDel(fa); } else throw('File'); @@ -98,29 +98,29 @@ U0 FClose(CFile *f) I64 FSetCluster(CFile *f,I64 c,I64 blk,Bool read) { - CPrt *p=f->p; + CDrv *dv=f->dv; I64 i; if (f->cluster!=c) { if (f->flags & FF_BUF_DIRTY) { - i=p->spc; + i=dv->spc; if (f->max_blk!=MAX_I64) { - i=f->max_blk+1-f->file_cluster_num*p->spc; - if (i>p->spc) - i=p->spc; + i=f->max_blk+1-f->file_cluster_num*dv->spc; + if (i>dv->spc) + i=dv->spc; } - WClustersBlks(p,f->cluster_buf,f->cluster,i); + WClustersBlks(dv,f->cluster_buf,f->cluster,i); f->flags=f->flags & ~FF_BUF_DIRTY; } f->cluster=c; - f->file_cluster_num=blk/p->spc; + f->file_cluster_num=blk/dv->spc; if (read) { - i=p->spc; + i=dv->spc; if (f->max_blk!=MAX_I64) { - i=f->max_blk+1-f->file_cluster_num*p->spc; - if (i>p->spc) - i=p->spc; + i=f->max_blk+1-f->file_cluster_num*dv->spc; + if (i>dv->spc) + i=dv->spc; } - c=RClustersBlks(p,f->cluster_buf,c,i); + c=RClustersBlks(dv,f->cluster_buf,c,i); } } return c; @@ -128,9 +128,9 @@ I64 FSetCluster(CFile *f,I64 c,I64 blk,Bool read) Bool FRBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1) {//Read [nth,n+cnt) blks of file. - CPrt *p=f->p; - I64 spc=p->spc,i,j,c=f->de.cluster; - if (!f || !p) return FALSE; + CDrv *dv=f->dv; + I64 spc=dv->spc,i,j,c=f->de.cluster; + if (!f || !dv) return FALSE; if (blk==FFB_NEXT_BLK) blk=f->fblk_num; if (blk+cnt-1>f->max_blk) @@ -138,7 +138,7 @@ Bool FRBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1) if (cnt<=0) return TRUE; if (f->flags & FF_CONTIGUOUS) { - RBlks(p,buf,Cluster2Blk(p,c)+blk,cnt); + RBlks(dv,buf,Cluster2Blk(dv,c)+blk,cnt); blk+=cnt; } else { i=blk/spc; @@ -147,7 +147,7 @@ Bool FRBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1) i-=f->file_cluster_num; } if (i>0) - c=ClusterNumNext(p,c,i); + c=ClusterNumNext(dv,c,i); if (i=blk%spc) { c=FSetCluster(f,c,blk,TRUE); @@ -180,9 +180,9 @@ Bool FRBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1) Bool FWBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1) {//Write [nth,n+cnt) blks of file. - CPrt *p=f->p; - I64 spc=p->spc,i,j,c=f->de.cluster,c1; - if (!f || !p) return FALSE; + CDrv *dv=f->dv; + I64 spc=dv->spc,i,j,c=f->de.cluster,c1; + if (!f || !dv) return FALSE; if (blk==FFB_NEXT_BLK) blk=f->fblk_num; if (blk+cnt-1>f->max_blk) @@ -191,11 +191,11 @@ Bool FWBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1) return FALSE; if (cnt<=0) return TRUE; if (f->flags & FF_CONTIGUOUS) { - WBlks(p,buf,Cluster2Blk(p,c)+blk,cnt); + WBlks(dv,buf,Cluster2Blk(dv,c)+blk,cnt); blk+=cnt; } else { if (!c) { - c=ClustersAlloc(p,0,1,FALSE); + c=ClustersAlloc(dv,0,1,FALSE); f->file_cluster_num=0; f->cluster=c; f->de.cluster=c; @@ -208,11 +208,11 @@ Bool FWBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1) } while (i>0) { c1=c; - c=ClusterNumNext(p,c1,1); + c=ClusterNumNext(dv,c1,1); if (c==INVALID_CLUSTER) { - c=ClustersAlloc(p,c1,i,FALSE); + c=ClustersAlloc(dv,c1,i,FALSE); if (i>1) - c=ClusterNumNext(p,c,i-1); + c=ClusterNumNext(dv,c,i-1); break; } else i--; @@ -231,9 +231,9 @@ Bool FWBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1) blk+=j; if (cnt>0) { c1=c; - c=ClusterNumNext(p,c1,1); + c=ClusterNumNext(dv,c1,1); if (c==INVALID_CLUSTER) - c=ClustersAlloc(p,c1,1,FALSE); + c=ClustersAlloc(dv,c1,1,FALSE); } } while (cnt>=spc) { @@ -245,9 +245,9 @@ Bool FWBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1) blk+=spc; if (cnt>0) { c1=c; - c=ClusterNumNext(p,c1,1); + c=ClusterNumNext(dv,c1,1); if (c==INVALID_CLUSTER) - c=ClustersAlloc(p,c1,1,FALSE); + c=ClustersAlloc(dv,c1,1,FALSE); } } if (cnt>0) { diff --git a/Kernel/Dsk/DskCache.CPP b/Kernel/Dsk/DskCache.CPP index c75f263..9b128c2 100644 --- a/Kernel/Dsk/DskCache.CPP +++ b/Kernel/Dsk/DskCache.CPP @@ -23,7 +23,7 @@ U0 DskCacheInit(I64 size_in_U8s) tempc=dsk.cache_base+i; QueIns(tempc,dsk.cache_ctrl->last_lru); tempc->next_hash=tempc->last_hash=tempc; - tempc->p=NULL; + tempc->dv=NULL; tempc->blk=0; } @@ -60,30 +60,30 @@ U0 DskCacheQueIns(CCacheBlk *tempc) temp_l->next_hash=temp_n->last_hash=tempc; } -CCacheBlk *DskCacheFind(CPrt *p,I64 blk) +CCacheBlk *DskCacheFind(CDrv *dv,I64 blk) { CCacheBlk *tempc,*tempc1=DskCacheHash(blk); tempc=tempc1->next_hash; while (tempc!=tempc1) { - if (tempc->p==p && tempc->blk==blk) + if (tempc->dv==dv && tempc->blk==blk) return tempc; tempc=tempc->next_hash; } return NULL; } -U0 DskCacheAdd(CPrt *p,U8 *buf, I64 blk, I64 cnt) +U0 DskCacheAdd(CDrv *dv,U8 *buf, I64 blk, I64 cnt) { CCacheBlk *tempc; if (dsk.cache_base) { while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) Yield; while (cnt-->0) { - if (!(tempc=DskCacheFind(p,blk))) + if (!(tempc=DskCacheFind(dv,blk))) tempc=dsk.cache_ctrl->next_lru; DskCacheQueRem(tempc); MemCpy(&tempc->body,buf,BLK_SIZE); - tempc->p=p; + tempc->dv=dv; tempc->blk=blk; DskCacheQueIns(tempc); blk++; @@ -93,7 +93,7 @@ U0 DskCacheAdd(CPrt *p,U8 *buf, I64 blk, I64 cnt) } } -U0 DskCacheInvalidate2(CPrt *p) +U0 DskCacheInvalidate2(CDrv *dv) { CCacheBlk *tempc,*tempc1; if (dsk.cache_base) { @@ -102,9 +102,9 @@ U0 DskCacheInvalidate2(CPrt *p) tempc=dsk.cache_ctrl->last_lru; while (tempc!=dsk.cache_ctrl) { tempc1=tempc->last_lru; - if (tempc->p==p) { + if (tempc->dv==dv) { DskCacheQueRem(tempc); - tempc->p=NULL; + tempc->dv=NULL; tempc->blk=0; tempc->next_hash=tempc->last_hash=tempc; QueIns(tempc,dsk.cache_ctrl->last_lru); @@ -115,7 +115,7 @@ U0 DskCacheInvalidate2(CPrt *p) } } -U0 RCache(CPrt *p,U8 **_buf, I64 *_blk, I64 *_cnt) +U0 RCache(CDrv *dv,U8 **_buf, I64 *_blk, I64 *_cnt) { CCacheBlk *tempc; if (dsk.cache_base) { @@ -123,7 +123,7 @@ U0 RCache(CPrt *p,U8 **_buf, I64 *_blk, I64 *_cnt) Yield; //fetch leading blks from cache while (*_cnt>0) { - if (tempc=DskCacheFind(p,*_blk)) { + if (tempc=DskCacheFind(dv,*_blk)) { MemCpy(*_buf,&tempc->body,BLK_SIZE); *_cnt-=1; *_buf+=BLK_SIZE; @@ -133,7 +133,7 @@ U0 RCache(CPrt *p,U8 **_buf, I64 *_blk, I64 *_cnt) } //fetch trailing blks from cache while (*_cnt>0) { - if (tempc=DskCacheFind(p,*_blk+*_cnt-1)) { + if (tempc=DskCacheFind(dv,*_blk+*_cnt-1)) { MemCpy(*_buf+(*_cnt-1)<body,BLK_SIZE); *_cnt-=1; } else diff --git a/Kernel/Dsk/DskDir.CPP b/Kernel/Dsk/DskDir.CPP index fb1f095..fca22d2 100644 --- a/Kernel/Dsk/DskDir.CPP +++ b/Kernel/Dsk/DskDir.CPP @@ -1,11 +1,11 @@ -Bool DirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain=TRUE) +Bool DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain=TRUE) {//Makes a directory entry in the directory from a $LK,"CDirEntry",A="MN:CDirEntry"$ node. - switch (p->type) { - case PT_REDSEA: - return RedSeaFSDirNew(p,cur_dir,tempde,free_old_chain); - case PT_FAT32: - return FAT32DirNew(p,cur_dir,tempde,free_old_chain); - case PT_ISO9660: + switch (dv->type) { + case DVT_REDSEA: + return RedSeaDirNew(dv,cur_dir,tempde,free_old_chain); + case DVT_FAT32: + return FAT32DirNew(dv,cur_dir,tempde,free_old_chain); + case DVT_ISO9660: PrintErr("Not Writable\n"); return FALSE; default: @@ -166,17 +166,17 @@ CDirEntry *DirFilesFlatten(CDirEntry *tempde,CDirEntry **_result,I64 fuf_flags) CDirEntry *SysFilesFind(U8 *files_find_mask,I64 fuf_flags) { - CPrt *p=Fs->cur_prt; + CDrv *dv=Fs->cur_dv; CDirEntry *result=NULL; - PrtChk(p); - switch (p->type) { - case PT_REDSEA: - result=RedSeaFSFilesFind(files_find_mask,fuf_flags); + DrvChk(dv); + switch (dv->type) { + case DVT_REDSEA: + result=RedSeaFilesFind(files_find_mask,fuf_flags); break; - case PT_FAT32: + case DVT_FAT32: result=FAT32FilesFind(files_find_mask,fuf_flags); break; - case PT_ISO9660: + case DVT_ISO9660: result=ISO1FilesFind(files_find_mask,fuf_flags); break; default: @@ -194,7 +194,7 @@ CDirEntry *SysFilesFind(U8 *files_find_mask,I64 fuf_flags) } U0 PutFileLink(U8 *filename,I64 line=0,Bool plain_text=FALSE) -{//Put $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT.Z"$ file,line link to StdOut, $LK,"DocPut",A="MN:DocPut"$. +{//Put $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ file,line link to StdOut, $LK,"DocPut",A="MN:DocPut"$. U8 *buf; if (!filename) return; if (IsRaw) { @@ -228,7 +228,7 @@ U0 PutFileLink(U8 *filename,I64 line=0,Bool plain_text=FALSE) } U0 PutDirLink(U8 *dirname) -{//Put $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT.Z"$ dir macro to StdOut, $LK,"DocPut",A="MN:DocPut"$. +{//Put $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ dir macro to StdOut, $LK,"DocPut",A="MN:DocPut"$. U8 *buf; if (!dirname) return; if (IsRaw) @@ -284,7 +284,6 @@ I64 Dir2(U8 *files_find_mask,I64 fuf_flags,Bool full) PutDirLink(tempde1->name); else PutFileLink(tempde1->name); - '\n'; DirEntryDel(tempde1); tempde1=tempde2; diff --git a/Kernel/Dsk/DskStr.CPP b/Kernel/Dsk/DskStr.CPP index f280440..b5bc7b2 100644 --- a/Kernel/Dsk/DskStr.CPP +++ b/Kernel/Dsk/DskStr.CPP @@ -79,170 +79,161 @@ Bool FilesFindMatch(U8 *test_filename,U8 *files_find_mask,I64 fuf_flags=0) return result; } -U0 PrtChk(CPrt *p) -{//Check for valid partition. Throw exception. - if (!p || p->pt_signature!=PRT_SIGNATURE_VAL) - throw('Prt'); +U0 DrvChk(CDrv *dv) +{//Check for valid drv. Throw exception. + if (!dv || dv->dv_signature!=DRV_SIGNATURE_VAL) + throw('Drv'); } -U8 Prt2Drv(CPrt *p=NULL) -{//Prt ptr to Drv letter. - if (!p) - p=Fs->cur_prt; - PrtChk(p); - return p->drv_let; +U8 Drv2Let(CDrv *dv=NULL) +{//Drv ptr to Drv letter. + if (!dv) + dv=Fs->cur_dv; + DrvChk(dv); + return dv->drv_let; } -CPrt *Drv2Prt(U8 drv_let=0) -{//Drv letter to Prt ptr. - CPrt *p; +CDrv *Let2Drv(U8 drv_let=0) +{//Drv letter to Drv ptr. + CDrv *dv; if (!drv_let) - p=Fs->cur_prt; + dv=Fs->cur_dv; else { if (drv_let==':') - drv_let=*sys_acct; + drv_let=dsk.boot_drv_let; drv_let=ToUpper(drv_let); if (!('A'<=drv_let<='Z')) - throw('Prt'); - p=dsk.drv_to_prt[drv_let-'A']; + throw('Drv'); + dv=dsk.let_to_drv[drv_let-'A']; } - PrtChk(p); - return p; + DrvChk(dv); + return dv; } -U0 BlkDevChk(CBlkDev *bdev) +U0 BlkDevChk(CBlkDev *bd) {//Check for valid BlkDev. Throw exception. - if (!bdev || bdev->bd_signature!=BD_SIGNATURE_VAL || - !(BDT_NULLtypebd_signature!=BD_SIGNATURE_VAL || + !(BDT_NULLtypebdev; - BlkDevChk(bdev); - return bdev; + CDrv *dv=Let2Drv(drv_let); + CBlkDev *bd=dv->bd; + BlkDevChk(bd); + return bd; } Bool IsDrvWritable(U8 drv_let=0) {//Is drive writable? - CBlkDev *bdev=Drv2BlkDev(drv_let); - if (bdev->flags & BDF_READ_ONLY) + CBlkDev *bd=Let2BlkDev(drv_let); + if (bd->flags & BDF_READ_ONLY) return FALSE; else return TRUE; } U8 *CurDir(CTask *task=NULL,CTask *mem_task=NULL) -{//MAlloc copy of cur dir with partition letter. +{//MAlloc copy of cur dir with drv letter. U8 *st; if (!task) task=Fs; if (!task->cur_dir) return NULL; st=MAlloc(StrLen(task->cur_dir)+3,mem_task); - *st=Prt2Drv; + *st=Drv2Let(task->cur_dv); st[1]=':'; StrCpy(st+2,task->cur_dir); return st; } U8 *DirNameAbs(U8 *_dirname) -{//MAlloc absolute dir string with partition letter. +{//MAlloc absolute dir string with drv letter. I64 maxlen; - U8 drv[3],*cur_dir,*buf2,*buf3,*buf,*dirname,*temp_name; + U8 drv[3],*result,*buf,*buf2,*buf3,*buf4,*dirname,*free_dirname; if (!Fs->cur_dir || !*Fs->cur_dir) return StrNew(_dirname); - dirname=MStrUtil(_dirname,SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); - temp_name=dirname; - *drv=Prt2Drv; + free_dirname=dirname=MStrUtil(_dirname, + SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); + *drv=Drv2Let; drv[1]=':'; drv[2]=0; if (*dirname && dirname[1]==':') { if (*dirname==':') - *drv=*sys_acct; + *drv=dsk.boot_drv_let; else *drv=*dirname; dirname=dirname+2; - cur_dir=StrNew("/"); + buf=StrNew("/"); } else - cur_dir=StrNew(Fs->cur_dir); + buf=StrNew(Fs->cur_dir); if (*dirname=='/') { - Free(cur_dir); - cur_dir=StrNew("/"); + Free(buf); + buf=StrNew("/"); dirname++; } - buf2=StrNew(dirname); - maxlen=StrLen(cur_dir)+1+StrLen(buf2)+1; + maxlen=StrLen(buf)+1+StrLen(buf2)+1; buf3=MAlloc(maxlen); - buf =MAlloc(maxlen); - StrCpy(buf3,cur_dir); + buf4=MAlloc(maxlen); + StrCpy(buf3,buf); while (*buf2) { - StrFirstRem(buf2,"/",buf); - if (!*buf) + StrFirstRem(buf2,"/",buf4); + if (!*buf4) StrCpy(buf3,"/"); - else if (!StrCmp(buf,"..")) { + else if (!StrCmp(buf4,"..")) { StrLastRem(buf3,"/"); if (!*buf3) StrCpy(buf3,"/"); - } else if (!StrCmp(buf,".")) { + } else if (!StrCmp(buf4,".")) { ; - } else if (*buf) { - if (!StrCmp(buf,"HOME")) { - Free(buf3); - buf3=MAlloc(maxlen+StrLen(sys_acct)); - StrCpy(buf3,sys_acct+2); - *drv=*sys_acct; - } else { - if (StrCmp(buf3,"/")) - CatPrint(buf3,"/"); - CatPrint(buf3,buf); - } + } else if (*buf4) { + if (StrCmp(buf3,"/")) + CatPrint(buf3,"/"); + CatPrint(buf3,buf4); } } - Free(cur_dir); - cur_dir=MAlloc(StrLen(buf3)+3); - StrCpy(cur_dir,drv); - StrCpy(cur_dir+2,buf3); Free(buf); + result=MAlloc(StrLen(buf3)+3); + StrCpy(result,drv); + StrCpy(result+2,buf3); Free(buf2); Free(buf3); - Free(temp_name); - return cur_dir; + Free(buf4); + Free(free_dirname); + return result; } U8 *FileNameAbs(U8 *_filename,I64 fuf_flags=0) {//Absolute filename. Accepts $LK,"FUF_Z_OR_NOT_Z",A="MN:FUF_Z_OR_NOT_Z"$, $LK,"FUF_SCAN_PARENTS",A="MN:FUF_SCAN_PARENTS"$. - U8 *buf,*buf2,*buf3,*filename,*temp_name,*temp_buf; + U8 *result,*filename,*buf,*buf_file,*buf_dir,*free_filename,*free_buf; CDirEntry de; - filename=MStrUtil(_filename,SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); - temp_name=filename; - buf=StrNew(filename); - temp_buf=buf; + free_filename=filename=MStrUtil(_filename, + SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); + free_buf=buf=StrNew(filename); if (*buf && buf[1]==':') { buf+=2; filename+=2; } - buf2=MAlloc(StrLen(temp_name)+1); - StrLastRem(buf,"/",buf2); + buf_file=MAlloc(StrLen(free_filename)+1); + StrLastRem(buf,"/",buf_file); if (*filename=='/' && !*buf) StrCpy(buf,"/"); - buf3=DirNameAbs(temp_buf); - Free(temp_buf); - buf=MAlloc(StrLen(buf3)+1+StrLen(buf2)+1); - StrCpy(buf,buf3); - if (buf[StrLen(buf)-1]!='/') - CatPrint(buf,"/"); - CatPrint(buf,buf2); - Free(buf2); - Free(buf3); - Free(temp_name); - if (fuf_flags&&FileFind(buf,&de,fuf_flags|FUF_JUST_FILES)) { - Free(buf); - buf=de.full_name; + buf_dir=DirNameAbs(free_buf); + Free(free_buf); + result=MAlloc(StrLen(buf_dir)+1+StrLen(buf_file)+1); + StrCpy(result,buf_dir); + if (result[StrLen(result)-1]!='/') + CatPrint(result,"/"); + CatPrint(result,buf_file); + Free(buf_file); + Free(buf_dir); + Free(free_filename); + if (fuf_flags&&FileFind(result,&de,fuf_flags|FUF_JUST_FILES)) { + Free(result); + result=de.full_name; } - return buf; + return result; } U8 *ChgExt(U8 *filename,U8 *extension) @@ -311,7 +302,7 @@ U8 *DirFile(U8 *dirname,U8 *name=NULL,U8 *_extension=NULL) {/*Strips file from dirname, scans for file upward until found or returns default. -("/Kernel/Hash1a.CPP.Z",NULL,NULL) returns "D:/Kernel" +("/Kernel/KHashA.CPP.Z",NULL,NULL) returns "D:/Kernel" ("/Kernel",NULL,"PRJ.Z") returns "D:/Kernel/Kernel.PRJ.Z" ("/Kernel/Dsk",NULL,"PRJ.Z") returns "D:/Kernel/Kernel.PRJ.Z" ("/Apps/Psalmody","Load","CPP.Z") returns "D:/Apps/Psalmody/Load.CPP.Z" @@ -371,5 +362,5 @@ U8 *ToggleZorNotZ(U8 *name) U8 *FileNameTempTxt() {//Make pretty-safe temp filename in home dir. - return MStrPrint("HOME/SysTemp%X.TXT.Z",GetTSC>>8&0xFFFFFFFF); + return MStrPrint("::/Home/SysTemp%X.TXT.Z",GetTSC>>8&0xFFFFFFFF); } diff --git a/Kernel/Dsk/FileSysFAT.CPP b/Kernel/Dsk/FileSysFAT.CPP index ba289c4..b13d33a 100644 --- a/Kernel/Dsk/FileSysFAT.CPP +++ b/Kernel/Dsk/FileSysFAT.CPP @@ -19,42 +19,42 @@ CDate Dos2CDate(U16 t,U16 d) return Struct2Date(&ds)-local_time_offset; } -U0 FAT32PrtInit(CPrt *p) +U0 FAT32DrvInit(CDrv *dv) { CFAT32Boot br32; Bool unlock; try { - unlock=PrtLock(p); - p->type=PT_FAT32; - RBlks(p,&br32,p->offset,1); - p->file_system_info_sect=p->offset+br32.file_system_info_sect; - p->map1=p->offset+br32.reserved_sects; - p->map2=p->map1+br32.sects_per_fat; - p->data=p->map2+br32.sects_per_fat-2*br32.sects_per_cluster; //Starts at Cluster 2 - p->spc=br32.sects_per_cluster; - p->root_cluster=br32.root_cluster; - MapBufAlloc(p,1); - Free(p->fis); - p->fis=AMAlloc(BLK_SIZE); - RBlks(p,p->fis,p->file_system_info_sect,1); + unlock=DrvLock(dv); + dv->type=DVT_FAT32; + RBlks(dv,&br32,dv->base_offset,1); + dv->file_system_info_sect=dv->base_offset+br32.file_system_info_sect; + dv->map1=dv->base_offset+br32.reserved_sects; + dv->map2=dv->map1+br32.sects_per_fat; + dv->data_area=dv->map2+br32.sects_per_fat-2*br32.sects_per_cluster; //Starts at Cluster 2 + dv->spc=br32.sects_per_cluster; + dv->root_cluster=br32.root_cluster; + DrvMapBlkAlloc(dv); + Free(dv->fis); + dv->fis=AMAlloc(BLK_SIZE); + RBlks(dv,dv->fis,dv->file_system_info_sect,1); if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } catch if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } Bool FAT32DrvValidate(U8 drv_let) { - CPrt *p; + CDrv *dv; CFAT32Boot br; Bool result=FALSE; try { - p=Drv2Prt(drv_let); - if (p->type==PT_FAT32 && - RBlks(p,&br,p->offset,1) && + dv=Let2Drv(drv_let); + if (dv->type==DVT_FAT32 && + RBlks(dv,&br,dv->base_offset,1) && br.signature==0xAA55 && - br.sects==p->size) + br.sects==dv->size) result=TRUE; } catch Fs->catch_except=TRUE; @@ -65,28 +65,28 @@ U0 FAT32Fmt(U8 drv_let,Bool quick=TRUE) { CFAT32Boot *br=CAlloc(BLK_SIZE); CFAT32FileInfoSect *fis=CAlloc(BLK_SIZE); - CPrt *p=Drv2Prt(drv_let); + CDrv *dv=Let2Drv(drv_let); I64 i,l; try { - PrtLock(p); - SetDrvType(drv_let,PT_FAT32); - p->type=PT_FAT32; + DrvLock(dv); + DrvTypeSet(drv_let,DVT_FAT32); + dv->type=DVT_FAT32; br->jump_and_nop[0]=OC_JMP_REL8; br->jump_and_nop[1]=offset(CFAT32Boot.code)-2; br->jump_and_nop[2]=OC_NOP; - MemCpy(br->oem_name,"MSWIN4.1",8); + br->oem_name[0](I64)='MSWIN4.1'; br->bytes_per_sect=BLK_SIZE; - if (p->size<= 500000) + if (dv->size<= 500000) br->sects_per_cluster=1; - else if (p->size<=2000000) + else if (dv->size<=2000000) br->sects_per_cluster=2; - else if (p->size<=6000000) + else if (dv->size<=6000000) br->sects_per_cluster=4; - else if (p->size<=12000000) + else if (dv->size<=12000000) br->sects_per_cluster=8; - else if (p->size<=33000000) + else if (dv->size<=33000000) br->sects_per_cluster=16; - else if (p->size<=67000000) + else if (dv->size<=67000000) br->sects_per_cluster=32; else br->sects_per_cluster=64; @@ -94,7 +94,7 @@ U0 FAT32Fmt(U8 drv_let,Bool quick=TRUE) br->reserved_sects=32; br->copies_of_fat=2; br->media_desc=0xF8; - br->sects=p->size; + br->sects=dv->size; l=(br->sects/br->sects_per_cluster)>>(BLK_SIZE_BITS-2)+1; br->sects_per_fat=l; br->root_cluster=2; @@ -103,30 +103,30 @@ U0 FAT32Fmt(U8 drv_let,Bool quick=TRUE) br->ext_signature=0x29; br->serial_num=RandU32; MemCpy(br->vol_name,"NO NAME ",11); - MemCpy(br->fat_name,"FAT32 ",8); + br->fat_name[0](I64)='FAT32 '; br->signature=0xAA55; - fis->signature1=0x41615252; - fis->signature2=0x61417272; + fis->signature1='RRaA'; + fis->signature2='rrAa'; fis->free_clusters=-1; - fis->most_recently_allocated=0; + fis->most_recently_alloced=0; fis->signature3=0xAA550000; if (quick) i=br->reserved_sects+2*l+4*br->sects_per_cluster; else - i=p->size; - WZeroBlks(p,p->offset,i); + i=dv->size; + WZeroBlks(dv,dv->base_offset,i); - WBlks(p,fis,p->offset+br->file_system_info_sect,1); - WBlks(p,br,p->offset,1); - FAT32PrtInit(p); - ClustersAlloc(p,0,1,FALSE); //Allocate #1 - br->root_cluster=ClustersAlloc(p,0,1,FALSE); - WBlks(p,br,p->offset,1); - FAT32PrtInit(p); - PrtUnlock(p); + WBlks(dv,fis,dv->base_offset+br->file_system_info_sect,1); + WBlks(dv,br,dv->base_offset,1); + FAT32DrvInit(dv); + ClustersAlloc(dv,0,1,FALSE); //Alloc #1 + br->root_cluster=ClustersAlloc(dv,0,1,FALSE); + WBlks(dv,br,dv->base_offset,1); + FAT32DrvInit(dv); + DrvUnlock(dv); } catch - PrtUnlock(p); + DrvUnlock(dv); Free(br); Free(fis); } @@ -296,7 +296,7 @@ Bool FAT32DirFill(CFAT32DirEntry *de,CDirEntry *tempde,I64 *_de_cnt=NULL) return result; } -Bool FAT32FileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0) +Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0) {//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$ Bool result=FALSE,unlock; CFAT32DirEntry *buf; @@ -307,17 +307,17 @@ Bool FAT32FileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 f throw('FUF'); MemSet(_result,0,sizeof(CDirEntry)); MemSet(&long_name,0,sizeof(CDirEntry)); - PrtChk(p); - if (p->type!=PT_FAT32) - PrintErr("Not FAT32 Partition\n"); + DrvChk(dv); + if (dv->type!=DVT_FAT32) + PrintErr("Not FAT32 Drv\n"); else if (!CFileNameTo(dname,name)) PrintErr("Invalid FileName.\n"); else try { - unlock=PrtLock(p); - buf=MAlloc(BLK_SIZE*p->spc); - entries_per_cluster=p->spc<spc); + entries_per_cluster=dv->spc<name)) { - result=TRUE; - goto exit_this; + !(fuf_flags&FUF_JUST_FILES && attr & RS_ATTR_DIR) && + FAT32CDirFill(_result,&buf[cur_dir_entry]) && + !StrCmp(dname,_result->name)) { + result=TRUE; + goto fff_done; } } MemSet(&long_name,0,sizeof(CDirEntry)); @@ -343,64 +343,64 @@ Bool FAT32FileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 f } else MemSet(&long_name,0,sizeof(CDirEntry)); if (++cur_dir_entry==entries_per_cluster) { - cur_dir_cluster=ClusterNumNext(p,cur_dir_cluster); + cur_dir_cluster=ClusterNumNext(dv,cur_dir_cluster); if (!(0type!=PT_FAT32) - PrintErr("Not FAT32 Partition\n"); + if (dv->type!=DVT_FAT32) + PrintErr("Not FAT32 Drv\n"); else try { - PrtLock(p); - cur_dir_cluster=Name2DirCluster(p,cur_dir); - if (FAT32FileFind(p,cur_dir_cluster,filename,&de,FUF_JUST_FILES)) { + DrvLock(dv); + cur_dir_cluster=Name2DirCluster(dv,cur_dir); + if (FAT32FileFind(dv,cur_dir_cluster,filename,&de,FUF_JUST_FILES)) { blk_cnt=(de.size+BLK_SIZE-1)>>BLK_SIZE_BITS; buf=MAlloc(blk_cnt<cur_prt->type!=PT_FAT32) - PrintErr("Not FAT32 Partition\n"); - else if (FAT32FileFind(Fs->cur_prt,cur_dir_cluster,name,&de,FUF_JUST_DIRS)) + if (Fs->cur_dv->type!=DVT_FAT32) + PrintErr("Not FAT32 Drv\n"); + else if (FAT32FileFind(Fs->cur_dv,cur_dir_cluster,name,&de,FUF_JUST_DIRS)) return TRUE; else { "%s ",name; @@ -409,50 +409,50 @@ Bool FAT32Cd(U8 *name,I64 cur_dir_cluster) return FALSE; } -U0 FAT32FreeClusters(CPrt *p,I64 c) +U0 FAT32FreeClusters(CDrv *dv,I64 c) { I64 next,saved_c=c; Bool unlock,unlock_break; - PrtChk(p); + DrvChk(dv); if (!(0type!=PT_FAT32) - PrintErr("Not FAT32 Partition\n"); + if (dv->type!=DVT_FAT32) + PrintErr("Not FAT32 Drv\n"); else try { unlock_break=BreakLock; - unlock=PrtLock(p); - CleanMAPBuf(p); + unlock=DrvLock(dv); + DrvMapBlkClean(dv); do { - SetFSBuf(p,c,0); - next=p->cur_map_blk[c&(BLK_SIZE/4-1)]; - p->cur_map_blk[c&(BLK_SIZE/4-1)]=0; - LBts(p->buffered_map_dirty_bits,0); + DrvMapBlkSet(dv,c,0); + next=dv->cur_map_blk[c&(BLK_SIZE/4-1)]; + dv->cur_map_blk[c&(BLK_SIZE/4-1)]=0; + LBts(&dv->map_blk_dirty,0); c=next; } while (0cur_map_blk[c&(BLK_SIZE/4-1)]; - p->cur_map_blk[c&(BLK_SIZE/4-1)]=0; - LBts(p->buffered_map_dirty_bits,0); + DrvMapBlkSet(dv,c,1); + next=dv->cur_map_blk[c&(BLK_SIZE/4-1)]; + dv->cur_map_blk[c&(BLK_SIZE/4-1)]=0; + LBts(&dv->map_blk_dirty,0); c=next; } while (0size+p->offset-p->data)/p->spc-1; - j=p->fis->most_recently_allocated; + unlock=DrvLock(dv); + l=(dv->size+dv->base_offset-dv->data_area)/dv->spc-1; + j=dv->fis->most_recently_alloced; while (cnt-->0) { while (TRUE) { j++; if (j<1) j=1; if (j>=l) { if (wrap_around) - Dbg; + throw('Drv'); j=1; wrap_around=TRUE; } - SetFSBuf(p,j); - if (!p->cur_map_blk[j&(BLK_SIZE/4-1)]) + DrvMapBlkSet(dv,j); + if (!dv->cur_map_blk[j&(BLK_SIZE/4-1)]) break; } if (!(0cur_map_blk[c&(BLK_SIZE/4-1)]=j; - LBts(p->buffered_map_dirty_bits,0); + DrvMapBlkSet(dv,c); + dv->cur_map_blk[c&(BLK_SIZE/4-1)]=j; + LBts(&dv->map_blk_dirty,0); } c=j; } if (0cur_map_blk[c&(BLK_SIZE/4-1)]=0x0FFFFFFF; - LBts(p->buffered_map_dirty_bits,0); + DrvMapBlkSet(dv,c); + dv->cur_map_blk[c&(BLK_SIZE/4-1)]=0x0FFFFFFF; + LBts(&dv->map_blk_dirty,0); } - CleanMAPBuf(p); + DrvMapBlkClean(dv); - p->fis->most_recently_allocated=j; - p->fis->free_clusters=-1; - WBlks(p,p->fis,p->file_system_info_sect,1); + dv->fis->most_recently_alloced=j; + dv->fis->free_clusters=-1; + WBlks(dv,dv->fis,dv->file_system_info_sect,1); } catch { if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; return first; } -I64 FAT32AllocContiguousClusters(CPrt *p,I64 cnt) +I64 FAT32AllocContiguousClusters(CDrv *dv,I64 cnt) { I64 i,first=1; Bool cont,unlock,unlock_break; @@ -518,16 +518,16 @@ I64 FAT32AllocContiguousClusters(CPrt *p,I64 cnt) if (cnt<=0) return 0x0FFFFFFF; try { unlock_break=BreakLock; - unlock=PrtLock(p); + unlock=DrvLock(dv); while (TRUE) { first++; i=0; cont=TRUE; while (cont && ispc+p->data>p->size+p->offset) - Dbg; - SetFSBuf(p,first+i); - if (p->cur_map_blk[(first+i)&(BLK_SIZE/4-1)]) + if ((first+i+1)*dv->spc+dv->data_area>dv->size+dv->base_offset) + throw('Drv'); + DrvMapBlkSet(dv,first+i); + if (dv->cur_map_blk[(first+i)&(BLK_SIZE/4-1)]) cont=FALSE; else i++; @@ -535,44 +535,44 @@ I64 FAT32AllocContiguousClusters(CPrt *p,I64 cnt) if (!cont) first=first+i; else { - CleanMAPBuf(p); + DrvMapBlkClean(dv); for (i=0;icur_map_blk[(first+i)&(BLK_SIZE/4-1)]=0x0FFFFFFF; + dv->cur_map_blk[(first+i)&(BLK_SIZE/4-1)]=0x0FFFFFFF; else - p->cur_map_blk[(first+i)&(BLK_SIZE/4-1)]=first+i+1; - LBts(p->buffered_map_dirty_bits,0); + dv->cur_map_blk[(first+i)&(BLK_SIZE/4-1)]=first+i+1; + LBts(&dv->map_blk_dirty,0); } - CleanMAPBuf(p,0); + DrvMapBlkClean(dv,0); for (i=0;icur_map_blk[(first+i)&(BLK_SIZE/4-1)]=0x0FFFFFFF; + dv->cur_map_blk[(first+i)&(BLK_SIZE/4-1)]=0x0FFFFFFF; else - p->cur_map_blk[(first+i)&(BLK_SIZE/4-1)]=first+i+1; - LBts(p->buffered_map_dirty_bits,0); + dv->cur_map_blk[(first+i)&(BLK_SIZE/4-1)]=first+i+1; + LBts(&dv->map_blk_dirty,0); } - CleanMAPBuf(p,1); + DrvMapBlkClean(dv,1); break; } } } catch { if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; return first; } -Bool FAT32DirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) +Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) { //See $LK,"::/Doc/CutCorners.TXT"$. CFAT32DirEntry *buf,*last_buf,*temp_buf,de[3]; @@ -586,12 +586,12 @@ Bool FAT32DirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) MemSet(&long_name,0,sizeof(CDirEntry)); try { unlock_break=BreakLock; - unlock=PrtLock(p); - cur_dir_cluster=Name2DirCluster(p,cur_dir); - buf =MAlloc(BLK_SIZE*p->spc); - last_buf=CAlloc(BLK_SIZE*p->spc); - entries_per_cluster=p->spc<spc); + last_buf=CAlloc(BLK_SIZE*dv->spc); + entries_per_cluster=dv->spc<=de_cnt) { MemCpy(&buf[cur_dir_entry],&de,de_cnt*sizeof(CFAT32DirEntry)); - WBlks(p,&buf[cur_dir_entry & -FAT32_ENTRIES_PER_BLK], - p->data+cur_dir_cluster*p->spc + WBlks(dv,&buf[cur_dir_entry & -FAT32_ENTRIES_PER_BLK], + dv->data_area+cur_dir_cluster*dv->spc +cur_dir_entry>>FAT32_ENTRIES_BITS,1); cur_dir_entry+=de_cnt-1; //gets inc'ed written=TRUE; @@ -620,12 +620,12 @@ Bool FAT32DirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) //Del old entry with same name if (!StrCmp(long_name.name,tempde->name)) { if (free_old_chain) - FAT32FreeClusters(p,buf[cur_dir_entry].cluster_lo+ + FAT32FreeClusters(dv,buf[cur_dir_entry].cluster_lo+ buf[cur_dir_entry].cluster_hi<<16); if (!written) { MemCpy(&buf[cur_dir_entry],&de[de_cnt-1],sizeof(CFAT32DirEntry)); - WBlks(p,&buf[cur_dir_entry & -FAT32_ENTRIES_PER_BLK], - p->data+cur_dir_cluster*p->spc + WBlks(dv,&buf[cur_dir_entry & -FAT32_ENTRIES_PER_BLK], + dv->data_area+cur_dir_cluster*dv->spc +cur_dir_entry>>FAT32_ENTRIES_BITS,1); written=TRUE; } else { @@ -635,8 +635,8 @@ Bool FAT32DirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) buf[cur_dir_entry-i].attr&RS_ATTR_LONG_NAME_MASK==RS_ATTR_LONG_NAME) *buf[cur_dir_entry-i++].name=0xE5; i--; - WBlks(p,&buf[(cur_dir_entry-i)&-FAT32_ENTRIES_PER_BLK], - p->data+cur_dir_cluster*p->spc + WBlks(dv,&buf[(cur_dir_entry-i)&-FAT32_ENTRIES_PER_BLK], + dv->data_area+cur_dir_cluster*dv->spc +(cur_dir_entry-i)>>FAT32_ENTRIES_BITS, (i+FAT32_ENTRIES_PER_BLK)>>FAT32_ENTRIES_BITS); if (i==cur_dir_entry && 00) - WBlks(p,&buf[(entries_per_cluster-i)&-FAT32_ENTRIES_PER_BLK], - p->data+last_dir_cluster*p->spc + WBlks(dv,&buf[(entries_per_cluster-i)&-FAT32_ENTRIES_PER_BLK], + dv->data_area+last_dir_cluster*dv->spc +(entries_per_cluster-i)>>FAT32_ENTRIES_BITS, (i+FAT32_ENTRIES_PER_BLK-1)>>FAT32_ENTRIES_BITS); } @@ -659,13 +659,13 @@ Bool FAT32DirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) if (++cur_dir_entry==entries_per_cluster) { last_dir_cluster=cur_dir_cluster; temp_buf=buf; buf=last_buf; last_buf=temp_buf; - c=ClusterNumNext(p,cur_dir_cluster); + c=ClusterNumNext(dv,cur_dir_cluster); if (!(0spc); - WClusters(p,buf,c,1); + c=ClustersAlloc(dv,cur_dir_cluster,1,FALSE); + MemSet(buf,0,BLK_SIZE*dv->spc); + WClusters(dv,buf,c,1); } else - RClusters(p,buf,c,1); + RClusters(dv,buf,c,1); cur_dir_cluster=c; cur_dir_entry=0; } @@ -675,51 +675,51 @@ Bool FAT32DirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) if (avail_cntdata+cur_dir_cluster*p->spc + WBlks(dv,&buf[cur_dir_entry &-FAT32_ENTRIES_PER_BLK], + dv->data_area+cur_dir_cluster*dv->spc +cur_dir_entry>>FAT32_ENTRIES_BITS,1); cur_dir_entry+=avail_cnt; if (cur_dir_entry==entries_per_cluster) { last_dir_cluster=cur_dir_cluster; temp_buf=buf; buf=last_buf; last_buf=temp_buf; - cur_dir_cluster=ClustersAlloc(p,cur_dir_cluster,1); + cur_dir_cluster=ClustersAlloc(dv,cur_dir_cluster,1); cur_dir_entry=0; - MemSet(buf,0,BLK_SIZE*p->spc); - WClusters(p,buf,cur_dir_cluster,1); + MemSet(buf,0,BLK_SIZE*dv->spc); + WClusters(dv,buf,cur_dir_cluster,1); } } MemCpy(&buf[cur_dir_entry],&de,de_cnt*sizeof(CFAT32DirEntry)); - WBlks(p,&buf[cur_dir_entry &-FAT32_ENTRIES_PER_BLK], - p->data+cur_dir_cluster*p->spc+ + WBlks(dv,&buf[cur_dir_entry &-FAT32_ENTRIES_PER_BLK], + dv->data_area+cur_dir_cluster*dv->spc+ cur_dir_entry>>FAT32_ENTRIES_BITS,1); cur_dir_entry+=de_cnt; if (cur_dir_entry==entries_per_cluster) { - cur_dir_cluster=ClustersAlloc(p,cur_dir_cluster,1); - MemSet(buf,0,BLK_SIZE*p->spc); - WClusters(p,buf,cur_dir_cluster,1); + cur_dir_cluster=ClustersAlloc(dv,cur_dir_cluster,1); + MemSet(buf,0,BLK_SIZE*dv->spc); + WClusters(dv,buf,cur_dir_cluster,1); } else { MemSet(&buf[cur_dir_entry],0,sizeof(CFAT32DirEntry)); - WBlks(p,&buf[cur_dir_entry &-FAT32_ENTRIES_PER_BLK], - p->data+cur_dir_cluster*p->spc + WBlks(dv,&buf[cur_dir_entry &-FAT32_ENTRIES_PER_BLK], + dv->data_area+cur_dir_cluster*dv->spc +cur_dir_entry>>FAT32_ENTRIES_BITS,1); } } Free(last_buf); Free(buf); if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } catch { if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } return FALSE; } -I64 FAT32FilesDel(CPrt *p,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, +I64 FAT32FilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, Bool del_dir,Bool print_msg) { CFAT32DirEntry *buf,*last_buf,*temp_buf; @@ -731,12 +731,12 @@ I64 FAT32FilesDel(CPrt *p,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, MemSet(&long_name,0,sizeof(CDirEntry)); try { unlock_break=BreakLock; - PrtLock(p); - cur_dir_cluster=Name2DirCluster(p,cur_dir); - buf =MAlloc(BLK_SIZE*p->spc); - last_buf=CAlloc(BLK_SIZE*p->spc); - entries_per_cluster=p->spc<spc); + last_buf=CAlloc(BLK_SIZE*dv->spc); + entries_per_cluster=dv->spc<data+cur_dir_cluster*p->spc + WBlks(dv,&buf[(cur_dir_entry-i)&-FAT32_ENTRIES_PER_BLK], + dv->data_area+cur_dir_cluster*dv->spc +(cur_dir_entry-i)>>FAT32_ENTRIES_BITS, (i+FAT32_ENTRIES_PER_BLK)>>FAT32_ENTRIES_BITS); if (i==cur_dir_entry && last_dir_cluster!=INVALID_CLUSTER) { @@ -770,12 +770,12 @@ I64 FAT32FilesDel(CPrt *p,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, last_buf[entries_per_cluster-i].attr&RS_ATTR_LONG_NAME_MASK==RS_ATTR_LONG_NAME) *last_buf[entries_per_cluster-i++].name=0xE5; if (--i>0) - WBlks(p,&buf[(entries_per_cluster-i)&-FAT32_ENTRIES_PER_BLK], - p->data+last_dir_cluster*p->spc + WBlks(dv,&buf[(entries_per_cluster-i)&-FAT32_ENTRIES_PER_BLK], + dv->data_area+last_dir_cluster*dv->spc +(entries_per_cluster-i)>>FAT32_ENTRIES_BITS, (i+FAT32_ENTRIES_PER_BLK-1)>>FAT32_ENTRIES_BITS); } - FAT32FreeClusters(p,buf[cur_dir_entry].cluster_lo+ + FAT32FreeClusters(dv,buf[cur_dir_entry].cluster_lo+ buf[cur_dir_entry].cluster_hi<<16); } } @@ -785,26 +785,26 @@ I64 FAT32FilesDel(CPrt *p,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, MemSet(&long_name,0,sizeof(CDirEntry)); if (++cur_dir_entry==entries_per_cluster) { last_dir_cluster=cur_dir_cluster; - cur_dir_cluster=ClusterNumNext(p,cur_dir_cluster,1); + cur_dir_cluster=ClusterNumNext(dv,cur_dir_cluster,1); temp_buf=buf; buf=last_buf; last_buf=temp_buf; - RClusters(p,buf,cur_dir_cluster,1); + RClusters(dv,buf,cur_dir_cluster,1); cur_dir_entry=0; } } Free(buf); Free(last_buf); - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } catch { - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } return result; } -I64 FAT32FileWrite(CPrt *p,U8 *cur_dir,U8 *name,U8 *buf,I64 size, +I64 FAT32FileWrite(CDrv *dv,U8 *cur_dir,U8 *name,U8 *buf,I64 size, CDate cdt,I64 attr) { CDirEntry de; @@ -812,34 +812,34 @@ I64 FAT32FileWrite(CPrt *p,U8 *cur_dir,U8 *name,U8 *buf,I64 size, Bool contiguous; MemSet(&de,0,sizeof(CDirEntry)); if (size<0) size=0; - if (p->type!=PT_FAT32) - PrintErr("Not FAT32 Partition\n"); + if (dv->type!=DVT_FAT32) + PrintErr("Not FAT32 Drv\n"); else if (!CFileNameTo(de.name,name)) PrintErr("Invalid FileName.\n"); else { - FAT32FilesDel(p,cur_dir,de.name,0,FALSE,FALSE); + FAT32FilesDel(dv,cur_dir,de.name,0,FALSE,FALSE); if (attr & RS_ATTR_CONTIGUOUS) contiguous=TRUE; else contiguous=FALSE; de.size=size; if (blk_cnt=(size+BLK_SIZE-1)>>BLK_SIZE_BITS) - c=ClustersAlloc(p,0,(blk_cnt+p->spc-1)/p->spc,contiguous); + c=ClustersAlloc(dv,0,(blk_cnt+dv->spc-1)/dv->spc,contiguous); else c=0x0FFFFFFF; de.cluster=c; de.attr=attr; de.datetime=cdt; if (blk_cnt) - WClustersBlks(p,buf,c,blk_cnt); - FAT32DirNew(p,cur_dir,&de,TRUE); + WClustersBlks(dv,buf,c,blk_cnt); + FAT32DirNew(dv,cur_dir,&de,TRUE); } return c; } CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL,I64 *_dir_size=NULL) { - CPrt *p=Fs->cur_prt; + CDrv *dv=Fs->cur_dv; CFAT32DirEntry *buf; I64 attr,xsum=0,dir_size=0,sub_dir_size, cur_dir_cluster,cur_dir_entry,entries_per_cluster; @@ -849,12 +849,12 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NU throw('FUF'); try { MemSet(&long_name,0,sizeof(CDirEntry)); - PrtLock(p); - cur_dir_cluster=Name2DirCluster(p,Fs->cur_dir); - buf=MAlloc(BLK_SIZE*p->spc); - entries_per_cluster=p->spc<cur_prt,buf,cur_dir_cluster,1); - dir_size+=Fs->cur_prt->spc*BLK_SIZE; + DrvLock(dv); + cur_dir_cluster=Name2DirCluster(dv,Fs->cur_dir); + buf=MAlloc(BLK_SIZE*dv->spc); + entries_per_cluster=dv->spc<cur_dv,buf,cur_dir_cluster,1); + dir_size+=Fs->cur_dv->spc*BLK_SIZE; cur_dir_entry=0; while (ch=*buf[cur_dir_entry].name) { attr=buf[cur_dir_entry].attr; @@ -874,13 +874,13 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NU tempde->next=result; result=tempde; tempde->full_name=DirNameAbs(tempde->name); - PrtUnlock(p); + DrvUnlock(dv); if (Cd(tempde->name)) { tempde->sub=FAT32FilesFind(files_find_mask,fuf_flags,tempde,&sub_dir_size); tempde->size=sub_dir_size; Cd(".."); } - PrtLock(p); + DrvLock(dv); } else if ((attr&RS_ATTR_DIR || !Bt(&fuf_flags,FUf_JUST_DIRS)) && !(Bt(&fuf_flags,FUf_RECURSE) && *tempde->name=='.' && attr&RS_ATTR_DIR) && FilesFindMatch(tempde->name,files_find_mask,fuf_flags)) { @@ -897,29 +897,29 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NU } else MemSet(&long_name,0,sizeof(CDirEntry)); if (++cur_dir_entry==entries_per_cluster) { - cur_dir_cluster=ClusterNumNext(p,cur_dir_cluster); + cur_dir_cluster=ClusterNumNext(dv,cur_dir_cluster); if (cur_dir_cluster==INVALID_CLUSTER) break; else { - RClusters(p,buf,cur_dir_cluster,1); - dir_size+=Fs->cur_prt->spc*BLK_SIZE; + RClusters(dv,buf,cur_dir_cluster,1); + dir_size+=Fs->cur_dv->spc*BLK_SIZE; cur_dir_entry=0; } } } Free(buf); - PrtUnlock(p); + DrvUnlock(dv); } catch - PrtUnlock(p); + DrvUnlock(dv); if (_dir_size) *_dir_size=dir_size; return result; } -Bool FAT32MkDir(CPrt *p,U8 *cur_dir,U8 *name) +Bool FAT32MkDir(CDrv *dv,U8 *cur_dir,U8 *name) { - I64 size=p->spc<spc<bdev; - I64 spc=bdev->blk_size>>BLK_SIZE_BITS,i=blk/spc; - CISO1PriDesc *iso=MAlloc(bdev->blk_size); + CBlkDev *bd=dv->bd; + I64 spc=bd->blk_size>>BLK_SIZE_BITS,i=blk/spc; + CISO1PriDesc *iso=MAlloc(bd->blk_size); CISO1DirEntry *de; Bool unlock,result=FALSE; U8 buf[8]; try { - unlock=PrtLock(p); - p->type=PT_ISO9660; //default - p->spc=spc; - p->offset=p->data=p->root_cluster=p->size=0; + unlock=DrvLock(dv); + dv->type=DVT_ISO9660; //default + dv->spc=spc; + dv->base_offset=dv->data_area=dv->root_cluster=dv->size=0; while (TRUE) { - p->size=MaxI64(p->size,(i+1)*spc); - RBlks(p,iso,i*spc,spc); + dv->size=MaxI64(dv->size,(i+1)*spc); + RBlks(dv,iso,i*spc,spc); buf[0](U32)=iso->id[0](U32); buf[4](U16)=iso->id[4](U8); switch (LstMatch(buf,"CD001\0CDW02\0BEA01\0BOOT2\0NSR02\0NSR03\0TEA01\0",LMF_EXACT)) { case 0: - p->type=PT_ISO9660; + dv->type=DVT_ISO9660; switch (iso->type) { case ISO1T_SUPPLEMENTARY_DESC: - p->data=0; + dv->data_area=0; de=&iso->root_dir_record; - p->root_cluster=de->loc.little; - p->size=iso->vol_space_size.little*bdev->blk_size>>BLK_SIZE_BITS; + dv->root_cluster=de->loc.little; + dv->size=iso->vol_space_size.little*bd->blk_size>>BLK_SIZE_BITS; result=TRUE; goto ipi_done; case ISO1T_TERMINATOR: - throw('Prt'); + throw('Drv'); } break; default: //Its normal for ISO13346 to read NULL blk as terminator PrintErr("File System Not Supported\n"); - throw('Prt'); + throw('Drv'); } i++; } ipi_done: Free(iso); if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } catch { - p->type=PT_ISO9660; - p->spc=spc; - p->offset=p->data=p->root_cluster=0; + dv->type=DVT_ISO9660; + dv->spc=spc; + dv->base_offset=dv->data_area=dv->root_cluster=0; Free(iso); if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } return result; } @@ -126,7 +126,7 @@ Bool ISO1CDirFill(CDirEntry *tempde,CISO1DirEntry *de) return result; } -Bool ISO1FileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0) +Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0) {//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$ CISO1DirEntry *isoptr,*buf; U8 dname[CDIR_FILENAME_LEN]; @@ -134,24 +134,24 @@ Bool ISO1FileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fu I64 i; if (fuf_flags&~FUG_FILE_FIND) throw('FUF'); - PrtChk(p); - if (p->type!=PT_ISO9660) - PrintErr("Not ISO9660 Partition\n"); + DrvChk(dv); + if (dv->type!=DVT_ISO9660) + PrintErr("Not ISO9660 Drv\n"); else try { - unlock=PrtLock(p); - isoptr=MAlloc(p->spc<cur_prt,isoptr,cur_dir_cluster,1); + unlock=DrvLock(dv); + isoptr=MAlloc(dv->spc<cur_dv,isoptr,cur_dir_cluster,1); if (isoptr->name_len==1 && !isoptr->name) {//curdir - i=(isoptr->size.little+p->spc<spc<spc<cur_prt,buf,cur_dir_cluster,i); + i=(isoptr->size.little+dv->spc<spc<spc<cur_dv,buf,cur_dir_cluster,i); Free(isoptr); } else { buf=isoptr; i=1; } - i*=p->spc<spc<0) { if (!isoptr->len) { @@ -163,9 +163,9 @@ Bool ISO1FileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fu if (!StrCmp(name,dname)) { result=ISO1CDirFill(_result,isoptr); if (result && - !(fuf_flags&FUF_JUST_DIRS && !(_result->attr & RS_ATTR_DIR)) && - !(fuf_flags&FUF_JUST_FILES && _result->attr & RS_ATTR_DIR) ) - goto exit_this; + !(fuf_flags&FUF_JUST_DIRS && !(_result->attr & RS_ATTR_DIR)) && + !(fuf_flags&FUF_JUST_FILES && _result->attr & RS_ATTR_DIR) ) + goto iff_done; else result=FALSE; } @@ -174,51 +174,51 @@ Bool ISO1FileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fu isoptr(U8 *)+=isoptr->len; } } -exit_this: +iff_done: Free(buf); if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } catch if (unlock) - PrtUnlock(p); + DrvUnlock(dv); return result; } -U8 *ISO1FileRead(CPrt *p,U8 *cur_dir,U8 *filename,I64 *_size,I64 *_attr) +U8 *ISO1FileRead(CDrv *dv,U8 *cur_dir,U8 *filename,I64 *_size,I64 *_attr) { U8 *buf=NULL; CDirEntry de; I64 c,blk_cnt,cur_dir_cluster; - PrtChk(p); + DrvChk(dv); *_size=0; *_attr=0; - if (p->type!=PT_ISO9660) - PrintErr("Not ISO9660 Partition\n"); + if (dv->type!=DVT_ISO9660) + PrintErr("Not ISO9660 Drv\n"); else try { - PrtLock(p); - cur_dir_cluster=Name2DirCluster(p,cur_dir); - if (ISO1FileFind(p,cur_dir_cluster,filename,&de,FUF_JUST_FILES)) { + DrvLock(dv); + cur_dir_cluster=Name2DirCluster(dv,cur_dir); + if (ISO1FileFind(dv,cur_dir_cluster,filename,&de,FUF_JUST_FILES)) { blk_cnt=(de.size+BLK_SIZE-1)>>BLK_SIZE_BITS; buf=MAlloc(blk_cnt<cur_prt->type!=PT_ISO9660) - PrintErr("Not ISO9660 Partition\n"); - else if (ISO1FileFind(Fs->cur_prt,cur_dir_cluster,name,&de,FUF_JUST_DIRS)) + if (Fs->cur_dv->type!=DVT_ISO9660) + PrintErr("Not ISO9660 Drv\n"); + else if (ISO1FileFind(Fs->cur_dv,cur_dir_cluster,name,&de,FUF_JUST_DIRS)) return TRUE; else { "%s ",name; @@ -229,25 +229,25 @@ Bool ISO1Cd(U8 *name,I64 cur_dir_cluster) CDirEntry *ISO1FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL) { - CPrt *p=Fs->cur_prt; + CDrv *dv=Fs->cur_dv; CISO1DirEntry *buf,*buf2,*isoptr; - I64 i,cur_dir_cluster=Name2DirCluster(p,Fs->cur_dir); + I64 i,cur_dir_cluster=Name2DirCluster(dv,Fs->cur_dir); CDirEntry *result=NULL,*tempde; if (fuf_flags&~FUG_FILES_FIND) throw('FUF'); - isoptr=MAlloc(p->spc<cur_prt,isoptr,cur_dir_cluster,1); + isoptr=MAlloc(dv->spc<cur_dv,isoptr,cur_dir_cluster,1); if (isoptr->name_len==1 && !isoptr->name) {//curdir - i=(isoptr->size.little+p->spc<spc<spc<cur_prt,buf,cur_dir_cluster,i); + i=(isoptr->size.little+dv->spc<spc<spc<cur_dv,buf,cur_dir_cluster,i); Free(isoptr); } else { buf=isoptr; i=1; } buf2=buf; - i*=p->spc<spc<0) { if (!buf->len) { buf(U8 *)++; diff --git a/Kernel/Dsk/FileSysRedSea.CPP b/Kernel/Dsk/FileSysRedSea.CPP index f2b33a5..e2d8b4a 100644 --- a/Kernel/Dsk/FileSysRedSea.CPP +++ b/Kernel/Dsk/FileSysRedSea.CPP @@ -1,41 +1,41 @@ // See $LK,"RedSea File System",A="FI:::/Doc/RedSea.TXT"$ -U0 RedSeaFSFreeFreeLst(CPrt *p) +U0 RedSeaFreeFreeLst(CDrv *dv) { CFreeLst *tempf,*tempf1; Bool unlock; try { - unlock=PrtLock(p); - if (tempf=p->next_free) { - while (tempf!=&p->next_free) { + unlock=DrvLock(dv); + if (tempf=dv->next_free) { + while (tempf!=&dv->next_free) { tempf1=tempf->next; Free(tempf); tempf=tempf1; } } - p->next_free=NULL; + dv->next_free=NULL; if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } catch if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } -U0 RedSeaFSFreeLstBuild(CPrt *p) +U0 RedSeaFreeLstBuild(CDrv *dv) { Bool unlock; CFreeLst *tempf; - I64 i,first=0,max_cluster=p->size+p->offset-p->data; + I64 i,first=dv->data_area,max_blk=dv->size+dv->base_offset; try { - unlock=PrtLock(p); - if (p->next_free) - RedSeaFSFreeFreeLst(p); - QueInit(&p->next_free); - while (firstnext_free) + RedSeaFreeFreeLst(dv); + QueInit(&dv->next_free); + while (firstcur_map_blk,(first+i)&(BLK_SIZE<<3-1))) + while (first+icur_map_blk,(first+i-dv->data_area)&(BLK_SIZE<<3-1))) break; else i++; @@ -44,72 +44,73 @@ U0 RedSeaFSFreeLstBuild(CPrt *p) tempf=AMAlloc(sizeof(CFreeLst)); tempf->size=i; tempf->start=first; - QueIns(tempf,p->last_free); + QueIns(tempf,dv->last_free); } first+=i+1; } if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } catch if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } -U0 RedSeaFSPrtInit(CPrt *p) +U0 RedSeaDrvInit(CDrv *dv) { - CBootStruct br; + CRedSeaBoot br; Bool unlock; try { - unlock=PrtLock(p); - RBlks(p,&br,p->offset,1); + unlock=DrvLock(dv); + RBlks(dv,&br,dv->base_offset,1); if (br.signature!=MBR_PT_REDSEA || br.signature2!=0xAA55) - throw('Prt'); - p->type=PT_REDSEA; - RedSeaFSFreeFreeLst(p); - p->spc=1; - p->size=br.sects; - p->data=p->offset+br.bitmap_sects; - p->root_cluster=br.root_cluster; - p->map1=p->map2=p->offset+1; - MapBufAlloc(p,1); + throw('Drv'); + dv->type=DVT_REDSEA; + RedSeaFreeFreeLst(dv); + dv->spc=1; + dv->size=br.sects; + dv->data_area=dv->base_offset+br.bitmap_sects; + dv->root_cluster=br.root_cluster; + dv->map1=dv->map2=dv->base_offset+1; + DrvMapBlkAlloc(dv); if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } catch if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } -Bool RedSeaFSDrvValidate(U8 drv_let) +Bool RedSeaDrvValidate(U8 drv_let) { - CPrt *p; - CBootStruct br; + CDrv *dv; + CRedSeaBoot br; Bool result=FALSE; try { - p=Drv2Prt(drv_let); - if (p->type==PT_REDSEA && RBlks(p,&br,p->offset,1) && + dv=Let2Drv(drv_let); + if (dv->type==DVT_REDSEA && RBlks(dv,&br,dv->base_offset,1) && br.signature==MBR_PT_REDSEA && br.signature2==0xAA55 && - br.sects==p->size) + br.sects==dv->size) result=TRUE; } catch Fs->catch_except=TRUE; return result; } -U0 RedSeaFSFmt(U8 drv_let,Bool quick=TRUE) +U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE) { U8 *root_dir; CDirEntry *d_native; - CBootStruct *br=CAlloc(BLK_SIZE); - CPrt *p=Drv2Prt(drv_let); + CRedSeaBoot *br=CAlloc(BLK_SIZE); + CDrv *dv=Let2Drv(drv_let); I64 i,n; try { - PrtLock(p); - // SetDrvType(drv_let,PT_REDSEA); - SetDrvType(drv_let,PT_FAT32); - p->type=PT_REDSEA; + DrvLock(dv); + // DrvTypeSet(drv_let,DVT_REDSEA); + DrvTypeSet(drv_let,DVT_FAT32); + dv->type=DVT_REDSEA; br->signature=MBR_PT_REDSEA; br->signature2=0xAA55; - br->sects=p->size; + br->base_offset=dv->base_offset; //For CD/DVD image copy. + br->sects=dv->size; n=(br->sects+BLK_SIZE<<3-1)/BLK_SIZE<<3; br->bitmap_sects=n; br->unique_id=GetTSC^Now()(U64); @@ -118,14 +119,14 @@ U0 RedSeaFSFmt(U8 drv_let,Bool quick=TRUE) if (quick) i=n+1; else - i=p->size; - WZeroBlks(p,p->offset,i); + i=dv->size; + WZeroBlks(dv,dv->base_offset,i); - WBlks(p,br,p->offset,1); - RedSeaFSPrtInit(p); - ClustersAlloc(p,0,1,FALSE); //Alloc #1 - br->root_cluster=ClustersAlloc(p,0,1,FALSE); - WBlks(p,br,p->offset,1); + WBlks(dv,br,dv->base_offset,1); + RedSeaDrvInit(dv); + ClustersAlloc(dv,0,1,FALSE); //Alloc #1 + br->root_cluster=ClustersAlloc(dv,0,1,FALSE); + WBlks(dv,br,dv->base_offset,1); root_dir=CAlloc(BLK_SIZE); d_native=root_dir-offset(CDirEntry.start); @@ -144,16 +145,16 @@ U0 RedSeaFSFmt(U8 drv_let,Bool quick=TRUE) d_native->cluster=br->root_cluster; d_native->datetime=Now; - WBlks(p,root_dir,p->data+br->root_cluster,1); - RedSeaFSPrtInit(p); - PrtUnlock(p); + WBlks(dv,root_dir,br->root_cluster,1); + RedSeaDrvInit(dv); + DrvUnlock(dv); } catch - PrtUnlock(p); + DrvUnlock(dv); Free(br); Free(root_dir); } -Bool RedSeaFSFileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0) +Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0) {//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$ CDirEntry *buf,*buf2,*ptr; U8 dname[CDIR_FILENAME_LEN]; @@ -162,22 +163,22 @@ Bool RedSeaFSFileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I6 if (fuf_flags&~FUG_FILE_FIND) throw('FUF'); MemSet(_result,0,sizeof(CDirEntry)); - PrtChk(p); - if (p->type!=PT_REDSEA) - PrintErr("Not RedSea Partition\n"); + DrvChk(dv); + if (dv->type!=DVT_REDSEA) + PrintErr("Not RedSea Drv\n"); else if (!CFileNameTo(dname,name)) PrintErr("Invalid FileName.\n"); else try { - unlock=PrtLock(p); + unlock=DrvLock(dv); buf2=MAlloc(BLK_SIZE); - RClusters(p,buf2,cur_dir_cluster,1); - + RBlks(dv,buf2,cur_dir_cluster,1); + ptr=buf2(U8 *)-offset(CDirEntry.start); buf=MAlloc(ptr->size); - RClustersBlks(p,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); + RBlks(dv,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); Free(buf2); - + ptr=buf(U8 *)-offset(CDirEntry.start); *ptr->name='.'; ptr->name[1]=0; @@ -185,60 +186,60 @@ Bool RedSeaFSFileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I6 if (!(ch=*ptr->name)) break; else if (!(ptr->attr & RS_ATTR_DELETED) && - !(fuf_flags&FUF_JUST_DIRS && !(ptr->attr & RS_ATTR_DIR)) && - !(fuf_flags&FUF_JUST_FILES && ptr->attr & RS_ATTR_DIR) && - !StrCmp(dname,ptr->name)) { + !(fuf_flags&FUF_JUST_DIRS && !(ptr->attr & RS_ATTR_DIR)) && + !(fuf_flags&FUF_JUST_FILES && ptr->attr & RS_ATTR_DIR) && + !StrCmp(dname,ptr->name)) { MemCpy(&_result->attr,&ptr->attr,CDIR_SIZE); result=TRUE; - goto exit_this; + goto rsff_done; } ptr(U8 *)+=CDIR_SIZE; } -exit_this: +rsff_done: Free(buf); if (unlock) - PrtUnlock(p); + DrvUnlock(dv); } catch if (unlock) - PrtUnlock(p); + DrvUnlock(dv); return result; } -U8 *RedSeaFSFileRead(CPrt *p,U8 *cur_dir,U8 *filename,I64 *_size,I64 *_attr) +U8 *RedSeaFileRead(CDrv *dv,U8 *cur_dir,U8 *filename,I64 *_size,I64 *_attr) { U8 *buf=NULL; CDirEntry de; I64 c,blk_cnt,cur_dir_cluster; - PrtChk(p); + DrvChk(dv); *_size=0; *_attr=0; - if (p->type!=PT_REDSEA) - PrintErr("Not RedSea Partition\n"); + if (dv->type!=DVT_REDSEA) + PrintErr("Not RedSea Drv\n"); else try { - PrtLock(p); - cur_dir_cluster=Name2DirCluster(p,cur_dir); - if (RedSeaFSFileFind(p,cur_dir_cluster,filename,&de,FUF_JUST_FILES)) { + DrvLock(dv); + cur_dir_cluster=Name2DirCluster(dv,cur_dir); + if (RedSeaFileFind(dv,cur_dir_cluster,filename,&de,FUF_JUST_FILES)) { blk_cnt=(de.size+BLK_SIZE-1)>>BLK_SIZE_BITS; buf=MAlloc(blk_cnt<cur_prt->type!=PT_REDSEA) - PrintErr("Not RedSea Partition\n"); - else if (RedSeaFSFileFind(Fs->cur_prt,cur_dir_cluster,name,&de,FUF_JUST_DIRS)) + if (Fs->cur_dv->type!=DVT_REDSEA) + PrintErr("Not RedSea Drv\n"); + else if (RedSeaFileFind(Fs->cur_dv,cur_dir_cluster,name,&de,FUF_JUST_DIRS)) return TRUE; else { "%s ",name; @@ -247,22 +248,22 @@ Bool RedSeaFSCd(U8 *name,I64 cur_dir_cluster) return FALSE; } -U0 RedSeaFSFreeClusters(CPrt *p,I64 c,I64 cnt) +U0 RedSeaFreeClusters(CDrv *dv,I64 c,I64 cnt) { CFreeLst *tempf; Bool found=FALSE,unlock,unlock_break; - PrtChk(p); + DrvChk(dv); if (!c) return; - if (p->type!=PT_REDSEA) - PrintErr("Not RedSea Partition\n"); + if (dv->type!=DVT_REDSEA) + PrintErr("Not RedSea Drv\n"); else try { unlock_break=BreakLock; - unlock=PrtLock(p); - if (!p->next_free) - RedSeaFSFreeLstBuild(p); - tempf=p->next_free; - while (!found && tempf!=&p->next_free) { + unlock=DrvLock(dv); + if (!dv->next_free) + RedSeaFreeLstBuild(dv); + tempf=dv->next_free; + while (!found && tempf!=&dv->next_free) { if (tempf->start+tempf->size==c) { tempf->size+=cnt; found=TRUE; @@ -277,42 +278,42 @@ U0 RedSeaFSFreeClusters(CPrt *p,I64 c,I64 cnt) tempf=AMAlloc(sizeof(CFreeLst)); tempf->size=cnt; tempf->start=c; - QueIns(tempf,p->last_free); + QueIns(tempf,dv->last_free); } while (cnt-->0) { - SetFSBuf(p,c); - LBtr(p->cur_map_blk,c&(BLK_SIZE<<3-1)); - LBts(p->buffered_map_dirty_bits,0); + DrvMapBlkSet(dv,c); + LBtr(dv->cur_map_blk,(c-dv->data_area)&(BLK_SIZE<<3-1)); + LBts(&dv->map_blk_dirty,0); c++; } - CleanMAPBuf(p); + DrvMapBlkClean(dv); if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } catch { if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } } -I64 RedSeaFSAllocClusters(CPrt *p,I64 cnt) +I64 RedSeaAllocClusters(CDrv *dv,I64 cnt) { CFreeLst *tempf,*best_free=NULL; I64 i,first,best_size=MAX_I64; Bool unlock,unlock_break; if (cnt<=0) - Dbg; + throw('Drv'); try { unlock_break=BreakLock; - unlock=PrtLock(p); - if (!p->next_free) - RedSeaFSFreeLstBuild(p); - tempf=p->next_free; - while (tempf!=&p->next_free) { + unlock=DrvLock(dv); + if (!dv->next_free) + RedSeaFreeLstBuild(dv); + tempf=dv->next_free; + while (tempf!=&dv->next_free) { if (tempf->size>=cnt && tempf->sizesize; @@ -322,14 +323,14 @@ I64 RedSeaFSAllocClusters(CPrt *p,I64 cnt) tempf=tempf->next; } if (!best_free) - Dbg; + throw('Drv'); first=best_free->start; for (i=0;icur_map_blk,(first+i)&(BLK_SIZE<<3-1)); - LBts(p->buffered_map_dirty_bits,0); + DrvMapBlkSet(dv,first+i); + LBts(dv->cur_map_blk,(first+i-dv->data_area)&(BLK_SIZE<<3-1)); + LBts(&dv->map_blk_dirty,0); } - CleanMAPBuf(p); + DrvMapBlkClean(dv); if (best_free->size-=cnt) best_free->start+=cnt; else { @@ -337,36 +338,36 @@ I64 RedSeaFSAllocClusters(CPrt *p,I64 cnt) Free(best_free); } if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } catch { if (unlock) - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } return first; } -Bool RedSeaFSDirNew(CPrt *p,U8 *cur_dir,CDirEntry *de,Bool free_old_chain) +Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *de,Bool free_old_chain) { CDirEntry *buf,*buf2,*ptr,de2; - CBootStruct *br; + CRedSeaBoot *br; I64 c,ch,i=1,j=0,n=BLK_SIZE/CDIR_SIZE,dir_size,cur_dir_cluster; Bool written=FALSE,unlock,unlock_break; U8 *temp,*parent_dir; try { unlock_break=BreakLock; de->attr|=RS_ATTR_CONTIGUOUS; - unlock=PrtLock(p); - cur_dir_cluster=Name2DirCluster(p,cur_dir); + unlock=DrvLock(dv); + cur_dir_cluster=Name2DirCluster(dv,cur_dir); buf2=MAlloc(BLK_SIZE); - RClusters(p,buf2,cur_dir_cluster,1); + RBlks(dv,buf2,cur_dir_cluster,1); ptr=buf2(U8 *)-offset(CDirEntry.start); buf=MAlloc(ptr->size); - RClustersBlks(p,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); + RBlks(dv,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); dir_size=ptr->size; ptr=buf(U8 *)-offset(CDirEntry.start)+CDIR_SIZE; @@ -376,26 +377,26 @@ Bool RedSeaFSDirNew(CPrt *p,U8 *cur_dir,CDirEntry *de,Bool free_old_chain) if (!written) MemCpy(&ptr->start,&de->start,CDIR_SIZE); if ((i+1)*CDIR_SIZE+j<data+cur_dir_cluster+j,1); + WBlks(dv,buf(U8 *)+j<>BLK_SIZE_BITS); + RedSeaFreeClusters(dv,cur_dir_cluster,dir_size>>BLK_SIZE_BITS); dir_size+=BLK_SIZE; - c=ClustersAlloc(p,0,dir_size>>BLK_SIZE_BITS,TRUE); + c=ClustersAlloc(dv,0,dir_size>>BLK_SIZE_BITS,TRUE); Free(buf); buf=buf2; ptr=buf(U8 *)-offset(CDirEntry.start); ptr->size=dir_size; ptr->cluster=c; - WClustersBlks(p,buf,c,dir_size>>BLK_SIZE_BITS); - if (cur_dir_cluster==p->root_cluster) { + WBlks(dv,buf,c,dir_size>>BLK_SIZE_BITS); + if (cur_dir_cluster==dv->root_cluster) { br=CAlloc(BLK_SIZE); - RBlks(p,br,p->offset,1); + RBlks(dv,br,dv->base_offset,1); br->root_cluster=c; - WBlks(p,br,p->offset,1); + WBlks(dv,br,dv->base_offset,1); Free(br); - p->root_cluster=c; + dv->root_cluster=c; } else { temp=StrNew(cur_dir); parent_dir=StrNew(cur_dir); @@ -404,13 +405,13 @@ Bool RedSeaFSDirNew(CPrt *p,U8 *cur_dir,CDirEntry *de,Bool free_old_chain) Free(parent_dir); parent_dir=StrNew("/"); } - if (RedSeaFSFileFind(p,Name2DirCluster(p,parent_dir), + if (RedSeaFileFind(dv,Name2DirCluster(dv,parent_dir), temp,&de2,FUF_JUST_DIRS)) { de2.cluster=c; de2.size=dir_size; - RedSeaFSDirNew(p,parent_dir,&de2,FALSE); + RedSeaDirNew(dv,parent_dir,&de2,FALSE); } else - Dbg; + throw('Drv'); Free(temp); Free(parent_dir); } @@ -419,19 +420,19 @@ Bool RedSeaFSDirNew(CPrt *p,U8 *cur_dir,CDirEntry *de,Bool free_old_chain) } else if (ptr->attr & RS_ATTR_DELETED) { if (!written) { MemCpy(&ptr->start,&de->start,CDIR_SIZE); - WBlks(p,buf(U8 *)+j<data+cur_dir_cluster+j,1); + WBlks(dv,buf(U8 *)+j<name,ptr->name)) { if (free_old_chain) - RedSeaFSFreeClusters(p,ptr->cluster, + RedSeaFreeClusters(dv,ptr->cluster, (ptr->size+BLK_SIZE-1)>>BLK_SIZE_BITS); if (!written) MemCpy(&ptr->start,&de->start,CDIR_SIZE); else ptr->attr|=RS_ATTR_DELETED; - WBlks(p,buf(U8 *)+j<data+cur_dir_cluster+j,1); + WBlks(dv,buf(U8 *)+j<size); - RClustersBlks(p,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); + RBlks(dv,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); Free(buf2); ptr=buf(U8 *)-offset(CDirEntry.start); @@ -486,8 +487,8 @@ I64 RedSeaFSFilesDel(CPrt *p,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, if (print_msg) "Del %s\n",ptr->name; ptr->attr|=RS_ATTR_DELETED; - WBlks(p,buf(U8 *)+j<data+cur_dir_cluster+j,1); - RedSeaFSFreeClusters(p,ptr->cluster,(ptr->size+BLK_SIZE-1)>>BLK_SIZE_BITS); + WBlks(dv,buf(U8 *)+j<cluster,(ptr->size+BLK_SIZE-1)>>BLK_SIZE_BITS); } ptr(U8 *)+=CDIR_SIZE; if (++i>=n) { @@ -496,68 +497,68 @@ I64 RedSeaFSFilesDel(CPrt *p,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, } } Free(buf); - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } catch { - PrtUnlock(p); + DrvUnlock(dv); if (unlock_break) BreakUnlock; } return result; } -I64 RedSeaFSFileWrite(CPrt *p,U8 *cur_dir,U8 *name,U8 *buf,I64 size, +I64 RedSeaFileWrite(CDrv *dv,U8 *cur_dir,U8 *name,U8 *buf,I64 size, CDate cdt,I64 attr) { CDirEntry de; I64 c=0,blk_cnt; MemSet(&de,0,sizeof(CDirEntry)); if (size<0) size=0; - if (p->type!=PT_REDSEA) - PrintErr("Not RedSea Partition\n"); + if (dv->type!=DVT_REDSEA) + PrintErr("Not RedSea Drv\n"); else if (!CFileNameTo(de.name,name)) PrintErr("Invalid FileName.\n"); else { - RedSeaFSFilesDel(p,cur_dir,de.name,0,FALSE,FALSE); + RedSeaFilesDel(dv,cur_dir,de.name,0,FALSE,FALSE); de.size=size; if (blk_cnt=(size+BLK_SIZE-1)>>BLK_SIZE_BITS) - c=ClustersAlloc(p,0,blk_cnt,TRUE); //Always contiguous + c=ClustersAlloc(dv,0,blk_cnt,TRUE); //Always contiguous else c=INVALID_CLUSTER; de.cluster=c; de.attr=attr|RS_ATTR_CONTIGUOUS; de.datetime=cdt; if (blk_cnt) - WClustersBlks(p,buf,c,blk_cnt); - RedSeaFSDirNew(p,cur_dir,&de,TRUE); + WBlks(dv,buf,c,blk_cnt); + RedSeaDirNew(dv,cur_dir,&de,TRUE); } return c; } -CDirEntry *RedSeaFSFilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL) +CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL) { - CPrt *p=Fs->cur_prt; + CDrv *dv=Fs->cur_dv; CDirEntry *buf,*buf2,*ptr,*result=NULL,*tempde; I64 ch,cur_dir_cluster; if (fuf_flags&~FUG_FILES_FIND) throw('FUF'); try { - PrtLock(p); - cur_dir_cluster=Name2DirCluster(p,Fs->cur_dir); + DrvLock(dv); + cur_dir_cluster=Name2DirCluster(dv,Fs->cur_dir); buf2=MAlloc(BLK_SIZE); - RClusters(p,buf2,cur_dir_cluster,1); + RBlks(dv,buf2,cur_dir_cluster,1); ptr=buf2(U8 *)-offset(CDirEntry.start); buf=MAlloc(ptr->size); - RClustersBlks(p,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); + RBlks(dv,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); Free(buf2); ptr=buf(U8 *)-offset(CDirEntry.start); *ptr->name='.'; ptr->name[1]=0; ptr(U8 *)+=CDIR_SIZE; - ptr->cluster=Name2ParentDirCluster(p,Fs->cur_dir); + ptr->cluster=Name2ParentDirCluster(dv,Fs->cur_dir); ptr(U8 *)-=CDIR_SIZE; while (TRUE) { if (!(ch=*ptr->name)) @@ -570,12 +571,12 @@ CDirEntry *RedSeaFSFilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent tempde->next=result; result=tempde; tempde->full_name=DirNameAbs(tempde->name); - PrtUnlock(p); + DrvUnlock(dv); if (Cd(tempde->name)) { - tempde->sub=RedSeaFSFilesFind(files_find_mask,fuf_flags,tempde); + tempde->sub=RedSeaFilesFind(files_find_mask,fuf_flags,tempde); Cd(".."); } - PrtLock(p); + DrvLock(dv); } else if ((tempde->attr&RS_ATTR_DIR || !Bt(&fuf_flags,FUf_JUST_DIRS)) && !(Bt(&fuf_flags,FUf_RECURSE) && *tempde->name=='.' && tempde->attr&RS_ATTR_DIR) && FilesFindMatch(tempde->name,files_find_mask,fuf_flags)) { @@ -588,22 +589,22 @@ CDirEntry *RedSeaFSFilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent ptr(U8 *)+=CDIR_SIZE; } Free(buf); - PrtUnlock(p); + DrvUnlock(dv); } catch - PrtUnlock(p); + DrvUnlock(dv); return result; } -Bool RedSeaFSMkDir(CPrt *p,U8 *cur_dir,U8 *name) +Bool RedSeaMkDir(CDrv *dv,U8 *cur_dir,U8 *name) { - I64 size=BLK_SIZE,c,cur_dir_cluster=Name2DirCluster(p,cur_dir); + I64 size=BLK_SIZE,c,cur_dir_cluster=Name2DirCluster(dv,cur_dir); U8 *buf=CAlloc(size); CDirEntry *d_native=buf-offset(CDirEntry.start); Bool unlock_break; try { unlock_break=BreakLock; - c=FileWrite(name,buf,size,0,RS_ATTR_DIR,FALSE); + c=FileWrite(name,buf,size,0,RS_ATTR_DIR); d_native->attr=RS_ATTR_DIR|RS_ATTR_CONTIGUOUS; StrCpy(d_native->name,name); d_native->cluster=c; @@ -618,7 +619,7 @@ Bool RedSeaFSMkDir(CPrt *p,U8 *cur_dir,U8 *name) d_native->cluster=cur_dir_cluster; d_native->size=0; d_native->datetime=Now; - WClusters(p,buf,c,1); + WBlks(dv,buf,c,1); Free(buf); if (unlock_break) BreakUnlock; diff --git a/Kernel/EdLite.CPP b/Kernel/EdLite.CPP index eb2b686..6ca18c0 100644 --- a/Kernel/EdLite.CPP +++ b/Kernel/EdLite.CPP @@ -45,7 +45,7 @@ U0 EdLiteUpdate(CLine *root,CLine *cur_line,I64 cur_col,I64 line_start_col) templ=templ->next; } else { if (!done_eof) { - ""; + ''; done_eof=TRUE; } '\n'; @@ -55,13 +55,14 @@ U0 EdLiteUpdate(CLine *root,CLine *cur_line,I64 cur_col,I64 line_start_col) RawPutChar(0x7F); } -U0 EdLite(U8 *filename,I64 num=1) +Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0) {//Light weight text editor for debugging. U8 *src,*src2,*src3,*dst,*buf,*bin_data=NULL; I64 i,cnt=0,ch,sc,size,bin_size=0,line_start_col=0,cur_col=0, old_raw_flags=text.raw_flags; CLine root,*templ,*templ1,*cur_line; - Bool old_raw=Raw(ON), + Bool result=FALSE, + old_raw=Raw(ON), old_debug=InDbg(ON), old_single=SingleUser(ON); @@ -103,15 +104,20 @@ U0 EdLite(U8 *filename,I64 num=1) MemCpy(bin_data,src,bin_size); } Free(buf); + result=TRUE; } cur_line=root.next; - if (0<--num) { - if (numnext; - else + else { cur_line=&root; + result=FALSE; + } } do { if (cur_line==&root) @@ -246,7 +252,10 @@ U0 EdLite(U8 *filename,I64 num=1) } } while (ch!=CH_SHIFT_ESC && ch!=CH_ESC); - if (ch==CH_ESC) { + if (ch!=CH_ESC) { + if (edf_dof_flags&EDF_WAS_WRITE) + result=FALSE; + } else { size=bin_size; templ=root.next; @@ -268,6 +277,9 @@ U0 EdLite(U8 *filename,I64 num=1) MemCpy(dst,bin_data,bin_size); FileWrite(filename,buf,size); Free(buf); + + if (edf_dof_flags&EDF_WAS_WRITE) + result=TRUE; } templ=root.next; @@ -285,6 +297,7 @@ U0 EdLite(U8 *filename,I64 num=1) SingleUser(old_single); text.raw_flags=text.raw_flags&~RWF_SHOW_DOLLAR|old_raw_flags&RWF_SHOW_DOLLAR; POPFD + return result; } U0 ToFileLine(U8 *_fl_file_line,U8 **_filename,I64 *_linenum) @@ -300,16 +313,18 @@ U0 ToFileLine(U8 *_fl_file_line,U8 **_filename,I64 *_linenum) *_linenum=linenum; } -U0 EdLiteFileLine(U8 *fl_file_line) +Bool EdLiteFileLine(U8 *fl_file_line,I64 edf_dof_flags=0) { + Bool result; U8 *filename; I64 linenum; ToFileLine(fl_file_line,&filename,&linenum); - EdLite(filename,linenum); + result=EdLite(filename,linenum,edf_dof_flags); Free(filename); + return result; } -U0 SetFix(U8 *filename,I64 line) +U0 FixSet(U8 *filename,I64 line) {//Compiler calls this to set file line for Fix U8 *st=MStrPrint("FL:%s,%d",filename,line); while (LBts(&sys_semas[SYS_SEMA_FIX],0)) @@ -319,9 +334,10 @@ U0 SetFix(U8 *filename,I64 line) LBtr(&sys_semas[SYS_SEMA_FIX],0); } -U0 Fix() +Bool Fix(I64 edf_dof_flags=0) {//Jump to last err src code to fix it. U8 *st; + Bool result=FALSE; while (LBts(&sys_semas[SYS_SEMA_FIX],0)) Yield; @@ -330,9 +346,10 @@ U0 Fix() if (st) { if (IsRaw) - EdLiteFileLine(st); + result=EdLiteFileLine(st,edf_dof_flags); else - Ed(st); + result=Ed(st,edf_dof_flags); } Free(st); + return result; } diff --git a/Kernel/Except.CPP b/Kernel/Except.CPP index 7c29b91..ef04154 100644 --- a/Kernel/Except.CPP +++ b/Kernel/Except.CPP @@ -115,7 +115,7 @@ U0 SysThrowBreak() else {//TODO: Might want lock Fs->wake_jiffy=0; TaskRstAwaitingMsg; - PrtsRelease(); + DrvsRelease(); BlkDevsRelease(); FlushMsgs; throw('Break'); diff --git a/Kernel/Font8x8.CPP b/Kernel/Font8x8.CPP index edb71af..b9123bd 100644 --- a/Kernel/Font8x8.CPP +++ b/Kernel/Font8x8.CPP @@ -1,4 +1,4 @@ -//See $LK,"::/Doc/Acknowledgements.TXT"$. +//See $LK,"::/Doc/Credits.TXT"$. U8 sys_font_8x8[256*8]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, diff --git a/Kernel/Hash1b.CPP b/Kernel/Hash1b.CPP deleted file mode 100644 index 914e54c..0000000 --- a/Kernel/Hash1b.CPP +++ /dev/null @@ -1,488 +0,0 @@ -I64 HashTypeNum(CHash *temph) -{//Return bit num of hash type, limited to just types. - if (temph) - return Bsf(temph->type&HTG_TYPE_MASK); - else - return -1; -} - -I64 HashVal(CHash *temph) -{//Returns most likely desired value. - nobound_switch (HashTypeNum(temph)) { - case HTt_EXPORT_SYS_SYM: - return temph(CHashExport *)->val; - case HTt_IMPORT_SYS_SYM: - return temph(CHashImport *)->module_base; - case HTt_DEFINE_STR: - case HTt_CLASS: - case HTt_INTERNAL_TYPE: - case HTt_WORD: - case HTt_DICT_WORD: - case HTt_OPCODE: - case HTt_HELP_FILE: - return temph; - case HTt_GLBL_VAR: - if (temph(CHashGlblVar *)->flags&GVF_EXTERN) - return &temph(CHashGlblVar *)->data_addr; - else - return temph(CHashGlblVar *)->data_addr; - case HTt_FUN: - if (Bt(&temph(CHashFun *)->flags,Cf_EXTERN)) - return temph; - else - return temph(CHashFun *)->executable_addr; - case HTt_REG: - return temph(CHashReg *)->reg_num|temph(CHashReg *)->reg_type<<8; - case HTt_KEYWORD: - case HTt_ASM_KEYWORD: - case HTt_MODULE: - case HTt_FILE: - case HTt_FRAME_PTR: - return temph(CHashGeneric *)->user_data0; - - case -1: //nobound_switch - case HTt_NUM_TYPES: //nobound_switch - default: - return 0; - } -} - -CHashTable *HashTableNew(I64 size,CTask *mem_task=NULL) -{//New hash table, power-of-two in size. - CHashTable *table; - table=CAlloc(sizeof(CHashTable),mem_task); - table->body=CAlloc(size<<3,mem_task); - table->mask=size-1; - table->next_added=table->last_added=table; - return table; -} - -U0 HashDel(CHashSrcSym *temph) -{//Free a std TempleOS system hash entry. - if (!temph) return; - if (!(temph->type&HTT_DICT_WORD)) - Free(temph->str); - if (temph->type & HTG_SRC_SYM) { - Free(temph->src_link); - Free(temph->index); - Free(temph->import_name); - LinkedLstDel(temph->ie_lst); - if (temph->type & (HTT_FUN | HTT_EXPORT_SYS_SYM)) - Free(temph->dbg_info); - if (temph->type & (HTT_FUN | HTT_CLASS)) - //Assumes code not on heap, so doesn't Free. - //$LK,"MemberLstDel",A="MN:MemberLstDel"$() is an import to the Kernel module - MemberLstDel(temph); - else if (temph->type&HTT_DEFINE_STR) - Free(temph(CHashDefineStr *)->data); - else if (temph->type & HTT_GLBL_VAR) { - if (!(temph(CHashGlblVar *)->flags&GVF_ALIAS)) - Free(temph(CHashGlblVar *)->data_addr); - LinkedLstDel(temph(CHashGlblVar *)->dim.next); - if (temph(CHashGlblVar *)->fun_ptr) - HashDel(temph(CHashGlblVar *)->fun_ptr-temph(CHashGlblVar *)->fun_ptr->ptr_cnt); - } - } else if (temph->type & HTT_FILE) - Free(temph(CHashGeneric *)->user_data0); - Free(temph); -} - -U0 HashTableDel(CHashTable *table) -{//Free std system hash table, calling $LK,"HashDel",A="MN:HashDel"$() on entries. - CHashSrcSym *temph,*temph1; - if (!table) return; - temph=table->next_added; - while (temph!=table) { - temph1=temph->next_added; - HashDel(temph); - temph=temph1; - } - Free(table->body); - Free(table); -} - -I64 HashTablePurge(CHashTable *table) -{//Eliminate ExportSysSyms that have been usurped. - I64 result=0; - CHashSrcSym *temph,*temph1,*temph2; - if (!table) return 0; - PUSHFD - CLI //Precaution - temph=table->next_added; - while (temph!=table) { - temph1=temph->next_added; //We delete only older ones - if (temph->type&(HTT_FUN|HTT_GLBL_VAR)) { - temph2=temph->next; //Older always later in chain - while (temph2) { - if ((temph2->type&HTT_EXPORT_SYS_SYM || temph2->type&HTG_TYPE_MASK==HTT_INVALID) && - !StrCmp(temph2->str,temph->str)) { - if (temph2->type&HTG_TYPE_MASK==HTT_INVALID) - temph2->type=HTT_KEYWORD;//Won't delete HTT_INVALID - HashRemDel(temph2,table); - result++; - break; - } - temph2=temph2->next; - } - } - temph=temph1; - } - POPFD - return result; -} - -CHashGeneric *HashGenericAdd(U8 *name,I64 type,I64 u0=0,I64 u1=0,I64 u2=0,CTask *task=NULL) -{//Add any type to task hash_table, 3 user_data values. - if (!task) task=Fs; - CHashGeneric *result=CAlloc(sizeof(CHashGeneric),task); - result->type=type; - result->user_data0=u0; - result->user_data1=u1; - result->user_data2=u2; - result->str=StrNew(name,task); - HashAdd(result,task->hash_table); - return result; -} - -U0 SetSrcFileInfo(CLex *lx,CHashSrcSym *h,I64 line_num_offset=0) -{//Set $LK,"CHashSrcSym",A="MN:CHashSrcSym"$ link and help_index by cur lx pos. - CLexFile *tempf=lx->cur_lfn; - I64 line_num=tempf->line_num+line_num_offset; - if (line_num<1) line_num=1; - Free(h->src_link); - h->src_link=MStrPrint("FL:%s,%d",tempf->name,line_num); - if (Bt(&lx->opts,OPTf_KEEP_PRIVATE)) - h->type|=HTF_PRIVATE; - Free(h->index); - if (lx->cur_help_index) - h->index=StrNew(lx->cur_help_index); - else - h->index=NULL; -} - -CHashGeneric *HashPublic(U8 *st,I64 mask,Bool val=TRUE) -{//Mark a hash entry as public and $LK,"SetSrcFileInfo",A="MN:SetSrcFileInfo"$(). - CHashGeneric *result; - if (result=HashFind(st,Fs->hash_table,mask)) { - if (val) - result->type|=HTF_PUBLIC; - else - result->type&=~HTF_PUBLIC; - if (result->type&HTG_SRC_SYM) - SetSrcFileInfo(Fs->last_lex,result); - return result; - } else - return NULL; -} - -I64 HashLstAdd(U8 *lst,I64 type,CHashTable *table) -{//Add a list to a hash table. - I64 i=0; - CHashGeneric *temph; - if (lst) { - while (*lst) { - if (*lst=='@') - lst++; - else - i++; - temph=CAlloc(sizeof(CHashGeneric)); - temph->user_data0=i-1; - temph->str=StrNew(lst); - temph->type=type; - HashAdd(temph,table); - while (*lst++); - } - } - return i; -} - -I64 HashDefineLstAdd(U8 *name,I64 type,CHashTable *table) -{//Add define list to a hash table. See $LK,"::/Adam/DolDoc/DocInit.CPP",A="FF:::/Adam/DolDoc/DocInit.CPP,HashDefineLstAdd"$. - CHashDefineStr *temph; - if (temph=HashFind(name,Fs->hash_table,HTT_DEFINE_STR)) - return HashLstAdd(temph->data,type,table); - else - return 0; -} - -I64 FramePtr(U8 *name,CTask *task=NULL) -{//Find entry in task->hash_table, Return user_data. - CHashGeneric *temph; - if (!task) task=Fs; - if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR)) - return temph->user_data0; - else - return 0; -} - -CHashGeneric *FramePtrAdd(U8 *name,I64 val,CTask *task=NULL) -{//Add named value to task->hash_table. - return HashGenericAdd(name,HTT_FRAME_PTR,val,0,0,task); -} - -I64 FramePtrSet(U8 *name,I64 val,CTask *task=NULL) -{//Find hash entry in task->hash_table. Change user_data0. - CHashGeneric *temph; - if (!task) task=Fs; - if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR)) - return LXchgI64(&temph->user_data0,val); - else - return 0; -} - -I64 FramePtrDel(U8 *name,CTask *task=NULL) -{//Remove entry and delete. - CHashGeneric *temph; - I64 result=0; - if (!task) task=Fs; - if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR)) { - result=temph->user_data0; - HashRemDel(temph,task->hash_table); - } - return result; -} - -U0 LoadOneImport(U8 **_src,U8 *module_base,I64 ld_flags) -{ - U8 *src=*_src,*ptr2,*st_ptr; - I64 i,etype; - CHashExport *tempex=NULL; - CHashImport *tempiss; - Bool first=TRUE; - - while (etype=*src++) { - i=*src(U32 *)++; - st_ptr=src; - src+=StrLen(st_ptr)+1; - if (*st_ptr) { - if (!first) { - *_src=st_ptr-5; - return; - } else { - first=FALSE; - if (!(tempex=HashFind(st_ptr,Fs->hash_table,HTG_ALL-HTT_IMPORT_SYS_SYM))) { - if (!(ld_flags & LDF_SILENT)) - "Unresolved Reference:%s\n",st_ptr; - tempiss=CAlloc(sizeof(CHashImport)); - tempiss->str=StrNew(st_ptr); - tempiss->type=HTT_IMPORT_SYS_SYM; - tempiss->module_header_entry=st_ptr-5; - tempiss->module_base=module_base; - HashAdd(tempiss,Fs->hash_table); - } - } - } - if (tempex) { - ptr2=module_base+i; - if (tempex->type & HTT_FUN) - i=tempex(CHashFun *)->executable_addr; - else if (tempex->type & HTT_GLBL_VAR) - i=tempex(CHashGlblVar *)->data_addr; - else - i=tempex->val; - switch (etype) { - case EIT_REL_I8: *ptr2(U8 *) =i-ptr2-1; break; - case EIT_IMM_U8: *ptr2(U8 *) =i; break; - case EIT_REL_I16: *ptr2(U16 *)=i-ptr2-2; break; - case EIT_IMM_U16: *ptr2(U16 *)=i; break; - case EIT_REL_I32: *ptr2(U32 *)=i-ptr2-4; break; - case EIT_IMM_U32: *ptr2(U32 *)=i; break; - case EIT_REL_I64: *ptr2(I64 *)=i-ptr2-8; break; - case EIT_IMM_U64: *ptr2(I64 *)=i; break; - } - } - } - *_src=src-1; -} - -U0 SysSymImportsResolve(U8 *st_ptr,I64 ld_flags) -{ - CHashImport *tempiss; - U8 *ptr; - while (tempiss=HashSingleTableFind(st_ptr,Fs->hash_table,HTT_IMPORT_SYS_SYM)) { - ptr=tempiss->module_header_entry; - LoadOneImport(&ptr,tempiss->module_base,ld_flags); - tempiss->type=HTT_INVALID; - } -} - -U0 LoadPass1(U8 *src,U8 *module_base,I64 ld_flags) -{ - U8 *ptr2,*ptr3,*st_ptr; - I64 i,j,cnt,etype; - CHashExport *tempex=NULL; - while (etype=*src++) { - i=*src(U32 *)++; - st_ptr=src; - src+=StrLen(st_ptr)+1; - switch (etype) { - case EIT_REL32_EXPORT: - case EIT_IMM32_EXPORT: - case EIT_REL64_EXPORT: - case EIT_IMM64_EXPORT: - tempex=CAlloc(sizeof(CHashExport)); - tempex->str=StrNew(st_ptr); - tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; - if (etype==EIT_IMM32_EXPORT||etype==EIT_IMM64_EXPORT) - tempex->val=i; - else - tempex->val=i+module_base; - HashAdd(tempex,Fs->hash_table); - SysSymImportsResolve(st_ptr,ld_flags); - break; - case EIT_REL_I0...EIT_IMM_U64: - src=st_ptr-5; - LoadOneImport(&src,module_base,ld_flags); - break; - case EIT_ABS_ADDR: - if (ld_flags & LDF_NO_ABSS) - src+=i*sizeof(U32); - else { - cnt=i; - for (j=0;jcode_heap); - break; - case EIT_ZEROED_CODE_HEAP: - ptr3=CAlloc(*src(I32 *)++,Fs->code_heap); - break; - sub_switch_end: - if (*st_ptr) { - tempex=CAlloc(sizeof(CHashExport)); - tempex->str=StrNew(st_ptr); - tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; - tempex->val=ptr3; - HashAdd(tempex,Fs->hash_table); - } - cnt=i; - for (j=0;jstr=StrNew(st_ptr); - tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; - tempex->val=ptr3; - HashAdd(tempex,Fs->hash_table); - } - cnt=i; - for (j=0;jmodule_align_bits; - if (!module_align || bfh->bin_signature!=BIN_SIGNATURE_VAL) { - Free(bfh); - Free(fbuf); - throw('BinModul'); - } - if (bfh_addr==INVALID_PTR) { - if (bfh->module_org==INVALID_PTR) { - if (Fs->code_heap!=Fs->data_heap) { - if (module_align<16) - module_align=16; - bfh_addr=MAllocAligned(size,module_align,Fs->code_heap,module_align-sizeof(CBinFile)); - } else if (module_align>8) - bfh_addr=MAllocAligned(size,module_align,,module_align-sizeof(CBinFile)); - else {//Less than 2Gig system memory - bfh_addr=bfh; - goto lo_skip; //File is already in code heap area, don't copy. - } - } else - bfh_addr=bfh->module_org; - } - MemCpy(bfh_addr,bfh,size); - Free(bfh); - -lo_skip: - module_base=bfh_addr(U8 *)+sizeof(CBinFile); - - absname=FileNameAbs(fbuf); - Free(fbuf); - fbuf=StrNew(absname); - FileExtRem(fbuf); - if (fbuf[1]==':' && StrLen(fbuf)>2) - HashGenericAdd(fbuf+2,HTT_MODULE|HTF_PUBLIC,bfh_addr); - - LoadPass1(bfh_addr(U8 *)+bfh_addr->patch_table_offset,module_base,ld_flags); - if (!(ld_flags&LDF_JUST_LOAD)) - LoadPass2(bfh_addr(U8 *)+bfh_addr->patch_table_offset,module_base,ld_flags); - - Free(absname); - Free(fbuf); - return bfh_addr; -} - -U0 LoadKernel() -{ - HashGenericAdd(KERNEL_MODULE_NAME,HTT_MODULE|HTF_PUBLIC,sys_boot_base-sizeof(CBinFile)); - -//Abs patches done here $LK,"CPatchTableAbsAddr",A="FF:D:/Kernel/KStart.CPP,CPatchTableAbsAddr"$. - LoadPass1(sys_boot_patch_table_base,sys_boot_base,LDF_NO_ABSS|LDF_SILENT); - -//No main routines -// LoadPass2(sys_boot_patch_table_base,sys_boot_base,0); -} diff --git a/Kernel/Ints.CPP b/Kernel/Ints.CPP index ed0e759..74952e1 100644 --- a/Kernel/Ints.CPP +++ b/Kernel/Ints.CPP @@ -84,7 +84,7 @@ SYS_IRQ_FAULT:: PUSH U64 CTask.fault_err_code[RSI] PUSH U64 CTask.fault_num[RSI] MOV RSI,CTask.rsi[RSI] - CALL &Fault2 //See $LK,"Fault2",A="FF:::/Kernel/Dbg1a.CPP,Fault2"$ + CALL &Fault2 //See $LK,"Fault2",A="FF:::/Kernel/KDbg.CPP,Fault2"$ JMP I32 RESTORE_FS_TASK_WITH_KEY_CHECK SYS_FAULT_ERR_CODE_BITMAP:: @@ -109,10 +109,10 @@ U8 *IntEntrySet(I64 irq,U0 (*fp_new_handler)(),I64 type=IDTET_IRQ,I64 dpl=0) //See $LK,"::/Demo/MultiCore/Interrupts.CPP"$. I64 fp=fp_new_handler; U8 *result,*dst; - result=IntEntryGet(irq); - dst=dev.idt(U8 *)+irq*16; PUSHFD CLI + result=IntEntryGet(irq); + dst=dev.idt(U8 *)+irq*16; *dst(U16 *)++=fp.u16[0]; *dst(U16 *)++=offset(CGDT.cs64); *dst(U16 *)++=0x8000+type<<8+dpl<<13; @@ -160,18 +160,16 @@ U8 *IntFaultHandlersNew() U0 IntInit1() {//Interrupt descriptor table part1. - I64 i,temp_ptr[2]; - U32 *ptr; + I64 i; + CSysLimitBase temp_ptr; if (!Gs->num) {//Gs cur $LK,"CCPU",A="MN:CCPU"$ struct dev.idt=CAlloc(16*256); for (i=0;i<256;i++) IntEntrySet(i,&IntNop); } - ptr=temp_ptr; - *ptr(U16 *)++=256*16-1; //Typecasting is postfix - *ptr(I64 *)++=dev.idt; - *ptr(U16 *)=0; - SetRAX(temp_ptr); + temp_ptr.limit=256*16-1; + temp_ptr.base =dev.idt; + SetRAX(&temp_ptr); LIDT U64 [RAX] } diff --git a/Kernel/KCfg.CPP b/Kernel/KCfg.CPP index 4878af4..790b230 100644 --- a/Kernel/KCfg.CPP +++ b/Kernel/KCfg.CPP @@ -17,19 +17,18 @@ U8 *kernel_cfg_options="MemInit\0HeapInit\0VarInit\0" class CKernelCfg { - U8 *acct_name; U8 *dsk_cache_size_exp; CDoc *add_dev; U8 *boot_rescue_drv_file,*boot_rescue_drv_start; Bool opts[CFG_NUM_OPTIONS]; U8 mem_init_val,heap_init_val,var_init_val, - sys_acct_drv,auto_mount_ide_hd_let,auto_mount_ide_cd_let; + boot_drv_let,auto_mount_ide_hd_let,auto_mount_ide_cd_let; Bool cdrom_ports_pmt; }; CDoc *KernelCfgAddDev(CKernelCfg *c) { - I64 ch,num_hints,first_prt_num,type,unit,cnt=0; + I64 ch,num_hints,first_drv_num,type,unit,cnt=0; U8 blks_buf[256],addr_buf[256],base0_buf[128],base1_buf[128]; CATARep *root=NULL,*tempha; CDoc *doc=DocNew; @@ -38,12 +37,12 @@ CDoc *KernelCfgAddDev(CKernelCfg *c) "\n\nIn anticipation of the drives you will\n" "define shortly, enter the drive letter\n" "of the drive with the account directory.\n" - "\n($$PURPLE$$$$FG$$ for cur drv) Acct Drv:"; + "\n($$PURPLE$$$$FG$$ for cur drv) Home Drv:"; ch=ToUpper(GetChar); if ('A'<=ch<='Z') - c->sys_acct_drv=ch; + c->boot_drv_let=ch; else - c->sys_acct_drv=Fs->cur_prt->drv_let; + c->boot_drv_let=Drv2Let(Fs->cur_dv); "\n\n$$BK,1$$$$PURPLE$$Mount drives so they will be present when " "you boot.$$FG$$$$BK,0$$\n"; @@ -55,9 +54,9 @@ CDoc *KernelCfgAddDev(CKernelCfg *c) "If more than one partition is present\n" "they will be lettered in sequence.\n" "\nFirst Drive Letter ($$PURPLE$$$$FG$$ to exit):"; - first_prt_num=ToUpper(GetChar)-'A'; + first_drv_num=ToUpper(GetChar)-'A'; '\n'; - if (0<=first_prt_numunit=%d;",first_prt_num+'A',type,unit); + DocPrint(doc,"bd=BlkDevNextFree(%d,%d);" + "bd->unit=%d;",first_drv_num+'A',type,unit); if (type==BDT_RAM) { if (!*addr_buf) StrCpy(addr_buf,"0"); - DocPrint(doc,"bdev->RAM_dsk=%s;",addr_buf); - DocPrint(doc,"bdev->max_blk=(%s)-1;",blks_buf); + DocPrint(doc,"bd->RAM_dsk=%s;",addr_buf); + DocPrint(doc,"bd->max_blk=(%s)-1;",blks_buf); } make_free=FALSE; if (type==BDT_ATA || type==BDT_ATAPI) { if (type==BDT_ATAPI && !*base0_buf) { c->cdrom_ports_pmt=TRUE; - DocPrint(doc,"dsk.boot_rescue_drv_pmt=GetBaseUnit(bdev);"); - if (first_prt_num+'A'==c->sys_acct_drv) + DocPrint(doc,"dsk.boot_rescue_drv_pmt=GetBaseUnit(bd);"); + if (first_drv_num+'A'==c->boot_drv_let) make_free=TRUE; } else - DocPrint(doc,"bdev->base0=%s;bdev->base1=%s;", + DocPrint(doc,"bd->base0=%s;bd->base1=%s;", base0_buf,base1_buf); } - DocPrint(doc,"BlkDevAdd(bdev,FALSE,%d);",make_free); + DocPrint(doc,"BlkDevAdd(bd,FALSE,%d);",make_free); cnt++; } else "\n\n$$BK,1$$$$RED$$Operation Failed$$BK,0$$$$FG$$\n\n"; } - } while (!cnt || 0<=first_prt_numadd_dev=KernelCfgAddDev(c); - c->acct_name=GetStr("Start-up Acct ($$PURPLE$$$$FG$$ will prompt):"); c->dsk_cache_size_exp=GetStr( "Disk Cache Size in Bytes,\n" "gets rounded-up funny,\n" @@ -237,7 +235,6 @@ U0 KernelCfgDel(CKernelCfg *c) { DocDel(c->add_dev); Free(c->boot_rescue_drv_file); - Free(c->acct_name); Free(c->dsk_cache_size_exp); Free(c); } diff --git a/Kernel/DataTypes1a.CPP b/Kernel/KDataTypes.CPP similarity index 100% rename from Kernel/DataTypes1a.CPP rename to Kernel/KDataTypes.CPP diff --git a/Kernel/Dbg1a.CPP b/Kernel/KDbg.CPP similarity index 99% rename from Kernel/Dbg1a.CPP rename to Kernel/KDbg.CPP index 082c22f..388bead 100644 --- a/Kernel/Dbg1a.CPP +++ b/Kernel/KDbg.CPP @@ -7,7 +7,7 @@ Bool ChkPtr(U8 *ptr) return FALSE; } else if (ptrauto_mount_ide_hd_let) kernel_cfg->auto_mount_ide_hd_let='C'; @@ -35,10 +34,7 @@ U0 SysGlblsInit() KeyDevInit; #exe { - if (*kernel_cfg->acct_name) - StreamPrint("sys_acct=StrNew(\"%C:/Accts/%s\");",kernel_cfg->sys_acct_drv,kernel_cfg->acct_name); - else - StreamPrint("sys_acct=StrNew(\"%C:/Accts\");",kernel_cfg->sys_acct_drv); + StreamPrint("dsk.boot_drv_let='%C';",kernel_cfg->boot_drv_let); StreamPrint("#exe{OptOff(OPTf_WARN_PAREN);}"); StreamPrint("DskCacheInit(%s);",kernel_cfg->dsk_cache_size_exp); StreamPrint("#exe{OptOn(OPTf_WARN_PAREN);}"); @@ -53,9 +49,9 @@ U0 SysGlblsInit() ProgressBarsRst; -//$AN,"Independent Heap Ctrl Example",A="Independent Heap Ctrl Example"$ +//$AN,"Independent HeapCtrl Example",A="Independent HeapCtrl Example"$ i=1; //Rqst 1 blk, we might get more. - m=MemBlksUncachedAlloc(&i,sys_code_bp); + m=Mem2MegUncachedAlloc(&i,sys_code_bp); dev.uncached_heap=HeapCtrlBPInit(m,i*0x200000/0x200); QueInit(&dev.pci_root); dev.mem64_ptr=MEM_MAPPED_SPACE; @@ -65,19 +61,19 @@ U0 SysGlblsInit() } U0 SysGrInit() -{//See $LK,"SYS_BIOS_GR_MODE",A="FF:D:/Kernel/KStart.CPP,SYS_BIOS_GR_MODE:2"$ +{ text.font=sys_font_8x8; - if (sys_bios_gr_mode==0x12) { //if 640x480 16 color - text.cols=GR_WIDTH/FONT_WIDTH; - text.rows=GR_HEIGHT/FONT_HEIGHT; - OutU8(VGA_SC_INDEX,VGA_MAP_MASK); - OutU8(VGA_SC_DATA,0x0F); - MemSet(VGA_GRAPHIC_MEM_BASE,0,GR_WIDTH*GR_HEIGHT>>3); - text.raw_screen_image=CAlloc(GR_WIDTH*GR_HEIGHT/8); - } else { + if (!Bt(&sys_run_level,RLf_VGA)) { //if text mode text.cols=80; text.rows=25; - MemSet(VGA_TEXT_MEM_BASE,0,text.rows*text.cols<<1); + MemSet(VGAM_TEXT,0,text.rows*text.cols<<1); + } else { //if 640x480 16 color + text.cols=GR_WIDTH/FONT_WIDTH; + text.rows=GR_HEIGHT/FONT_HEIGHT; + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,0x0F); + MemSet(VGAM_GRAPHICS,0,GR_WIDTH*GR_HEIGHT>>3); + text.raw_screen_image=CAlloc(GR_WIDTH*GR_HEIGHT/8); } } @@ -102,7 +98,7 @@ U0 TimersInit() _q=HPET_GCAP_ID; i=*_q; //i.u32[1]= period in femtoS (10e-15) if (100000hash_table=HashTableNew(ADAM_HASH_SIZE,Fs); SysGlblsInit; Mem32DevInit; MemPagesNotPresentMark; @@ -148,31 +143,30 @@ U0 KernelMain() TaskDerivedValsUpdate; SysDefinesLoad; - MPInit; + BSPInit; IntInit1; //Before this point use $LK,"Snd",A="MN:Snd"$() and $LK,"BusyWait",A="MN:BusyWait"$() //to debug. After this point, use $LK,"RawPrint",A="MN:RawPrint"$() LBts(&sys_run_level,RLf_RAW); - if (BIOSTotalMem<250*0x100000) - Dbg("Requires 256 Meg of RAM Memory"); - TimersInit; - IntsInit; + if (BIOSTotalMemopts[CFG_NO_MP]) StreamPrint("\"MultiCore Start\\n\\n\";" - "MPStart;" + "BSPStartMP;" "LBts(&sys_run_level,RLf_MP);"); }; @@ -201,9 +195,9 @@ U0 KernelMain() InDbg(OFF); cnts.time_stamp_freq_initial=TimeStampFreqCal; - Cd("/Kernel"); + Cd("/"); try - ExeFile("Adam1"); //Continues $LK,"/Kernel/Adam1.CPP",A="FL:/Kernel/Adam1.CPP,1"$ + ExeFile("Adam"); //Continues $LK,"/Adam.CPP",A="FL:/Adam.CPP,1"$ catch { Raw(ON); PutExcept; @@ -218,7 +212,7 @@ asm { ALIGN 16,OC_NOP SYS_KERNEL_END:: #exe { if (kernel_cfg->opts[CFG_BOOT_RESCUE_DRV]) - StreamPrint("DU8 0x%X-(SYS_KERNEL_END-SYS_KERNEL_START1+" + StreamPrint("DU8 0x%X-(SYS_KERNEL_END-SYS_KERNEL+" "BOOT_RAM_BASE+sizeof(CBinFile)) DUP (0);" "BINFILE \"%s\";",kernel_cfg->boot_rescue_drv_start,kernel_cfg->boot_rescue_drv_file); }; diff --git a/Kernel/KExts.CPP b/Kernel/KExts.CPP index 73a9d84..b4d41be 100644 --- a/Kernel/KExts.CPP +++ b/Kernel/KExts.CPP @@ -9,13 +9,12 @@ import Bool Ed(U8 *link_st,I64 edf_dof_flags=0); import I64 ExeFile(U8 *name,Bool just_load=FALSE); import I64 ExePrint(U8 *fmt,...); import U0 MemberLstDel(CHashClass *tempc); -import I64 PopUp(U8 *msg,CTask *parent=NULL,CTask **_pu_task=NULL); extern U0 AdamErr(U8 *fmt,...); extern U0 AdamLog(U8 *fmt,...); -extern I64 BlkDevAdd(CBlkDev *bdev,Bool one_prt,Bool make_free); -extern Bool BlkDevLock(CBlkDev *bdev); +extern I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free); +extern Bool BlkDevLock(CBlkDev *bd); extern CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type); -extern Bool BlkDevUnlock(CBlkDev *bdev,Bool rst=FALSE); +extern Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE); extern U0 BlkDevsRelease(); extern Bool BptS(U8 *addr,CTask *task=NULL,Bool live=TRUE); extern U8 *Caller(I64 num=1); @@ -28,51 +27,51 @@ extern I64 DefineMatch(U8 *needle,U8 *haystack_lst_name,I64 flags=0); extern U8 *DefineSub(I64 sub,U8 *name); extern U8 *DftExt(U8 *name,U8 *extension); extern Bool Drv(U8 drv_let); -extern U0 DskCacheInvalidate(CPrt *p); +extern U8 Drv2Let(CDrv *dv=NULL); +extern U0 DrvsRelease(); +extern U0 DskCacheInvalidate(CDrv *dv); extern U0 Exit(); -extern I64 FAT32AllocClusters(CPrt *p,I64 c,I64 cnt); -extern I64 FAT32AllocContiguousClusters(CPrt *p,I64 cnt); -extern Bool FAT32DirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempdee,Bool free_old_chain); -extern Bool FAT32FileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0); +extern I64 FAT32AllocClusters(CDrv *dv,I64 c,I64 cnt); +extern I64 FAT32AllocContiguousClusters(CDrv *dv,I64 cnt); +extern Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempdee,Bool free_old_chain); +extern U0 FAT32DrvInit(CDrv *dv); +extern Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0); extern CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL,I64 *_dir_size=NULL); -extern U0 FAT32PrtInit(CPrt *p); extern U8 *FileExtRem(U8 *src,U8 *dst=NULL); extern Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0); extern U8 *FileNameAbs(U8 *name,I64 fuf_flags=0); -extern U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL,Bool raw=FALSE); -extern I64 FileWrite(U8 *filename,U8 *fbuf, - I64 size,CDate cdt=0,I64 attr=0,Bool raw=FALSE); +extern U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL); +extern I64 FileWrite(U8 *filename,U8 *fbuf,I64 size,CDate cdt=0,I64 attr=0); extern I64 FlushMsgs(CTask *task=NULL); extern I64 GetChar(I64 *scan_code=NULL,Bool echo=TRUE,Bool raw_cursor=FALSE); extern I64 GetS(U8 *buf,I64 size,Bool allow_ext=TRUE); -extern Bool ISO1FileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0); +extern Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0); extern CDirEntry *ISO1FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL); -extern Bool ISOPrtInit(CPrt *p,I64 blk); +extern Bool ISODrvInit(CDrv *dv,I64 blk); extern Bool IsDbg(); extern Bool IsDir(U8 *dir_name); extern Bool IsRaw(); extern U0 MPInt(I64 num,I64 cpu_num=1); extern U8 *MStrPrint(U8 *fmt,...); extern Bool MkDir(U8 *filename); +extern U0 MouseIPSet(I64 x,I64 y,I64 z,I64 l,I64 r); extern U0 Msg(I64 code,I64 a1,I64 a2,I64 flags=0); +extern I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL); extern U0 Print(U8 *fmt,...); -extern U0 PrtsRelease(); extern U0 PutChars(U64 ch); extern U0 PutS(U8 *st); //Use $LK,"Print",A="MN:Print"$() -extern Bool RBlks(CPrt *p,U8 *buf, I64 blk, I64 cnt); -extern I64 RedSeaFSAllocClusters(CPrt *p,I64 cnt); -extern Bool RedSeaFSDirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempdee,Bool free_old_chain); -extern Bool RedSeaFSDrvValidate(U8 drv_let); -extern Bool RedSeaFSFileFind(CPrt *p,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0); -extern CDirEntry *RedSeaFSFilesFind (U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL); -extern U0 RedSeaFSFmt(U8 drv_let,Bool quick=TRUE); -extern U0 RedSeaFSFreeFreeLst(CPrt *p); -extern U0 RedSeaFSPrtInit(CPrt *p); -extern U0 SetMouseIP(I64 x,I64 y,I64 z,I64 l,I64 r); +extern Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt); +extern I64 RedSeaAllocClusters(CDrv *dv,I64 cnt); +extern Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempdee,Bool free_old_chain); +extern U0 RedSeaDrvInit(CDrv *dv); +extern Bool RedSeaDrvValidate(U8 drv_let); +extern Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0); +extern CDirEntry *RedSeaFilesFind (U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL); +extern U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE); +extern U0 RedSeaFreeFreeLst(CDrv *dv); extern CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL, U8 *task_name=NULL,I64 target_cpu,CTask *parent=NULL, //NULL means adam I64 stk_size=0,I64 flags=1<type&HTG_TYPE_MASK); + else + return -1; +} + +I64 HashVal(CHash *temph) +{//Returns most likely desired value. + nobound_switch (HashTypeNum(temph)) { + case HTt_EXPORT_SYS_SYM: + return temph(CHashExport *)->val; + case HTt_IMPORT_SYS_SYM: + return temph(CHashImport *)->module_base; + case HTt_DEFINE_STR: + case HTt_CLASS: + case HTt_INTERNAL_TYPE: + case HTt_WORD: + case HTt_DICT_WORD: + case HTt_OPCODE: + case HTt_HELP_FILE: + return temph; + case HTt_GLBL_VAR: + if (temph(CHashGlblVar *)->flags&GVF_EXTERN) + return &temph(CHashGlblVar *)->data_addr; + else + return temph(CHashGlblVar *)->data_addr; + case HTt_FUN: + if (Bt(&temph(CHashFun *)->flags,Cf_EXTERN)) + return temph; + else + return temph(CHashFun *)->executable_addr; + case HTt_REG: + return temph(CHashReg *)->reg_num|temph(CHashReg *)->reg_type<<8; + case HTt_KEYWORD: + case HTt_ASM_KEYWORD: + case HTt_MODULE: + case HTt_FILE: + case HTt_FRAME_PTR: + return temph(CHashGeneric *)->user_data0; + + case -1: //nobound_switch + case HTt_NUM_TYPES: //nobound_switch + default: + return 0; + } +} + +CHashTable *HashTableNew(I64 size,CTask *mem_task=NULL) +{//New hash table, power-of-two in size. + CHashTable *table; + table=CAlloc(sizeof(CHashTable),mem_task); + table->body=CAlloc(size<<3,mem_task); + table->mask=size-1; + return table; +} + +U0 HashDel(CHashSrcSym *temph) +{//Free a std TempleOS system hash entry. + if (!temph) return; + if (!(temph->type&HTT_DICT_WORD)) + Free(temph->str); + if (temph->type & HTG_SRC_SYM) { + Free(temph->src_link); + Free(temph->index); + Free(temph->import_name); + LinkedLstDel(temph->ie_lst); + if (temph->type & (HTT_FUN | HTT_EXPORT_SYS_SYM)) + Free(temph->dbg_info); + if (temph->type & (HTT_FUN | HTT_CLASS)) + //Assumes code not on heap, so doesn't Free. + //$LK,"MemberLstDel",A="MN:MemberLstDel"$() is an import to the Kernel module + MemberLstDel(temph); + else if (temph->type&HTT_DEFINE_STR) + Free(temph(CHashDefineStr *)->data); + else if (temph->type & HTT_GLBL_VAR) { + if (!(temph(CHashGlblVar *)->flags&GVF_ALIAS)) + Free(temph(CHashGlblVar *)->data_addr); + LinkedLstDel(temph(CHashGlblVar *)->dim.next); + if (temph(CHashGlblVar *)->fun_ptr) + HashDel(temph(CHashGlblVar *)->fun_ptr-temph(CHashGlblVar *)->fun_ptr->ptr_stars_cnt); + } + } else if (temph->type & HTT_FILE) + Free(temph(CHashGeneric *)->user_data0); + Free(temph); +} + +U0 HashTableDel(CHashTable *table) +{//Free std system hash table, calling $LK,"HashDel",A="MN:HashDel"$() on entries. + I64 i; + CHashSrcSym *temph,*temph1; + if (!table) return; + for (i=0;i<=table->mask;i++) { + temph=table->body[i]; + while (temph) { + temph1=temph->next; + HashDel(temph); + temph=temph1; + } + } + Free(table->body); + Free(table); +} + +I64 HashTablePurge(CHashTable *table) +{//Eliminate ExportSysSyms that have been usurped. + I64 i,result=0; + CHashSrcSym *temph,*temph1,*temph2; + if (!table) return 0; + PUSHFD + CLI //Precaution + for (i=0;i<=table->mask;i++) { + temph=table->body[i]; + while (temph) { + temph1=temph->next; //We delete only older ones + if (temph->type&(HTT_FUN|HTT_GLBL_VAR)) { + temph2=temph->next; //Older always later in chain + while (temph2) { + if ((temph2->type&HTT_EXPORT_SYS_SYM || temph2->type&HTG_TYPE_MASK==HTT_INVALID) && + !StrCmp(temph2->str,temph->str)) { + if (temph2->type&HTG_TYPE_MASK==HTT_INVALID) + temph2->type=HTT_KEYWORD;//Won't delete HTT_INVALID + HashRemDel(temph2,table); + result++; + break; + } + temph2=temph2->next; + } + } + temph=temph1; + } + } + POPFD + return result; +} + +CHashGeneric *HashGenericAdd(U8 *name,I64 type,I64 u0=0,I64 u1=0,I64 u2=0,CTask *task=NULL) +{//Add any type to task hash_table, 3 user_data values. + if (!task) task=Fs; + CHashGeneric *result=CAlloc(sizeof(CHashGeneric),task); + result->type=type; + result->user_data0=u0; + result->user_data1=u1; + result->user_data2=u2; + result->str=StrNew(name,task); + HashAdd(result,task->hash_table); + return result; +} + +U0 HashSrcFileSet(CLex *lx,CHashSrcSym *h,I64 line_num_offset=0) +{//Set $LK,"CHashSrcSym",A="MN:CHashSrcSym"$ link and help_index by cur lx pos. + CLexFile *tempf=lx->cur_lfn; + I64 line_num=tempf->line_num+line_num_offset; + if (line_num<1) line_num=1; + Free(h->src_link); + h->src_link=MStrPrint("FL:%s,%d",tempf->full_name,line_num); + if (Bt(&lx->opts,OPTf_KEEP_PRIVATE)) + h->type|=HTF_PRIVATE; + Free(h->index); + if (lx->cur_help_index) + h->index=StrNew(lx->cur_help_index); + else + h->index=NULL; +} + +CHashGeneric *HashPublic(U8 *st,I64 mask,Bool val=TRUE) +{//Mark a hash entry as public and $LK,"HashSrcFileSet",A="MN:HashSrcFileSet"$(). + CHashGeneric *result; + if (result=HashFind(st,Fs->hash_table,mask)) { + if (val) + result->type|=HTF_PUBLIC; + else + result->type&=~HTF_PUBLIC; + if (result->type&HTG_SRC_SYM) + HashSrcFileSet(Fs->last_lex,result); + return result; + } else + return NULL; +} + +I64 HashLstAdd(U8 *lst,I64 type,CHashTable *table) +{//Add a list to a hash table. + I64 i=0; + CHashGeneric *temph; + if (lst) { + while (*lst) { + if (*lst=='@') + lst++; + else + i++; + temph=CAlloc(sizeof(CHashGeneric)); + temph->user_data0=i-1; + temph->str=StrNew(lst); + temph->type=type; + HashAdd(temph,table); + while (*lst++); + } + } + return i; +} + +I64 HashDefineLstAdd(U8 *name,I64 type,CHashTable *table) +{//Add define list to a hash table. See $LK,"::/Adam/DolDoc/DocInit.CPP",A="FF:::/Adam/DolDoc/DocInit.CPP,HashDefineLstAdd"$. + CHashDefineStr *temph; + if (temph=HashFind(name,Fs->hash_table,HTT_DEFINE_STR)) + return HashLstAdd(temph->data,type,table); + else + return 0; +} + +I64 FramePtr(U8 *name,CTask *task=NULL) +{//Find entry in task->hash_table, Return user_data. + CHashGeneric *temph; + if (!task) task=Fs; + if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR)) + return temph->user_data0; + else + return 0; +} + +CHashGeneric *FramePtrAdd(U8 *name,I64 val=0,CTask *task=NULL) +{//Add named value to task->hash_table. + return HashGenericAdd(name,HTT_FRAME_PTR,val,0,0,task); +} + +I64 FramePtrSet(U8 *name,I64 val,CTask *task=NULL) +{//Find hash entry in task->hash_table. Change user_data0. + CHashGeneric *temph; + if (!task) task=Fs; + if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR)) + return LXchgI64(&temph->user_data0,val); + else + return 0; +} + +I64 FramePtrDel(U8 *name,CTask *task=NULL) +{//Remove entry and delete. + CHashGeneric *temph; + I64 result=0; + if (!task) task=Fs; + if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR)) { + result=temph->user_data0; + HashRemDel(temph,task->hash_table); + } + return result; +} diff --git a/Kernel/KLoad.CPP b/Kernel/KLoad.CPP new file mode 100644 index 0000000..a136b62 --- /dev/null +++ b/Kernel/KLoad.CPP @@ -0,0 +1,247 @@ +U0 LoadOneImport(U8 **_src,U8 *module_base,I64 ld_flags) +{ + U8 *src=*_src,*ptr2,*st_ptr; + I64 i,etype; + CHashExport *tempex=NULL; + CHashImport *tempiss; + Bool first=TRUE; + + while (etype=*src++) { + i=*src(U32 *)++; + st_ptr=src; + src+=StrLen(st_ptr)+1; + if (*st_ptr) { + if (!first) { + *_src=st_ptr-5; + return; + } else { + first=FALSE; + if (!(tempex=HashFind(st_ptr,Fs->hash_table,HTG_ALL-HTT_IMPORT_SYS_SYM))) { + if (!(ld_flags & LDF_SILENT)) + "Unresolved Reference:%s\n",st_ptr; + tempiss=CAlloc(sizeof(CHashImport)); + tempiss->str=StrNew(st_ptr); + tempiss->type=HTT_IMPORT_SYS_SYM; + tempiss->module_header_entry=st_ptr-5; + tempiss->module_base=module_base; + HashAdd(tempiss,Fs->hash_table); + } + } + } + if (tempex) { + ptr2=module_base+i; + if (tempex->type & HTT_FUN) + i=tempex(CHashFun *)->executable_addr; + else if (tempex->type & HTT_GLBL_VAR) + i=tempex(CHashGlblVar *)->data_addr; + else + i=tempex->val; + switch (etype) { + case EIT_REL_I8: *ptr2(U8 *) =i-ptr2-1; break; + case EIT_IMM_U8: *ptr2(U8 *) =i; break; + case EIT_REL_I16: *ptr2(U16 *)=i-ptr2-2; break; + case EIT_IMM_U16: *ptr2(U16 *)=i; break; + case EIT_REL_I32: *ptr2(U32 *)=i-ptr2-4; break; + case EIT_IMM_U32: *ptr2(U32 *)=i; break; + case EIT_REL_I64: *ptr2(I64 *)=i-ptr2-8; break; + case EIT_IMM_I64: *ptr2(I64 *)=i; break; + } + } + } + *_src=src-1; +} + +U0 SysSymImportsResolve(U8 *st_ptr,I64 ld_flags) +{ + CHashImport *tempiss; + U8 *ptr; + while (tempiss=HashSingleTableFind(st_ptr,Fs->hash_table,HTT_IMPORT_SYS_SYM)) { + ptr=tempiss->module_header_entry; + LoadOneImport(&ptr,tempiss->module_base,ld_flags); + tempiss->type=HTT_INVALID; + } +} + +U0 LoadPass1(U8 *src,U8 *module_base,I64 ld_flags) +{ + U8 *ptr2,*ptr3,*st_ptr; + I64 i,j,cnt,etype; + CHashExport *tempex=NULL; + while (etype=*src++) { + i=*src(U32 *)++; + st_ptr=src; + src+=StrLen(st_ptr)+1; + switch (etype) { + case EIT_REL32_EXPORT: + case EIT_IMM32_EXPORT: + case EIT_REL64_EXPORT: + case EIT_IMM64_EXPORT: + tempex=CAlloc(sizeof(CHashExport)); + tempex->str=StrNew(st_ptr); + tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; + if (etype==EIT_IMM32_EXPORT||etype==EIT_IMM64_EXPORT) + tempex->val=i; + else + tempex->val=i+module_base; + HashAdd(tempex,Fs->hash_table); + SysSymImportsResolve(st_ptr,ld_flags); + break; + case EIT_REL_I0...EIT_IMM_I64: + src=st_ptr-5; + LoadOneImport(&src,module_base,ld_flags); + break; + case EIT_ABS_ADDR: + if (ld_flags & LDF_NO_ABSS) + src+=i*sizeof(U32); + else { + cnt=i; + for (j=0;jcode_heap); + break; + case EIT_ZEROED_CODE_HEAP: + ptr3=CAlloc(*src(I32 *)++,Fs->code_heap); + break; + sub_switch_end: + if (*st_ptr) { + tempex=CAlloc(sizeof(CHashExport)); + tempex->str=StrNew(st_ptr); + tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; + tempex->val=ptr3; + HashAdd(tempex,Fs->hash_table); + } + cnt=i; + for (j=0;jstr=StrNew(st_ptr); + tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; + tempex->val=ptr3; + HashAdd(tempex,Fs->hash_table); + } + cnt=i; + for (j=0;jmodule_align_bits; + if (!module_align || bfh->bin_signature!=BIN_SIGNATURE_VAL) { + Free(bfh); + Free(fbuf); + throw('BinModul'); + } + + if (bfh_addr==INVALID_PTR) { + if (bfh->module_org==INVALID_PTR) { + misalignment=module_align-sizeof(CBinFile); + if (misalignment<0) + misalignment&=module_align-1; + if (Fs->code_heap!=Fs->data_heap) { + if (module_align<16) + module_align=16; + bfh_addr=MAllocAligned(size,module_align,Fs->code_heap,misalignment); + } else if (module_align>8) + bfh_addr=MAllocAligned(size,module_align,,misalignment); + else {//Less than 2Gig system memory + bfh_addr=bfh; + goto lo_skip; //File is already in code heap area, don't copy. + } + } else + bfh_addr=bfh->module_org; + } + MemCpy(bfh_addr,bfh,size); + Free(bfh); + +lo_skip: + module_base=bfh_addr(U8 *)+sizeof(CBinFile); + + absname=FileNameAbs(fbuf); + Free(fbuf); + fbuf=StrNew(absname); + FileExtRem(fbuf); + if (fbuf[1]==':' && StrLen(fbuf)>2) + HashGenericAdd(fbuf+2,HTT_MODULE|HTF_PUBLIC,bfh_addr); + LoadPass1(bfh_addr(U8 *)+bfh_addr->patch_table_offset,module_base,ld_flags); + if (!(ld_flags&LDF_JUST_LOAD)) + LoadPass2(bfh_addr(U8 *)+bfh_addr->patch_table_offset,module_base,ld_flags); + Free(absname); + Free(fbuf); + return bfh_addr; +} + +U0 LoadKernel() +{ + HashGenericAdd(KERNEL_MODULE_NAME,HTT_MODULE|HTF_PUBLIC,sys_boot_base-sizeof(CBinFile)); + +//Abs patches done here $LK,"CPatchTableAbsAddr",A="FF:D:/Kernel/KStart.CPP,CPatchTableAbsAddr"$. + LoadPass1(sys_boot_patch_table_base,sys_boot_base,LDF_NO_ABSS|LDF_SILENT); + +//No main routines +// LoadPass2(sys_boot_patch_table_base,sys_boot_base,0); +} diff --git a/Kernel/Math1a.CPP b/Kernel/KMathA.CPP similarity index 100% rename from Kernel/Math1a.CPP rename to Kernel/KMathA.CPP diff --git a/Kernel/KMathB.CPP b/Kernel/KMathB.CPP new file mode 100644 index 0000000..bd7c72f --- /dev/null +++ b/Kernel/KMathB.CPP @@ -0,0 +1,144 @@ +F64 Clamp(F64 num,F64 lo,F64 hi) +{//Clamp to F64 [] range. + if (numhi) + return hi; + return num; +} + +F64 Min(F64 n1,F64 n2) +{//Min of two F64s. + if (n1<=n2) + return n1; + else + return n2; +} + +F64 Max(F64 n1,F64 n2) +{//Max of two F64s. + if (n1>=n2) + return n1; + else + return n2; +} + +F64 Pow10I64(I64 i) +{//F64 integer powers of ten. + if (i>308) + return ì; + else if (i<-308) + return 0.0; + else + return pow10_I64[i+309]; +} + +U64 FloorU64(U64 num,U64 to) +{//Integer multiples of num. + return num-num%to; +} + +U64 CeilU64(U64 num,U64 to) +{//Integer multiples of num. + num+=to-1; + return num-num%to; +} + +I64 RoundI64(I64 num,I64 to) +{//Integer multiples of num. + return num-num%to; +} + +I64 FloorI64(I64 num,I64 to) +{//Integer multiples of num. + if (num>=0) + return num-num%to; + else { + num++; + return num-num%to-to; + } +} + +I64 CeilI64(I64 num,I64 to) +{//Integer multiples of num. + if (num>=0) { + num+=to-1; + return num-num%to; + } else { + num+=to-1; + return num-num%to-to; + } +} + +//See $LK,"::/Doc/Credits.TXT"$. +I16 RandI16() +{//Random I16. + I64 result=1664525*Fs->rand_seed+1013904223; + if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND)) + result^=GetTSC>>4; + Fs->rand_seed=result; + return result.i16[0]; +} + +U16 RandU16() +{//Random U16. + I64 result=1664525*Fs->rand_seed+1013904223; + if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND)) + result^=GetTSC>>4; + Fs->rand_seed=result; + return result.u16[0]; +} + +I32 RandI32() +{//Random I32. + I64 result=1664525*Fs->rand_seed+1013904223; + if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND)) + result^=GetTSC>>4; + Fs->rand_seed=result; + return result.i32[0]; +} + +U32 RandU32() +{//Random U32. + I64 result=1664525*Fs->rand_seed+1013904223; + if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND)) + result^=GetTSC>>4; + Fs->rand_seed=result; + return result.u32[0]; +} + +I64 RandI64() +{//Random I64. + I64 result=1664525*Fs->rand_seed+1013904223; + if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND)) + result^=GetTSC>>4; + Fs->rand_seed=1664525*result+1013904223; + return result<<32+Fs->rand_seed&0xFFFFFFFF; +} + +U64 RandU64() +{//Random U64. + I64 result=1664525*Fs->rand_seed+1013904223; + if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND)) + result^=GetTSC>>4; + Fs->rand_seed=1664525*result+1013904223; + return result<<32+Fs->rand_seed&0xFFFFFFFF; +} + +F64 Rand() +{//Random F64. + I64 result=RandI64&0x3FFFFFFFFFFFFFFF; + return result/ToF64(0x4000000000000000); +} + +I64 Seed(I64 seed=0,CTask *task=NULL) +{//Set $LK,"Rand",A="MN:Rand"$() seed. Zero for timer-based. + if (!task) task=Fs; + if (seed) { + LBts(&task->task_flags,TASKf_NONTIMER_RAND); + return task->rand_seed=seed; + } else { + LBtr(&task->task_flags,TASKf_NONTIMER_RAND); + return task->rand_seed=GetTSC>>4; + } +} diff --git a/Kernel/Misc1a.CPP b/Kernel/KMisc.CPP similarity index 95% rename from Kernel/Misc1a.CPP rename to Kernel/KMisc.CPP index 6938d03..210d272 100644 --- a/Kernel/Misc1a.CPP +++ b/Kernel/KMisc.CPP @@ -136,8 +136,12 @@ Bool Blink(F64 Hz=2.5) U0 BusyWait(I64 æS) {//Loosely timed. I64 i; - for (i=0;i<æS;i++) - PortNop; + if (cnts.HPET_freq) { + i=HPET+cnts.HPET_freq*æS/1000000; + while (HPETdisplay_flags,DISPLAYf_SILENT,val); } @@ -300,7 +304,7 @@ U0 CtrlAltD(I64) U0 CtrlAltE(I64) { - SpawnUser; + User; } U0 CtrlAltF(I64) diff --git a/Kernel/KStart.CPP b/Kernel/KStart.CPP index 9f5dc76..48da9d1 100644 --- a/Kernel/KStart.CPP +++ b/Kernel/KStart.CPP @@ -6,7 +6,7 @@ It continues here: $LK,"Kernel",A="FF:::/Kernel/KEnd.CPP,U0 Kernel"$. The boot loader jumps here, in real-mode (16-bit). It actually jumps to the $LK,"CBinFile",A="MN:CBinFile"$ which is placed -just before this $LK,"generated by the compiler",A="FF:::/Compiler/CmpMain.CPP,16 ALIGN"$. +just before this $LK,"generated by the compiler",A="FF:::/Compiler/CMain.CPP,16 ALIGN"$. The header begins with a short jmp to the start of this file's code which begins with the following small jump past some data. @@ -15,28 +15,28 @@ This file is first in the Kernel image because it is #included first. $LK,"Kernel.PRJ",A="FF:::/Kernel/Kernel.PRJ,KStart:1"$ */ USE16 -SYS_KERNEL_START1:: //This must match $LK,"CKernel",A="MN:CKernel"$. - JMP U16 SYS_KERNEL_START2 +SYS_KERNEL:: //This must match $LK,"CKernel",A="MN:CKernel"$. + JMP U16 BSP_16BIT_INIT //************************************ // ASM Global vars required for 16-bit start-up ALIGN 4,OC_NOP -SYS_BOOT_BASE:: DU32 0; //Fixed offset from start used by reboot +SYS_BOOT_SRC:: DU32 BOOT_SRC_NULL; SYS_BOOT_PATCH_TABLE_BASE:: DU32 0; +SYS_RUN_LEVEL:: DU32 0; #exe {StreamPrint("SYS_COMPILE_TIME:: DU64 0x%X;",Now);} //See $LK,"BootCdProbe",A="MN:BootCdProbe"$ -#assert SYS_COMPILE_TIME+8+sizeof(CBinFile)opts[CFG_TEXT_MODE]) StreamPrint("INT 0x10"); //Enable VGA }; CMP AX,0x004F - JE @@10 - MOV U16 [SYS_BIOS_GR_MODE],0 //failed + JNE @@10 //Jmp if fail + BTS U32 [SYS_RUN_LEVEL],RLf_VGA @@10: //Get mem maps @@ -138,52 +134,33 @@ TEMPLEOS_CONT_START: OR AL,2 OUT 0x92,AL - CLD //Start with known regs + POP U32 [SYS_BOOT_SRC] //See $LK,"BootHD",A="FF:::/Adam/Boot/BootHD.CPP,BOOT_SRC_HARDDRV"$, $LK,"BootCD",A="FF:::/Adam/Boot/BootCD.CPP,BOOT_SRC_CDROM"$, & $LK,"BootRAM",A="FF:::/Adam/Boot/Boot.CPP,BOOT_SRC_RAM"$. + + CLD + XOR EAX,EAX MOV AX,CS MOV DS,AX MOV ES,AX - MOV FS,AX - MOV GS,AX - XOR EAX,EAX - XOR EBX,EBX - XOR ECX,ECX - XOR EDX,EDX - XOR ESI,ESI - XOR EDI,EDI - XOR EBP,EBP - - XOR EAX,EAX - MOV AX,CS SHL EAX,4 + MOV U32 [SYS_BOOT_BASE],EAX - POP U32 [SYS_BOOT_CODE] - - MOV BX,CS - SUB BX,sizeof(CBinFile)/16 + MOV DX,CS + SUB DX,sizeof(CBinFile)/16 #assert !(sizeof(CBinFile)&15) - MOV GS,BX - MOV EBX,U32 GS:[CBinFile.patch_table_offset] - ADD EAX,EBX - SUB EAX,sizeof(CBinFile) - MOV U32 [SYS_BOOT_PATCH_TABLE_BASE],EAX + MOV GS,DX + + MOV EDX,EAX + ADD EDX,U32 GS:[CBinFile.patch_table_offset] + SUB EDX,sizeof(CBinFile) + MOV U32 [SYS_BOOT_PATCH_TABLE_BASE],EDX - MOV U32 [GDT_BOOT_DS],0x0000FFFF - MOV U32 [GDT_BOOT_DS+4],0x0CF9200 - MOV U32 [GDT_BOOT_CS],0x0000FFFF - MOV U32 [GDT_BOOT_CS+4],0x0CF9A00 - MOV EAX,U32 [SYS_BOOT_BASE] ADD U32 [GDT_BOOT_DS+2],EAX ADD U32 [GDT_BOOT_CS+2],EAX + ADD EAX,I32 SYS_GDT + MOV U32 [SYS_GDT_PTR+CSysLimitBase.base],EAX + LGDT U32 [SYS_GDT_PTR] - //Set-up ptr to limit and base of GDT. - MOV U16 [SYS_TEMP_PTR],sizeof(CGDT)-1 - MOV EAX,U32 [SYS_BOOT_BASE] - ADD EAX,SYS_GDT - MOV U32 [SYS_TEMP_PTR+2],EAX - MOV U16 [SYS_TEMP_PTR+6],0 - - LGDT U32 [SYS_TEMP_PTR] MOV EAX,SYS_START_CR0 MOV_CR0_EAX @@ -195,8 +172,8 @@ The assembler doesn't support far jumps so we hand code it. To complete the switch to 32-bit mode, we have to load the code segment with a far jump. */ - DU8 0x66,0xEA; //JMP CGDT.boot_cs:SYS_INIT_OS - DU32 SYS_INIT_OS; + DU8 0x66,0xEA; //JMP CGDT.boot_cs:BSP_32BIT_INIT + DU32 BSP_32BIT_INIT; DU16 CGDT.boot_cs; #assert $$+16<=0xFFFF @@ -254,7 +231,7 @@ SYS_CACHE_LINE_WIDTH:: DU64 DFT_CACHE_LINE_WIDTH; SYS_SEMAS:: DU8 NUM_SYS_SEMAS*SEMA_STRUCT_SIZE DUP(0); //************************************ ALIGN 16,OC_NOP -SYS_INIT_OS:: //Entry point for RAM reboots. +BSP_32BIT_INIT:: //Entry point for $LK,"RAMReboot",A="MN:RAMReboot"$. PUSH U32 SYS_START_RFLAGS POPFD MOV EAX,SYS_START_CR0 @@ -262,26 +239,9 @@ SYS_INIT_OS:: //Entry point for RAM reboots. MOV AX,CGDT.boot_ds //LOAD DS SELECTOR MOV DS,AX - MOV ES,AX - - MOV EAX,U32 [SYS_RUN_LEVEL] - AND EAX,RLF_16BIT - OR EAX,RLF_32BIT - MOV U32 [SYS_RUN_LEVEL],EAX - -//Patch abs addresses + BTS U32 [SYS_RUN_LEVEL],RLf_32BIT MOV ESI,U32 [SYS_BOOT_PATCH_TABLE_BASE] MOV EDI,U32 [SYS_BOOT_BASE] - MOV AX,CGDT.ds - MOV DS,AX - MOV ES,AX - - MOV ECX,U32 CPatchTableAbsAddr.abs_addres_cnt[ESI] - LEA ESI,U32 CPatchTableAbsAddr.abs_addres[ESI] -@@05: LODSD - ADD EAX,EDI - ADD U32 [EAX],EDI - LOOP @@05 MOV AX,CGDT.ds MOV DS,AX @@ -291,13 +251,19 @@ SYS_INIT_OS:: //Entry point for RAM reboots. MOV SS,AX MOV ESP,BOOT_RAM_LIMIT //Temp Stk - DU8 0xEA; //JMP CGDT.cs32:SYS_CONT_INIT_OS - DU32 SYS_CONT_INIT_OS; +//Patch abs addresses + MOV ECX,U32 CPatchTableAbsAddr.abs_addres_cnt[ESI] + LEA ESI,U32 CPatchTableAbsAddr.abs_addres[ESI] +@@05: LODSD + ADD EAX,EDI + ADD U32 [EAX],EDI + LOOP @@05 + + DU8 0xEA; //JMP CGDT.cs32:@@10 + DU32 @@10; DU16 CGDT.cs32; -SYS_CONT_INIT_OS:: - LOCK - BTS U32 [SYS_RUN_LEVEL],RLf_PATCHED +@@10: BTS U32 [SYS_RUN_LEVEL],RLf_PATCHED CALL SYS_FIND_BIOS32_SERVICE_DIR CALL SYS_FIND_PCI_SERVICES @@ -305,11 +271,9 @@ SYS_CONT_INIT_OS:: MOV U32 [SYS_HEAP_BASE],SYS_FIXED_AREA+sizeof(CSysFixedArea) CALL SYS_INIT_MEM - PUSH U32 0 - CALL INIT_EM64T -USE64 - LOCK - BTS U32 [SYS_RUN_LEVEL],RLf_64BIT + PUSH U32 0 //Return from next call will be 64-bit + CALL SYS_EM64T +USE64 BTS U32 [SYS_RUN_LEVEL],RLf_64BIT FNINIT MOV RAX,SYS_FIXED_AREA+CSysFixedArea.init_fpu_mmx @@ -322,14 +286,13 @@ USE64 CALL &CPUStructInit CALL SET_GS_BASE -//Init Adam heap ctrl +//Init Adam HeapCtrl MOV EDI,U32 SYS_FIXED_AREA+CSysFixedArea.adam_hc MOV EAX,U32 SYS_FIXED_AREA+CSysFixedArea.adam_bp MOV U64 CHeapCtrl.bp[RDI],RAX MOV U32 CHeapCtrl.hc_signature[RDI],HEAP_CTRL_SIGNATURE_VAL - - LEA RAX,U64 CHeapCtrl.next_um-CMemUsedAllocated.next[RDI] + LEA RAX,U64 CHeapCtrl.next_um-CMemUsed.next[RDI] MOV U64 CHeapCtrl.next_um[RDI],RAX MOV U64 CHeapCtrl.last_um[RDI],RAX @@ -340,7 +303,6 @@ USE64 MOV U32 CTask.task_signature[RAX],TASK_SIGNATURE_VAL MOV U32 CTask.task_in_que_signature[RAX],TASK_IN_QUE_SIGNATURE_VAL - LOCK BTS U32 [SYS_RUN_LEVEL],RLf_BOOT_HEAP PUSH ADAM_STK @@ -353,7 +315,7 @@ USE64 //************************************ USE32 -INIT_EM64T: +SYS_EM64T:: //Switch to long 64-bit mode MOV_EAX_CR4 OR EAX,0xB0 MOV_CR4_EAX @@ -370,24 +332,20 @@ INIT_EM64T: BTS EAX,31 //enable paging (required for 64-bit mode) MOV_CR0_EAX - DU8 0xEA; //JMP CGDT.cs64:EM64T_PART3 - DU32 EM64T_PART3; + DU8 0xEA; //JMP CGDT.cs64:@@05 + DU32 @@05; DU16 CGDT.cs64; - USE64 -EM64T_PART3: +@@05: MOV AX,CGDT.ds + MOV DS,AX + MOV ES,AX + MOV SS,AX + MOV FS,AX + MOV GS,AX RET //************************************ -SYS_RESTART_KERNEL:: - XOR RDI,RDI - MOV EDI,U32 SYS_BOOT_BASE - MOV EDI,U32 [RDI] - XOR RSI,RSI - MOV ESI,U32 SYS_OS_32START - MOV ESI,U32 [RSI] - ADD ESI,EDI - +SYS_RAM_REBOOT:: //This gets copied high. $LK,"SYS_RAM_REBOOT",A="FF:::/Adam/Boot/Boot.CPP,SYS_RAM_REBOOT:2"$ PUSH U32 CGDT.ds //stk seg PUSH U32 BOOT_RAM_LIMIT //stk PUSH U32 0 //flags @@ -396,8 +354,8 @@ SYS_RESTART_KERNEL:: PUSH RAX IRET USE32 -@@10: - WBINVD +@@10: WBINVD + //disable paging MOV_EAX_CR0 BTR EAX,31 @@ -408,8 +366,9 @@ USE32 XOR EAX,EAX WRMSR - MOV EBX,BOOT_CODE_RAM - JMP ESI + MOV EBX,BOOT_SRC_RAM + MOV EAX,I32 BSP_32BIT_INIT + JMP EAX USE64 -SYS_RESTART_KERNEL_END:: +SYS_RAM_REBOOT_END:: } diff --git a/Kernel/Utils1a.CPP b/Kernel/KUtils.CPP similarity index 100% rename from Kernel/Utils1a.CPP rename to Kernel/KUtils.CPP diff --git a/Kernel/KbdMouse/InputPointer.CPP b/Kernel/KbdMouse/InputPointer.CPP index 57e4694..19a6d26 100644 --- a/Kernel/KbdMouse/InputPointer.CPP +++ b/Kernel/KbdMouse/InputPointer.CPP @@ -40,7 +40,7 @@ U0 IPVarsUpdate(I64 x,I64 y,I64 z,Bool l,Bool r) LBEqu(&kbd.scan_code,SCf_IP_R_DOWN,ip.rb); } -U0 SetIP(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64) +U0 IPSet(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64) {//Note: Generates a message. Bool old_preempt=Preempt(OFF); if (!(0<=xkbd.timestamp+cnts.time_stamp_freq>>3) - FifoU8Flush(kbd.fifo); - kbd.timestamp=GetTSC; - raw_byte=InU8(KBD_PORT); - sc=KbdBuildSC(raw_byte,&last_raw_byte,&last_sc,&set_LEDs,&ctrl_alt); - if (ctrl_alt && sc) { if (!(sc & SCF_KEY_UP)) { if (sc&255==SC_DELETE) - CtrlAltDel(last_sc); + CtrlAltDel(sc); else { if (sc&255==SC_ESC) ch='e'; @@ -381,14 +346,32 @@ U0 KbdPktRead() ch='t'; else ch=ScanCode2Char(sc&255); - if ('a'<=ch<='z' && keydev.fp_ctrl_alt_let_cbs[ch-'a'] && - Bt(&keydev.ctrl_alt_let_in_irq_flags,ch-'a')) { - (*keydev.fp_ctrl_alt_let_cbs[ch-'a'])(last_sc); - return; + if ('a'<=ch<='z') { + sc&=~(SCF_NEW_KEY|SCF_NEW_KEY<<32); + kbd.last_down_scan_code=sc; + if (keydev.fp_ctrl_alt_let_cbs[ch-'a'] && + Bt(&keydev.ctrl_alt_let_in_irq_flags,ch-'a')==in_irq) { + (*keydev.fp_ctrl_alt_let_cbs[ch-'a'])(sc); + } } } } } + if (set_LEDs && !in_irq) + KbdSetLEDs(sc); + *_last_sc=sc; +} + +U0 KbdPktRead() +{ + static U8 last_raw_byte=0; + static I64 last_sc=0; + U8 raw_byte; + if (GetTSC>kbd.timestamp+cnts.time_stamp_freq>>3) + FifoU8Flush(kbd.fifo); + kbd.timestamp=GetTSC; + raw_byte=InU8(KBD_PORT); + KbdBuildSC(raw_byte,TRUE,&last_raw_byte,&last_sc); if (!FifoU8Cnt(kbd.fifo)) { FifoU8Ins(kbd.fifo,raw_byte); if (raw_byte!=0xE0) { @@ -415,7 +398,7 @@ interrupt U0 KbdIntHandler() KbdPktRead; } -U0 SetCtrlAltLetCB(U8 ch,U0 (*fp_handler)(I64 sc),U8 *desc,Bool in_irq=FALSE) +U0 CtrlAltLetCBSet(U8 ch,U0 (*fp_handler)(I64 sc),U8 *desc,Bool in_irq=FALSE) {//Set callback for . ch=ToUpper(ch)-'A'; if (ch<26) { @@ -442,45 +425,24 @@ U0 KbdInit() IntEntrySet(0x21,&KbdIntHandler); OutU8(0x21,InU8(0x21)&~2); - SetCtrlAltLetCB('C',&CtrlAltC,"Sys/Break Execution",TRUE); - SetCtrlAltLetCB('D',&CtrlAltD,"Sys/Enter Debugger",TRUE); - SetCtrlAltLetCB('E',&CtrlAltE,"Sys/Spawn New User Task"); - SetCtrlAltLetCB('F',&CtrlAltF,"Sys/VGA Flush",TRUE); - SetCtrlAltLetCB('M',&CtrlAltM,"Sys/Toggle Mute"); - SetCtrlAltLetCB('T',&CtrlAltT,"Sys/Switch Focus to Next Task",TRUE); - SetCtrlAltLetCB('X',&CtrlAltX,"Sys/Kill Focused Task",TRUE); + CtrlAltLetCBSet('C',&CtrlAltC,"Sys/Break Execution",TRUE); + CtrlAltLetCBSet('D',&CtrlAltD,"Sys/Enter Debugger",TRUE); + CtrlAltLetCBSet('E',&CtrlAltE,"Sys/Spawn New User Task"); + CtrlAltLetCBSet('F',&CtrlAltF,"Sys/VGA Flush",TRUE); + CtrlAltLetCBSet('M',&CtrlAltM,"Sys/Toggle Mute"); + CtrlAltLetCBSet('T',&CtrlAltT,"Sys/Switch Focus to Next Task",TRUE); + CtrlAltLetCBSet('X',&CtrlAltX,"Sys/Kill Focused Task",TRUE); } U0 KbdHandler() { static U8 last_raw_byte=0; U8 raw_byte; - Bool set_LEDs,ctrl_alt; - I64 ch,sc; - FifoU8Rem(kbd.fifo2,&raw_byte); - sc=KbdBuildSC(raw_byte,&last_raw_byte,&kbd.scan_code,&set_LEDs,&ctrl_alt); - if (set_LEDs) - KbdSetLEDs(sc); + KbdBuildSC(raw_byte,FALSE,&last_raw_byte,&kbd.scan_code); if (raw_byte==0xE0) { FifoU8Rem(kbd.fifo2,&raw_byte); - sc=KbdBuildSC(raw_byte,&last_raw_byte,&kbd.scan_code,&set_LEDs,&ctrl_alt); - if (set_LEDs) - KbdSetLEDs(sc); - } - if (ctrl_alt) { - if (!(sc & SCF_KEY_UP)) { - if (sc&255==SC_ESC) - ch='e'; - else if (sc&255==SC_TAB) - ch='t'; - else - ch=ScanCode2Char(sc&255); - if ('a'<=ch<='z' && keydev.fp_ctrl_alt_let_cbs[ch-'a'] && - !Bt(&keydev.ctrl_alt_let_in_irq_flags,ch-'a')) - (*keydev.fp_ctrl_alt_let_cbs[ch-'a'])(kbd.scan_code); - } - return; + KbdBuildSC(raw_byte,FALSE,&last_raw_byte,&kbd.scan_code); } if (Btr(&kbd.scan_code,SCf_NEW_KEY)) { Btr(&kbd.scan_code,32+SCf_NEW_KEY); diff --git a/Kernel/KbdMouse/Mouse.CPP b/Kernel/KbdMouse/Mouse.CPP index 7a6d2d5..5570462 100644 --- a/Kernel/KbdMouse/Mouse.CPP +++ b/Kernel/KbdMouse/Mouse.CPP @@ -127,7 +127,7 @@ Bool MouseRst() return result; } -U0 SetMouseSpeed() +U0 MouseSpeedSet() { I64 dd,temp; if ((dd=SqrI64(mouse_last.pos.x-mouse.pos.x)+SqrI64(mouse_last.pos.y-mouse.pos.y)) && @@ -164,7 +164,7 @@ U0 MouseUpdatePost() if (mouse.pos.x!=mouse_last.pos.x || mouse.pos.y!=mouse_last.pos.y || mouse.pos.z!=mouse_last.pos.z) { mouse.evt=TRUE; - SetMouseSpeed; + MouseSpeedSet; } else for (i=0;i<5;i++) if (mouse.buttons[i]!=mouse_last.buttons[i]) { @@ -210,7 +210,7 @@ U0 MouseHandler() MouseUpdatePost; } -U0 SetMouseIP(I64 x,I64 y,I64 z,I64 l,I64 r) +U0 MouseIPSet(I64 x,I64 y,I64 z,I64 l,I64 r) { mouse.timestamp=GetTSC; MouseUpdatePre; diff --git a/Kernel/Kernel.MAP b/Kernel/Kernel.MAP index 6ac5d40..58215b8 100644 --- a/Kernel/Kernel.MAP +++ b/Kernel/Kernel.MAP @@ -1,1179 +1,1216 @@ -$LK,"ACAlloc ",A="FL:D:/Kernel/Mem1b.CPP.Z,388",BI=1$0000004E02 000B 000000001B Funct Export Res -$LK,"ADAM_HASH_SIZE ",A="FL:D:/Kernel/Adam1a.HPP,2778"$(1<<18) 0001 0000000008 DefineStr -$LK,"ADAM_STK ",A="FL:D:/Kernel/Adam1a.HPP,2772"$(PAGE_SIZE 0002 0000000018 DefineStr -$LK,"AKW_ALIGN ",A="FL:D:/Compiler/CmpDefs.HPP,277"$64 0000 0000000008 DefineStr -$LK,"AKW_BINFILE ",A="FL:D:/Compiler/CmpDefs.HPP,301"$88 0000 0000000008 DefineStr -$LK,"AKW_DU16 ",A="FL:D:/Compiler/CmpDefs.HPP,291"$78 0000 0000000008 DefineStr -$LK,"AKW_DU32 ",A="FL:D:/Compiler/CmpDefs.HPP,292"$79 0000 0000000008 DefineStr -$LK,"AKW_DU64 ",A="FL:D:/Compiler/CmpDefs.HPP,293"$80 0000 0000000008 DefineStr -$LK,"AKW_DU8 ",A="FL:D:/Compiler/CmpDefs.HPP,290"$77 0000 0000000008 DefineStr -$LK,"AKW_DUP ",A="FL:D:/Compiler/CmpDefs.HPP,294"$81 0000 0000000008 DefineStr -$LK,"AKW_F64 ",A="FL:D:/Compiler/CmpDefs.HPP,289"$76 0000 0000000008 DefineStr -$LK,"AKW_I0 ",A="FL:D:/Compiler/CmpDefs.HPP,279"$66 0000 0000000008 DefineStr -$LK,"AKW_I16 ",A="FL:D:/Compiler/CmpDefs.HPP,281"$68 0000 0000000008 DefineStr -$LK,"AKW_I32 ",A="FL:D:/Compiler/CmpDefs.HPP,282"$69 0000 0000000008 DefineStr -$LK,"AKW_I64 ",A="FL:D:/Compiler/CmpDefs.HPP,283"$70 0000 0000000008 DefineStr -$LK,"AKW_I8 ",A="FL:D:/Compiler/CmpDefs.HPP,280"$67 0000 0000000008 DefineStr -$LK,"AKW_IMPORT ",A="FL:D:/Compiler/CmpDefs.HPP,298"$85 0000 0000000008 DefineStr -$LK,"AKW_LIST ",A="FL:D:/Compiler/CmpDefs.HPP,299"$86 0000 0000000008 DefineStr -$LK,"AKW_MODULE_ORG ",A="FL:D:/Compiler/CmpDefs.HPP,278"$65 0000 0000000008 DefineStr -$LK,"AKW_NOLIST ",A="FL:D:/Compiler/CmpDefs.HPP,300"$87 0000 0000000008 DefineStr -$LK,"AKW_U0 ",A="FL:D:/Compiler/CmpDefs.HPP,284"$71 0000 0000000008 DefineStr -$LK,"AKW_U16 ",A="FL:D:/Compiler/CmpDefs.HPP,286"$73 0000 0000000008 DefineStr -$LK,"AKW_U32 ",A="FL:D:/Compiler/CmpDefs.HPP,287"$74 0000 0000000008 DefineStr -$LK,"AKW_U64 ",A="FL:D:/Compiler/CmpDefs.HPP,288"$75 0000 0000000008 DefineStr -$LK,"AKW_U8 ",A="FL:D:/Compiler/CmpDefs.HPP,285"$72 0000 0000000008 DefineStr -$LK,"AKW_USE16 ",A="FL:D:/Compiler/CmpDefs.HPP,295"$82 0000 0000000008 DefineStr -$LK,"AKW_USE32 ",A="FL:D:/Compiler/CmpDefs.HPP,296"$83 0000 0000000008 DefineStr -$LK,"AKW_USE64 ",A="FL:D:/Compiler/CmpDefs.HPP,297"$84 0000 0000000008 DefineStr -$LK,"AMAlloc ",A="FL:D:/Kernel/Mem1b.CPP.Z,376",BI=2$0000004DAA 000B 000000001B Funct Export Res -$LK,"AMAllocIdentical ",A="FL:D:/Kernel/Mem1b.CPP.Z,404",BI=3$0000004E72 0004 000000001B Funct Export Res -$LK,"ARC_MAX_BITS ",A="FL:D:/Kernel/Adam1a.HPP,3640"$12 0004 0000000008 DefineStr -$LK,"ARC_MAX_ENTRY ",A="FL:D:/Kernel/Adam1a.HPP,3641"$(1<r10 0000 0000000008 DefineStr -$LK,"_R11 ",A="FL:D:/Kernel/Adam1a.HPP,3327"$Fs->r11 0000 0000000008 DefineStr -$LK,"_R12 ",A="FL:D:/Kernel/Adam1a.HPP,3328"$Fs->r12 0000 0000000008 DefineStr -$LK,"_R13 ",A="FL:D:/Kernel/Adam1a.HPP,3329"$Fs->r13 0000 0000000008 DefineStr -$LK,"_R14 ",A="FL:D:/Kernel/Adam1a.HPP,3330"$Fs->r14 0000 0000000008 DefineStr -$LK,"_R15 ",A="FL:D:/Kernel/Adam1a.HPP,3331"$Fs->r15 0000 0000000008 DefineStr -$LK,"_R8 ",A="FL:D:/Kernel/Adam1a.HPP,3324"$Fs->r8 0000 0000000008 DefineStr -$LK,"_R9 ",A="FL:D:/Kernel/Adam1a.HPP,3325"$Fs->r9 0000 0000000008 DefineStr -$LK,"_RAX ",A="FL:D:/Kernel/Adam1a.HPP,3315"$Fs->rax 0000 0000000008 DefineStr -$LK,"_RBP ",A="FL:D:/Kernel/Adam1a.HPP,3321"$Fs->rbp 0000 0000000008 DefineStr -$LK,"_RBX ",A="FL:D:/Kernel/Adam1a.HPP,3316"$Fs->rbx 0000 0000000008 DefineStr -$LK,"_RCX ",A="FL:D:/Kernel/Adam1a.HPP,3317"$Fs->rcx 0000 0000000008 DefineStr -$LK,"_RDI ",A="FL:D:/Kernel/Adam1a.HPP,3320"$Fs->rdi 0000 0000000008 DefineStr -$LK,"_RDX ",A="FL:D:/Kernel/Adam1a.HPP,3318"$Fs->rdx 0000 0000000008 DefineStr -$LK,"_REP_IN_U16 ",A="FL:D:/Kernel/Utils1a.CPP.Z,265"$000000212E 0001 ExportSysSym Export -$LK,"_REP_IN_U32 ",A="FL:D:/Kernel/Utils1a.CPP.Z,254"$0000002116 0001 ExportSysSym Export -$LK,"_REP_IN_U8 ",A="FL:D:/Kernel/Utils1a.CPP.Z,276"$0000002147 0001 ExportSysSym Export -$LK,"_REP_OUT_U16 ",A="FL:D:/Kernel/Utils1a.CPP.Z,298"$0000002177 0001 ExportSysSym Export -$LK,"_REP_OUT_U32 ",A="FL:D:/Kernel/Utils1a.CPP.Z,287"$000000215F 0001 ExportSysSym Export -$LK,"_REP_OUT_U8 ",A="FL:D:/Kernel/Utils1a.CPP.Z,309"$0000002190 0001 ExportSysSym Export -$LK,"_RET ",A="FL:D:/Kernel/Utils1a.CPP.Z,458"$00000022DF 0003 ExportSysSym Export -$LK,"_RIP ",A="FL:D:/Kernel/Adam1a.HPP,3323"$Fs->rip 0000 0000000008 DefineStr -$LK,"_ROUND ",A="FL:D:/Kernel/Math1a.CPP.Z,381"$000000266E 0001 ExportSysSym Export -$LK,"_RSI ",A="FL:D:/Kernel/Adam1a.HPP,3319"$Fs->rsi 0000 0000000008 DefineStr -$LK,"_RSP ",A="FL:D:/Kernel/Adam1a.HPP,3322"$Fs->rsp 0000 0000000008 DefineStr -$LK,"_SAVE_EXCEPT_REGS ",A="FL:D:/Kernel/Except.CPP.Z,27"$0000010A77 0001 ExportSysSym Export -$LK,"_SET_MSR ",A="FL:D:/Kernel/Utils1a.CPP.Z,460"$00000022E0 0001 ExportSysSym Export -$LK,"_SIGN ",A="FL:D:/Kernel/Math1a.CPP.Z,348"$0000002615 0001 ExportSysSym Export -$LK,"_SQR ",A="FL:D:/Kernel/Math1a.CPP.Z,338"$0000002601 0000 ExportSysSym Export -$LK,"_STRCMP ",A="FL:D:/Kernel/Str1a.CPP.Z,87"$0000002A88 0001 ExportSysSym Export -$LK,"_STRCPY ",A="FL:D:/Kernel/Str1a.CPP.Z,66"$0000002A60 0001 ExportSysSym Export -$LK,"_STRICMP ",A="FL:D:/Kernel/Str1a.CPP.Z,118"$0000002AC6 0001 ExportSysSym Export -$LK,"_STRIMATCH ",A="FL:D:/Kernel/Str1a.CPP.Z,263"$0000002C0C 0001 ExportSysSym Export -$LK,"_STRMATCH ",A="FL:D:/Kernel/Str1a.CPP.Z,224"$0000002BB7 0001 ExportSysSym Export -$LK,"_STRNCMP ",A="FL:D:/Kernel/Str1a.CPP.Z,155"$0000002B19 0001 ExportSysSym Export -$LK,"_STRNICMP ",A="FL:D:/Kernel/Str1a.CPP.Z,184"$0000002B5B 0001 ExportSysSym Export -$LK,"_SYS_HLT ",A="FL:D:/Kernel/Utils1a.CPP.Z,470"$00000022FA 0005 ExportSysSym Export -$LK,"_TAKE_EXCEPT ",A="FL:D:/Kernel/Except.CPP.Z,21"$0000010A65 0001 ExportSysSym Export -$LK,"_TASK_CONTEXT_RESTORE",A="FL:D:/Kernel/Sched.CPP.Z,95"$000000575E 0003 ExportSysSym Export -$LK,"_TASK_END_NOW ",A="FL:D:/Kernel/Sched.CPP.Z,151"$000000580E 0001 ExportSysSym Export -$LK,"_TEST_EXCEPT ",A="FL:D:/Kernel/Except.CPP.Z,5"$0000010A2E 0001 ExportSysSym Export -$LK,"_TRUNC ",A="FL:D:/Kernel/Math1a.CPP.Z,401"$000000269F 0001 ExportSysSym Export -$LK,"_XCHG_I64 ",A="FL:D:/Kernel/Utils1a.CPP.Z,185"$000000207C 0001 ExportSysSym Export -$LK,"_XCHG_U16 ",A="FL:D:/Kernel/Utils1a.CPP.Z,201"$00000020A0 0001 ExportSysSym Export -$LK,"_XCHG_U32 ",A="FL:D:/Kernel/Utils1a.CPP.Z,193"$000000208F 0001 ExportSysSym Export -$LK,"_XCHG_U8 ",A="FL:D:/Kernel/Utils1a.CPP.Z,209"$00000020B4 0001 ExportSysSym Export -$LK,"_YIELD ",A="FL:D:/Kernel/Sched.CPP.Z,165"$0000005839 0001 ExportSysSym Export -$LK,"adam_task ",A="FL:D:/Kernel/KGlbls.CPP.Z,7"$0000004288 0019 0000000008 GlbVar Export -$LK,"ans ",A="FL:D:/Kernel/Adam1a.HPP,3312"$(Fs->answe 0000 0000000010 DefineStr -$LK,"ansf ",A="FL:D:/Kernel/Adam1a.HPP,3313"$(Fs->answe 0000 0000000018 DefineStr -$LK,"c32_eax ",A="FL:D:/Kernel/BIOS32.CPP.Z,157"$0000016B07 0008 0000000004 GlbVar Export -$LK,"c32_ebx ",A="FL:D:/Kernel/BIOS32.CPP.Z,158"$0000016B0B 0009 0000000004 GlbVar Export -$LK,"c32_ecx ",A="FL:D:/Kernel/BIOS32.CPP.Z,159"$0000016B0F 0007 0000000004 GlbVar Export -$LK,"c32_edi ",A="FL:D:/Kernel/BIOS32.CPP.Z,162"$0000016B1B 0006 0000000004 GlbVar Export -$LK,"c32_edx ",A="FL:D:/Kernel/BIOS32.CPP.Z,160"$0000016B13 0000 0000000004 GlbVar Export -$LK,"c32_eflags ",A="FL:D:/Kernel/BIOS32.CPP.Z,163"$0000016B1F 0000 0000000004 GlbVar Export -$LK,"c32_esi ",A="FL:D:/Kernel/BIOS32.CPP.Z,161"$0000016B17 0001 0000000004 GlbVar Export -$LK,"chars_bitmap_alpha ",A="FL:D:/Kernel/Str1a.CPP.Z,320"$0000002C7C 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_alpha_numeric",A="FL:D:/Kernel/Str1a.CPP.Z,324"$0000002CBC 0003 0000000040 GlbVar Export -$LK,"chars_bitmap_alpha_numeric_no_at",A="FL:D:/Kernel/Str1a.CPP.Z,328"$0000002CFC 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_dec_numeric",A="FL:D:/Kernel/Str1a.CPP.Z,340"$0000002DBC 0003 0000000040 GlbVar Export -$LK,"chars_bitmap_displayable",A="FL:D:/Kernel/Str1a.CPP.Z,376"$0000002FFC 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_filename",A="FL:D:/Kernel/Str1a.CPP.Z,336"$0000002D7C 0002 0000000040 GlbVar Export -$LK,"chars_bitmap_getkey ",A="FL:D:/Kernel/Str1a.CPP.Z,368"$0000002F7C 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_hex_numeric",A="FL:D:/Kernel/Str1a.CPP.Z,344"$0000002DFC 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_non_eol",A="FL:D:/Kernel/Str1a.CPP.Z,384"$000000307C 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_non_eol_white_space",A="FL:D:/Kernel/Str1a.CPP.Z,352"$0000002E7C 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_printable",A="FL:D:/Kernel/Str1a.CPP.Z,372"$0000002FBC 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_safe_dollar",A="FL:D:/Kernel/Str1a.CPP.Z,380"$000000303C 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_white_space",A="FL:D:/Kernel/Str1a.CPP.Z,348"$0000002E3C 0007 0000000040 GlbVar Export -$LK,"chars_bitmap_word ",A="FL:D:/Kernel/Str1a.CPP.Z,332"$0000002D3C 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_zero_cr_nl_cursor",A="FL:D:/Kernel/Str1a.CPP.Z,356"$0000002EBC 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_zero_tab_ff_cr_nl_cursor",A="FL:D:/Kernel/Str1a.CPP.Z,360"$0000002EFC 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_zero_tab_ff_cr_nl_cursor_dollar",A="FL:D:/Kernel/Str1a.CPP.Z,364"$0000002F3C 0000 0000000040 GlbVar Export -$LK,"cnts ",A="FL:D:/Kernel/KGlbls.CPP.Z,19"$0000004308 001F 0000000041 GlbVar Export -$LK,"cpu_structs ",A="FL:D:/Kernel/Adam1b.HPP,184"$0000001770 000C 0000000008 GlbVar Public Export -$LK,"dbg ",A="FL:D:/Kernel/KGlbls.CPP.Z,27"$00000048A8 001E 0000000040 GlbVar Export -$LK,"dev ",A="FL:D:/Kernel/KGlbls.CPP.Z,25"$0000004788 0020 00000000F0 GlbVar Export -$LK,"dsk ",A="FL:D:/Kernel/KGlbls.CPP.Z,28"$00000048E8 0040 00000001DC GlbVar Export -$LK,"eps ",A="FL:D:/Kernel/Adam1a.HPP,54"$(0x3CB0000 0000 0000000020 DefineStr -$LK,"exp_1 ",A="FL:D:/Kernel/Adam1a.HPP,48"$(0x4005BF0 0000 0000000020 DefineStr -$LK,"ext ",A="FL:D:/Kernel/Adam1b.HPP,36"$0000001650 0003 0000000008 GlbVar Public Export -$LK,"fat_long_name_map ",A="FL:D:/Kernel/Dsk/FileSysFAT.CPP.Z,187"$00000213B1 0006 000000000D GlbVar Export -$LK,"fp_doc_put ",A="FL:D:/Kernel/KGlbls.CPP.Z,32"$0000004AD8 0002 0000000008 GlbVar Export -$LK,"fp_getstr2 ",A="FL:D:/Kernel/KGlbls.CPP.Z,30"$0000004AC8 0005 0000000008 GlbVar Export -$LK,"fp_set_std_palette ",A="FL:D:/Kernel/KGlbls.CPP.Z,33"$0000004AE0 0002 0000000008 GlbVar Export -$LK,"fp_update_ctrls ",A="FL:D:/Kernel/KGlbls.CPP.Z,31"$0000004AD0 0002 0000000008 GlbVar Export -$LK,"inf ",A="FL:D:/Kernel/Adam1a.HPP,44"$(0x7FF0000 0000 0000000020 DefineStr -$LK,"ip ",A="FL:D:/Kernel/KGlbls.CPP.Z,20"$0000004350 0052 00000000C0 GlbVar Export -$LK,"ip_grid ",A="FL:D:/Kernel/KGlbls.CPP.Z,21"$00000044D0 001F 0000000050 GlbVar Export -$LK,"ip_last ",A="FL:D:/Kernel/KGlbls.CPP.Z,20"$0000004410 0001 00000000C0 GlbVar Export -$LK,"kbd ",A="FL:D:/Kernel/KGlbls.CPP.Z,23"$0000004630 003A 000000007A GlbVar Export -$LK,"keydev ",A="FL:D:/Kernel/KGlbls.CPP.Z,24"$00000046B0 0018 00000000D8 GlbVar Export -$LK,"local_time_offset ",A="FL:D:/Kernel/KGlbls.CPP.Z,15"$00000042C8 0009 0000000008 GlbVar Export -$LK,"log10_2 ",A="FL:D:/Kernel/Adam1a.HPP,51"$(0x3FD3441 0000 0000000020 DefineStr -$LK,"log2_10 ",A="FL:D:/Kernel/Adam1a.HPP,49"$(0x400A934 0000 0000000020 DefineStr -$LK,"log2_e ",A="FL:D:/Kernel/Adam1a.HPP,50"$(0x3FF7154 0000 0000000020 DefineStr -$LK,"loge_2 ",A="FL:D:/Kernel/Adam1a.HPP,52"$(0x3FE62E4 0000 0000000020 DefineStr -$LK,"mon_start_days1 ",A="FL:D:/Kernel/Date.CPP.Z,3"$0000009636 0003 0000000018 GlbVar Export -$LK,"mon_start_days2 ",A="FL:D:/Kernel/Date.CPP.Z,5"$000000964E 0003 0000000018 GlbVar Export -$LK,"mouse ",A="FL:D:/Kernel/KGlbls.CPP.Z,22"$0000004520 005F 0000000083 GlbVar Export -$LK,"mouse_last ",A="FL:D:/Kernel/KGlbls.CPP.Z,22"$00000045A8 000C 0000000083 GlbVar Export -$LK,"mp_cnt ",A="FL:D:/Kernel/Adam1b.HPP,185"$0000001778 0011 0000000008 GlbVar Public Export -$LK,"mp_cnt_initial ",A="FL:D:/Kernel/Adam1b.HPP,186"$0000001780 0003 0000000008 GlbVar Export -$LK,"mp_cnt_lock ",A="FL:D:/Kernel/Adam1b.HPP,187"$0000001788 0003 0000000008 GlbVar Export -$LK,"num_lock_map ",A="FL:D:/Kernel/KbdMouse/Keyboard.CPP.Z,174"$0000011AE3 0001 0000000100 GlbVar Export -$LK,"pi ",A="FL:D:/Kernel/Adam1a.HPP,46"$(0x400921F 0000 0000000020 DefineStr -$LK,"pow10_I64 ",A="FL:D:/Kernel/KGlbls.CPP.Z,16"$00000042D0 0003 0000000008 GlbVar Export -$LK,"progress1 ",A="FL:D:/Kernel/Adam1b.HPP,165"$0000001668 0008 0000000008 GlbVar Public Export -$LK,"progress1_desc ",A="FL:D:/Kernel/Adam1b.HPP,166"$0000001678 0005 0000000030 GlbVar Public Export -$LK,"progress1_max ",A="FL:D:/Kernel/Adam1b.HPP,167"$0000001670 0005 0000000008 GlbVar Public Export -$LK,"progress2 ",A="FL:D:/Kernel/Adam1b.HPP,168"$00000016A8 0000 0000000008 GlbVar Public Export -$LK,"progress2_desc ",A="FL:D:/Kernel/Adam1b.HPP,169"$00000016B8 0000 0000000030 GlbVar Public Export -$LK,"progress2_max ",A="FL:D:/Kernel/Adam1b.HPP,170"$00000016B0 0000 0000000008 GlbVar Public Export -$LK,"progress3 ",A="FL:D:/Kernel/Adam1b.HPP,171"$00000016E8 0000 0000000008 GlbVar Public Export -$LK,"progress3_desc ",A="FL:D:/Kernel/Adam1b.HPP,172"$00000016F8 0000 0000000030 GlbVar Public Export -$LK,"progress3_max ",A="FL:D:/Kernel/Adam1b.HPP,173"$00000016F0 0000 0000000008 GlbVar Public Export -$LK,"progress4 ",A="FL:D:/Kernel/Adam1b.HPP,174"$0000001728 0000 0000000008 GlbVar Public Export -$LK,"progress4_desc ",A="FL:D:/Kernel/Adam1b.HPP,175"$0000001738 0000 0000000030 GlbVar Public Export -$LK,"progress4_max ",A="FL:D:/Kernel/Adam1b.HPP,176"$0000001730 0000 0000000008 GlbVar Public Export -$LK,"reverse_bits_table ",A="FL:D:/Kernel/KGlbls.CPP.Z,13"$00000042B8 0003 0000000008 GlbVar Export -$LK,"scan_code_map ",A="FL:D:/Kernel/KbdMouse/Keyboard.CPP.Z,154"$00000119E3 0001 0000000100 GlbVar Export -$LK,"set_bits_table ",A="FL:D:/Kernel/KGlbls.CPP.Z,14"$00000042C0 0003 0000000008 GlbVar Export -$LK,"snd ",A="FL:D:/Kernel/KGlbls.CPP.Z,18"$00000042D8 0006 0000000029 GlbVar Export -$LK,"sqrt2 ",A="FL:D:/Kernel/Adam1a.HPP,53"$(0x3FF6A09 0000 0000000020 DefineStr -$LK,"sys_acct ",A="FL:D:/Kernel/KGlbls.CPP.Z,12"$00000042B0 0010 0000000008 GlbVar Export -$LK,"sys_bios_gr_mode ",A="FL:D:/Kernel/Adam1b.HPP,54"$0000001460 0002 0000000002 GlbVar Public Export -$LK,"sys_boot_base ",A="FL:D:/Kernel/Adam1b.HPP,24"$0000000004 0004 0000000004 GlbVar Export -$LK,"sys_boot_code ",A="FL:D:/Kernel/Adam1b.HPP,25"$0000000018 0001 0000000004 GlbVar Export -$LK,"sys_boot_patch_table_base",A="FL:D:/Kernel/Adam1b.HPP,26"$0000000008 0001 0000000004 GlbVar Export -$LK,"sys_cache_line_width",A="FL:D:/Kernel/Adam1b.HPP,219"$00000017C0 0001 0000000008 GlbVar Public Export -$LK,"sys_clipboard_doc ",A="FL:D:/Kernel/KGlbls.CPP.Z,5"$0000004280 0000 0000000008 GlbVar Export -$LK,"sys_code_bp ",A="FL:D:/Kernel/Adam1b.HPP,153"$0000001658 0009 0000000008 GlbVar Public Export -$LK,"sys_compile_time ",A="FL:D:/Kernel/Adam1b.HPP,161"$000000000C 0001 0000000008 GlbVar Public Export -$LK,"sys_ctrl_alt_flags ",A="FL:D:/Kernel/Adam1b.HPP,162"$0000001648 0005 0000000008 GlbVar Export -$LK,"sys_data_bp ",A="FL:D:/Kernel/Adam1b.HPP,154"$0000001660 0005 0000000008 GlbVar Public Export -$LK,"sys_focus_task ",A="FL:D:/Kernel/Adam1b.HPP,180"$0000001768 000C 0000000008 GlbVar Public Export -$LK,"sys_font_8x8 ",A="FL:D:/Kernel/Font8x8.CPP.Z,3"$0000006499 0001 0000000800 GlbVar Export -$LK,"sys_gdt ",A="FL:D:/Kernel/Adam1b.HPP,220"$00000003E0 0004 0000001080 GlbVar Export -$LK,"sys_heap_base ",A="FL:D:/Kernel/Adam1b.HPP,157"$0000001630 0003 0000000008 GlbVar Export -$LK,"sys_heap_dbg ",A="FL:D:/Kernel/Adam1b.HPP,144"$0000001646 0000 0000000001 GlbVar Export -$LK,"sys_heap_init_flag ",A="FL:D:/Kernel/Adam1b.HPP,145"$0000001642 0000 0000000001 GlbVar Export -$LK,"sys_heap_init_val ",A="FL:D:/Kernel/Adam1b.HPP,146"$0000001643 0000 0000000001 GlbVar Export -$LK,"sys_heap_limit ",A="FL:D:/Kernel/Adam1b.HPP,158"$0000001638 0003 0000000008 GlbVar Export -$LK,"sys_macro_root ",A="FL:D:/Kernel/KGlbls.CPP.Z,3"$00000041F8 0002 0000000080 GlbVar Export -$LK,"sys_macro_util_task ",A="FL:D:/Kernel/KGlbls.CPP.Z,4"$0000004278 0001 0000000008 GlbVar Export -$LK,"sys_mem_init_flag ",A="FL:D:/Kernel/Adam1b.HPP,147"$0000001640 0001 0000000001 GlbVar Export -$LK,"sys_mem_init_val ",A="FL:D:/Kernel/Adam1b.HPP,148"$0000001641 0001 0000000001 GlbVar Export -$LK,"sys_neg_powers_lets ",A="FL:D:/Kernel/StrPrint.CPP.Z,240"$000000A4C0 0001 0000000008 GlbVar Export -$LK,"sys_neg_powers_lst ",A="FL:D:/Kernel/StrPrint.CPP.Z,242"$000000A510 0000 0000000008 GlbVar Export -$LK,"sys_num_spawned_tasks",A="FL:D:/Kernel/KGlbls.CPP.Z,8"$0000004290 0001 0000000008 GlbVar Export -$LK,"sys_pci_busses ",A="FL:D:/Kernel/Adam1b.HPP,194"$0000001462 0000 0000000002 GlbVar Public Export -$LK,"sys_pci_services ",A="FL:D:/Kernel/BIOS32.CPP.Z,164"$0000016A77 0007 0000000004 GlbVar Export -$LK,"sys_pos_powers_lets ",A="FL:D:/Kernel/StrPrint.CPP.Z,239"$000000A4A8 0001 0000000008 GlbVar Export -$LK,"sys_pos_powers_lst ",A="FL:D:/Kernel/StrPrint.CPP.Z,241"$000000A4D8 0000 0000000008 GlbVar Export -$LK,"sys_progresses ",A="FL:D:/Kernel/Adam1b.HPP,177"$0000001668 0002 0000000100 GlbVar Public Export -$LK,"sys_rnd_seed ",A="FL:D:/Kernel/KGlbls.CPP.Z,11"$00000042A8 0019 0000000008 GlbVar Export -$LK,"sys_run_level ",A="FL:D:/Kernel/Adam1b.HPP,27"$0000001464 000A 0000000004 GlbVar Export -$LK,"sys_semas ",A="FL:D:/Kernel/Adam1b.HPP,188"$00000017E0 003A 0000000540 GlbVar Export -$LK,"sys_task_being_screen_updated",A="FL:D:/Kernel/KGlbls.CPP.Z,10"$00000042A0 0001 0000000008 GlbVar Export -$LK,"sys_var_init_flag ",A="FL:D:/Kernel/Adam1b.HPP,149"$0000001644 0000 0000000001 GlbVar Export -$LK,"sys_var_init_val ",A="FL:D:/Kernel/Adam1b.HPP,150"$0000001645 0000 0000000001 GlbVar Export -$LK,"sys_winmgr_task ",A="FL:D:/Kernel/KGlbls.CPP.Z,10"$0000004298 0004 0000000008 GlbVar Export -$LK,"tS ",A="FL:D:/Kernel/Misc1a.CPP.Z,122",BI=609$000000E90E 0020 0000000057 Funct Export Res -$LK,"text ",A="FL:D:/Kernel/KGlbls.CPP.Z,26"$0000004878 005E 0000000030 GlbVar Export -throw 0000010BDB 0000 ExportSysSym -$LK,"throw ",A="FL:D:/Kernel/Except.CPP.Z,82",BI=610$0000010BDB 0025 0000000164 Funct Export Res -$LK,"\343 ",A="FL:D:/Kernel/Adam1a.HPP,47"$(0x400921F 0000 0000000020 DefineStr -$LK,"\354 ",A="FL:D:/Kernel/Adam1a.HPP,45"$(0x7FF0000 0007 0000000020 DefineStr -$„‰NN NNN$x}ªMªM³MÀMÅM$”™rNrN{NˆN�N ½ÁêOêOóOPl„„„(„7„B„R„b„r„‚„‘„ „°„À„á„ã„ò„……!…J…J…O…0;CÁ†Á†І܆ê†ó†ø†þ†p¢ºÉŠÉŠÝŠéŠ÷Š‹‹.‹Q‹\‹f‹o‹|‹‡‹”‹±‹¸‹¼‹Ä‹È‹Ћ¨Ci‡‡*‡/‡:‡D‡N‡Z‡Z‡b‡‹‡”‡™‡¢‡¥‡©‡©‡‡؇Û‡Þ‡ä‡ë‡ï‡ˆˆ&ˆ(ˆ3ˆ3ˆ8ˆ8ˆGˆWˆ °#Kq§q§y§™§£§§ɧÖ§Þ§ë§ø§-¨4¨j¨z¨š¨Шà¨à¨©©*©`©h©x©‘©é˩˩˩֩頻ª ª -Œ.M‘‘‘‘'‘.‘.‘M‘Y‘h‘u‘‚‘‡‘�‘œ‘¢‘©‘©‘­‘­‘­‘­‘º‘½‘Í‘ LKZªª8ªSªaªlªpªtªxª‚ªŒªŒªŽªœª <0;A†A†J†r†•†¡†®†¸†½† Há˜á˜õ˜™@™M™Z™e™�™‰™‘™„›¸Ñ”Ñ”ë”ú”••'•2•>•U•Z•j•|•‚•‚•Ë•ЕЕî•î•–&–,–N–|€›�“�“ž“ “®“®“¼“Ï“÷“”(”8”[”C”u”•”ª”¯”¯”¯”Á”Ä”ДpüÉŽÉŽÝŽæŽ÷Ž �B�Q�^�i�†�™�¬�¬�¼�¼�É�Û�å�í�x.ñ�ñ�� ��'�O�r���Ž�¢�™�Ã�×�Ý�ß�á�ç�é�ö�ù�‘D‚�a‰a‰o‰—‰º‰ljÔ‰߉Š ŠŠDu‚±ˆ±ˆºˆâˆ‰‰ ‰*‰M‰U‰Z‰\�¢ŠŠ&Š0Š4Š4Š\ŠŠŠŠ¨Š¹Š»Š»ŠÊ`ó˜˜ ˜$˜,˜3˜8˜`˜ƒ˜�˜�˜¨˜Ř͘Ô˜Ô˜טݘPM]Ñ‘Ñ‘Ú‘Ú‘é‘ø‘ ’ ’’0’4’4’9’ÀA‘™‘™§™¯™¹™Å™Ó™ã™ š.š=šhšlštš~š¦šÉšךçšòš›-›2›:›e›i›{›€›�›—›¥›¥›¯›¹›@iuYˆYˆmˆtˆ~ˆ‡ˆ–ˆ¢ˆ¨ˆ®ˆ@t€““)“7“>“A“D“H“O“o““\¸ËQ–Q–s–w–}–€–‹–‹–œ–©–³–¶–¹–¿–Í–l]t9’9’[’a’j’j’s’‚’�’º’Å’Í’Ï’á’á’á’ò’ÿ’ÿ’ “ºüыыߋç‹ì‹ò‹Œ=ŒEŒMŒXŒ]ŒoŒ|Œ…ŒŠŒµŒ¼ŒÄŒÆŒÏŒÞŒåŒ � ��,�;�\�d�w�‡�—�§�¶�Æ�Ö�æ�ŽŽ Ž ŽŽ Ž/ŽPŽ[ŽjŽzŽŠŽšŽ±Ž±Ž±Ž½ŽÃŽ ß#£££.£:£:£K£R£R£f£o£€£‰£ª£¯£Ê£Ñ£Ñ£ç£ó£ó£¤¤<¤[¤z¤†¤�¤´¤¶¤ǤÞ¤õ¤¥3¥?¥V¥m¥r¥ƒ¥š¥±¥±¥¹¥Ç¥Ø¥ï¥¦¦.¦E¦O¦X¦_¦u¦”¦˜¦p§|¹Ô± ± ß ã ç þ ¡$¡:¡L¡h¡m¡y¡¡‚¡‰¡�¡‘¡•¡™¡™¡™¡4¢ <Ôß9¢9¢?¢=¢M¢h¢t¢v¢v¢ú¢ 8£­1Ì1Ì?ÌDÌOÌRÌVÌ\Ì!ŒA`¹›¹›ß›ã›ë›ñ›ú›œœ œœœAœNœXœ[œ^œeœmœsœ€œ€œ„œ–œ"@$0É…É…×…ß…ç…ô…ÿ… †8†:†@†#@$Q…Q…_…g…o…|…‡…‘…¼…¾…Ä…$°ËóÑ–Ñ–ó–ù–—— ——)—-—7—I—I—Y—e—j—j——Š—’———©—©—©—±—¿—Í—×—Ú—à—í—ú—ú— ˜%\“¦›e›e³eÆeÚeéef f ff0fJfUf[f_fif&@°¼ëfëfgg(g.gHgOgegkgqg§g'8¦°kfkff‘f—f±f¸fÎfÔfçf(ÄoœF�F�^�e�m�‚�‹�‹�¦�¬�¬�¶�½�È�Í�×�ë�í�ø�ø�‚‚‚‚#‚'‚2‚8‚;‚>‚C‚J‚T‚d‚)(óùV…V…_…h…n…s…*lÜó–„–„¬„»„À„Є؄؄å„ï„þ„……!…-…8…>…I…L…T…+0go���"�.�9�=�C�,ð¤Üž‚ž‚¸‚À‚Ȃׂè‚ꂃƒƒ"ƒ2ƒ8ƒ>ƒEƒNƒlƒhƒ{ƒ‹ƒ¢ƒ³ƒ¶ƒ»ƒÁƒáƒ÷ƒ„ „„„ „*„5„;„>„D„S„d„i„u„€„’„-0œ¤f‚f‚o‚}‚‘‚™‚™‚ž‚.(msvrvrzrŠr�rŸr/,àçsisi‰i¥i·i½iØi0,Ùà+i+i9iGiXi^imi1ˆZx¡ª¡ª«ª­ªŪÓªóªüª*«-«6«d«g«k«p«|«ƒ«¥«¨«±«Ó«Ö«Ö«Ù«ä«ë«ò«28ÏÙÃhÃh×héhøh ii"i+i3Lœ«>ý>ýYý\ýlýwý}ýˆýˆýŒý–ý4h«Á–ý–ý¯ý²ýÀýÀýÉýÔýÙýÜýìý÷ýýýþþþ þþ50'/NæNæXæZæbæ|æ�æ‡æ6Xóibibwb„b‘b¯b±b¸b¿bÍbÑbÓbÝbåb78z„››&›(›0›D›K›P›X›8HºÈžëžë­ë»ëÊëÖëÝëìëøëøëþë9(‚ˆféféjéwé¬é¸é:—áÇáÇÈÈ È#È6È:ÈFÈdÈdÈrÈxȀȌȑȑȘȞȪȯȶȽÈÄÈÎÈÚÈìÈñÈôÈûÈûÈ ÉÉ$É1ÉPÉfÉyÉ}ɘɰÉäÉäÉëÉõÉûÉýÉýÉýÉýÉýÉýÉýÉÊÊÊ,Ê2Ê;ÊAÊCÊCÊJÊTÊVÊVÊVÊYÊ[Ê[ÊbÊeÊlÊlÊoÊtÊʓʚʠʵʸÊ×Ê×ÊÜÊÜÊÜÊãÊíÊõÊõÊõÊË Ë˶Ë;,qx™t™t¢t§tÂtÔtÔtÙt<Ð9ii­i­{­Š­ ­¬­±­Ï­Ï­Ø­í­® -®®"®.®>®C®H®H®O®V®_®a®a®h®s®’®’®¢®©®²®îîîήÕ®Ú®á®û®þ® ¯=Hù«ù«¬¬¬¬'¬/¬4¬@¬F¬H¬H¬M¬>Œš¹¹°¹°аÓ°Ó°ä°í°÷°û°þ° ±±±±±$±+±/±8±8±A±F±R±d±f±p±?P,©¬©¬¸¬¾¬¾¬ɬݬé¬ñ¬÷¬ü¬­­­ -­@X;M‘Õ‘Õ›Õ®ÕÁÕÉÕúÕlÖuÖA<it¯¯¯#¯4¯I¯Q¯T¯V¯Z¯BTQ[Q[e[‡[‡[“[ž[¢[©[­[±[¹[º[Â[C<É[É[ß[ì[þ[\\%\/\D|`{™œ™œ«œºœ½œÞœþœ�3�C�L�z�‡�—���­�­�¿�Â�Ç�Ç�×�Ý�à�CžE{¹IžIž]ždžtž{ž{ž‘ž�žÄžãžŸŸ Ÿ#Ÿ)Ÿ7Ÿ;ŸAŸOŸOŸOŸnŸ�Ÿ¡Ÿ¶ŸºŸÀŸΟÒŸØŸêŸêŸêŸêŸíŸòŸ÷ŸýŸ   # ' - 8 8 8 = C T X ^ i m s | | | ± Fp]u–û–û·ûºûÈûÈûÔûÛûàûãûéûìûôûùûùûþûüüüüGXŠœ¶ü¶üÚüÝüëüëüÿüýý ý+ý+ý+ý/ý=ýHduŠüü;üAüOüOücünürüyü|ü†ü�ü�ü¡ü¡ü¡ü¥ü±üI(ˆŽó ó ü  - %JDŽ›++9GV^dpƒƒŒK,ˆ�¾é¾éÌéÓéÛéÝéãéL,}„ÊMÊMÞMéMòMõMýMM<£®OO&O*O@OTO^OhOkO{ON°´ÜÞ_Þ_ø_``&`6`I`T`Z`r`r`~`�`š`©`®`®`º`º`Â`Â`+a0a0a]a]ajamapa|aƒaŒa´aO´lžbžb´bÀbÈb×bÛbïbcc!c*c0c5cLcUcmc{c{c†c–c¢c²cÄcÄcÈcÎcÙcãcãcçcëcúc -dd"dGdGdVdXd^dfdxd�d—d¦d«d«d·d·dÅdÎdÎdÝd eeeee(e>eSe\eieseue{eˆeŽe•e¢e¨e¨e¯eÅeÊeÒeÚeãeêeóefsfPŒä¶a¶aÌaÓaÞaéabbb+b0b7bCbCbMbRbYbdbrbvbyb|b…b˜bQ0 i -i -� -– -¼ -ß -ç -R44=ñÀñÀÿÀ ÁÁÁ Á#Á)ÁSLyˆ0i0iDiQiTiXifioiŽiši¤i¨i«i½iT W›kKkKsK€K�K”K¨K½KÖKïK÷KL)L=L‹L�L‘LUL;JÎðÎðÞðäðïðøðûðñññññ ñV`–ªÖóÖóêóøóýóôôôô'ô3ô7ôOôVôYô[ô~ôW4¬µ†Á†Á Á£Á£Á¬Á½ÁÀÁÈÁXL%t¾;¾;Ø;Û;á;ð;÷;ý;)<0<[<b<f<�<�<°<¹<¹<Ç<===+=>=K=\=n={=Œ=¤=´=Å=Ë=ò=> >>>6>6>A>C>C>N>P>P>[>]>]>m>p>p>|>‹>§>°>¹>Ä>Ú>ç>ç>ç>ç>û>??$?*?-?v?YT -9{9{M{V{o{€{¥{¨{¿{É{Ö{Ö{Ø{à{Z@>JšQšQ¨Q®QµQËQËQÒQéQéQïQ[()/òPòPQQQ!Q\ÌÂñããû(--?DDV[[mrr„‰‰‰‰�••§¬¬¾ÃÃÚ --4;DS¶] a…)2?LYq…‡››£¸ÅÅÒÚéû)1ELLV^H•£!º!º4º>ºBºVºbºdºpºwº}º—º¡º_4ø!z!z5ztz{z�zŽz¡z­z`L †ï†ï�ï¤ï­ï¸ïºï¼ïËïËïÚïÜïÜïáïaH -æïæïúïüïð7ð<ðSðXðXð\ðdðbLïï'ïBïKïVïXïZïiïiïxïzïzïïc4 - -P -PP"P"P6P:P>PdDÅÒñ±ñ±²²"²/²R²m²u²ƒ²¦²«²³²e( á¾á¾ï¾õ¾¿¿fŒä¹½¹½Á½ʽÚ½é½õ½¾¾¾ ¾$¾$¾H¾W¾x¾�¾˜¾š¾š¾£¾£¾µ¾¼¾¼¾ξÓ¾Û¾gXÀÒÉÆÉÆäÆêÆõÆÇÇÇÇÇ.Ç7ÇBÇBÇKÇXÇh„œ>×>×G×J×a×a×x׌ת׬×Ä×××â×ó× -Ø -Ø!Ø5ØSØUØm؀؀؃ØÜØiœùv…v…œ…¶…Â…Æ…Ê…Ù…í…õ…û…† -††%†1†<†D†G†I†[†i†o†y†}†‚†‹†‘†”†¦†jüR¦YÄYÞYøYüYZZ Z'Z0Z9ZQZ`ZxZ‹Z”Z�Z«ZÃZÖZßZóZ÷ZýZ[ [[[[$[9[N[Q[\[b[j[n[€[†[Œ[“[™[©[¯[Á[È[Ê[\khŽX§X©X±XÎX×XíXûXYY+Y1Y=YMYMY_YaYŸYl$#6î6î:îIîMîm8#-NîNîRî\îlî�î¢î¢î¢î¦în$îî"î1î5îo$-2¦î¦îªî·î»îp$27¾î¾îÂîÇîËîq$7<ÎîÎîÒîçîëîr$<Aîîîîòîïïs AEïï -ïïtD‰–9u9uMu[u[uku“uœu u±u´u¼uu�ªÊ~ô~ôŸô¢ô«ôÇôÚôÚôåôêôòô õõ'õ1õ6õBõHõOõ\õ_õhõkõnõsõšõv0Ï×¾õ¾õÌõØõïõóõõõ öwD<I‘ä‘ä£ä®ä»äÃäËäÓäÛäãäëäñäx�&F˜˜˜"˜+˜C˜Q˜V˜Y˜g˜l˜…˜�˜·˜»˜Û˜Ý˜å˜™™3™=™D™Z™u™‘™­™É™Ð™Ø™y4&Æ—Æ—Ï—Ï—æ—˜˜˜z4}† - - - -$ -- -{x4^^mw…�µÊåëø((9@GPcl|œ÷¶¶¼ºÊW}<1<ÆÐÆÐÔÐëÐöÐöÐÑÑÑ Ñ~<JU~Ñ~ьѣѮѮѹÑÁÑÁÑÇÑ@ ÎÎÎÎâÎõÎÏÏÏ2ÏBÏEÏUÏ€ˆ +VÏVÏpÏsφϓϯϲϸÏÁÏÍÏÏÏâÏõÏùÏÐÐÐ%Ð1Ð3Ð3ÐCÐFÐ\Ð�$UZÎÑÎÑâÑñÑùÑ‚,ZaþÑþÑÒ+Ò2Ò8Ò@ÒƒH<JÑÑ"Ñ>ÑLÑ\Ñ^Ñ`ÑkÑoÑoÑwÑ„lö îCîCDD D>D>D^D`D`D€D‚D‚D’D”D”D¤D¤DªD­DäD…4 -±z±zÅz{ {{){,{8{†@êö–C–C­CÂCÒCØCÝCßCßCéC‡ìó*ÞÞ Þ"Þ1Þ?ÞKÞ`ÞeÞnÞqÞvÞ€Þ€ÞŠÞ�Þ£Þ»Þ·ÞÉÞÎÞìÞßßßßß=ß?ß[ßU߇߇ߗߧߧ߮ߴ߷߼ßÌßÓߨàˆ0T\ÁØÁØÏØרÝØ‰h>TØØØØ*Ø*Ø6Ø6ØCØCØRØaØp؂ؗءذذغ؊4)×)×2×7×@×F×F×K׋8$Q×Q×Z×_×h×q×w×w×|׌Ü6i¹|¹|Ï|Þ|é|û|}}#};}H}[}g}r}‚}¤}¦}Ã}Ð}Ð}Ð}á} ~~~#~*~0~5~;~?~F~Q~W~Z~�~�|Œ§!Ú!Ú=ÚBÚEÚRÚXÚ[ÚcÚlÚ{ÚƒÚƒÚŽÚŽÚ–Ú˜Ú˜ÚŸÚ¢Ú®ÚŽÐ\ŒáØáØýØÙÙ ÙÙÙÙÙ&Ù8Ù;Ù>ÙCÙSÙVÙiÙiÙ}ÙÙٖٓٓٙ٧٫ÙÁÙÇÙÎÙÕÙØÙÝÙòÙõÙ÷Ù÷Ù Ú Ú ÚÚ�|Ëæ¾¾ÚÝâíõ$+QQYv�††Ž·ÂÇÇËÚ�–×ÁuÁuÕu÷uvvv$v(v,v9vMvVvZvivv…v‹všv�v�v©vÞvêvövývww&w9wFwWwjwrwƒw‰w°wÂwÐwÕwàwöwxxxx3x>xIxPxWx]xdxgx‘x‘PyÖyÖ”Ö®Ö®Ö»Ö»ÖÈÖÈÖØÖÜÖÜÖìÖîÖîÖ%×’D$1�×�×�החשׯײ״׺דD1>Á×Á×Ï×Ô×××é×ï×ò×ô×ú×”$ÊÏžõžõ¬õµõ»õ•D é -é -ý -  # 4 E O Y j p –4FO®ú®ú¼úÊúÒúõúû6û—t %Î:Î:ß:é:í:ó:ÿ: ;;;#;#;-;<;\;v;v;v;v;|;|;Œ;Ž;Ž;·;˜0x€ÙtÙtêtôtøtþtu u™T`q t tt$t&t7tMt\thtƒt‰tŒt’tš@—£¹Ë¹ËÁËÅËÔËäËÌÌ"Ì(Ì,Ì›L²Á!»!»6»@»C»L»X»`»}»Œ»’»•»¡»œL£²¡º¡º¶ºÀºú̺غàºýº »»»!»�dK`¹�¹�Ù�å�ð�õ�‚‚‚#‚4‚8‚<‚B‚E‚L‚W‚W‚c‚ž@?Ki�i��‰���’�ž�£�§�«�µ�Ÿ('-¡€¡€¯€·€É€Ï€ ¨'11CNSamy‚�˜£¨¶ÄÒëù€€3€;€C€N€P€a€l€�€Œ€Ž€—€¡€¡h•Q¹Q¹Y¹e¹n¹}¹‰¹’¹™¹§¹´¹»¹À¹ñ¹ñ¹ñ¹º -º -ººº!º¢h`vi‚i‚y‚…‚�‚•‚¢‚«‚¯‚µ‚»‚Â˂ӂò‚õ‚ƒƒƒ£<4?��!�@�L�P�T�X�`�h�¤,-4ррڀè€÷€� �¥@ ˆ ˆ:ˆLˆQˆ\ˆfˆlˆlˆvˆ¦°:"ttt!tuLu[uluruxu„u“u«u¯u´uÁuÞuíuôuôuûu vv&v(v2v2v2v9vAvHvSv\vjv€v¬v¬vÐvÐv×váv÷vwww%w-wCwewjwjwmwŒw�w›wžw¡w¿w¿wÄwÄwÌwÑwÕwåwèwxxxxx x*x@x^xaxcxcxvx}x…x›x¹x¼x¾x¾xÙxÜxüxy y)y-y;yAyAy^y^y^ycycycyoy‚yŒy�y y£y¨y¨y­yÅyÈyîyòy z&z/z8zæFæJæNæª0žåžå¦å®å¶å¾åÂåÆå«8ÆåÆåÎåÖåÞåæåîåöåúåþå¬YÓPÓPíPûPQ Q2Q?QQQfQvQzQŠQ•Q¤Q¯QËQËQÏQÚQæQèQèQèQîQîQñQûQûQR R R%R5RHRNRWRaRnR~RžRžR°R°R°RÆRÓRêRóRùR S S SSS)S­X›H›HŸH¸HÇHÙHÞHôHûH I I3IMI]IbIbIdI®l3¦†¦†¾†Ð†Ú†í†‡ ‡‡ ‡'‡+‡3‡7‡?‡E‡K‡Z‡¯øÇf f n r z ‹ š ¤ ° ë ý    " , < D H W t y y � — ª ¹ Ú ê ò ÷  -!!:!J!U!g!y!”!›!­!­!»!»!¼!Î!Î!Ü!à!ä!°?æ!æ!î!ö!"" ",","0"8"<"U"�"ž"²"Ù"â"ë"ë"ð"###)#=#D#u#«#¿#Ï#å#ù#$1$g${$‹$‹$’$¤$¤$²$²$³$Å$Å$Ó$×$Û$±HæôÞÞòÿ$+4KNV²HŽœ®®ÀÊàú&(X³ìô+VVtwz„’�µ»Åèõ ,7`ek‘™Ÿ¢¯ºÈÙæî 49Mex‹¢´Æí´\?ÒÞ$Þ$é$ÿ$%%-%<%I%X%l%„%œ%¯%Å%Ð%ò% &(&M&R&k&€& &·&Ç&É&ÿ&V'''%'u'†'�'­'Â'Ü'Ü'(("()(e(s(Ó(¤(¢(ò(ù(þ()))M)j)°)})…)p)Ù) ***H*e*o*†*Ž*y*â*â*â*ç*ç*ø*+!+9+R+k+†+ž+´+Ì+Ú+å+å+ø+,%,:,T,X,V,¦,´,Ä,Ò,ê,--(->->-•-f-d-´-Â-Ò-í-...g.8.6.†.†.�.˜.­.­.¾.Å.Ú.Ú.ë.ë.î.ò.µT/@ù ù    * 1 W r y € � – š ¶+n)-5Vct}„š­ÂÖâú -%AVaiŽ“�¯È×äñ $(-->>QcvŒŽŽ¡©©©»»ÄÖÝÝïõ!·�nŽ&&19BMX_u‰’¦Íãý#ALWoz�Œ‘ª¸”'Hž3ž3Ë3Î3Ü3å3å3û3 4!4&494F4K4O4`4†4Ž4’4—4Ÿ4±4À4Ã4ý4¹dÒ'ö.ö.//*/9/C/L/]/u/�/�/°/¸/Ô/é/ÿ/0,010;0L0^0u0u0™0·0Á0Á0à0ï0÷0÷0&1@1€1S1[1F1¦1¿1Ç1Ç1ö122-252 2€2€2€2¶2¶2Ç2Ç2Ú2ì2ô23 323:3:3H3Q3\3j3q3|3Š3Š3�3›3ºLH—þ4þ4 55$5,5M5\5m5v5�5¥5µ5Ë5Þ5æ566"6*6O6T6^6k6}6–6¥6Ä6Ó6ú67 7(737H7k7z7†7�7¡7¼7×7â7ê788888.8.8A8S8f8o8o8‚8•8�8�8�8«8¶8½8È8É8Ý8á8è8»(@†¡ ¡ © ¹ É Ù è ñ ÿ  )>KSgtˆ•©³ÇÑåï(3Gn|Š—¢­¾Óèø$5Fy‡œÁØáð "+6=HR[}¼¼œÇ^^fnw–�³ÇÑÝèè÷9IQgrzz‰ªËÛãù   $ + = = K K L e ½°—¿î8î8ù8 99)949C9P9k9‚9†9Š9’9š9£9¹9Á9Ø9Ü9à9ä9ì9ô9ý9:&:/:@:G:G:X:a:¾t/q q | ‹ š ¨ à ã  ! R e v � Ž ¥ À Õ Ü Ü ñ ò ö ¿L¬»ññ  !*=Tbnx‹™ ¬À|†¡��•Ÿ¥±ÁÄÈÑáäíð(099?kpvƒÁ<¡¬‰‰—Ÿ§ÈÞçíÂxIc®Q®Q¼QÅQÊQãQçQìQRRR0RLRRR`R`RlRuR{R{R�Rà IOO6OEOQO\OgO{OŽO™O¥O´O»OÇOÌOÐOìOøOøOP%P9PGP\PbP†PŽPŽP–PšPžP¶PÄPïPÊPþP Q#Q'Q.Q9Q>Q>Q>QSQYQxQ}Q}Q‰Q�Q•Q—Q§QÄà�µ®S®SÔSÜSèSýSýSTT*T9T9T>TYT\TaToTƒTŠT”T”T©T©T¿TÍTÓTÛTæTUUUUU'U=UGUJUMUUUcUyUƒU†U†U�U‘U£Uňc�†R†R©R­RºR¿RÃRÖR÷RSSS#S*S=SBSFSYSzS„S„S˜S˜S›S©SÆ0 öNöNÿN -O O OOÇdµ -¦U¦UÈUÌUÔUåUåUûUVVV V.V3VLVOVTVYViVtV{VVƒV‘V¥V¬V¶V¼V¿VÍVÓVãVúVüVÿVÿVWW'W-W6WBWcWgWsWzW�W‡WŠW˜W®W®W®W³W¿W×WÛWæWéWìWòWõWXXXX!X-XEXIXTXWX^XoXoXvXŒXȰU}ÞÞú 2<AT_u‰“‘¡¿Ïé ' - 4 H P W ] d k | � � ÿ É”4Unn|ˆ «ÀÐåú$*6Mp€€‰Ž”•ÚÊ@8Dýý € €/€<€<€F€Ë(üÝ~Ý~æ~î~ô~ù~Ì008ÝÝæðñöÍTý~ý~!',,:>CCKÎ@ðüu~u~‰~—~¢~³~»~Ã~Ë~Î~Ö~ÏH"0��«·¼¼ÍÒÒØÐL"MM[gll}Œ‘‘—ÑDãð%~%~3~5~W~d~d~h~n~Ò(§­}}}&},}1}Ó0Ûã~~~~~~ÔT­¾5}5}J}Z}`}e}e}o}s}x}x}€}Õ@›§µ|µ|É|×|â|í|õ|ý|}}}ÖHÍÛÍ}Í}Û}ç}ì}ì}ù}þ}þ}~×L¾Í…}…}“}Ÿ}¤}¤}±}À}Å}Å}Ë}Ø`tˆv?v?„?Ž?•?›?¤?²?½?¿?Ì?Û?û?@ @@@ÙðˆÀ@@>@D@P@`@c@x@‚@�@º@½@Á@ó@AAA=AEAjAvAˆA”A A A´A·AÇAÔAÝAíAïAB BB%B5B|H|N|[|o|o|Ž|Ž|«|¯|³|¹|à txé~é~í~*áh cæDæDEEE!E+EXE|E„E–E¤E®E¿EÄEÚEâEçEF"F"FFFHFHFlFnFnF’F”F”F¤F¤FªF­F²FÈFÐFÕFîFG GEGEGiGnGnG’G—G—G»GÀGÀGÐGÐGÛGÞGèGüG HH=H=HNHRH^HlHuH‰H�H¤H«H®HIâÀ´àæLæL MMM8MFMTMcMfMjMtM�MŸMŸMÀMÂMÂMãMåMåMõM÷M÷MNN+N9NBNLNPNiNyN—N N¦N­NïNã|ÀÛ~B~B”B±B·BÃBÒBØBÜBñBþBC CCCä¸(Rñqñq rr8r:r:rGrQrWrhrjroror|r–r˜r�r·r¹r»rÕr×rÙrórõr÷rsssssss s s&s,s/s´så<FQÞ™Þ™ë™ó™ö™šššš šæ@am~š~š‹š“š–š¤š¨š¬šºš¾šÃšçTBSˆ~ˆ~‘~œ~¡~´~½~Â~Ç~Ò~Ü~Ü~å~è84>JQJQXQtQtQwQŽQŽQ”Qé$$)ÊPÊPØPìPòPê0YaÛ<Û<é<ë<ý<= -==ë°Œ´–^–^º^Ã^Ë^Ú^ß^ä^ô^ù^___!_'_/_;_A_C_C_J_P_V_^_j_p_r_r_‚_„_„_”_”_Þ_ì8ÐÚæŒæŒúŒ� �+�-�-�5�í$Úß6�6�J�\�d�î@éõÆ�Æ�Ü�ß�í� -ŽŽŽ Ž*Žï8ßéf�f�€�Ž�¦�¹�»�»�Å�ðtÁÚþþ$þ2þHþWþ\þlþnþtþ}þ…þ�þªþºþÉþÉþÐþÐþÐþÄÿñ8ÚäÆÿÆÿÔÿâÿêÿõÿ ò¬;‰Ó‰Ó™Ó¯ÓÅÓÃÓÓÓÛÓâÓæÓîÓþÓ ÔÔ!Ô)Ô5Ô;Ô;ÔBÔFÔFÔHÔ‹Õó<½È#@#@?@L@Q@g@j@@ô¼’½›>›>¹>Ï>é>ø>?%?*?O?V?X?X?g?q?|?�?�?”?–?¥?ª?¹?Ò?Ù?ó?@@@!@õTar==5=I=W=]=q=w=|=„=ž=¡=¯=ö@KW6q6q?qIqYq[qŽq•q•q•q˜q÷hÍãs^s^�^†^–^›^ª^¯^±^·^Æ^Ë^Í^Ü^ç^ë^ñ^ø ØüAA"A$A5A:AHAiAvA€AŠA¢A©A«A«A½AÃAÊAÌAÒAØAÛAâAäAíAùABBBBBùPÈØƒ@ƒ@�@°@Å@Ë@Ñ@à@î@î@ñ@ü@ú0 ““—ÀÛû4 -è~è~ö~"ü4ÇÐŽŒŽŒ¨Œ¿ŒÓŒÕŒÕŒßŒýˆ<Zvˆvˆˆ‰ˆ‰ˆ™ˆ¦ˆ¯ˆ¸ˆÁˆÊˆÞˆÞˆéˆïˆñˆ‰‰‰#‰I‰I‰K‰[‰a‰f‰þD†“^Š^ŠŠŠ˜Š£Š§Š«Š¯Š³Š¿ŠÌŠÏŠßŠÿd²ÇŒŒ"Œ%Œ*Œ0Œ9Œ>ŒJŒRŒ^ŒbŒjŒvŒxŒxŒ{Œ‡ŒL£²Ž‹Ž‹©‹Å‹Ï‹Ö‹Ö‹õ‹ú‹ü‹ü‹ŒHZhf‰f‰v‰}‰�‰†‰Š‰�‰“‰ž‰¤‰¬‰82<&ˆ&ˆ:ˆFˆYˆaˆiˆlˆtˆˆh†®‰®‰Â‰Å‰Ñ‰Ñ‰Ó‰×‰Ü‰à‰ë‰î‰ó‰ ŠŠ&Š2Š<Š?ŠAŠDŠFŠIŠKŠOŠ[Š0 ^‡^‡g‡‚‡ˆ‡ˆ‡�‡´ 2އއ—‡±‡±‡·‡·‡½‡½‡½‡½‡½‡½‡½‡½‡Â‡Â‡Ñ‡Ú‡Ú‡à‡å‡î‡î‡ˆˆˆˆˆˆˆˆˆˆ ˆ ˆ!ˆH)7‘\‘\©\¶\É\Û\ï\ù\]]]`7K]]!]&]0]8]A]D]K]N]V]]]]]e]@)1\1\E\W\^\b\e\p\€\ƒ\‹\ Ä2ébébýb -ccc%c'c=cEcEcOchcvccŠc•c˜cŸc¤c¬c±c¾cÃcÕcÜcdd d d d$d)d)d7d -0s{¦r¦rªr¯r¹rÉrÉrõr TFW[[_v�˜£¾çò &6GN ˜ +=a…ª¸õ2oq�››µÏìþ#<N^sŒ“š¶ÒÞ Hs�ææ-æ7æIæPæWægæræ€æƒæ‹æHØæqêqêƒê�ê£ê½êÈêÈêÙêéêëêëHIWñäñäþä ååå*å2å:åBåJåTåYåø�»‘æ‘æ™æ�æ¾æÇæÎæäæøæçç2çSç‰ç«çÃçÌçÎçÖçÞçõçýçèèèè è2è9èLè\ècèxè�è�è“è“è“èŸè«è«è°è¹èËèÒèÒèäèêèé„»Ø é ééé%é0é;éBéXéléué‰é°éÆéàéèéêêê2ê=êDêOêTêoêèæ!ë!ë;ëBëVëYëzë�ëŸë­ëÖëòëì -ì ìììì*ì4ì:ì=ì@ìBìNì^ìfìyì|ìì�ìžì®ìºìÉìÜìñìôì÷ìííííí%í%í3íKí€WsYåYåqå{å‚åŽå‘åŸå¢å¦å¨å«å®å¶å¹åÁåÕåßåõåûåþåæææì<©à©à±à½àÝàñàõàááá-áeáeá”á±á»áÈáôáôáâ(â(â7âFâZââƒâ…â…â‘â‘â“â“â£â¯â¯â³â¸âÁâÓâÚâèâ÷â"ã+ã=ã=ãCãŽä$ -¾í¾íÈíÛíàí¨';:;:C:I:V:e:„:�:�:¤:¶:Á:Ð:Ð:Ý:ï:ô:ÿ:&;-;:;F;O;T;T;T;t;”;®;³;¸;H/=޿޿—æ¬æ¸æÃæÌæÚæåæíæòæ@^jvv+vL2AKKSgkƒ›³ÂÎÜãð ?d„Ù����”�¡�¦�¯�Ò�×�Ü�á�æ�ë�Ž$Ž1ŽKŽXŽaŽfŽkŽpŽyŽ~Ž“Ž“Ž˜ŽŸŽ�ޭ޳޽ŽÂŽËŽÐŽùŽþŽ��1�R�R�b�g�–�–���¨�¦�¶�Â�Ù�â�é�õ��#�#�*�1�:�;�D�I� ‘@TARŽâŽâ³âÇâÎâØâÜâàâäâîâîâøâ ã%ã(ã8ãA8ˆ’îäîäòäåå#å7åHåjåŽåB0RZ>ã>ãLã`ãnãˆãŽã”ãCx6«I«IÆIÚIåIóI÷IJJ"J%J,J2J7JšLšOšVšZš]šašošvš{šEDmzƚƚӚۚޚìšðšôš÷š› ››F8 }y}y‹y�y’y•y˜y�y£yG8 5y5yIyXy]ykynyty|yH8 y yy y#y)y,y.y4yI8 )¥y¥y³yµyºyÃyÆyËyÑyJð§ß””(”7”N”T”[”[”i”x””…”—”¦”¶”ɔՔò”ô”•••••••)•0•0•4•?•E•Q•Y•{•‘•‘•¢•¹•¹•À•ƕɕá•K8ßéæ•æ•ê• -–2–Läõ*.Ž.ŽHŽKŽMŽSŽgŽnŽqŽŒŽ–Ž›Ž¢Ž§Ž§ŽªŽÇŽßŽëŽ� ��"�"�"�+�2�?�A�N�T�s�ƒ�‹���¦�·�¿�Ñ�Ô�Ô�Ô�Ô�à�#�Ml5Œ†�†� �¢�»�Ç�Ë�ç�‘‘‘‘‘‘‘!‘/‘3‘>‘N‘X‘]‘]‘f‘v‘{‘{‘Œ‘‘‘”‘ ‘±‘Á‘ÑÑÑà‘â‘â‘ÿ‘ÿ‘’’’$’(’8’;’G’X’i’k’k’�’ƒ’ƒ’™’™’Ÿ’«’·’¾’Â’Ò’Õ’á’ò’““““ “O“N|Œ§V“V“n“}“ƒ“†“¡“¼“¼“Ɠȓȓғԓԓԓߓá“á“á“ì“ì“ì“ñ“”OÈ—Å11>1H1K1[1s1}1ƒ1†1‰1Œ1È1Ë1Î1Ð1ã1æ1é1ñ1÷1ü1ü12222222 2"2'2*222D2P\„—¼0¼0Ê0Ó0ß0å0è0í0ó0ö0û0û01 1111Q8™£’N’N¶NºNÐNäNîNñNOR<‰”"N"N8NANJNUN^NaNkNSlÁØ€k€k„k�kµkÛkækõkl llllT4+4PnPnTnYnsnŒn‘n“nU8—¡ÐqÐqÔqßqêqñqùqrXrV,¨¯�j�j”jŸj¤j®j°jWt~—qq q,qBqMq[qˆq¢q·q¼qÃqÈqÈqÊqXTˆ™ÀiÀiÏiØiâiäiöiöiöiøiÿij%j3j4j:jY8™£@j@jJjLjSjYjkjljqjZ$£¨xjxj|j‡j‰j[hØîll$l4l7l8l=lElHl[lalfltl{l‰l‰l‰l‰l‹l‹l\84~˜n˜n«n±nÀnÊnÏnÏnÛnânçnñnoo*o,oGowo‘o§o²oÒoÔoßoéoôoþo ppp,p3pApApKpdpŒp—pŸp¹p¾pÀpÊpÞpåpìpîpöpq]X¯Á°j°j¹jÒjîj k k k(k=kWktktkukukzk^,=D®ž®ž»žÐžüžŸ_üDŸŸ.Ÿ>ŸEŸMŸTŸpŸ‹Ÿ‹Ÿ‘ŸšŸ£Ÿ¬ŸµŸ·ŸÀŸÉŸËŸËŸÔŸãŸèŸèŸñŸúŸÿŸÿŸ      ( - - - 6 ? D D S \ a j ‡ ¤ · · Å É 2¡`,6=NžNž[žpž•ž©žaÐï6¡6¡R¡b¡i¡q¡x¡”¡˜¡·¡·¡Ù¡Ù¡Ù¡ã¡å¡å¡ï¡ñ¡ñ¡û¡ý¡ý¡¢ ¢ ¢¢¢¢ ¢!¢!¢+¢+¢.¢3¢3¢3¢6¢9¢9¢S¢g¢{¢‹¢‹¢�¢�¢�¢�¢�¢�¢“¢“¢š¢©¢¶¢¸¢¸¢¸¢¸¢¸¢»¢¾¢À¢À¢Ç¢Ê¢Ê¢Ê¢Ñ¢à¢î¢ð¢ð¢ð¢ð¢ú¢ý¢££ £ ££££(£-£-£7£K£N£S£S£]£]£l£p£ ¤b0¼ÄÂÂÂ/Â:Â@ÂCÂKÂcT:K¾p¾pÖpâpépïpøpþpqqq!q'q*q6qdD(xˆxˆˆˆ’ˆ»ˆĈƈÛˆãˆéˆ÷ˆe@¹Åq±q±±…±‘±�±¡±µ±ʱÒ±ç±í±f< f:f:u:‹:š:µ:¹:¿:Á:Á:Ç:g0bPbPfPzP~P~P‚Ph”¥Æ9`9`S`^`c`l``—`Ÿ`§`´`¾`Å`Ì`Ð`Ô`ß`å`î`ò`û`aaaa"aiTÆ×)a)a7a>aIaNaWafalasauaxaƒa‰aj€h„�^�^‹^˜^©^³^º^Á^Ê^Ò^ê^ñ^ø^_ -___ _&_1_5_7_7_;_k„Khi]i]y]€]“]Ÿ]Æ]Ð]Ú]â]ê]ò]þ]^"^<^H^Q^_^e^k^n^u^}^lT×è‰a‰a›aža©a®a»aÆaÕaëaõaþab -bbm<èóbb'b.b9b>b@bWbWb`bfbn´'�ð<ð<=== = =+=3=:=:=@=G=G=R=T=\=b=g=g=s=}=�=†=†=†=†=�=�=˜=›=�=¢=¢=­=¯=·=È=Ê=Ð=Õ=Õ=í=ø=ü=>>!>+>/>1>1>4>>>B>O>\>`>f>i>p>r>r>‚>ˆ>‘>˜>œ>œ>œ>œ>œ>£>§>«>®>±>µ>º>Ä>×>Ý>æ>ð>ô>?o€ÀÜ(@(@F@O@[@^@k@p@z@†@Œ@–@˜@¤@¯@¹@Ä@Ë@Ï@×@Ø@Ø@æ@p¬Üè@è@AA+A3A9A9A?K?P?Y?o?u?~?€?ƒ?“?up¨À˜?˜?´?·?È?Ë?Î?Û?à?é?ÿ?@@@@#@v@„�A_A_R_T_Y_b_ƒ_Œ_‘_™_w@³¿ˆ:ˆ:Ÿ:¨:±:À:Î:Ô:×:á:x0£« : :):9:>:>:C:y0«³H:H:Q:n:€:€:…:zd�¥™_™_§_©_¶_Ã_Ê_Ñ_Ø_à_ä_û_ ``$`-`/`/`7`{0 -BPBPFPZP^P^PbP|œRu\\0\3\A\M\f\w\€\•\š\¬\¼\Ú\Ú\ñ\ó\ó\ -] ] ]]]].].]4]4]:]=]š]}�­ aÌaÌÌ̳̺̆̄̔ÌÒÌÐÌàÌïÌöÌùÌ ÍÍÍ"Í2ÍDÍXÍnÍŠÍ«ÍÇÍãÍçÍìÍÎÎÎ*Î@Î@ÎPÎ_ÎmÎt΀ΆΖΪκÎÎÎÎÎûÎ -ÏÏÏ0ÏEÏ^Ï^ÏjÏ~ϒϘϣϳϽÏÇÏÜÏõÏøÏøÏ ÐÐÐ.Ð.Ð@ÐOÓ~hë7%7-787?7O7]7s7{7Ž7˜7¯7´7»7É7Ð7ê7ò7ø7<%+/+/4/>/F/S/U/b/b/e/€¤°ÕÓ4Ó4á4æ4î4ö455 5$565K5a5w5�5Ÿ5¦5¦5¼5É5É5ß5ï5ï5ö5ý56 66�D Û.Û.å.ì.ò.ù. ////$/‚@ ;.;.C.a.r.‚.“.Ÿ.¹.Ñ.Ó.Õ.ƒ„%‚k/k/s/w/~/…/�/›/¬/´/»/»/Í/Í/Ü/á/í/ù/00(0-050<0I0_0s0z0‡0ˆ0’0œ0¦0­0·0¾0Ã0Í0Ô0Ù0ã0ê0ô0þ01111$1-1J1Q1^1_1c1…1’1§1²1¿1¿1Æ1è1õ1û12„ˆ’°ë2ë2ô23F3o3¹3Æ3È3à3à3*47494Q4Q4�4ˆ4�4—4¾4Å4Ç4Ì4Ï4…,‹’«2«2´2»2Û2â2å2†8 ``-`?`I`‡HÈÖþëþë ììì-ì.ìBìEìKìˆÀ=i)Á)Á4Á8Á\ÁeÁtÁ€ÁŒÁ«ÁÃÁÓÁñÁñÁÂÂÂ5Â7Â7ÂXÂZÂZÂcÂcÂkÂkÂw‹›££µ¼¼ÂÎÂÛÂçÂë -ÉÄi–ÃÃà ÃDÃMÃ\ÃhÃx×ß÷ÃÇÃéÃéà ÄÄÄ3Ä5Ä5ÄYÄ[Ä[ÄdÄdÄlÄlÄxČĜĤĤĶĽĽÄÏÄÜÄèÄìÄ ÅŠ(¾Ä¶œ¶œ¾œÈœÛœ‹ø„¾^›^›p›s›}›Š›Ž›”›”›˜›�›¡›¥›¬›²›¹›¿›Æ›Ì›Ó›Ù›à›æ›í›ó›ú›œ œœœœ#œ#œ,œ-œ>œQœSœcœjœuœ€œ‹œ–œ¡œ¬œ¬œ¶œŒh 6^�^�†�Ž�¨�³�¶�¼�Ä�Ù�é�÷�ù�žž%ž:ž<ž<žLž�,OV6û6û?ûIûNûTûWûŽt'ÑoÑoåoòo÷op -pp,pbpkptp€p�\»Îélél mmm'mAmHmUmbmimrmvm‚m�\Îá‰m‰m©m¶m»mÇmámèmõmnnnn n‘\¨»IlIlilvl{l‡l¡l¨lµlÂlÉlÒlÖlâl’Lðÿ±n±nÑnÞnãnïn ooo$o-o.o:o“LÿAoAoaonosoo™o o§o´o½o¾oÊo”Láð!n!nAnNnSn_nyn€n‡n”n�nžnªn•t:SX€X€r€{€•€©€¸€Í€Ô€Ü€��2�B�H�Q�k�k�y�–`Sg€�€�–���¬�³�¼�¼�Ò�Ý�å�ù�‚‚‚‚1‚—Ð -:((FILV\hkr{ˆ‹‘—ž¥§±¶¿ÍÓâîñôü€€#€&€)€)€)€)€-€5€=€@€R€˜(ŽåŽå’å–å˜å™<÷c_c_ƒ_Ž_œ_”_¯_À_À_À_Ì_š8$‚P‚P‹P P P­PÂPÂPÇP›(gm6r6r:rJrUrprœ,µ¼ÎÁÎÁâÁôÁúÁÂÂ�0ÄÌNÂNÂbÂtÂyŠÂ�·ž,ÌӾ¾ÂÒÂäÂéÂúÂ'ß$þíþíîîî 0X`ásásêsösüstt¡(RX¹s¹sÂsÐsÜsÜsás¢DQ¬Q¬Z¬`¬i¬}¬‡¬Œ¬˜¬ž¬ ¬ ¬¥¬£DŒ±¯±¯¯Ù¯ç¯ó¯°°°°&°¤HŒš)°)°8°O°]°i°i°}°’°ž°ª°¬°²°¥œÁä¡»¡»±»Á»Õ»â»æ»ï»ö»¼¼(¼1¼O¼1¼m¼|¼�¼“¼¢¼³¼¹¼¹¼Ù¼ê¼ô¼ù¼²½¦D,9­­ ­&­:­D­L­T­Y­_­a­a­g­§<ta¯a¯k¯s¯‡¯œ¯¤¯§¯©¯­¯¨0&á&á/á4áCáGáIáNá©Dæó�Ý�Ý�ݖݛݱݳݼÝÎÝÔÝÔÝÿݪ,.5£ -£ -§ -Õ -æ -û -«˜Äæ±Û±ÛÌÛÖÛàÛ÷Û ÜÜ Ü$Ü@Ü_ÜdÜoÜt܎ܣܥܿÜÔÜÔÜÛÜÛÜÛ܀ݬ0 ~)~)�)›)ª)¿)È)­\†à†àšà¤à«àºàÓàÓàäàóàÿàáááááá#á®x6NáNábáháráyáŒá¥á¥á´áÊáÓáááèáèáëáõá ââââââ&â¯L€‡€‡š‡­‡ƇÛ‡á‡ç‡ç‡ï‡ñ‡ˆ°Œ‰èãEãE FF&F&F)F-FAFFFXFbFdFhFtFtFƒFˆFŒF¨F±FÁFÒFÕF×FâFóFöFùFûFGGG#G(G9GAGAGDGPGnGsG„G�G�G’GœG¥G¯G¯GÂGÇGÊGåGîGHHHH%H(H*H5HJHMHPHRHXHqHtH~H…H…H—H±¸0Z;C;CYCYC\C`CtCyCŒC–C˜CœC¨C¨C·C¼CÀCÝCâCòCDDDD#D&D)D+D1DGDJDTDbD²ÌZ‰cDcD‰D�D�D�DœD¸D½DÍDÖDØDÛDåDîDøDøD EEE-E6EKEPEZEcEmEpErE}E”E—EšEœE¢E½EÀEÊEÜE³Ì0BB;BEBEBHBLB\BaBrB|B~B‚BŽBŽB�B¢B¦BÁBÆBÖBçBêBìB÷BCCC -CCC&C&C6C´<AL�z�z�z z¢z§zªz­z²zºzµ@5A%z%z=zLzSzXzczxz{z€zŒz¶@)5ÕyÕyìyïyôy÷y -zzzz z·<LW½z½zÍzÐzÒz×zàzãzèzðz¸0„Œ%|%|.|3|;|A|A|F|¹LŒ›M|M|a|h|z|}|}|„|ž|¡|¦|¨|°|º4W`õzõz{{{,{0{3{9{» `„={={X{_{j{p{s{s{z{€{‘{–{™{ž{§{§{§{«{µ{Ä{Ì{á{ì{þ{||||||$|¼ 7[¶¶¶¶)¶9¶B¶Q¶]¶f¶¤¶°¶°¶·¶Ô¶ß¶ý¶ý¶$·&·&·&·>·>·P·W·q·q·q·ƒ·Š·Š·œ·¢·ª·½|v‘ ƒ ƒ)ƒ9ƒDƒIƒKƒQƒcƒuƒ…ƒ–ƒ¦ƒ¨ƒ¨ƒ¨ƒ®ƒǃäƒôƒöƒöƒÿƒ „¾$/4¹À¹ÀÓÀäÀîÀ¿¨ / ¿ ¿¿¿*¿9¿E¿g¿g¿g¿”¿¹¿¾¿¾¿å¿í¿õ¿À4À@ÀSÀ[À`ÀrÀtÀtÀ}À}À�À–À–À¨À­À¹ÀÀ4r{¢S¢SªSØSöSTT#TÁ4£¬ -V -VV@VnV€V‘V›VÂ({�*T*T.TYTgTiTÃ(‡�ªTªT®TÙTæTèTÄ0“›*U*U2U`UŽU’U”UÅ(�‡jTjTnT™T§T©TÆ(�“êTêTîTU%U'UÇ0›£šUšU¢UÐUþUVVÈ(JPòQòQöQ!R)R+RÉ(V\rRrRvR¡R¨RªRÊ0bjâRâRêRS6S:S÷>÷Z÷f÷�÷Š÷—÷«÷±÷½÷Ò¤!Fžøžø³øºøÄøÒøÒøÚøóøùù:ùQùsù™ù»ùÅùÏùÝùõù úúú/ú9úRú`úbúiúpú©úÓT×èöö,ö?öKöföwö„ö˜öŸö¥ö´öÔ|\NÛNÛhÛ|Û‰Û�Û˜Û Û©Û±ÛËÛÐÛÐÛØÛòÛ÷Û÷ÛÿÛÜ"Ü'Ü'Ü-Ü4Ü4ÜJÜRÜYÜ`ÜgÜrÜyÜ�ܟܡܵÜ×ÜíÜþÜAÝ)ÝZ݋ݙݣݺݽÝÁÝÆÝÏÝØÝÞûÝÞ6ÞLÞZÞdÞdÞyÞ€ÞŠÞŸÞ¨Þ¿ÞÃÞÊÞÌÞÍÞÔÞîÞßÕLu„8�8�A�F�G�V�^�c�i�m�q���†�‰�ÖØ.`�ú�ú‰ú‘úŸú¯ú¾úÈúÔúßúíúüú û)û1û=ûEûMûMûXûZûlûxûŠûžûÀûÔûáûüûüü-ü6ü6üHüHüVü]üoüoü}ü}ü‚ü†ü×Hìú�÷�÷“÷�÷³÷Í÷Ø÷Ø÷é÷ù÷û÷,øØ¸`ʉü‰ü”üµü¼üËüØüäüóüýý-ý:ýMýný}ýŠý“ý“ý¬ýÏýíý(þ-þGþ[þwþ‚þ¢þ«þ³þÀþÒþäþÿÿ,ÿFÿ[ÿuÿ�ÿ“ÿ˜ÿªÿ¼ÿÔÿäÿðÿ6ALfq}‰‰Ž�«Äöý")NNq±³³¸ÓÚååó 55FFIQÙPRb¡ð¡ð¬ð³ðÂðÒðÿð ñ"ñ)ñ0ñ=ñFñJñÚÜœÏéóéóñóõóô#ô,ô3ôIô\ôqô…ô‘ô¡ô´ôÁôÔôòôûôõõõõ+õ5õDõYõnõ†õŸõ£õ¥õªõ¯õ¸õÊõÑõÑõãõéõöÛ„Ïìöö$ö,ö5ö@öKöRöhö|ö…ö™öÀöÖöðöøö÷ ÷*÷B÷M÷T÷_÷d÷~÷Ü€þ±±âåóûû"7<OSau~Ž’¥´·òÝàÊþQQYyˆ’›¬¼ÏÜï #.99FPu‡¦¸¸Øä 27IMUUcn|ƒŽœœ¡­ÞüUùù 5DMdt‡”§ÅÎÛæñö(2ERkz©´¼×â÷!*Dg‚�•²½½ÂÐÛâíòùßøbœQñQñYñiñyñˆñ‘ñŸñ­ñ¸ñÈñÝñôñò#ò2òEòSòhòòˆò—ò³òÊòÚòçòôòÿòó#ó5ó:óEóPó]óró„ó¨ó±ó¼óÃóÎóØóáóåóààú.1ø1ø9ø=øFøTø[øqø…ø�ø›ø¦ø´øÃøãøýøùù2ùJùYù]ùhùtùùŽù�ùÀùÎùÝùøùú úú+ú+ú9ú@úRúRú`ú`úaú{úádQíQíYíhítíˆí™í¤í­íµí·íÉíÛíâíâíôíõíùíâ˜:ùíùíî.î=îIîTîbîtî‚îŠî˜î¬îÏîÑîÕîÕîàîëîúî ï,ï7ï<ïNïUïUïgïhïlïã”Uvùù  ) 6 E O j w ‰ ˜ § ¹ ¾ Ë Ö á ì û  +GET_IP 000000148D 0002 ExportSysSym +$LK,"GREEN ",A="FL:C:/Kernel/KernelA.HPP,2848"$2 0001 0000000008 DefineStr +$LK,"GR_HEIGHT ",A="FL:C:/Kernel/KernelA.HPP,3509"$480 000C 0000000008 DefineStr +$LK,"GR_WIDTH ",A="FL:C:/Kernel/KernelA.HPP,3508"$640 0011 0000000008 DefineStr +$LK,"GR_Z_ALL ",A="FL:C:/Kernel/KernelA.HPP,3514"$(MAX_I32/2 0000 0000000010 DefineStr +$LK,"GSF_SHIFT_ESC_EXIT ",A="FL:C:/Kernel/KernelA.HPP,3676"$1 0000 0000000008 DefineStr +$LK,"GSF_WITH_NEW_LINE ",A="FL:C:/Kernel/KernelA.HPP,3677"$2 0000 0000000008 DefineStr +$LK,"GVF_ALIAS ",A="FL:C:/Kernel/KernelA.HPP,857"$16 0001 0000000008 DefineStr +$LK,"GVF_ARRAY ",A="FL:C:/Kernel/KernelA.HPP,858"$32 0000 0000000008 DefineStr +$LK,"GVF_DATA_HEAP ",A="FL:C:/Kernel/KernelA.HPP,856"$8 0000 0000000008 DefineStr +$LK,"GVF_EXTERN ",A="FL:C:/Kernel/KernelA.HPP,855"$4 0001 0000000008 DefineStr +$LK,"GVF_FUN ",A="FL:C:/Kernel/KernelA.HPP,853"$1 0000 0000000008 DefineStr +$LK,"GVF_IMPORT ",A="FL:C:/Kernel/KernelA.HPP,854"$2 0000 0000000008 DefineStr +$LK,"GetBaseUnit ",A="FL:C:/Kernel/Dsk/DskAddDev.CPP.Z,276",BI=258$000001CF13 0001 0000000226 Funct Export Res +$LK,"GetChar ",A="FL:C:/Kernel/KbdMouse/Message.CPP.Z,189",BI=259$0000013B4B 0006 000000005C Funct Export Res +$LK,"GetKey ",A="FL:C:/Kernel/KbdMouse/Message.CPP.Z,146",BI=260$00000139C3 0002 0000000186 Funct Export Res +$LK,"GetMsg ",A="FL:C:/Kernel/KbdMouse/Message.CPP.Z,97",BI=261$000001383B 0001 000000009C Funct Export Res +$LK,"GetOutOfDollar ",A="FL:C:/Kernel/StrB.CPP.Z,75",BI=262$0000006EC6 0002 0000000062 Funct Export Res +$LK,"GetRAX ",A="FL:C:/Kernel/KernelB.HPP,195"$0000000070 0001 Funct Public +$LK,"GetRBP ",A="FL:C:/Kernel/KernelB.HPP,196"$0000000072 0007 Funct Public +$LK,"GetRFlags ",A="FL:C:/Kernel/KernelB.HPP,197"$000000006D 0007 Funct Public +$LK,"GetRSP ",A="FL:C:/Kernel/KernelB.HPP,198"$0000000074 0003 Funct Public +$LK,"GetResult ",A="FL:C:/Kernel/SrvCmd.CPP.Z,201",BI=263$000001597B 0000 000000007E Funct Export Res +$LK,"GetS ",A="FL:C:/Kernel/KbdMouse/Message.CPP.Z,216",BI=264$0000013C2B 0005 0000000114 Funct Export Res +$LK,"GetStr ",A="FL:C:/Kernel/KbdMouse/Message.CPP.Z,200",BI=265$0000013BAB 0001 0000000079 Funct Export Res +$LK,"GetTSC ",A="FL:C:/Kernel/KernelB.HPP,232"$0000000077 0017 Funct Public +$LK,"GridInit ",A="FL:C:/Kernel/KbdMouse/InputPointer.CPP.Z,1",BI=266$0000010A93 0001 0000000081 Funct Export Res +$LK,"Gs ",A="FL:C:/Kernel/KernelB.HPP,188"$0000000017 0013 Funct Public +HANDLE_SWAP_KEY_EVENT00000056BB 0002 ExportSysSym +$LK,"HClf_LOCKED ",A="FL:C:/Kernel/KernelA.HPP,2793"$0 0007 0000000008 DefineStr +$LK,"HEAP_CTRL_SIGNATURE_VAL",A="FL:C:/Kernel/KernelA.HPP,2795"$'HcSV' 0004 0000000008 DefineStr +$LK,"HEAP_HASH_SIZE ",A="FL:C:/Kernel/KernelA.HPP,2771"$1024 0006 0000000008 DefineStr +$LK,"HPET ",A="FL:C:/Kernel/KernelB.HPP,236"$0000000078 0006 Funct Public +$LK,"HPET_GCAP_ID ",A="FL:C:/Kernel/KernelA.HPP,526"$(0xFED0000 0001 0000000018 DefineStr +$LK,"HPET_GEN_CONF ",A="FL:C:/Kernel/KernelA.HPP,527"$(0xFED0000 0001 0000000018 DefineStr +$LK,"HPET_MAIN_CNT ",A="FL:C:/Kernel/KernelA.HPP,528"$(0xFED0000 0000 0000000018 DefineStr +$LK,"HTF_EXPORT ",A="FL:C:/Kernel/KernelA.HPP,667"$0x02000000 0000 0000000010 DefineStr +$LK,"HTF_GOTO_LABEL ",A="FL:C:/Kernel/KernelA.HPP,670"$0x10000000 0000 0000000010 DefineStr +$LK,"HTF_IMM ",A="FL:C:/Kernel/KernelA.HPP,669"$0x08000000 0003 0000000010 DefineStr +$LK,"HTF_IMPORT ",A="FL:C:/Kernel/KernelA.HPP,668"$0x04000000 0000 0000000010 DefineStr +$LK,"HTF_LOCAL ",A="FL:C:/Kernel/KernelA.HPP,673"$0x80000000 0000 0000000010 DefineStr +$LK,"HTF_PRIVATE ",A="FL:C:/Kernel/KernelA.HPP,665"$0x00800000 0001 0000000010 DefineStr +$LK,"HTF_PUBLIC ",A="FL:C:/Kernel/KernelA.HPP,666"$0x01000000 0004 0000000010 DefineStr +$LK,"HTF_RESOLVE ",A="FL:C:/Kernel/KernelA.HPP,671"$0x20000000 0000 0000000010 DefineStr +$LK,"HTF_UNRESOLVED ",A="FL:C:/Kernel/KernelA.HPP,672"$0x40000000 0000 0000000010 DefineStr +$LK,"HTG_ALL ",A="FL:C:/Kernel/KernelA.HPP,677"$-1 0001 0000000008 DefineStr +$LK,"HTG_FLAGS_MASK ",A="FL:C:/Kernel/KernelA.HPP,674"$0xFF000000 0001 0000000010 DefineStr +$LK,"HTG_SRC_SYM ",A="FL:C:/Kernel/KernelA.HPP,676"$(HTT_DEFIN 0003 0000000058 DefineStr +$LK,"HTG_TYPE_MASK ",A="FL:C:/Kernel/KernelA.HPP,663"$0x1FFFF 0003 0000000008 DefineStr +$LK,"HTT_ASM_KEYWORD ",A="FL:C:/Kernel/KernelA.HPP,656"$0x00400 0000 0000000010 DefineStr +$LK,"HTT_CLASS ",A="FL:C:/Kernel/KernelA.HPP,650"$0x00010 0004 0000000010 DefineStr +$LK,"HTT_DEFINE_STR ",A="FL:C:/Kernel/KernelA.HPP,648"$0x00004 000A 0000000010 DefineStr +$LK,"HTT_DICT_WORD ",A="FL:C:/Kernel/KernelA.HPP,654"$0x00100 0001 0000000010 DefineStr +$LK,"HTT_EXPORT_SYS_SYM ",A="FL:C:/Kernel/KernelA.HPP,646"$0x00001 000E 0000000010 DefineStr +$LK,"HTT_FILE ",A="FL:C:/Kernel/KernelA.HPP,659"$0x02000 0006 0000000010 DefineStr +$LK,"HTT_FRAME_PTR ",A="FL:C:/Kernel/KernelA.HPP,662"$0x10000 0004 0000000010 DefineStr +$LK,"HTT_FUN ",A="FL:C:/Kernel/KernelA.HPP,652"$0x00040 0011 0000000010 DefineStr +$LK,"HTT_GLBL_VAR ",A="FL:C:/Kernel/KernelA.HPP,649"$0x00008 0006 0000000010 DefineStr +$LK,"HTT_HELP_FILE ",A="FL:C:/Kernel/KernelA.HPP,661"$0x08000 0003 0000000010 DefineStr +$LK,"HTT_IMPORT_SYS_SYM ",A="FL:C:/Kernel/KernelA.HPP,647"$0x00002 0003 0000000010 DefineStr +$LK,"HTT_INTERNAL_TYPE ",A="FL:C:/Kernel/KernelA.HPP,651"$0x00020 0000 0000000010 DefineStr +$LK,"HTT_INVALID ",A="FL:C:/Kernel/KernelA.HPP,645"$0 0003 0000000008 DefineStr +$LK,"HTT_KEYWORD ",A="FL:C:/Kernel/KernelA.HPP,655"$0x00200 0001 0000000010 DefineStr +$LK,"HTT_MODULE ",A="FL:C:/Kernel/KernelA.HPP,660"$0x04000 0002 0000000010 DefineStr +$LK,"HTT_OPCODE ",A="FL:C:/Kernel/KernelA.HPP,657"$0x00800 0000 0000000010 DefineStr +$LK,"HTT_REG ",A="FL:C:/Kernel/KernelA.HPP,658"$0x01000 0000 0000000010 DefineStr +$LK,"HTT_WORD ",A="FL:C:/Kernel/KernelA.HPP,653"$0x00080 0000 0000000010 DefineStr +$LK,"HTf_EXPORT ",A="FL:C:/Kernel/KernelA.HPP,637"$25 0000 0000000008 DefineStr +$LK,"HTf_GOTO_LABEL ",A="FL:C:/Kernel/KernelA.HPP,640"$28 0000 0000000008 DefineStr +$LK,"HTf_IMM ",A="FL:C:/Kernel/KernelA.HPP,639"$27 0000 0000000008 DefineStr +$LK,"HTf_IMPORT ",A="FL:C:/Kernel/KernelA.HPP,638"$26 0000 0000000008 DefineStr +$LK,"HTf_LOCAL ",A="FL:C:/Kernel/KernelA.HPP,643"$31 0000 0000000008 DefineStr +$LK,"HTf_PRIVATE ",A="FL:C:/Kernel/KernelA.HPP,635"$23 0000 0000000008 DefineStr +$LK,"HTf_PUBLIC ",A="FL:C:/Kernel/KernelA.HPP,636"$24 0000 0000000008 DefineStr +$LK,"HTf_RESOLVED ",A="FL:C:/Kernel/KernelA.HPP,641"$29 0000 0000000008 DefineStr +$LK,"HTf_UNRESOLVED ",A="FL:C:/Kernel/KernelA.HPP,642"$30 0000 0000000008 DefineStr +$LK,"HTt_ASM_KEYWORD ",A="FL:C:/Kernel/KernelA.HPP,626"$10 0001 0000000008 DefineStr +$LK,"HTt_CLASS ",A="FL:C:/Kernel/KernelA.HPP,620"$4 0001 0000000008 DefineStr +$LK,"HTt_DEFINE_STR ",A="FL:C:/Kernel/KernelA.HPP,618"$2 0001 0000000008 DefineStr +$LK,"HTt_DICT_WORD ",A="FL:C:/Kernel/KernelA.HPP,624"$8 0001 0000000008 DefineStr +$LK,"HTt_EXPORT_SYS_SYM ",A="FL:C:/Kernel/KernelA.HPP,616"$0 0001 0000000008 DefineStr +$LK,"HTt_FILE ",A="FL:C:/Kernel/KernelA.HPP,629"$13 0001 0000000008 DefineStr +$LK,"HTt_FRAME_PTR ",A="FL:C:/Kernel/KernelA.HPP,632"$16 0001 0000000008 DefineStr +$LK,"HTt_FUN ",A="FL:C:/Kernel/KernelA.HPP,622"$6 0001 0000000008 DefineStr +$LK,"HTt_GLBL_VAR ",A="FL:C:/Kernel/KernelA.HPP,619"$3 0001 0000000008 DefineStr +$LK,"HTt_HELP_FILE ",A="FL:C:/Kernel/KernelA.HPP,631"$15 0001 0000000008 DefineStr +$LK,"HTt_IMPORT_SYS_SYM ",A="FL:C:/Kernel/KernelA.HPP,617"$1 0001 0000000008 DefineStr +$LK,"HTt_INTERNAL_TYPE ",A="FL:C:/Kernel/KernelA.HPP,621"$5 0001 0000000008 DefineStr +$LK,"HTt_KEYWORD ",A="FL:C:/Kernel/KernelA.HPP,625"$9 0001 0000000008 DefineStr +$LK,"HTt_MODULE ",A="FL:C:/Kernel/KernelA.HPP,630"$14 0001 0000000008 DefineStr +$LK,"HTt_NUM_TYPES ",A="FL:C:/Kernel/KernelA.HPP,633"$17 0001 0000000008 DefineStr +$LK,"HTt_OPCODE ",A="FL:C:/Kernel/KernelA.HPP,627"$11 0001 0000000008 DefineStr +$LK,"HTt_REG ",A="FL:C:/Kernel/KernelA.HPP,628"$12 0001 0000000008 DefineStr +$LK,"HTt_WORD ",A="FL:C:/Kernel/KernelA.HPP,623"$7 0001 0000000008 DefineStr +$LK,"HasLower ",A="FL:C:/Kernel/PSect.CPP.Z,1",BI=267$0000027A8A 0002 000000003A Funct Export Res +$LK,"HashAdd ",A="FL:C:/Kernel/KHashA.CPP.Z,307"$0000006B84 0008 Funct Res +$LK,"HashBucketFind ",A="FL:C:/Kernel/KHashA.CPP.Z,306"$0000006B6B 0000 Funct Res +$LK,"HashDefineLstAdd ",A="FL:C:/Kernel/KHashB.CPP.Z,203",BI=268$0000008A3E 0000 0000000051 Funct Export Res +HashDel 00000085E6 0001 ExportSysSym +$LK,"HashDel ",A="FL:C:/Kernel/KHashB.CPP.Z,59",BI=269$00000085E6 0003 00000000ED Funct Export Res +$LK,"HashFind ",A="FL:C:/Kernel/KHashA.CPP.Z,302"$0000006B24 000F Funct Res +$LK,"HashGenericAdd ",A="FL:C:/Kernel/KHashB.CPP.Z,138",BI=270$000000880E 0005 0000000081 Funct Export Res +$LK,"HashLstAdd ",A="FL:C:/Kernel/KHashB.CPP.Z,182",BI=271$00000089B6 0001 0000000081 Funct Export Res +$LK,"HashPublic ",A="FL:C:/Kernel/KHashB.CPP.Z,167",BI=272$000000893E 0000 0000000078 Funct Export Res +$LK,"HashRemDel ",A="FL:C:/Kernel/KHashA.CPP.Z,308"$0000006BD3 0003 Funct Res +$LK,"HashSingleTableFind ",A="FL:C:/Kernel/KHashA.CPP.Z,304"$0000006B45 0001 Funct Res +$LK,"HashSrcFileSet ",A="FL:C:/Kernel/KHashB.CPP.Z,151",BI=273$0000008896 0001 00000000A7 Funct Export Res +$LK,"HashStr ",A="FL:C:/Kernel/KHashA.CPP.Z,300"$0000006B11 0000 Funct Res +$LK,"HashTableDel ",A="FL:C:/Kernel/KHashB.CPP.Z,89",BI=274$00000086D6 0000 0000000061 Funct Export Res +$LK,"HashTableNew ",A="FL:C:/Kernel/KHashB.CPP.Z,50",BI=275$000000859E 0001 0000000046 Funct Export Res +$LK,"HashTablePurge ",A="FL:C:/Kernel/KHashB.CPP.Z,106",BI=276$000000873E 0000 00000000CF Funct Export Res +$LK,"HashTypeNum ",A="FL:C:/Kernel/KHashB.CPP.Z,1",BI=277$00000084DE 0001 000000002F Funct Export Res +$LK,"HashVal ",A="FL:C:/Kernel/KHashB.CPP.Z,9",BI=278$000000850E 0000 000000008D Funct Export Res +$LK,"HeapCtrlBPInit ",A="FL:C:/Kernel/MemC.CPP.Z,41",BI=279$0000005A41 0001 0000000084 Funct Export Res +$LK,"HeapCtrlDel ",A="FL:C:/Kernel/MemC.CPP.Z,55",BI=280$0000005AC9 0002 0000000054 Funct Export Res +$LK,"HeapCtrlInit ",A="FL:C:/Kernel/MemC.CPP.Z,29",BI=281$00000059E1 0004 000000005A Funct Export Res +$LK,"HeapsInit ",A="FL:C:/Kernel/MemC.CPP.Z,261",BI=282$00000060A1 0001 000000014E Funct Export Res +$LK,"Help ",A="FL:C:/Kernel/StrB.CPP.Z,115",BI=283$0000007036 0000 000000004F Funct Export Res +$LK,"I16 ",A="FL:C:/Kernel/KernelA.HPP,70"$007FD8F380 0007 0000000002 Class +$LK,"I32 ",A="FL:C:/Kernel/KernelA.HPP,84"$007FD8E6B0 0037 0000000004 Class +$LK,"I64 ",A="FL:C:/Kernel/KernelA.HPP,102"$007FD7DBD0 04BA 0000000008 Class +$LK,"IA32F_LME ",A="FL:C:/Kernel/KernelA.HPP,512"$0x100 0001 0000000008 DefineStr +$LK,"IA32F_SCE ",A="FL:C:/Kernel/KernelA.HPP,511"$0x001 0000 0000000008 DefineStr +$LK,"IA32_EFER ",A="FL:C:/Kernel/KernelA.HPP,514"$0xC0000080 0003 0000000010 DefineStr +$LK,"IA32_FS_BASE ",A="FL:C:/Kernel/KernelA.HPP,515"$0xC0000100 0001 0000000010 DefineStr +$LK,"IA32_GS_BASE ",A="FL:C:/Kernel/KernelA.HPP,516"$0xC0000101 0001 0000000010 DefineStr +$LK,"IA32_LAPIC_BASE ",A="FL:C:/Kernel/KernelA.HPP,513"$0x01B 0000 0000000008 DefineStr +$LK,"ICF_A1_FIRST ",A="FL:C:/Kernel/KernelA.HPP,1512"$0x00000200 0000 0000000010 DefineStr +$LK,"ICF_A1_TO_F64 ",A="FL:C:/Kernel/KernelA.HPP,1501"$0x00000000 0000 0000000010 DefineStr +$LK,"ICF_A1_TO_INT ",A="FL:C:/Kernel/KernelA.HPP,1502"$0x00000000 0000 0000000010 DefineStr +$LK,"ICF_A1_WAS_STK ",A="FL:C:/Kernel/KernelA.HPP,1516"$0x00002000 0000 0000000010 DefineStr +$LK,"ICF_A2_TO_F64 ",A="FL:C:/Kernel/KernelA.HPP,1503"$0x00000001 0000 0000000010 DefineStr +$LK,"ICF_A2_TO_INT ",A="FL:C:/Kernel/KernelA.HPP,1504"$0x00000002 0000 0000000010 DefineStr +$LK,"ICF_A2_WAS_STK ",A="FL:C:/Kernel/KernelA.HPP,1517"$0x00004000 0000 0000000010 DefineStr +$LK,"ICF_ALTERNATE_TEMPLATE",A="FL:C:/Kernel/KernelA.HPP,1524"$0x02000000 0000 0000000010 DefineStr +$LK,"ICF_CODE_FINAL ",A="FL:C:/Kernel/KernelA.HPP,1509"$0x00000040 0000 0000000010 DefineStr +$LK,"ICF_DEL_PREVIOUS_INS",A="FL:C:/Kernel/KernelA.HPP,1528"$0x10000000 0000 0000000010 DefineStr +$LK,"ICF_DEPEND_RESULT ",A="FL:C:/Kernel/KernelA.HPP,1520"$0x00020000 0000 0000000010 DefineStr +$LK,"ICF_DONT_RESTORE ",A="FL:C:/Kernel/KernelA.HPP,1530"$0x40000000 0000 0000000010 DefineStr +$LK,"ICF_LOCK ",A="FL:C:/Kernel/KernelA.HPP,1525"$0x04000000 0000 0000000010 DefineStr +$LK,"ICF_NOT_ADDR ",A="FL:C:/Kernel/KernelA.HPP,1510"$0x00000080 0000 0000000010 DefineStr +$LK,"ICF_NO_DEPEND_RESULT",A="FL:C:/Kernel/KernelA.HPP,1508"$0x00000020 0000 0000000010 DefineStr +$LK,"ICF_NO_RIP ",A="FL:C:/Kernel/KernelA.HPP,1527"$0x08000000 0000 0000000010 DefineStr +$LK,"ICF_POP_CMP ",A="FL:C:/Kernel/KernelA.HPP,1519"$0x00010000 0000 0000000010 DefineStr +$LK,"ICF_PREVIOUS_DELETED",A="FL:C:/Kernel/KernelA.HPP,1529"$0x20000000 0000 0000000010 DefineStr +$LK,"ICF_PUSH_CMP ",A="FL:C:/Kernel/KernelA.HPP,1518"$0x00008000 0000 0000000010 DefineStr +$LK,"ICF_PUSH_RESULT ",A="FL:C:/Kernel/KernelA.HPP,1513"$0x00000400 0000 0000000010 DefineStr +$LK,"ICF_R_TO_F64 ",A="FL:C:/Kernel/KernelA.HPP,1499"$0x00000000 0000 0000000010 DefineStr +$LK,"ICF_R_TO_INT ",A="FL:C:/Kernel/KernelA.HPP,1500"$0x00000000 0000 0000000010 DefineStr +$LK,"ICF_R_WAS_STK ",A="FL:C:/Kernel/KernelA.HPP,1515"$0x00001000 0000 0000000010 DefineStr +$LK,"ICF_SHORT_JMP ",A="FL:C:/Kernel/KernelA.HPP,1511"$0x00000100 0000 0000000010 DefineStr +$LK,"ICF_SWAP ",A="FL:C:/Kernel/KernelA.HPP,1521"$0x00040000 0000 0000000010 DefineStr +$LK,"ICF_TRACE ",A="FL:C:/Kernel/KernelA.HPP,1514"$0x00000800 0000 0000000010 DefineStr +$LK,"ICF_USE_F64 ",A="FL:C:/Kernel/KernelA.HPP,1505"$0x00000004 0000 0000000010 DefineStr +$LK,"ICF_USE_INT ",A="FL:C:/Kernel/KernelA.HPP,1507"$0x00000010 0000 0000000010 DefineStr +$LK,"ICF_USE_UNSIGNED ",A="FL:C:/Kernel/KernelA.HPP,1506"$0x00000008 0000 0000000010 DefineStr +$LK,"ICG_NO_CVT_MASK ",A="FL:C:/Kernel/KernelA.HPP,1531"$0x7FFFFFF0 0000 0000000010 DefineStr +$LK,"IC_ABS ",A="FL:C:/Compiler/CompilerA.HPP,232"$0xB5 0001 0000000008 DefineStr +$LK,"IC_ABS_ADDR ",A="FL:C:/Compiler/CompilerA.HPP,32"$0x0D 0000 0000000008 DefineStr +$LK,"IC_ABS_I64 ",A="FL:C:/Compiler/CompilerA.HPP,222"$0xAB 0001 0000000008 DefineStr +$LK,"IC_ADD ",A="FL:C:/Compiler/CompilerA.HPP,82"$0x36 0000 0000000008 DefineStr +$LK,"IC_ADDR ",A="FL:C:/Compiler/CompilerA.HPP,54"$0x20 0000 0000000008 DefineStr +$LK,"IC_ADDR_IMPORT ",A="FL:C:/Compiler/CompilerA.HPP,33"$0x0E 0000 0000000008 DefineStr +$LK,"IC_ADD_CONST ",A="FL:C:/Compiler/CompilerA.HPP,84"$0x38 0000 0000000008 DefineStr +$LK,"IC_ADD_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,112"$0x4F 0000 0000000008 DefineStr +$LK,"IC_ADD_RSP ",A="FL:C:/Compiler/CompilerA.HPP,120"$0x55 0000 0000000008 DefineStr +$LK,"IC_ADD_RSP1 ",A="FL:C:/Compiler/CompilerA.HPP,121"$0x56 0000 0000000008 DefineStr +$LK,"IC_AND ",A="FL:C:/Compiler/CompilerA.HPP,77"$0x33 0000 0000000008 DefineStr +$LK,"IC_AND_AND ",A="FL:C:/Compiler/CompilerA.HPP,95"$0x41 0000 0000000008 DefineStr +$LK,"IC_AND_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,109"$0x4C 0000 0000000008 DefineStr +$LK,"IC_ASM ",A="FL:C:/Compiler/CompilerA.HPP,134"$0x61 0000 0000000008 DefineStr +$LK,"IC_ASSIGN ",A="FL:C:/Compiler/CompilerA.HPP,100"$0x44 0000 0000000008 DefineStr +$LK,"IC_ASSIGN_MM ",A="FL:C:/Compiler/CompilerA.HPP,102"$0x46 0000 0000000008 DefineStr +$LK,"IC_ASSIGN_PP ",A="FL:C:/Compiler/CompilerA.HPP,101"$0x45 0000 0000000008 DefineStr +$LK,"IC_ATAN ",A="FL:C:/Compiler/CompilerA.HPP,237"$0xBA 0001 0000000008 DefineStr +$LK,"IC_BODY_SIZE ",A="FL:C:/Kernel/KernelA.HPP,1533"$0x80 0001 0000000008 DefineStr +$LK,"IC_BR_AND_AND_NOT_ZERO",A="FL:C:/Compiler/CompilerA.HPP,204"$0x9C 0000 0000000008 DefineStr +$LK,"IC_BR_AND_AND_ZERO ",A="FL:C:/Compiler/CompilerA.HPP,203"$0x9B 0000 0000000008 DefineStr +$LK,"IC_BR_AND_NOT_ZERO ",A="FL:C:/Compiler/CompilerA.HPP,200"$0x98 0000 0000000008 DefineStr +$LK,"IC_BR_AND_ZERO ",A="FL:C:/Compiler/CompilerA.HPP,199"$0x97 0000 0000000008 DefineStr +$LK,"IC_BR_BT ",A="FL:C:/Compiler/CompilerA.HPP,208"$0x9F 0000 0000000008 DefineStr +$LK,"IC_BR_BTC ",A="FL:C:/Compiler/CompilerA.HPP,211"$0xA2 0000 0000000008 DefineStr +$LK,"IC_BR_BTR ",A="FL:C:/Compiler/CompilerA.HPP,210"$0xA1 0000 0000000008 DefineStr +$LK,"IC_BR_BTS ",A="FL:C:/Compiler/CompilerA.HPP,209"$0xA0 0000 0000000008 DefineStr +$LK,"IC_BR_CARRY ",A="FL:C:/Compiler/CompilerA.HPP,182"$0x89 0000 0000000008 DefineStr +$LK,"IC_BR_EQUAL_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,185"$0x8B 0000 0000000008 DefineStr +$LK,"IC_BR_EQUAL_EQUAL2 ",A="FL:C:/Compiler/CompilerA.HPP,192"$0x91 0000 0000000008 DefineStr +$LK,"IC_BR_GREATER ",A="FL:C:/Compiler/CompilerA.HPP,189"$0x8F 0000 0000000008 DefineStr +$LK,"IC_BR_GREATER2 ",A="FL:C:/Compiler/CompilerA.HPP,196"$0x95 0000 0000000008 DefineStr +$LK,"IC_BR_GREATER_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,188"$0x8E 0000 0000000008 DefineStr +$LK,"IC_BR_GREATER_EQUAL2",A="FL:C:/Compiler/CompilerA.HPP,195"$0x94 0000 0000000008 DefineStr +$LK,"IC_BR_LESS ",A="FL:C:/Compiler/CompilerA.HPP,187"$0x8D 0000 0000000008 DefineStr +$LK,"IC_BR_LESS2 ",A="FL:C:/Compiler/CompilerA.HPP,194"$0x93 0000 0000000008 DefineStr +$LK,"IC_BR_LESS_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,190"$0x90 0000 0000000008 DefineStr +$LK,"IC_BR_LESS_EQUAL2 ",A="FL:C:/Compiler/CompilerA.HPP,197"$0x96 0000 0000000008 DefineStr +$LK,"IC_BR_MM_NOT_ZERO ",A="FL:C:/Compiler/CompilerA.HPP,202"$0x9A 0000 0000000008 DefineStr +$LK,"IC_BR_MM_ZERO ",A="FL:C:/Compiler/CompilerA.HPP,201"$0x99 0000 0000000008 DefineStr +$LK,"IC_BR_NOT_BT ",A="FL:C:/Compiler/CompilerA.HPP,212"$0xA3 0000 0000000008 DefineStr +$LK,"IC_BR_NOT_BTC ",A="FL:C:/Compiler/CompilerA.HPP,215"$0xA6 0000 0000000008 DefineStr +$LK,"IC_BR_NOT_BTR ",A="FL:C:/Compiler/CompilerA.HPP,214"$0xA5 0000 0000000008 DefineStr +$LK,"IC_BR_NOT_BTS ",A="FL:C:/Compiler/CompilerA.HPP,213"$0xA4 0000 0000000008 DefineStr +$LK,"IC_BR_NOT_CARRY ",A="FL:C:/Compiler/CompilerA.HPP,183"$0x8A 0000 0000000008 DefineStr +$LK,"IC_BR_NOT_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,186"$0x8C 0000 0000000008 DefineStr +$LK,"IC_BR_NOT_EQUAL2 ",A="FL:C:/Compiler/CompilerA.HPP,193"$0x92 0000 0000000008 DefineStr +$LK,"IC_BR_NOT_ZERO ",A="FL:C:/Compiler/CompilerA.HPP,181"$0x88 0000 0000000008 DefineStr +$LK,"IC_BR_OR_OR_NOT_ZERO",A="FL:C:/Compiler/CompilerA.HPP,206"$0x9E 0000 0000000008 DefineStr +$LK,"IC_BR_OR_OR_ZERO ",A="FL:C:/Compiler/CompilerA.HPP,205"$0x9D 0000 0000000008 DefineStr +$LK,"IC_BR_ZERO ",A="FL:C:/Compiler/CompilerA.HPP,180"$0x87 0000 0000000008 DefineStr +$LK,"IC_BSF ",A="FL:C:/Compiler/CompilerA.HPP,170"$0x80 0001 0000000008 DefineStr +$LK,"IC_BSR ",A="FL:C:/Compiler/CompilerA.HPP,171"$0x81 0001 0000000008 DefineStr +$LK,"IC_BT ",A="FL:C:/Compiler/CompilerA.HPP,163"$0x79 0001 0000000008 DefineStr +$LK,"IC_BTC ",A="FL:C:/Compiler/CompilerA.HPP,166"$0x7C 0001 0000000008 DefineStr +$LK,"IC_BTR ",A="FL:C:/Compiler/CompilerA.HPP,165"$0x7B 0001 0000000008 DefineStr +$LK,"IC_BTS ",A="FL:C:/Compiler/CompilerA.HPP,164"$0x7A 0001 0000000008 DefineStr +$LK,"IC_CALL ",A="FL:C:/Compiler/CompilerA.HPP,128"$0x5C 0000 0000000008 DefineStr +$LK,"IC_CALL_END ",A="FL:C:/Compiler/CompilerA.HPP,25"$0x06 0000 0000000008 DefineStr +$LK,"IC_CALL_END2 ",A="FL:C:/Compiler/CompilerA.HPP,26"$0x07 0000 0000000008 DefineStr +$LK,"IC_CALL_EXTERN ",A="FL:C:/Compiler/CompilerA.HPP,132"$0x60 0000 0000000008 DefineStr +$LK,"IC_CALL_IMPORT ",A="FL:C:/Compiler/CompilerA.HPP,131"$0x5F 0000 0000000008 DefineStr +$LK,"IC_CALL_INDIRECT ",A="FL:C:/Compiler/CompilerA.HPP,129"$0x5D 0000 0000000008 DefineStr +$LK,"IC_CALL_INDIRECT2 ",A="FL:C:/Compiler/CompilerA.HPP,130"$0x5E 0000 0000000008 DefineStr +$LK,"IC_CALL_START ",A="FL:C:/Compiler/CompilerA.HPP,24"$0x05 0000 0000000008 DefineStr +$LK,"IC_CARRY ",A="FL:C:/Compiler/CompilerA.HPP,150"$0x6E 0001 0000000008 DefineStr +$LK,"IC_CLFLUSH ",A="FL:C:/Compiler/CompilerA.HPP,139"$0x65 0001 0000000008 DefineStr +$LK,"IC_COM ",A="FL:C:/Compiler/CompilerA.HPP,55"$0x21 0000 0000000008 DefineStr +$LK,"IC_COS ",A="FL:C:/Compiler/CompilerA.HPP,235"$0xB8 0001 0000000008 DefineStr +$LK,"IC_DEREF ",A="FL:C:/Compiler/CompilerA.HPP,59"$0x24 0000 0000000008 DefineStr +$LK,"IC_DEREF_MM ",A="FL:C:/Compiler/CompilerA.HPP,61"$0x26 0000 0000000008 DefineStr +$LK,"IC_DEREF_PP ",A="FL:C:/Compiler/CompilerA.HPP,60"$0x25 0000 0000000008 DefineStr +$LK,"IC_DIV ",A="FL:C:/Compiler/CompilerA.HPP,74"$0x31 0000 0000000008 DefineStr +$LK,"IC_DIV_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,107"$0x4A 0000 0000000008 DefineStr +$LK,"IC_END ",A="FL:C:/Compiler/CompilerA.HPP,19"$0x00 0000 0000000008 DefineStr +$LK,"IC_END_EXP ",A="FL:C:/Compiler/CompilerA.HPP,21"$0x02 0000 0000000008 DefineStr +$LK,"IC_ENTER ",A="FL:C:/Compiler/CompilerA.HPP,122"$0x57 0000 0000000008 DefineStr +$LK,"IC_EQUAL_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,87"$0x3A 0000 0000000008 DefineStr +$LK,"IC_FS ",A="FL:C:/Compiler/CompilerA.HPP,40"$0x15 0001 0000000008 DefineStr +$LK,"IC_GET_LABEL ",A="FL:C:/Compiler/CompilerA.HPP,37"$0x12 0000 0000000008 DefineStr +$LK,"IC_GET_RAX ",A="FL:C:/Compiler/CompilerA.HPP,152"$0x70 0001 0000000008 DefineStr +$LK,"IC_GET_RBP ",A="FL:C:/Compiler/CompilerA.HPP,154"$0x72 0001 0000000008 DefineStr +$LK,"IC_GET_RFLAGS ",A="FL:C:/Compiler/CompilerA.HPP,149"$0x6D 0001 0000000008 DefineStr +$LK,"IC_GET_RSP ",A="FL:C:/Compiler/CompilerA.HPP,156"$0x74 0001 0000000008 DefineStr +$LK,"IC_GREATER ",A="FL:C:/Compiler/CompilerA.HPP,91"$0x3E 0000 0000000008 DefineStr +$LK,"IC_GREATER_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,90"$0x3D 0000 0000000008 DefineStr +$LK,"IC_GS ",A="FL:C:/Compiler/CompilerA.HPP,42"$0x17 0001 0000000008 DefineStr +$LK,"IC_HEAP_GLBL ",A="FL:C:/Compiler/CompilerA.HPP,34"$0x0F 0000 0000000008 DefineStr +$LK,"IC_HOLYC_TYPECAST ",A="FL:C:/Compiler/CompilerA.HPP,52"$0x1F 0000 0000000008 DefineStr +$LK,"IC_HPET ",A="FL:C:/Compiler/CompilerA.HPP,161"$0x78 0001 0000000008 DefineStr +$LK,"IC_IMM_F64 ",A="FL:C:/Compiler/CompilerA.HPP,30"$0x0B 0000 0000000008 DefineStr +$LK,"IC_IMM_I64 ",A="FL:C:/Compiler/CompilerA.HPP,29"$0x0A 0000 0000000008 DefineStr +$LK,"IC_INVLPG ",A="FL:C:/Compiler/CompilerA.HPP,140"$0x66 0001 0000000008 DefineStr +$LK,"IC_IN_U16 ",A="FL:C:/Compiler/CompilerA.HPP,143"$0x68 0001 0000000008 DefineStr +$LK,"IC_IN_U32 ",A="FL:C:/Compiler/CompilerA.HPP,144"$0x69 0001 0000000008 DefineStr +$LK,"IC_IN_U8 ",A="FL:C:/Compiler/CompilerA.HPP,142"$0x67 0001 0000000008 DefineStr +$LK,"IC_JMP ",A="FL:C:/Compiler/CompilerA.HPP,115"$0x51 0000 0000000008 DefineStr +$LK,"IC_LABEL ",A="FL:C:/Compiler/CompilerA.HPP,23"$0x04 0000 0000000008 DefineStr +$LK,"IC_LBTC ",A="FL:C:/Compiler/CompilerA.HPP,169"$0x7F 0001 0000000008 DefineStr +$LK,"IC_LBTR ",A="FL:C:/Compiler/CompilerA.HPP,168"$0x7E 0001 0000000008 DefineStr +$LK,"IC_LBTS ",A="FL:C:/Compiler/CompilerA.HPP,167"$0x7D 0001 0000000008 DefineStr +$LK,"IC_LEA ",A="FL:C:/Compiler/CompilerA.HPP,45"$0x19 0000 0000000008 DefineStr +$LK,"IC_LEAVE ",A="FL:C:/Compiler/CompilerA.HPP,125"$0x5A 0000 0000000008 DefineStr +$LK,"IC_LESS ",A="FL:C:/Compiler/CompilerA.HPP,89"$0x3C 0000 0000000008 DefineStr +$LK,"IC_LESS_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,92"$0x3F 0000 0000000008 DefineStr +$LK,"IC_MAX_I64 ",A="FL:C:/Compiler/CompilerA.HPP,226"$0xAF 0001 0000000008 DefineStr +$LK,"IC_MAX_U64 ",A="FL:C:/Compiler/CompilerA.HPP,227"$0xB0 0001 0000000008 DefineStr +$LK,"IC_MIN_I64 ",A="FL:C:/Compiler/CompilerA.HPP,224"$0xAD 0001 0000000008 DefineStr +$LK,"IC_MIN_U64 ",A="FL:C:/Compiler/CompilerA.HPP,225"$0xAE 0001 0000000008 DefineStr +$LK,"IC_MM_ ",A="FL:C:/Compiler/CompilerA.HPP,65"$0x2A 0000 0000000008 DefineStr +$LK,"IC_MOD ",A="FL:C:/Compiler/CompilerA.HPP,75"$0x32 0000 0000000008 DefineStr +$LK,"IC_MOD_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,108"$0x4B 0000 0000000008 DefineStr +$LK,"IC_MOD_U64 ",A="FL:C:/Compiler/CompilerA.HPP,228"$0xB1 0001 0000000008 DefineStr +$LK,"IC_MOV ",A="FL:C:/Compiler/CompilerA.HPP,46"$0x1A 0000 0000000008 DefineStr +$LK,"IC_MOV_FS ",A="FL:C:/Compiler/CompilerA.HPP,41"$0x16 0000 0000000008 DefineStr +$LK,"IC_MOV_GS ",A="FL:C:/Compiler/CompilerA.HPP,43"$0x18 0000 0000000008 DefineStr +$LK,"IC_MUL ",A="FL:C:/Compiler/CompilerA.HPP,73"$0x30 0000 0000000008 DefineStr +$LK,"IC_MUL_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,106"$0x49 0000 0000000008 DefineStr +$LK,"IC_NOBOUND_SWITCH ",A="FL:C:/Compiler/CompilerA.HPP,118"$0x54 0000 0000000008 DefineStr +$LK,"IC_NOP1 ",A="FL:C:/Compiler/CompilerA.HPP,20"$0x01 0000 0000000008 DefineStr +$LK,"IC_NOP2 ",A="FL:C:/Compiler/CompilerA.HPP,22"$0x03 0000 0000000008 DefineStr +$LK,"IC_NOT ",A="FL:C:/Compiler/CompilerA.HPP,56"$0x22 0000 0000000008 DefineStr +$LK,"IC_NOT_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,88"$0x3B 0000 0000000008 DefineStr +$LK,"IC_NUM_ENTRIES ",A="FL:C:/Compiler/CompilerA.HPP,238"$0xBB 0000 0000000008 DefineStr +$LK,"IC_OR ",A="FL:C:/Compiler/CompilerA.HPP,79"$0x34 0000 0000000008 DefineStr +$LK,"IC_OR_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,110"$0x4D 0000 0000000008 DefineStr +$LK,"IC_OR_OR ",A="FL:C:/Compiler/CompilerA.HPP,97"$0x42 0000 0000000008 DefineStr +$LK,"IC_OUT_U16 ",A="FL:C:/Compiler/CompilerA.HPP,146"$0x6B 0001 0000000008 DefineStr +$LK,"IC_OUT_U32 ",A="FL:C:/Compiler/CompilerA.HPP,147"$0x6C 0001 0000000008 DefineStr +$LK,"IC_OUT_U8 ",A="FL:C:/Compiler/CompilerA.HPP,145"$0x6A 0001 0000000008 DefineStr +$LK,"IC_POP ",A="FL:C:/Compiler/CompilerA.HPP,137"$0x64 0001 0000000008 DefineStr +$LK,"IC_POP_REGS ",A="FL:C:/Compiler/CompilerA.HPP,124"$0x59 0000 0000000008 DefineStr +$LK,"IC_POWER ",A="FL:C:/Compiler/CompilerA.HPP,71"$0x2F 0000 0000000008 DefineStr +$LK,"IC_PP_ ",A="FL:C:/Compiler/CompilerA.HPP,64"$0x29 0000 0000000008 DefineStr +$LK,"IC_PREEMPT ",A="FL:C:/Compiler/CompilerA.HPP,135"$0x62 0001 0000000008 DefineStr +$LK,"IC_PUSH ",A="FL:C:/Compiler/CompilerA.HPP,136"$0x63 0001 0000000008 DefineStr +$LK,"IC_PUSH_CMP ",A="FL:C:/Compiler/CompilerA.HPP,93"$0x40 0000 0000000008 DefineStr +$LK,"IC_PUSH_REGS ",A="FL:C:/Compiler/CompilerA.HPP,123"$0x58 0000 0000000008 DefineStr +$LK,"IC_QUE_INIT ",A="FL:C:/Compiler/CompilerA.HPP,173"$0x82 0001 0000000008 DefineStr +$LK,"IC_QUE_INS ",A="FL:C:/Compiler/CompilerA.HPP,174"$0x83 0001 0000000008 DefineStr +$LK,"IC_QUE_INS_REV ",A="FL:C:/Compiler/CompilerA.HPP,175"$0x84 0001 0000000008 DefineStr +$LK,"IC_QUE_REM ",A="FL:C:/Compiler/CompilerA.HPP,176"$0x85 0001 0000000008 DefineStr +$LK,"IC_RBP ",A="FL:C:/Compiler/CompilerA.HPP,38"$0x13 0000 0000000008 DefineStr +$LK,"IC_RDTSC ",A="FL:C:/Compiler/CompilerA.HPP,160"$0x77 0001 0000000008 DefineStr +$LK,"IC_REG ",A="FL:C:/Compiler/CompilerA.HPP,39"$0x14 0000 0000000008 DefineStr +$LK,"IC_RET ",A="FL:C:/Compiler/CompilerA.HPP,126"$0x5B 0000 0000000008 DefineStr +$LK,"IC_RETURN_VAL ",A="FL:C:/Compiler/CompilerA.HPP,27"$0x08 0000 0000000008 DefineStr +$LK,"IC_RETURN_VAL2 ",A="FL:C:/Compiler/CompilerA.HPP,28"$0x09 0000 0000000008 DefineStr +$LK,"IC_RIP ",A="FL:C:/Compiler/CompilerA.HPP,158"$0x76 0000 0000000008 DefineStr +$LK,"IC_SET_RAX ",A="FL:C:/Compiler/CompilerA.HPP,153"$0x71 0001 0000000008 DefineStr +$LK,"IC_SET_RBP ",A="FL:C:/Compiler/CompilerA.HPP,155"$0x73 0001 0000000008 DefineStr +$LK,"IC_SET_RFLAGS ",A="FL:C:/Compiler/CompilerA.HPP,151"$0x6F 0001 0000000008 DefineStr +$LK,"IC_SET_RSP ",A="FL:C:/Compiler/CompilerA.HPP,157"$0x75 0001 0000000008 DefineStr +$LK,"IC_SHL ",A="FL:C:/Compiler/CompilerA.HPP,67"$0x2B 0000 0000000008 DefineStr +$LK,"IC_SHL_CONST ",A="FL:C:/Compiler/CompilerA.HPP,69"$0x2D 0000 0000000008 DefineStr +$LK,"IC_SHL_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,104"$0x47 0000 0000000008 DefineStr +$LK,"IC_SHR ",A="FL:C:/Compiler/CompilerA.HPP,68"$0x2C 0000 0000000008 DefineStr +$LK,"IC_SHR_CONST ",A="FL:C:/Compiler/CompilerA.HPP,70"$0x2E 0000 0000000008 DefineStr +$LK,"IC_SHR_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,105"$0x48 0000 0000000008 DefineStr +$LK,"IC_SIGN_I64 ",A="FL:C:/Compiler/CompilerA.HPP,223"$0xAC 0001 0000000008 DefineStr +$LK,"IC_SIN ",A="FL:C:/Compiler/CompilerA.HPP,234"$0xB7 0001 0000000008 DefineStr +$LK,"IC_SIZEOF ",A="FL:C:/Compiler/CompilerA.HPP,35"$0x10 0000 0000000008 DefineStr +$LK,"IC_SQR ",A="FL:C:/Compiler/CompilerA.HPP,231"$0xB4 0001 0000000008 DefineStr +$LK,"IC_SQRT ",A="FL:C:/Compiler/CompilerA.HPP,233"$0xB6 0001 0000000008 DefineStr +$LK,"IC_SQR_I64 ",A="FL:C:/Compiler/CompilerA.HPP,229"$0xB2 0001 0000000008 DefineStr +$LK,"IC_SQR_U64 ",A="FL:C:/Compiler/CompilerA.HPP,230"$0xB3 0001 0000000008 DefineStr +$LK,"IC_STRLEN ",A="FL:C:/Compiler/CompilerA.HPP,178"$0x86 0001 0000000008 DefineStr +$LK,"IC_STR_CONST ",A="FL:C:/Compiler/CompilerA.HPP,31"$0x0C 0000 0000000008 DefineStr +$LK,"IC_SUB ",A="FL:C:/Compiler/CompilerA.HPP,83"$0x37 0000 0000000008 DefineStr +$LK,"IC_SUB_CALL ",A="FL:C:/Compiler/CompilerA.HPP,116"$0x52 0000 0000000008 DefineStr +$LK,"IC_SUB_CONST ",A="FL:C:/Compiler/CompilerA.HPP,85"$0x39 0000 0000000008 DefineStr +$LK,"IC_SUB_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,113"$0x50 0000 0000000008 DefineStr +$LK,"IC_SWAP_I64 ",A="FL:C:/Compiler/CompilerA.HPP,220"$0xAA 0001 0000000008 DefineStr +$LK,"IC_SWAP_U16 ",A="FL:C:/Compiler/CompilerA.HPP,218"$0xA8 0001 0000000008 DefineStr +$LK,"IC_SWAP_U32 ",A="FL:C:/Compiler/CompilerA.HPP,219"$0xA9 0001 0000000008 DefineStr +$LK,"IC_SWAP_U8 ",A="FL:C:/Compiler/CompilerA.HPP,217"$0xA7 0001 0000000008 DefineStr +$LK,"IC_SWITCH ",A="FL:C:/Compiler/CompilerA.HPP,117"$0x53 0000 0000000008 DefineStr +$LK,"IC_TAN ",A="FL:C:/Compiler/CompilerA.HPP,236"$0xB9 0001 0000000008 DefineStr +$LK,"IC_TOUPPER ",A="FL:C:/Compiler/CompilerA.HPP,51"$0x1E 0001 0000000008 DefineStr +$LK,"IC_TO_BOOL ",A="FL:C:/Compiler/CompilerA.HPP,50"$0x1D 0001 0000000008 DefineStr +$LK,"IC_TO_F64 ",A="FL:C:/Compiler/CompilerA.HPP,49"$0x1C 0001 0000000008 DefineStr +$LK,"IC_TO_I64 ",A="FL:C:/Compiler/CompilerA.HPP,48"$0x1B 0001 0000000008 DefineStr +$LK,"IC_TYPE ",A="FL:C:/Compiler/CompilerA.HPP,36"$0x11 0000 0000000008 DefineStr +$LK,"IC_UNARY_MINUS ",A="FL:C:/Compiler/CompilerA.HPP,57"$0x23 0000 0000000008 DefineStr +$LK,"IC_XOR ",A="FL:C:/Compiler/CompilerA.HPP,80"$0x35 0000 0000000008 DefineStr +$LK,"IC_XOR_EQUAL ",A="FL:C:/Compiler/CompilerA.HPP,111"$0x4E 0000 0000000008 DefineStr +$LK,"IC_XOR_XOR ",A="FL:C:/Compiler/CompilerA.HPP,98"$0x43 0000 0000000008 DefineStr +$LK,"IC__MM ",A="FL:C:/Compiler/CompilerA.HPP,63"$0x28 0000 0000000008 DefineStr +$LK,"IC__PP ",A="FL:C:/Compiler/CompilerA.HPP,62"$0x27 0000 0000000008 DefineStr +$LK,"ICf_DONT_POP_FLOAT0 ",A="FL:C:/Kernel/KernelA.HPP,1523"$26 0000 0000000008 DefineStr +$LK,"ICf_DONT_PUSH_FLOAT0",A="FL:C:/Kernel/KernelA.HPP,1522"$23 0000 0000000008 DefineStr +$LK,"ICf_LOCK ",A="FL:C:/Kernel/KernelA.HPP,1526"$30 0000 0000000008 DefineStr +$LK,"IDTET_IRQ ",A="FL:C:/Kernel/KernelA.HPP,278"$0x0E 0001 0000000008 DefineStr +$LK,"IDTET_TASK ",A="FL:C:/Kernel/KernelA.HPP,277"$0x05 0000 0000000008 DefineStr +$LK,"IDTET_TRAP ",A="FL:C:/Kernel/KernelA.HPP,279"$0x0F 0000 0000000008 DefineStr +$LK,"IEF_40_REX ",A="FL:C:/Kernel/KernelA.HPP,1639"$0x040 0000 0000000008 DefineStr +$LK,"IEF_48_REX ",A="FL:C:/Kernel/KernelA.HPP,1640"$0x080 0000 0000000008 DefineStr +$LK,"IEF_DFT ",A="FL:C:/Kernel/KernelA.HPP,1637"$0x010 0000 0000000008 DefineStr +$LK,"IEF_DONT_SWITCH_MODES",A="FL:C:/Kernel/KernelA.HPP,1635"$0x004 0000 0000000008 DefineStr +$LK,"IEF_ENDING_ZERO ",A="FL:C:/Kernel/KernelA.HPP,1644"$0x800 0000 0000000008 DefineStr +$LK,"IEF_NO_REX ",A="FL:C:/Kernel/KernelA.HPP,1638"$0x020 0000 0000000008 DefineStr +$LK,"IEF_OP_SIZE16 ",A="FL:C:/Kernel/KernelA.HPP,1633"$0x001 0000 0000000008 DefineStr +$LK,"IEF_OP_SIZE32 ",A="FL:C:/Kernel/KernelA.HPP,1634"$0x002 0000 0000000008 DefineStr +$LK,"IEF_PLUS_OPCODE ",A="FL:C:/Kernel/KernelA.HPP,1636"$0x008 0000 0000000008 DefineStr +$LK,"IEF_REX_ONLY_R8_R15 ",A="FL:C:/Kernel/KernelA.HPP,1641"$0x100 0000 0000000008 DefineStr +$LK,"IEF_REX_XOR_LIKE ",A="FL:C:/Kernel/KernelA.HPP,1642"$0x200 0000 0000000008 DefineStr +$LK,"IEF_STI ",A="FL:C:/Kernel/KernelA.HPP,1643"$0x400 0000 0000000008 DefineStr +$LK,"INTERRUPT_STK ",A="FL:C:/Kernel/KernelA.HPP,2776"$(PAGE_SIZE 0003 0000000010 DefineStr +$LK,"INVALID_CLUSTER ",A="FL:C:/Kernel/KernelA.HPP,2202"$(-1) 0011 0000000008 DefineStr +$LK,"INVALID_PTR ",A="FL:C:/Kernel/KernelA.HPP,38"$MAX_I64 0009 0000000008 DefineStr +$LK,"IOAPICARB ",A="FL:C:/Kernel/KernelA.HPP,507"$0x02 0000 0000000008 DefineStr +$LK,"IOAPICID ",A="FL:C:/Kernel/KernelA.HPP,505"$0x00 0000 0000000008 DefineStr +$LK,"IOAPICVER ",A="FL:C:/Kernel/KernelA.HPP,506"$0x01 0000 0000000008 DefineStr +$LK,"IOAPIC_DATA ",A="FL:C:/Kernel/KernelA.HPP,503"$0xFEC00010 0000 0000000010 DefineStr +$LK,"IOAPIC_REG ",A="FL:C:/Kernel/KernelA.HPP,502"$0xFEC00000 0000 0000000010 DefineStr +$LK,"IOREDTAB ",A="FL:C:/Kernel/KernelA.HPP,508"$0x10 0000 0000000008 DefineStr +$LK,"IPSet ",A="FL:C:/Kernel/KbdMouse/InputPointer.CPP.Z,43",BI=284$0000010DE3 0000 0000000177 Funct Export Res +$LK,"IPVarsInit ",A="FL:C:/Kernel/KbdMouse/InputPointer.CPP.Z,70",BI=285$0000010F5B 0001 00000000F3 Funct Export Res +$LK,"IPVarsUpdate ",A="FL:C:/Kernel/KbdMouse/InputPointer.CPP.Z,9",BI=286$0000010B1B 0001 00000002C3 Funct Export Res +$LK,"IP_MOUSE ",A="FL:C:/Kernel/KernelA.HPP,2931"$1 0001 0000000008 DefineStr +$LK,"IP_NULL ",A="FL:C:/Kernel/KernelA.HPP,2930"$0 0001 0000000008 DefineStr +$LK,"ISO1CDirFill ",A="FL:C:/Kernel/Dsk/FileSysISO.CPP.Z,115",BI=287$000001E1C3 0002 0000000072 Funct Export Res +$LK,"ISO1Cd ",A="FL:C:/Kernel/Dsk/FileSysISO.CPP.Z,216",BI=288$000001E60B 0001 00000000A6 Funct Export Res +$LK,"ISO1DateStruct2CDate",A="FL:C:/Kernel/Dsk/FileSysISO.CPP.Z,73",BI=289$000001E09B 0001 0000000068 Funct Export Res +$LK,"ISO1FileFind ",A="FL:C:/Kernel/Dsk/FileSysISO.CPP.Z,129",BI=290$000001E23B 0004 000000026E Funct Export Res +$LK,"ISO1FileRead ",A="FL:C:/Kernel/Dsk/FileSysISO.CPP.Z,187",BI=291$000001E4AB 0002 0000000160 Funct Export Res +$LK,"ISO1FilesFind ",A="FL:C:/Kernel/Dsk/FileSysISO.CPP.Z,230",BI=292$000001E6B3 0001 000000022A Funct Export Res +$LK,"ISO1FromName ",A="FL:C:/Kernel/Dsk/FileSysISO.CPP.Z,87",BI=293$000001E103 0002 00000000B9 Funct Export Res +$LK,"ISO1T_BOOT_RECORD ",A="FL:C:/Kernel/KernelA.HPP,2380"$0 0000 0000000008 DefineStr +$LK,"ISO1T_PRI_VOL_DESC ",A="FL:C:/Kernel/KernelA.HPP,2381"$1 0000 0000000008 DefineStr +$LK,"ISO1T_SUPPLEMENTARY_DESC",A="FL:C:/Kernel/KernelA.HPP,2382"$2 0001 0000000008 DefineStr +$LK,"ISO1T_TERMINATOR ",A="FL:C:/Kernel/KernelA.HPP,2384"$255 0001 0000000008 DefineStr +$LK,"ISO1T_VOL_DRV_DESC ",A="FL:C:/Kernel/KernelA.HPP,2383"$3 0000 0000000008 DefineStr +$LK,"ISO1_ATTR_DIR ",A="FL:C:/Kernel/KernelA.HPP,2424"$2 0001 0000000008 DefineStr +$LK,"ISO1_BASE_YEAR ",A="FL:C:/Kernel/KernelA.HPP,2423"$1900 0002 0000000008 DefineStr +$LK,"ISODrvInit ",A="FL:C:/Kernel/Dsk/FileSysISO.CPP.Z,5",BI=294$000001DC53 0000 00000003E5 Funct Export Res +$LK,"IST_ASSIGN ",A="FL:C:/Compiler/CompilerA.HPP,9"$2 0000 0000000008 DefineStr +$LK,"IST_CMP ",A="FL:C:/Compiler/CompilerA.HPP,10"$3 0000 0000000008 DefineStr +$LK,"IST_DEREF ",A="FL:C:/Compiler/CompilerA.HPP,8"$1 0000 0000000008 DefineStr +$LK,"IST_NULL ",A="FL:C:/Compiler/CompilerA.HPP,7"$0 0000 0000000008 DefineStr +$LK,"IS_0_ARG ",A="FL:C:/Compiler/CompilerA.HPP,2"$0 0000 0000000008 DefineStr +$LK,"IS_1_ARG ",A="FL:C:/Compiler/CompilerA.HPP,3"$1 0000 0000000008 DefineStr +$LK,"IS_2_ARG ",A="FL:C:/Compiler/CompilerA.HPP,4"$2 0000 0000000008 DefineStr +$LK,"IS_V_ARG ",A="FL:C:/Compiler/CompilerA.HPP,5"$3 0000 0000000008 DefineStr +$LK,"I_BPT ",A="FL:C:/Kernel/KernelA.HPP,286"$0x03 0001 0000000008 DefineStr +$LK,"I_DBG ",A="FL:C:/Kernel/KernelA.HPP,293"$0x32 0004 0000000008 DefineStr +$LK,"I_DIVIDE_BY_ZERO ",A="FL:C:/Kernel/KernelA.HPP,283"$0x00 0001 0000000008 DefineStr +$LK,"I_MP_CRASH ",A="FL:C:/Kernel/KernelA.HPP,291"$0x30 0002 0000000008 DefineStr +$LK,"I_NMI ",A="FL:C:/Kernel/KernelA.HPP,285"$0x02 0001 0000000008 DefineStr +$LK,"I_PAGE_FAULT ",A="FL:C:/Kernel/KernelA.HPP,287"$0x0E 0001 0000000008 DefineStr +$LK,"I_SINGLE_STEP ",A="FL:C:/Kernel/KernelA.HPP,284"$0x01 0000 0000000008 DefineStr +$LK,"I_TIMER ",A="FL:C:/Kernel/KernelA.HPP,289"$0x20 0002 0000000008 DefineStr +$LK,"I_USER ",A="FL:C:/Kernel/KernelA.HPP,298"$0x40 0000 0000000008 DefineStr +$LK,"I_WAKE ",A="FL:C:/Kernel/KernelA.HPP,292"$0x31 0002 0000000008 DefineStr +$LK,"InDbg ",A="FL:C:/Kernel/KMisc.CPP.Z,270",BI=295$000000E9BE 0006 0000000022 Funct Export Res +$LK,"InU16 ",A="FL:C:/Kernel/KernelB.HPP,54"$0000000068 0002 Funct Public +$LK,"InU32 ",A="FL:C:/Kernel/KernelB.HPP,55"$0000000069 0000 Funct Public +$LK,"InU8 ",A="FL:C:/Kernel/KernelB.HPP,56"$0000000067 0031 Funct Public +$LK,"InputFilterTask ",A="FL:C:/Kernel/KbdMouse/Message.CPP.Z,1",BI=296$0000013563 0001 000000017D Funct Export Res +IntCore0TimerHandler000000E24E 0001 ExportSysSym +$LK,"IntCore0TimerHandler",A="FL:C:/Kernel/KMisc.CPP.Z,47",BI=297$000000E24E 0001 0000000064 Funct Export Res +$LK,"IntEntryGet ",A="FL:C:/Kernel/Ints.CPP.Z,94",BI=298$00000073AD 0001 0000000046 Funct Export Res +$LK,"IntEntrySet ",A="FL:C:/Kernel/Ints.CPP.Z,106",BI=299$00000073F5 0009 00000000A4 Funct Export Res +$LK,"IntFaultHandlersNew ",A="FL:C:/Kernel/Ints.CPP.Z,147",BI=300$000000750D 0001 0000000065 Funct Export Res +$LK,"IntInit1 ",A="FL:C:/Kernel/Ints.CPP.Z,161",BI=301$0000007575 0002 0000000069 Funct Export Res +$LK,"IntInit2 ",A="FL:C:/Kernel/Ints.CPP.Z,176",BI=302$00000075E5 0001 00000000A4 Funct Export Res +$LK,"IntNop ",A="FL:C:/Kernel/Ints.CPP.Z,140",BI=303$00000074E5 0001 0000000026 Funct Export Res +$LK,"IntsInit ",A="FL:C:/Kernel/Ints.CPP.Z,126",BI=304$000000749D 0001 0000000042 Funct Export Res +$LK,"InvlPg ",A="FL:C:/Kernel/KernelB.HPP,223"$0000000066 0006 Funct Public +$LK,"IsDbg ",A="FL:C:/Kernel/KMisc.CPP.Z,275",BI=305$000000E9E6 0008 0000000014 Funct Export Res +$LK,"IsDir ",A="FL:C:/Kernel/Dsk/DskB.CPP.Z,211",BI=306$0000023DD0 0000 0000000078 Funct Export Res +$LK,"IsDotC ",A="FL:C:/Kernel/Dsk/DskStr.CPP.Z,31",BI=307$0000016D63 0001 000000006D Funct Export Res +$LK,"IsDotZ ",A="FL:C:/Kernel/Dsk/DskStr.CPP.Z,22",BI=308$0000016CF3 0002 000000006D Funct Export Res +$LK,"IsDrvWritable ",A="FL:C:/Kernel/Dsk/DskStr.CPP.Z,128",BI=309$00000170E3 0000 000000002C Funct Export Res +$LK,"IsMute ",A="FL:C:/Kernel/KMisc.CPP.Z,218",BI=310$000000E84E 0001 0000000014 Funct Export Res +$LK,"IsPreempt ",A="FL:C:/Kernel/KMisc.CPP.Z,233",BI=311$000000E8AE 0002 000000001D Funct Export Res +$LK,"IsRaw ",A="FL:C:/Kernel/KMisc.CPP.Z,255",BI=312$000000E956 0009 0000000027 Funct Export Res +$LK,"IsSilent ",A="FL:C:/Kernel/KMisc.CPP.Z,228",BI=313$000000E88E 0001 000000001D Funct Export Res +$LK,"IsSingleUser ",A="FL:C:/Kernel/KMisc.CPP.Z,265",BI=314$000000E9A6 0002 0000000014 Funct Export Res +$LK,"IsSuspended ",A="FL:C:/Kernel/Task.CPP.Z,63",BI=315$0000014603 0000 0000000036 Funct Export Res +$LK,"IsSysDbg ",A="FL:C:/Kernel/KMisc.CPP.Z,243",BI=316$000000E8F6 0000 0000000014 Funct Export Res +$LK,"JIFFY_FREQ ",A="FL:C:/Kernel/KernelA.HPP,543"$1000 0007 0000000008 DefineStr +$LK,"JobQue ",A="FL:C:/Kernel/MultiProc.CPP.Z,232",BI=317$00000267D2 0001 00000000FE Funct Export Res +$LK,"KBD_CTRL ",A="FL:C:/Kernel/KernelA.HPP,2889"$0x64 0010 0000000008 DefineStr +$LK,"KBD_PORT ",A="FL:C:/Kernel/KernelA.HPP,2888"$0x60 000C 0000000008 DefineStr +$LK,"KDF_HAS_DESCS ",A="FL:C:/Kernel/KernelA.HPP,3704"$1 0002 0000000008 DefineStr +$LK,"KDInputFilterPutKey ",A="FL:C:/Kernel/KeyDev.CPP.Z,110",BI=318$000000DFBE 0001 000000006D Funct Export Res +$LK,"KDInputFilterPutS ",A="FL:C:/Kernel/KeyDev.CPP.Z,122",BI=319$000000E02E 0001 000000007A Funct Export Res +$LK,"KDRawPutKey ",A="FL:C:/Kernel/KeyDev.CPP.Z,90",BI=320$000000DF56 0001 0000000026 Funct Export Res +$LK,"KDRawPutS ",A="FL:C:/Kernel/KeyDev.CPP.Z,99",BI=321$000000DF7E 0001 000000003D Funct Export Res +$LK,"KERNEL_MODULE_NAME ",A="FL:C:/Kernel/KernelA.HPP,679"$\"/Kernel/ 0001 0000000018 DefineStr +$LK,"KW_ARGPOP ",A="FL:C:/Compiler/CompilerA.HPP,287"$47 0000 0000000008 DefineStr +$LK,"KW_ASM ",A="FL:C:/Compiler/CompilerA.HPP,256"$16 0000 0000000008 DefineStr +$LK,"KW_ASSERT ",A="FL:C:/Compiler/CompilerA.HPP,275"$35 0000 0000000008 DefineStr +$LK,"KW_BREAK ",A="FL:C:/Compiler/CompilerA.HPP,259"$19 0000 0000000008 DefineStr +$LK,"KW_CASE ",A="FL:C:/Compiler/CompilerA.HPP,264"$24 0000 0000000008 DefineStr +$LK,"KW_CATCH ",A="FL:C:/Compiler/CompilerA.HPP,243"$3 0000 0000000008 DefineStr +$LK,"KW_CLASS ",A="FL:C:/Compiler/CompilerA.HPP,244"$4 0000 0000000008 DefineStr +$LK,"KW_DEFINE ",A="FL:C:/Compiler/CompilerA.HPP,241"$1 0000 0000000008 DefineStr +$LK,"KW_DEFINED ",A="FL:C:/Compiler/CompilerA.HPP,284"$44 0000 0000000008 DefineStr +$LK,"KW_DFT ",A="FL:C:/Compiler/CompilerA.HPP,265"$25 0000 0000000008 DefineStr +$LK,"KW_DO ",A="FL:C:/Compiler/CompilerA.HPP,255"$15 0000 0000000008 DefineStr +$LK,"KW_ELSE ",A="FL:C:/Compiler/CompilerA.HPP,247"$7 0000 0000000008 DefineStr +$LK,"KW_ENDIF ",A="FL:C:/Compiler/CompilerA.HPP,274"$34 0000 0000000008 DefineStr +$LK,"KW_EXE ",A="FL:C:/Compiler/CompilerA.HPP,258"$18 0000 0000000008 DefineStr +$LK,"KW_EXTERN ",A="FL:C:/Compiler/CompilerA.HPP,250"$10 0000 0000000008 DefineStr +$LK,"KW_FOR ",A="FL:C:/Compiler/CompilerA.HPP,248"$8 0000 0000000008 DefineStr +$LK,"KW_GOTO ",A="FL:C:/Compiler/CompilerA.HPP,257"$17 0000 0000000008 DefineStr +$LK,"KW_HASERRCODE ",A="FL:C:/Compiler/CompilerA.HPP,286"$46 0000 0000000008 DefineStr +$LK,"KW_HELP_FILE ",A="FL:C:/Compiler/CompilerA.HPP,281"$41 0000 0000000008 DefineStr +$LK,"KW_HELP_INDEX ",A="FL:C:/Compiler/CompilerA.HPP,280"$40 0000 0000000008 DefineStr +$LK,"KW_IF ",A="FL:C:/Compiler/CompilerA.HPP,246"$6 0000 0000000008 DefineStr +$LK,"KW_IFAOT ",A="FL:C:/Compiler/CompilerA.HPP,272"$32 0000 0000000008 DefineStr +$LK,"KW_IFDEF ",A="FL:C:/Compiler/CompilerA.HPP,270"$30 0000 0000000008 DefineStr +$LK,"KW_IFJIT ",A="FL:C:/Compiler/CompilerA.HPP,273"$33 0000 0000000008 DefineStr +$LK,"KW_IFNDEF ",A="FL:C:/Compiler/CompilerA.HPP,271"$31 0000 0000000008 DefineStr +$LK,"KW_IMPORT ",A="FL:C:/Compiler/CompilerA.HPP,268"$28 0000 0000000008 DefineStr +$LK,"KW_INCLUDE ",A="FL:C:/Compiler/CompilerA.HPP,240"$0 0000 0000000008 DefineStr +$LK,"KW_INTERRUPT ",A="FL:C:/Compiler/CompilerA.HPP,285"$45 0000 0000000008 DefineStr +$LK,"KW_LASTCLASS ",A="FL:C:/Compiler/CompilerA.HPP,278"$38 0000 0000000008 DefineStr +$LK,"KW_LOCK ",A="FL:C:/Compiler/CompilerA.HPP,283"$43 0000 0000000008 DefineStr +$LK,"KW_NOARGPOP ",A="FL:C:/Compiler/CompilerA.HPP,288"$48 0000 0000000008 DefineStr +$LK,"KW_NOBOUND_SWITCH ",A="FL:C:/Compiler/CompilerA.HPP,261"$21 0000 0000000008 DefineStr +$LK,"KW_NOREG ",A="FL:C:/Compiler/CompilerA.HPP,277"$37 0000 0000000008 DefineStr +$LK,"KW_NOUNUSEDWARN ",A="FL:C:/Compiler/CompilerA.HPP,279"$39 0000 0000000008 DefineStr +$LK,"KW_NUM_KEYWORDS ",A="FL:C:/Compiler/CompilerA.HPP,315"$89 0000 0000000008 DefineStr +$LK,"KW_OFFSET ",A="FL:C:/Compiler/CompilerA.HPP,267"$27 0000 0000000008 DefineStr +$LK,"KW_PUBLIC ",A="FL:C:/Compiler/CompilerA.HPP,266"$26 0000 0000000008 DefineStr +$LK,"KW_REG ",A="FL:C:/Compiler/CompilerA.HPP,276"$36 0000 0000000008 DefineStr +$LK,"KW_RETURN ",A="FL:C:/Compiler/CompilerA.HPP,252"$12 0000 0000000008 DefineStr +$LK,"KW_SIZEOF ",A="FL:C:/Compiler/CompilerA.HPP,253"$13 0000 0000000008 DefineStr +$LK,"KW_STATIC ",A="FL:C:/Compiler/CompilerA.HPP,282"$42 0000 0000000008 DefineStr +$LK,"KW_SUB_SWITCH_END ",A="FL:C:/Compiler/CompilerA.HPP,263"$23 0000 0000000008 DefineStr +$LK,"KW_SUB_SWITCH_START ",A="FL:C:/Compiler/CompilerA.HPP,262"$22 0000 0000000008 DefineStr +$LK,"KW_SWITCH ",A="FL:C:/Compiler/CompilerA.HPP,260"$20 0000 0000000008 DefineStr +$LK,"KW_TRY ",A="FL:C:/Compiler/CompilerA.HPP,245"$5 0000 0000000008 DefineStr +$LK,"KW_UNION ",A="FL:C:/Compiler/CompilerA.HPP,242"$2 0000 0000000008 DefineStr +$LK,"KW_WHILE ",A="FL:C:/Compiler/CompilerA.HPP,249"$9 0000 0000000008 DefineStr +$LK,"KW__EXTERN ",A="FL:C:/Compiler/CompilerA.HPP,251"$11 0000 0000000008 DefineStr +$LK,"KW__IMPORT ",A="FL:C:/Compiler/CompilerA.HPP,269"$29 0000 0000000008 DefineStr +$LK,"KW__INTERN ",A="FL:C:/Compiler/CompilerA.HPP,254"$14 0000 0000000008 DefineStr +$LK,"KbdBuildSC ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,292",BI=322$0000012053 0003 0000000353 Funct Export Res +$LK,"KbdCmdFlush ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,43",BI=323$0000011203 0006 0000000043 Funct Export Res +$LK,"KbdCmdRead ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,34",BI=324$00000111AB 0005 0000000055 Funct Export Res +$LK,"KbdCmdSend ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,22",BI=325$0000011143 0014 0000000067 Funct Export Res +$LK,"KbdHandler ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,437",BI=326$0000012793 0001 000000011E Funct Export Res +$LK,"KbdInit ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,412",BI=327$00000125B3 0001 00000001D5 Funct Export Res +$LK,"KbdIntHandler ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,388",BI=328$00000124C3 0001 000000004F Funct Export Res +$LK,"KbdMouseCmdAck ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,65",BI=329$0000011313 0010 000000008A Funct Export Res +$LK,"KbdMouseEvtTime ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,481",BI=330$000001293B 0000 0000000026 Funct Export Res +$LK,"KbdMouseHandler ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,257",BI=331$0000013323 0001 00000000D1 Funct Export Res +$LK,"KbdMouseRst ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,225",BI=332$00000131FB 0004 0000000041 Funct Export Res +$LK,"KbdMouseVarsInit ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,294",BI=333$00000133FB 0001 0000000165 Funct Export Res +$LK,"KbdMsgsQue ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,462",BI=334$00000128B3 0001 0000000081 Funct Export Res +$LK,"KbdPktRead ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,365",BI=335$00000123BB 0002 0000000108 Funct Export Res +$LK,"KbdSetLEDs ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,50",BI=336$000001124B 0002 00000000C6 Funct Export Res +$LK,"KbdTypeMatic ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,83",BI=337$00000113A3 0000 000000006F Funct Export Res +KernelMain 0000028952 0001 ExportSysSym +$LK,"KernelMain ",A="FL:C:/Kernel/KEnd.CPP.Z,128",BI=338$0000028952 0001 0000000360 Funct Export Res +$LK,"KeyDescSet ",A="FL:C:/Kernel/KeyDev.CPP.Z,54",BI=339$000000DDE6 0000 0000000068 Funct Export Res +$LK,"KeyDevAdd ",A="FL:C:/Kernel/KeyDev.CPP.Z,65",BI=340$000000DE4E 0002 00000000AA Funct Export Res +$LK,"KeyDevInit ",A="FL:C:/Kernel/KeyDev.CPP.Z,136",BI=341$000000E0AE 0001 00000000A0 Funct Export Res +$LK,"KeyDevRem ",A="FL:C:/Kernel/KeyDev.CPP.Z,82",BI=342$000000DEFE 0000 0000000056 Funct Export Res +$LK,"Kill ",A="FL:C:/Kernel/Task.CPP.Z,28",BI=343$00000144D3 0002 00000000D2 Funct Export Res +$LK,"LAPICF_APIC_ENABLED ",A="FL:C:/Kernel/KernelA.HPP,482"$0x100 0001 0000000008 DefineStr +$LK,"LAPIC_APIC_ID ",A="FL:C:/Kernel/KernelA.HPP,472"$(LAPIC_BAS 0001 0000000018 DefineStr +$LK,"LAPIC_APIC_VERSION ",A="FL:C:/Kernel/KernelA.HPP,473"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_ARIBITRATION_PRIORITY",A="FL:C:/Kernel/KernelA.HPP,475"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_BASE ",A="FL:C:/Kernel/KernelA.HPP,470"$0xFEE00000 0013 0000000010 DefineStr +$LK,"LAPIC_DFR ",A="FL:C:/Kernel/KernelA.HPP,479"$(LAPIC_BAS 0001 0000000018 DefineStr +$LK,"LAPIC_EOI ",A="FL:C:/Kernel/KernelA.HPP,477"$(LAPIC_BAS 0004 0000000018 DefineStr +$LK,"LAPIC_ICR_HIGH ",A="FL:C:/Kernel/KernelA.HPP,489"$(LAPIC_BAS 0001 0000000018 DefineStr +$LK,"LAPIC_ICR_LOW ",A="FL:C:/Kernel/KernelA.HPP,488"$(LAPIC_BAS 0008 0000000018 DefineStr +$LK,"LAPIC_IRR ",A="FL:C:/Kernel/KernelA.HPP,487"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_ISR ",A="FL:C:/Kernel/KernelA.HPP,485"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_LDR ",A="FL:C:/Kernel/KernelA.HPP,480"$(LAPIC_BAS 0001 0000000018 DefineStr +$LK,"LAPIC_LOG_DST ",A="FL:C:/Kernel/KernelA.HPP,478"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_LVT_ERR ",A="FL:C:/Kernel/KernelA.HPP,496"$(LAPIC_BAS 0002 0000000018 DefineStr +$LK,"LAPIC_LVT_LINT0 ",A="FL:C:/Kernel/KernelA.HPP,494"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_LVT_LINT1 ",A="FL:C:/Kernel/KernelA.HPP,495"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_LVT_PERF ",A="FL:C:/Kernel/KernelA.HPP,493"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_LVT_THERMAL ",A="FL:C:/Kernel/KernelA.HPP,492"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_LVT_TIMER ",A="FL:C:/Kernel/KernelA.HPP,491"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_PROCESSOR_PRIORITY",A="FL:C:/Kernel/KernelA.HPP,476"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_SVR ",A="FL:C:/Kernel/KernelA.HPP,483"$(LAPIC_BAS 0001 0000000018 DefineStr +$LK,"LAPIC_TASK_PRIORITY ",A="FL:C:/Kernel/KernelA.HPP,474"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LAPIC_TMR ",A="FL:C:/Kernel/KernelA.HPP,486"$(LAPIC_BAS 0000 0000000018 DefineStr +$LK,"LBEqu ",A="FL:C:/Kernel/KernelB.HPP,21"$0000001F0E 0010 Funct Public Res +$LK,"LBtc ",A="FL:C:/Kernel/KernelB.HPP,15"$000000007F 0000 Funct Public +$LK,"LBtr ",A="FL:C:/Kernel/KernelB.HPP,16"$000000007E 004E Funct Public +$LK,"LBts ",A="FL:C:/Kernel/KernelB.HPP,17"$000000007D 0061 Funct Public +$LK,"LDF_JUST_LOAD ",A="FL:C:/Kernel/KernelA.HPP,365"$2 0001 0000000008 DefineStr +$LK,"LDF_NO_ABSS ",A="FL:C:/Kernel/KernelA.HPP,364"$1 0002 0000000008 DefineStr +$LK,"LDF_SILENT ",A="FL:C:/Kernel/KernelA.HPP,366"$4 0003 0000000008 DefineStr +$LK,"LEX_MAX_IDENT ",A="FL:C:/Kernel/KernelA.HPP,2047"$134 0000 0000000008 DefineStr +$LK,"LFN_CNT ",A="FL:C:/Kernel/KernelA.HPP,2048"$8 0001 0000000008 DefineStr +$LK,"LFN_STK_CNT ",A="FL:C:/Kernel/KernelA.HPP,2049"$32 0001 0000000008 DefineStr +$LK,"LFSF_DEFINE ",A="FL:C:/Kernel/KernelA.HPP,1931"$2 0000 0000000008 DefineStr +$LK,"LFSF_DOC ",A="FL:C:/Kernel/KernelA.HPP,1930"$1 0001 0000000008 DefineStr +$LK,"LF_AOT_COMPILE ",A="FL:C:/Kernel/KernelA.HPP,2039"$0x04000000 0000 0000000010 DefineStr +$LK,"LF_ARRAY ",A="FL:C:/Kernel/KernelA.HPP,2034"$0x00400000 0000 0000000010 DefineStr +$LK,"LF_ASM_EXPRESSIONS ",A="FL:C:/Kernel/KernelA.HPP,2025"$0x00004000 0000 0000000010 DefineStr +$LK,"LF_CLASS_IP ",A="FL:C:/Kernel/KernelA.HPP,2044"$0x20000000 0000 0000000010 DefineStr +$LK,"LF_DONT_FREE_BUF ",A="FL:C:/Kernel/KernelA.HPP,2010"$2 0000 0000000008 DefineStr +$LK,"LF_DONT_MAKE_RESULT ",A="FL:C:/Kernel/KernelA.HPP,2045"$0x40000000 0000 0000000010 DefineStr +$LK,"LF_EXE_BLK ",A="FL:C:/Kernel/KernelA.HPP,2022"$0x00000800 0001 0000000010 DefineStr +$LK,"LF_FUN_EXP ",A="FL:C:/Kernel/KernelA.HPP,2028"$0x00020000 0000 0000000010 DefineStr +$LK,"LF_HAS_MISC_DATA ",A="FL:C:/Kernel/KernelA.HPP,2023"$0x00001000 0002 0000000010 DefineStr +$LK,"LF_HAS_RETURN ",A="FL:C:/Kernel/KernelA.HPP,2024"$0x00002000 0000 0000000010 DefineStr +$LK,"LF_IN_IF ",A="FL:C:/Kernel/KernelA.HPP,2012"$8 0000 0000000008 DefineStr +$LK,"LF_IN_QUOTES ",A="FL:C:/Kernel/KernelA.HPP,2021"$0x00000400 0000 0000000010 DefineStr +$LK,"LF_JUST_LOAD ",A="FL:C:/Kernel/KernelA.HPP,2013"$16 0002 0000000008 DefineStr +$LK,"LF_KEEP_AT_SIGN ",A="FL:C:/Kernel/KernelA.HPP,2017"$256 0000 0000000008 DefineStr +$LK,"LF_KEEP_DOT ",A="FL:C:/Kernel/KernelA.HPP,2015"$64 0000 0000000008 DefineStr +$LK,"LF_KEEP_NEW_LINES ",A="FL:C:/Kernel/KernelA.HPP,2014"$32 0000 0000000008 DefineStr +$LK,"LF_KEEP_NUM_SIGN ",A="FL:C:/Kernel/KernelA.HPP,2016"$128 0000 0000000008 DefineStr +$LK,"LF_LAST_WAS_DOT ",A="FL:C:/Kernel/KernelA.HPP,2038"$0x02000000 0000 0000000010 DefineStr +$LK,"LF_LOCAL ",A="FL:C:/Kernel/KernelA.HPP,2027"$0x00010000 0000 0000000010 DefineStr +$LK,"LF_NOT_CONST ",A="FL:C:/Kernel/KernelA.HPP,2019"$0x00000100 0000 0000000010 DefineStr +$LK,"LF_NO_ABSS ",A="FL:C:/Kernel/KernelA.HPP,2041"$0x08000000 0000 0000000010 DefineStr +$LK,"LF_NO_DEFINES ",A="FL:C:/Kernel/KernelA.HPP,2011"$4 0000 0000000008 DefineStr +$LK,"LF_NO_REG_OPT ",A="FL:C:/Kernel/KernelA.HPP,2020"$0x00000200 0000 0000000010 DefineStr +$LK,"LF_PAREN ",A="FL:C:/Kernel/KernelA.HPP,2042"$0x10000000 0000 0000000010 DefineStr +$LK,"LF_PMT ",A="FL:C:/Kernel/KernelA.HPP,2008"$1 0001 0000000008 DefineStr +$LK,"LF_POSTDEC ",A="FL:C:/Kernel/KernelA.HPP,2031"$0x00080000 0000 0000000010 DefineStr +$LK,"LF_POSTINC ",A="FL:C:/Kernel/KernelA.HPP,2030"$0x00040000 0000 0000000010 DefineStr +$LK,"LF_PREDEC ",A="FL:C:/Kernel/KernelA.HPP,2033"$0x00200000 0000 0000000010 DefineStr +$LK,"LF_PREINC ",A="FL:C:/Kernel/KernelA.HPP,2032"$0x00100000 0000 0000000010 DefineStr +$LK,"LF_RAX ",A="FL:C:/Kernel/KernelA.HPP,2035"$0x00800000 0000 0000000010 DefineStr +$LK,"LF_UNRESOLVED ",A="FL:C:/Kernel/KernelA.HPP,2026"$0x00008000 0000 0000000010 DefineStr +$LK,"LF_USE_LAST_U16 ",A="FL:C:/Kernel/KernelA.HPP,2036"$0x01000000 0000 0000000010 DefineStr +$LK,"LMF_EXACT ",A="FL:C:/Kernel/KernelA.HPP,3701"$2 0002 0000000008 DefineStr +$LK,"LMF_IGNORE_CASE ",A="FL:C:/Kernel/KernelA.HPP,3700"$1 0002 0000000008 DefineStr +$LK,"LTBLUE ",A="FL:C:/Kernel/KernelA.HPP,2855"$9 0001 0000000008 DefineStr +$LK,"LTCYAN ",A="FL:C:/Kernel/KernelA.HPP,2857"$11 0000 0000000008 DefineStr +$LK,"LTGRAY ",A="FL:C:/Kernel/KernelA.HPP,2853"$7 0000 0000000008 DefineStr +$LK,"LTGREEN ",A="FL:C:/Kernel/KernelA.HPP,2856"$10 0000 0000000008 DefineStr +$LK,"LTPURPLE ",A="FL:C:/Kernel/KernelA.HPP,2859"$13 0000 0000000008 DefineStr +$LK,"LTRED ",A="FL:C:/Kernel/KernelA.HPP,2858"$12 0000 0000000008 DefineStr +$LK,"LXchgI64 ",A="FL:C:/Kernel/KernelB.HPP,206"$0000002030 0001 Funct Public Res +$LK,"LXchgU16 ",A="FL:C:/Kernel/KernelB.HPP,207"$0000002056 0000 Funct Public Res +$LK,"LXchgU32 ",A="FL:C:/Kernel/KernelB.HPP,208"$0000002044 0000 Funct Public Res +$LK,"LXchgU8 ",A="FL:C:/Kernel/KernelB.HPP,209"$000000206B 0000 Funct Public Res +$LK,"LastDayOfMon ",A="FL:C:/Kernel/Date.CPP.Z,81",BI=344$00000097DE 0001 0000000055 Funct Export Res +$LK,"LastDayOfYear ",A="FL:C:/Kernel/Date.CPP.Z,109",BI=345$000000987E 0001 000000004B Funct Export Res +$LK,"Let2BlkDev ",A="FL:C:/Kernel/Dsk/DskStr.CPP.Z,120",BI=346$00000170B3 0007 0000000030 Funct Export Res +$LK,"Let2Drv ",A="FL:C:/Kernel/Dsk/DskStr.CPP.Z,96",BI=347$0000016FEB 0013 0000000086 Funct Export Res +$LK,"Lf_AOT_COMPILE ",A="FL:C:/Kernel/KernelA.HPP,2040"$34 0000 0000000008 DefineStr +$LK,"Lf_FUN_EXP ",A="FL:C:/Kernel/KernelA.HPP,2029"$25 0000 0000000008 DefineStr +$LK,"Lf_OPT_TRACE_PRESENT",A="FL:C:/Kernel/KernelA.HPP,2018"$9 0000 0000000008 DefineStr +$LK,"Lf_PAREN ",A="FL:C:/Kernel/KernelA.HPP,2043"$36 0000 0000000008 DefineStr +$LK,"Lf_PMT ",A="FL:C:/Kernel/KernelA.HPP,2009"$0 0003 0000000008 DefineStr +$LK,"Lf_USE_LAST_U16 ",A="FL:C:/Kernel/KernelA.HPP,2037"$32 0000 0000000008 DefineStr +$LK,"LinkedLstCnt ",A="FL:C:/Kernel/KDataTypes.CPP.Z,21",BI=348$00000076FD 0000 0000000026 Funct Export Res +$LK,"LinkedLstCopy ",A="FL:C:/Kernel/KDataTypes.CPP.Z,11",BI=349$00000076B5 0000 0000000047 Funct Export Res +$LK,"LinkedLstDel ",A="FL:C:/Kernel/KDataTypes.CPP.Z,1",BI=350$000000768D 0004 0000000027 Funct Export Res +$LK,"LinkedLstSize ",A="FL:C:/Kernel/KDataTypes.CPP.Z,31",BI=351$0000007725 0000 000000002C Funct Export Res +$LK,"Ln ",A="FL:C:/Kernel/KernelB.HPP,103"$000000281B 0000 Funct Public Res +$LK,"Load ",A="FL:C:/Kernel/KLoad.CPP.Z,179",BI=352$00000091B6 0001 00000001E5 Funct Export Res +$LK,"LoadKernel ",A="FL:C:/Kernel/KLoad.CPP.Z,238",BI=353$000000939E 0001 000000004C Funct Export Res +$LK,"LoadOneImport ",A="FL:C:/Kernel/KLoad.CPP.Z,1",BI=354$0000008BDE 0002 00000001F2 Funct Export Res +$LK,"LoadPass1 ",A="FL:C:/Kernel/KLoad.CPP.Z,65",BI=355$0000008E36 0002 00000002C9 Funct Export Res +$LK,"LoadPass2 ",A="FL:C:/Kernel/KLoad.CPP.Z,152",BI=356$0000009106 0001 00000000AD Funct Export Res +$LK,"Log10 ",A="FL:C:/Kernel/KernelB.HPP,104"$00000027EF 0004 Funct Public Res +$LK,"Log2 ",A="FL:C:/Kernel/KernelB.HPP,105"$0000002805 0000 Funct Public Res +$LK,"LstMatch ",A="FL:C:/Kernel/StrA.CPP.Z,399",BI=357$0000003084 0005 0000000128 Funct Export Res +$LK,"LstSub ",A="FL:C:/Kernel/StrA.CPP.Z,380",BI=358$0000003024 0001 0000000059 Funct Export Res +MALLOC_ALMOST_DONE 0000004BA0 0003 ExportSysSym +MALLOC_FINAL_EXIT 0000004BF8 0002 ExportSysSym +$LK,"MAX_F64 ",A="FL:C:/Kernel/KernelA.HPP,43"$(0x7FEFFFF 0000 0000000020 DefineStr +$LK,"MAX_I16 ",A="FL:C:/Kernel/KernelA.HPP,27"$0x7FFF 0000 0000000008 DefineStr +$LK,"MAX_I32 ",A="FL:C:/Kernel/KernelA.HPP,31"$0x7FFFFFFF 0003 0000000010 DefineStr +$LK,"MAX_I64 ",A="FL:C:/Kernel/KernelA.HPP,35"$0x7FFFFFFF 001A 0000000018 DefineStr +$LK,"MAX_I8 ",A="FL:C:/Kernel/KernelA.HPP,23"$0x7F 0000 0000000008 DefineStr +$LK,"MAX_PTR_STARS ",A="FL:C:/Kernel/KernelA.HPP,765"$4 0000 0000000008 DefineStr +$LK,"MAX_U16 ",A="FL:C:/Kernel/KernelA.HPP,29"$0xFFFF 0000 0000000008 DefineStr +$LK,"MAX_U32 ",A="FL:C:/Kernel/KernelA.HPP,33"$0xFFFFFFFF 0003 0000000010 DefineStr +$LK,"MAX_U64 ",A="FL:C:/Kernel/KernelA.HPP,37"$0xFFFFFFFF 0000 0000000018 DefineStr +$LK,"MAX_U64_F64 ",A="FL:C:/Kernel/KernelA.HPP,42"$(0x43F0000 0000 0000000020 DefineStr +$LK,"MAX_U8 ",A="FL:C:/Kernel/KernelA.HPP,25"$0xFF 0000 0000000008 DefineStr +$LK,"MAlloc ",A="FL:C:/Kernel/MemB.CPP.Z,373"$0000004A60 0059 Funct Res +$LK,"MAllocAligned ",A="FL:C:/Kernel/MemB.CPP.Z,409",BI=359$0000004E0A 0003 000000006F Funct Export Res +$LK,"MAllocIdentical ",A="FL:C:/Kernel/MemB.CPP.Z,393",BI=360$0000004D9A 0004 0000000049 Funct Export Res +$LK,"MBR_PT_FAT12 ",A="FL:C:/Kernel/KernelA.HPP,2592"$0x01 0000 0000000008 DefineStr +$LK,"MBR_PT_FAT32a ",A="FL:C:/Kernel/KernelA.HPP,2593"$0x0B 0002 0000000008 DefineStr +$LK,"MBR_PT_FAT32b ",A="FL:C:/Kernel/KernelA.HPP,2594"$0x0C 0001 0000000008 DefineStr +$LK,"MBR_PT_FAT32c ",A="FL:C:/Kernel/KernelA.HPP,2595"$0x1B 0001 0000000008 DefineStr +$LK,"MBR_PT_FAT32d ",A="FL:C:/Kernel/KernelA.HPP,2596"$0x1C 0001 0000000008 DefineStr +$LK,"MBR_PT_FAT32e ",A="FL:C:/Kernel/KernelA.HPP,2597"$0x8B 0001 0000000008 DefineStr +$LK,"MBR_PT_FAT32f ",A="FL:C:/Kernel/KernelA.HPP,2598"$0x8C 0001 0000000008 DefineStr +$LK,"MBR_PT_NTFS ",A="FL:C:/Kernel/KernelA.HPP,2599"$0x07 0001 0000000008 DefineStr +$LK,"MBR_PT_REDSEA ",A="FL:C:/Kernel/KernelA.HPP,2600"$0x88 0006 0000000008 DefineStr +$LK,"MBS_UNUSED_SIGNATURE_VAL",A="FL:C:/Kernel/KernelA.HPP,2749"$'MBUn' 0006 0000000008 DefineStr +$LK,"MBS_USED_SIGNATURE_VAL",A="FL:C:/Kernel/KernelA.HPP,2748"$'MBUs' 0002 0000000008 DefineStr +$LK,"MEM_E820_ENTRY_SIZE ",A="FL:C:/Kernel/KernelA.HPP,354"$20 0003 0000000008 DefineStr +$LK,"MEM_MAPPED_SPACE ",A="FL:C:/Kernel/KernelA.HPP,3360"$0x20000000 0006 0000000010 DefineStr +$LK,"MEM_MIN_MEG ",A="FL:C:/Kernel/KernelA.HPP,3359"$512 0001 0000000008 DefineStr +$LK,"MEM_NUM_E820_ENTRIES",A="FL:C:/Kernel/KernelA.HPP,353"$48 0003 0000000008 DefineStr +$LK,"MEM_NUM_PML1 ",A="FL:C:/Kernel/KernelA.HPP,3361"$1 0008 0000000008 DefineStr +$LK,"MEM_NUM_PML2 ",A="FL:C:/Kernel/KernelA.HPP,3362"$(MEM_MAPPE 0003 0000000020 DefineStr +$LK,"MEM_NUM_PML3 ",A="FL:C:/Kernel/KernelA.HPP,3363"$1 0002 0000000008 DefineStr +$LK,"MEM_NUM_PML4 ",A="FL:C:/Kernel/KernelA.HPP,3364"$1 0001 0000000008 DefineStr +$LK,"MEM_PROTECTED_LOW_LIMIT",A="FL:C:/Kernel/KernelA.HPP,3365"$0x6FFF 0001 0000000008 DefineStr +$LK,"MHeapCtrl ",A="FL:C:/Kernel/MemB.CPP.Z,372"$0000004CFF 0000 Funct Res +$LK,"MIN_F64 ",A="FL:C:/Kernel/KernelA.HPP,44"$(0xFFEFFFF 0000 0000000020 DefineStr +$LK,"MIN_I16 ",A="FL:C:/Kernel/KernelA.HPP,26"$(-0x8000) 0000 0000000010 DefineStr +$LK,"MIN_I32 ",A="FL:C:/Kernel/KernelA.HPP,30"$(-0x800000 0001 0000000010 DefineStr +$LK,"MIN_I64 ",A="FL:C:/Kernel/KernelA.HPP,34"$(-0x800000 0000 0000000018 DefineStr +$LK,"MIN_I8 ",A="FL:C:/Kernel/KernelA.HPP,22"$(-0x80) 0000 0000000008 DefineStr +$LK,"MIN_U16 ",A="FL:C:/Kernel/KernelA.HPP,28"$0 0000 0000000008 DefineStr +$LK,"MIN_U32 ",A="FL:C:/Kernel/KernelA.HPP,32"$0 0000 0000000008 DefineStr +$LK,"MIN_U64 ",A="FL:C:/Kernel/KernelA.HPP,36"$0 0000 0000000008 DefineStr +$LK,"MIN_U8 ",A="FL:C:/Kernel/KernelA.HPP,24"$0 0000 0000000008 DefineStr +$LK,"MLF_DFT_AVAILABLE ",A="FL:C:/Kernel/KernelA.HPP,768"$1 0000 0000000008 DefineStr +$LK,"MLF_DOT_DOT_DOT ",A="FL:C:/Kernel/KernelA.HPP,772"$16 0000 0000000008 DefineStr +$LK,"MLF_FUN ",A="FL:C:/Kernel/KernelA.HPP,771"$8 0000 0000000008 DefineStr +$LK,"MLF_LASTCLASS ",A="FL:C:/Kernel/KernelA.HPP,769"$2 0000 0000000008 DefineStr +$LK,"MLF_NO_UNUSED_WARN ",A="FL:C:/Kernel/KernelA.HPP,773"$32 0000 0000000008 DefineStr +$LK,"MLF_STATIC ",A="FL:C:/Kernel/KernelA.HPP,774"$64 0000 0000000008 DefineStr +$LK,"MLF_STR_DFT_AVAILABLE",A="FL:C:/Kernel/KernelA.HPP,770"$4 0000 0000000008 DefineStr +$LK,"MLMF_IS_STR ",A="FL:C:/Kernel/KernelA.HPP,782"$1 0000 0000000008 DefineStr +$LK,"MPAPICInit ",A="FL:C:/Kernel/MultiProc.CPP.Z,188",BI=361$00000266C2 0002 0000000091 Funct Export Res +MPCrash 0000026D0A 0001 ExportSysSym +$LK,"MPCrash ",A="FL:C:/Kernel/MultiProc.CPP.Z,400",BI=362$0000026D0A 0001 0000000088 Funct Export Res +$LK,"MPHalt ",A="FL:C:/Kernel/MultiProc.CPP.Z,163",BI=363$00000265D2 0002 0000000020 Funct Export Res +$LK,"MPInt ",A="FL:C:/Kernel/MultiProc.CPP.Z,131",BI=364$0000026502 0001 000000007A Funct Export Res +$LK,"MPIntAll ",A="FL:C:/Kernel/MultiProc.CPP.Z,148",BI=365$0000026582 0000 0000000031 Funct Export Res +$LK,"MPNMInt ",A="FL:C:/Kernel/MultiProc.CPP.Z,158",BI=366$00000265BA 0001 0000000011 Funct Export Res +$LK,"MPN_VECT ",A="FL:C:/Kernel/KernelA.HPP,498"$0x97 0005 0000000008 DefineStr +$LK,"MPWake ",A="FL:C:/Kernel/MultiProc.CPP.Z,170",BI=367$00000265F2 0001 00000000CA Funct Export Res +$LK,"MP_MAX_PROCESSORS ",A="FL:C:/Kernel/KernelA.HPP,300"$128 000C 0000000008 DefineStr +$LK,"MP_VECT_ADDR ",A="FL:C:/Kernel/KernelA.HPP,499"$(MPN_VECT* 0002 0000000018 DefineStr +$LK,"MPrintDate ",A="FL:C:/Kernel/StrPrint.CPP.Z,61",BI=368$0000009C66 0001 0000000062 Funct Export Res +$LK,"MPrintQ ",A="FL:C:/Kernel/StrPrint.CPP.Z,68",BI=369$0000009CCE 0001 0000000205 Funct Export Res +$LK,"MPrintTime ",A="FL:C:/Kernel/StrPrint.CPP.Z,54",BI=370$0000009C06 0001 000000005B Funct Export Res +$LK,"MPrintq ",A="FL:C:/Kernel/StrPrint.CPP.Z,127",BI=371$0000009ED6 0001 00000002AD Funct Export Res +$LK,"MRT_DEV ",A="FL:C:/Kernel/KernelA.HPP,2758"$2 0001 0000000008 DefineStr +$LK,"MRT_RAM ",A="FL:C:/Kernel/KernelA.HPP,2757"$1 0000 0000000008 DefineStr +$LK,"MRT_UNUSED ",A="FL:C:/Kernel/KernelA.HPP,2756"$0 0003 0000000008 DefineStr +$LK,"MSF_FIXED ",A="FL:C:/Kernel/KernelA.HPP,205"$2 0000 0000000008 DefineStr +$LK,"MSF_INACTIVE ",A="FL:C:/Kernel/KernelA.HPP,204"$1 0000 0000000008 DefineStr +$LK,"MSGF_ALLOW_KEY_DESC ",A="FL:C:/Kernel/KernelA.HPP,3135"$63 0001 0000000008 DefineStr +$LK,"MSG_CMD ",A="FL:C:/Kernel/KernelA.HPP,3113"$1 0000 0000000008 DefineStr +$LK,"MSG_FOCUS ",A="FL:C:/Kernel/KernelA.HPP,3125"$13 0000 0000000008 DefineStr +$LK,"MSG_IP_L_DOWN ",A="FL:C:/Kernel/KernelA.HPP,3117"$5 0000 0000000008 DefineStr +$LK,"MSG_IP_L_DOWN_UP ",A="FL:C:/Kernel/KernelA.HPP,3130"$-5 0000 0000000008 DefineStr +$LK,"MSG_IP_L_D_DOWN ",A="FL:C:/Kernel/KernelA.HPP,3119"$7 0000 0000000008 DefineStr +$LK,"MSG_IP_L_D_DOWN_UP ",A="FL:C:/Kernel/KernelA.HPP,3131"$-7 0000 0000000008 DefineStr +$LK,"MSG_IP_L_D_UP ",A="FL:C:/Kernel/KernelA.HPP,3120"$8 0000 0000000008 DefineStr +$LK,"MSG_IP_L_UP ",A="FL:C:/Kernel/KernelA.HPP,3118"$6 0000 0000000008 DefineStr +$LK,"MSG_IP_MOVE ",A="FL:C:/Kernel/KernelA.HPP,3116"$4 0000 0000000008 DefineStr +$LK,"MSG_IP_R_DOWN ",A="FL:C:/Kernel/KernelA.HPP,3121"$9 0000 0000000008 DefineStr +$LK,"MSG_IP_R_DOWN_UP ",A="FL:C:/Kernel/KernelA.HPP,3132"$-9 0000 0000000008 DefineStr +$LK,"MSG_IP_R_D_DOWN ",A="FL:C:/Kernel/KernelA.HPP,3123"$11 0000 0000000008 DefineStr +$LK,"MSG_IP_R_D_DOWN_UP ",A="FL:C:/Kernel/KernelA.HPP,3133"$-11 0000 0000000008 DefineStr +$LK,"MSG_IP_R_D_UP ",A="FL:C:/Kernel/KernelA.HPP,3124"$12 0000 0000000008 DefineStr +$LK,"MSG_IP_R_UP ",A="FL:C:/Kernel/KernelA.HPP,3122"$10 0000 0000000008 DefineStr +$LK,"MSG_KEY_DOWN ",A="FL:C:/Kernel/KernelA.HPP,3114"$2 0009 0000000008 DefineStr +$LK,"MSG_KEY_DOWN_UP ",A="FL:C:/Kernel/KernelA.HPP,3129"$-2 0000 0000000008 DefineStr +$LK,"MSG_KEY_UP ",A="FL:C:/Kernel/KernelA.HPP,3115"$3 0003 0000000008 DefineStr +$LK,"MSG_MOVE ",A="FL:C:/Kernel/KernelA.HPP,3127"$15 0000 0000000008 DefineStr +$LK,"MSG_NULL ",A="FL:C:/Kernel/KernelA.HPP,3112"$0 0002 0000000008 DefineStr +$LK,"MSG_RESIZE ",A="FL:C:/Kernel/KernelA.HPP,3126"$14 0000 0000000008 DefineStr +$LK,"MSize ",A="FL:C:/Kernel/MemB.CPP.Z,370"$0000004CB5 0008 Funct Res +$LK,"MSize2 ",A="FL:C:/Kernel/MemB.CPP.Z,371"$0000004CDC 0002 Funct Res +$LK,"MStrPrint ",A="FL:C:/Kernel/StrPrint.CPP.Z,903",BI=372$000000BDD6 0015 0000000045 Funct Export Res +$LK,"MStrUtil ",A="FL:C:/Kernel/StrB.CPP.Z,58",BI=373$0000006E4E 0008 0000000078 Funct Export Res +$LK,"MT_CD ",A="FL:C:/Kernel/KernelA.HPP,2444"$1 0001 0000000008 DefineStr +$LK,"MT_DVD ",A="FL:C:/Kernel/KernelA.HPP,2445"$2 0001 0000000008 DefineStr +$LK,"Man ",A="FL:C:/Kernel/PSect.CPP.Z,287",BI=374$0000028442 0000 000000009A Funct Export Res +$LK,"MapDrv ",A="FL:C:/Kernel/Dsk/DskB.CPP.Z,1",BI=375$00000235B0 0000 0000000061 Funct Export Res +$LK,"Max ",A="FL:C:/Kernel/KMathB.CPP.Z,18",BI=376$0000004FDA 0000 0000000020 Funct Export Res +$LK,"MaxI64 ",A="FL:C:/Kernel/KernelB.HPP,72"$00000000AF 0002 Funct Public +$LK,"MaxU64 ",A="FL:C:/Kernel/KernelB.HPP,73"$00000000B0 0000 Funct Public +$LK,"Mem2MegAlloc ",A="FL:C:/Kernel/MemA.CPP.Z,296",BI=377$0000003C5B 0002 0000000216 Funct Export Res +$LK,"Mem2MegFree ",A="FL:C:/Kernel/MemA.CPP.Z,449",BI=378$0000003F93 0000 00000000BE Funct Export Res +$LK,"Mem2MegUncachedAlloc",A="FL:C:/Kernel/MemA.CPP.Z,401",BI=379$0000003E73 0001 000000008B Funct Export Res +$LK,"Mem2MegWriteThruAlloc",A="FL:C:/Kernel/MemA.CPP.Z,425",BI=380$0000003F03 0000 000000008B Funct Export Res +$LK,"Mem32DevAlloc ",A="FL:C:/Kernel/MemC.CPP.Z,165",BI=381$0000005DF1 0000 00000000E9 Funct Export Res +$LK,"Mem32DevFree ",A="FL:C:/Kernel/MemC.CPP.Z,198",BI=382$0000005EE1 0000 0000000060 Funct Export Res +$LK,"Mem32DevInit ",A="FL:C:/Kernel/MemC.CPP.Z,104",BI=383$0000005C39 0001 00000000BA Funct Export Res +$LK,"Mem32DevIns ",A="FL:C:/Kernel/MemC.CPP.Z,75",BI=384$0000005B21 0002 0000000114 Funct Export Res +$LK,"Mem512Alloc ",A="FL:C:/Kernel/MemA.CPP.Z,192",BI=385$0000003A53 0001 000000015E Funct Export Res +$LK,"Mem512Free ",A="FL:C:/Kernel/MemA.CPP.Z,265",BI=386$0000003BB3 0001 00000000A3 Funct Export Res +$LK,"Mem512TaskAlloc ",A="FL:C:/Kernel/MemA.CPP.Z,477",BI=387$0000004053 0002 00000000CC Funct Export Res +$LK,"Mem512TaskFree ",A="FL:C:/Kernel/MemA.CPP.Z,517",BI=388$0000004123 0002 0000000054 Funct Export Res +$LK,"Mem64DevAlloc ",A="FL:C:/Kernel/MemC.CPP.Z,215",BI=389$0000005F41 0000 000000008B Funct Export Res +$LK,"Mem64DevFree ",A="FL:C:/Kernel/MemC.CPP.Z,232",BI=390$0000005FD1 0000 000000004D Funct Export Res +$LK,"MemCmp ",A="FL:C:/Kernel/KernelB.HPP,134"$0000001EBD 0000 Funct Public Res +$LK,"MemCpy ",A="FL:C:/Kernel/KernelB.HPP,135"$0000001E9F 0044 Funct Public Res +$LK,"MemLowPagesProtect ",A="FL:C:/Kernel/MemC.CPP.Z,132",BI=391$0000005CF9 0001 0000000058 Funct Export Res +$LK,"MemPagePresentMark ",A="FL:C:/Kernel/MemA.CPP.Z,180",BI=392$00000039F3 0005 0000000059 Funct Export Res +$LK,"MemPageSize ",A="FL:C:/Kernel/MemA.CPP.Z,164",BI=393$000000398B 0006 0000000023 Funct Export Res +$LK,"MemPageTable ",A="FL:C:/Kernel/MemA.CPP.Z,172",BI=394$00000039B3 0008 000000003D Funct Export Res +$LK,"MemPagesNotPresentMark",A="FL:C:/Kernel/MemC.CPP.Z,144",BI=395$0000005D51 0001 000000009E Funct Export Res +$LK,"MemSet ",A="FL:C:/Kernel/KernelB.HPP,136"$0000001E2C 0040 Funct Public Res +$LK,"MemSetI64 ",A="FL:C:/Kernel/KernelB.HPP,137"$0000001E81 0000 Funct Public Res +$LK,"MemSetU16 ",A="FL:C:/Kernel/KernelB.HPP,138"$0000001E48 0000 Funct Public Res +$LK,"MemSetU32 ",A="FL:C:/Kernel/KernelB.HPP,139"$0000001E65 0000 Funct Public Res +$LK,"MemSetU8 ",A="FL:C:/Kernel/KernelB.HPP,140"$0000001E2C 0000 Funct Public Res +$LK,"Min ",A="FL:C:/Kernel/KMathB.CPP.Z,10",BI=396$0000004FBA 0000 0000000020 Funct Export Res +$LK,"MinI64 ",A="FL:C:/Kernel/KernelB.HPP,74"$00000000AD 0001 Funct Public +$LK,"MinU64 ",A="FL:C:/Kernel/KernelB.HPP,75"$00000000AE 0000 Funct Public +$LK,"MkDir ",A="FL:C:/Kernel/Dsk/DskC.CPP.Z,82",BI=397$0000025760 0000 000000017C Funct Export Res +$LK,"ModU64 ",A="FL:C:/Kernel/KernelB.HPP,76"$00000000B1 000C Funct Public +$LK,"Mount ",A="FL:C:/Kernel/Dsk/DskAddDev.CPP.Z,173",BI=398$000001C7EB 0000 00000006EE Funct Export Res +$LK,"MouseDriverInstall ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,235",BI=399$0000013243 0002 00000000DD Funct Export Res +$LK,"MouseGetDevType ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,26",BI=400$0000012A53 0002 000000003A Funct Export Res +$LK,"MouseHandler ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,176",BI=401$0000012FFB 0001 000000013E Funct Export Res +$LK,"MouseIPSet ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,213",BI=402$000001313B 0000 00000000BE Funct Export Res +$LK,"MouseIntHandler ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,13",BI=403$0000012A03 0001 0000000049 Funct Export Res +$LK,"MousePktRead ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,1",BI=404$0000012963 0002 000000009A Funct Export Res +$LK,"MouseRst ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,37",BI=405$0000012A93 0001 000000029A Funct Export Res +$LK,"MouseSpeedSet ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,130",BI=406$0000012D33 0001 000000009E Funct Export Res +$LK,"MouseUpdatePost ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,146",BI=407$0000012E13 0002 00000001E4 Funct Export Res +$LK,"MouseUpdatePre ",A="FL:C:/Kernel/KbdMouse/Mouse.CPP.Z,139",BI=408$0000012DD3 0002 000000003A Funct Export Res +$LK,"Msg ",A="FL:C:/Kernel/SrvCmd.CPP.Z,261",BI=409$0000015B1B 0000 0000000036 Funct Export Res +$LK,"Mute ",A="FL:C:/Kernel/KMisc.CPP.Z,204",BI=410$000000E7FE 0001 000000004D Funct Export Res +$LK,"NORMAL_KEY_SCAN_DECODE_TABLE",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,3"$0000011053 0003 ExportSysSym Export +$LK,"NULL ",A="FL:C:/Kernel/KernelA.HPP,17"$0 0120 0000000008 DefineStr +$LK,"NUM_BLKDEVS ",A="FL:C:/Kernel/KernelA.HPP,2557"$32 0007 0000000008 DefineStr +$LK,"NUM_COLORS ",A="FL:C:/Kernel/KernelA.HPP,2863"$16 0000 0000000008 DefineStr +$LK,"NUM_DRVS ",A="FL:C:/Kernel/KernelA.HPP,2608"$32 000A 0000000008 DefineStr +$LK,"NUM_PROGRESS_BARS ",A="FL:C:/Kernel/KernelA.HPP,3797"$4 0001 0000000008 DefineStr +$LK,"NUM_REGS ",A="FL:C:/Kernel/KernelA.HPP,2051"$16 0000 0000000008 DefineStr +$LK,"NUM_SYS_SEMAS ",A="FL:C:/Kernel/KernelA.HPP,606"$21 0002 0000000008 DefineStr +$LK,"Name2DirCluster ",A="FL:C:/Kernel/Dsk/DskA.CPP.Z,583",BI=411$000001BCBB 0011 00000001E4 Funct Export Res +$LK,"Name2ParentDirCluster",A="FL:C:/Kernel/Dsk/DskA.CPP.Z,627",BI=412$000001BEA3 0001 00000001FD Funct Export Res +$LK,"Now ",A="FL:C:/Kernel/Date.CPP.Z,190",BI=413$0000009A6E 000C 0000000025 Funct Export Res +$LK,"NowDateTimeStruct ",A="FL:C:/Kernel/Date.CPP.Z,132",BI=414$0000009916 0001 0000000158 Funct Export Res +$LK,"OC_ADDR_SIZE_PREFIX ",A="FL:C:/Kernel/KernelA.HPP,1663"$0x67 0000 0000000008 DefineStr +$LK,"OC_BPT ",A="FL:C:/Kernel/KernelA.HPP,1666"$0xCC 0002 0000000008 DefineStr +$LK,"OC_CALL ",A="FL:C:/Kernel/KernelA.HPP,1667"$0xE8 0000 0000000008 DefineStr +$LK,"OC_JMP_REL8 ",A="FL:C:/Kernel/KernelA.HPP,1668"$0xEB 0001 0000000008 DefineStr +$LK,"OC_LOCK_PREFIX ",A="FL:C:/Kernel/KernelA.HPP,1664"$0xF0 0000 0000000008 DefineStr +$LK,"OC_NOP ",A="FL:C:/Kernel/KernelA.HPP,1665"$0x90 0009 0000000008 DefineStr +$LK,"OC_NOP2 ",A="FL:C:/Kernel/KernelA.HPP,1669"$(OC_NOP<<8 0000 0000000020 DefineStr +$LK,"OC_OP_SIZE_PREFIX ",A="FL:C:/Kernel/KernelA.HPP,1662"$0x66 0000 0000000008 DefineStr +$LK,"ODEF_HAS_MASSES ",A="FL:C:/Kernel/KernelA.HPP,237"$1 0000 0000000008 DefineStr +$LK,"ODEF_PAUSED ",A="FL:C:/Kernel/KernelA.HPP,238"$2 0000 0000000008 DefineStr +$LK,"ODEF_STARTED ",A="FL:C:/Kernel/KernelA.HPP,239"$4 0000 0000000008 DefineStr +$LK,"OFF ",A="FL:C:/Kernel/KernelA.HPP,21"$0 0019 0000000008 DefineStr +$LK,"OM_CB ",A="FL:C:/Kernel/KernelA.HPP,1770"$1 0000 0000000008 DefineStr +$LK,"OM_CD ",A="FL:C:/Kernel/KernelA.HPP,1772"$3 0000 0000000008 DefineStr +$LK,"OM_CP ",A="FL:C:/Kernel/KernelA.HPP,1773"$4 0000 0000000008 DefineStr +$LK,"OM_CW ",A="FL:C:/Kernel/KernelA.HPP,1771"$2 0000 0000000008 DefineStr +$LK,"OM_IB ",A="FL:C:/Kernel/KernelA.HPP,1774"$5 0000 0000000008 DefineStr +$LK,"OM_ID ",A="FL:C:/Kernel/KernelA.HPP,1776"$7 0000 0000000008 DefineStr +$LK,"OM_IW ",A="FL:C:/Kernel/KernelA.HPP,1775"$6 0000 0000000008 DefineStr +$LK,"OM_NO ",A="FL:C:/Kernel/KernelA.HPP,1769"$0 0000 0000000008 DefineStr +$LK,"ON ",A="FL:C:/Kernel/KernelA.HPP,20"$1 0013 0000000008 DefineStr +$LK,"OPTF_ECHO ",A="FL:C:/Kernel/KernelA.HPP,1467"$(1<r10 0000 0000000008 DefineStr +$LK,"_R11 ",A="FL:C:/Kernel/KernelA.HPP,3326"$Fs->r11 0000 0000000008 DefineStr +$LK,"_R12 ",A="FL:C:/Kernel/KernelA.HPP,3327"$Fs->r12 0000 0000000008 DefineStr +$LK,"_R13 ",A="FL:C:/Kernel/KernelA.HPP,3328"$Fs->r13 0000 0000000008 DefineStr +$LK,"_R14 ",A="FL:C:/Kernel/KernelA.HPP,3329"$Fs->r14 0000 0000000008 DefineStr +$LK,"_R15 ",A="FL:C:/Kernel/KernelA.HPP,3330"$Fs->r15 0000 0000000008 DefineStr +$LK,"_R8 ",A="FL:C:/Kernel/KernelA.HPP,3323"$Fs->r8 0000 0000000008 DefineStr +$LK,"_R9 ",A="FL:C:/Kernel/KernelA.HPP,3324"$Fs->r9 0000 0000000008 DefineStr +$LK,"_RAX ",A="FL:C:/Kernel/KernelA.HPP,3314"$Fs->rax 0000 0000000008 DefineStr +$LK,"_RBP ",A="FL:C:/Kernel/KernelA.HPP,3320"$Fs->rbp 0000 0000000008 DefineStr +$LK,"_RBX ",A="FL:C:/Kernel/KernelA.HPP,3315"$Fs->rbx 0000 0000000008 DefineStr +$LK,"_RCX ",A="FL:C:/Kernel/KernelA.HPP,3316"$Fs->rcx 0000 0000000008 DefineStr +$LK,"_RDI ",A="FL:C:/Kernel/KernelA.HPP,3319"$Fs->rdi 0000 0000000008 DefineStr +$LK,"_RDX ",A="FL:C:/Kernel/KernelA.HPP,3317"$Fs->rdx 0000 0000000008 DefineStr +$LK,"_REP_IN_U16 ",A="FL:C:/Kernel/KUtils.CPP.Z,265"$0000002097 0001 ExportSysSym Export +$LK,"_REP_IN_U32 ",A="FL:C:/Kernel/KUtils.CPP.Z,254"$000000207F 0001 ExportSysSym Export +$LK,"_REP_IN_U8 ",A="FL:C:/Kernel/KUtils.CPP.Z,276"$00000020B0 0001 ExportSysSym Export +$LK,"_REP_OUT_U16 ",A="FL:C:/Kernel/KUtils.CPP.Z,298"$00000020E0 0001 ExportSysSym Export +$LK,"_REP_OUT_U32 ",A="FL:C:/Kernel/KUtils.CPP.Z,287"$00000020C8 0001 ExportSysSym Export +$LK,"_REP_OUT_U8 ",A="FL:C:/Kernel/KUtils.CPP.Z,309"$00000020F9 0001 ExportSysSym Export +$LK,"_RET ",A="FL:C:/Kernel/KUtils.CPP.Z,458"$0000002248 0003 ExportSysSym Export +$LK,"_RIP ",A="FL:C:/Kernel/KernelA.HPP,3322"$Fs->rip 0000 0000000008 DefineStr +$LK,"_ROUND ",A="FL:C:/Kernel/KMathA.CPP.Z,381"$00000025D7 0001 ExportSysSym Export +$LK,"_RSI ",A="FL:C:/Kernel/KernelA.HPP,3318"$Fs->rsi 0000 0000000008 DefineStr +$LK,"_RSP ",A="FL:C:/Kernel/KernelA.HPP,3321"$Fs->rsp 0000 0000000008 DefineStr +$LK,"_SAVE_EXCEPT_REGS ",A="FL:C:/Kernel/Except.CPP.Z,27"$0000010677 0001 ExportSysSym Export +$LK,"_SET_MSR ",A="FL:C:/Kernel/KUtils.CPP.Z,460"$0000002249 0001 ExportSysSym Export +$LK,"_SIGN ",A="FL:C:/Kernel/KMathA.CPP.Z,348"$000000257E 0001 ExportSysSym Export +$LK,"_SQR ",A="FL:C:/Kernel/KMathA.CPP.Z,338"$000000256A 0000 ExportSysSym Export +$LK,"_STRCMP ",A="FL:C:/Kernel/StrA.CPP.Z,87"$00000029F1 0001 ExportSysSym Export +$LK,"_STRCPY ",A="FL:C:/Kernel/StrA.CPP.Z,66"$00000029C9 0001 ExportSysSym Export +$LK,"_STRICMP ",A="FL:C:/Kernel/StrA.CPP.Z,118"$0000002A2F 0001 ExportSysSym Export +$LK,"_STRIMATCH ",A="FL:C:/Kernel/StrA.CPP.Z,263"$0000002B75 0001 ExportSysSym Export +$LK,"_STRMATCH ",A="FL:C:/Kernel/StrA.CPP.Z,224"$0000002B20 0001 ExportSysSym Export +$LK,"_STRNCMP ",A="FL:C:/Kernel/StrA.CPP.Z,155"$0000002A82 0001 ExportSysSym Export +$LK,"_STRNICMP ",A="FL:C:/Kernel/StrA.CPP.Z,184"$0000002AC4 0001 ExportSysSym Export +$LK,"_SYS_HLT ",A="FL:C:/Kernel/KUtils.CPP.Z,470"$0000002263 0005 ExportSysSym Export +$LK,"_TAKE_EXCEPT ",A="FL:C:/Kernel/Except.CPP.Z,21"$0000010665 0001 ExportSysSym Export +$LK,"_TASK_CONTEXT_RESTORE",A="FL:C:/Kernel/Sched.CPP.Z,98"$0000005506 0003 ExportSysSym Export +$LK,"_TASK_END_NOW ",A="FL:C:/Kernel/Sched.CPP.Z,154"$00000055B6 0001 ExportSysSym Export +$LK,"_TEST_EXCEPT ",A="FL:C:/Kernel/Except.CPP.Z,5"$000001062E 0001 ExportSysSym Export +$LK,"_TRUNC ",A="FL:C:/Kernel/KMathA.CPP.Z,401"$0000002608 0001 ExportSysSym Export +$LK,"_XCHG_I64 ",A="FL:C:/Kernel/KUtils.CPP.Z,185"$0000001FE5 0001 ExportSysSym Export +$LK,"_XCHG_U16 ",A="FL:C:/Kernel/KUtils.CPP.Z,201"$0000002009 0001 ExportSysSym Export +$LK,"_XCHG_U32 ",A="FL:C:/Kernel/KUtils.CPP.Z,193"$0000001FF8 0001 ExportSysSym Export +$LK,"_XCHG_U8 ",A="FL:C:/Kernel/KUtils.CPP.Z,209"$000000201D 0001 ExportSysSym Export +$LK,"_YIELD ",A="FL:C:/Kernel/Sched.CPP.Z,168"$00000055E1 0001 ExportSysSym Export +$LK,"__DATE__ ",A="FL:C:/Kernel/KernelA.HPP,1923"$#exe{Strea 0000 0000000028 DefineStr +$LK,"__DEPTH__ ",A="FL:C:/Kernel/KernelA.HPP,1926"$#exe{Strea 0000 0000000048 DefineStr +$LK,"__DIR__ ",A="FL:C:/Kernel/KernelA.HPP,1928"$#exe{Strea 0000 0000000018 DefineStr +$LK,"__FILE__ ",A="FL:C:/Kernel/KernelA.HPP,1927"$#exe{Strea 0000 0000000040 DefineStr +$LK,"__LINE__ ",A="FL:C:/Kernel/KernelA.HPP,1925"$#exe{Strea 0000 0000000040 DefineStr +$LK,"__TIME__ ",A="FL:C:/Kernel/KernelA.HPP,1924"$#exe{Strea 0000 0000000028 DefineStr +$LK,"adam_task ",A="FL:C:/Kernel/KGlbls.CPP.Z,7"$0000004210 0019 0000000008 GlbVar Export +$LK,"ans ",A="FL:C:/Kernel/KernelA.HPP,3311"$(Fs->answe 0000 0000000010 DefineStr +$LK,"ansf ",A="FL:C:/Kernel/KernelA.HPP,3312"$(Fs->answe 0000 0000000018 DefineStr +$LK,"c32_eax ",A="FL:C:/Kernel/BIOS32.CPP.Z,152"$00000166EF 0008 0000000004 GlbVar Export +$LK,"c32_ebx ",A="FL:C:/Kernel/BIOS32.CPP.Z,153"$00000166F3 0009 0000000004 GlbVar Export +$LK,"c32_ecx ",A="FL:C:/Kernel/BIOS32.CPP.Z,154"$00000166F7 0007 0000000004 GlbVar Export +$LK,"c32_edi ",A="FL:C:/Kernel/BIOS32.CPP.Z,157"$0000016703 0006 0000000004 GlbVar Export +$LK,"c32_edx ",A="FL:C:/Kernel/BIOS32.CPP.Z,155"$00000166FB 0000 0000000004 GlbVar Export +$LK,"c32_eflags ",A="FL:C:/Kernel/BIOS32.CPP.Z,158"$0000016707 0000 0000000004 GlbVar Export +$LK,"c32_esi ",A="FL:C:/Kernel/BIOS32.CPP.Z,156"$00000166FF 0001 0000000004 GlbVar Export +$LK,"chars_bitmap_alpha ",A="FL:C:/Kernel/StrA.CPP.Z,319"$0000002BE4 0001 0000000040 GlbVar Export +$LK,"chars_bitmap_alpha_numeric",A="FL:C:/Kernel/StrA.CPP.Z,323"$0000002C24 0003 0000000040 GlbVar Export +$LK,"chars_bitmap_alpha_numeric_no_at",A="FL:C:/Kernel/StrA.CPP.Z,327"$0000002C64 0000 0000000040 GlbVar Export +$LK,"chars_bitmap_dec_numeric",A="FL:C:/Kernel/StrA.CPP.Z,339"$0000002D24 0003 0000000040 GlbVar Export +$LK,"chars_bitmap_displayable",A="FL:C:/Kernel/StrA.CPP.Z,368"$0000002F64 0001 0000000040 GlbVar Export +$LK,"chars_bitmap_filename",A="FL:C:/Kernel/StrA.CPP.Z,335"$0000002CE4 0002 0000000040 GlbVar Export +$LK,"chars_bitmap_getkey ",A="FL:C:/Kernel/StrA.CPP.Z,360"$0000002EE4 0001 0000000040 GlbVar Export +$LK,"chars_bitmap_hex_numeric",A="FL:C:/Kernel/StrA.CPP.Z,342"$0000002D64 0001 0000000040 GlbVar Export +$LK,"chars_bitmap_non_eol",A="FL:C:/Kernel/StrA.CPP.Z,376"$0000002FE4 0000 0000000040 GlbVar Export +$LK,"chars_bitmap_non_eol_white_space",A="FL:C:/Kernel/StrA.CPP.Z,348"$0000002DE4 0000 0000000040 GlbVar Export +$LK,"chars_bitmap_printable",A="FL:C:/Kernel/StrA.CPP.Z,364"$0000002F24 0001 0000000040 GlbVar Export +$LK,"chars_bitmap_safe_dollar",A="FL:C:/Kernel/StrA.CPP.Z,372"$0000002FA4 0001 0000000040 GlbVar Export +$LK,"chars_bitmap_white_space",A="FL:C:/Kernel/StrA.CPP.Z,345"$0000002DA4 0007 0000000040 GlbVar Export +$LK,"chars_bitmap_word ",A="FL:C:/Kernel/StrA.CPP.Z,331"$0000002CA4 0000 0000000040 GlbVar Export +$LK,"chars_bitmap_zero_cr_nl_cursor",A="FL:C:/Kernel/StrA.CPP.Z,351"$0000002E24 0000 0000000040 GlbVar Export +$LK,"chars_bitmap_zero_tab_ff_cr_nl_cursor",A="FL:C:/Kernel/StrA.CPP.Z,354"$0000002E64 0000 0000000040 GlbVar Export +$LK,"chars_bitmap_zero_tab_ff_cr_nl_cursor_dollar",A="FL:C:/Kernel/StrA.CPP.Z,357"$0000002EA4 0000 0000000040 GlbVar Export +$LK,"cnts ",A="FL:C:/Kernel/KGlbls.CPP.Z,17"$0000004280 0021 0000000041 GlbVar Export +$LK,"cpu_structs ",A="FL:C:/Kernel/KernelB.HPP,181"$00000016F8 000C 0000000008 GlbVar Public Export +$LK,"dbg ",A="FL:C:/Kernel/KGlbls.CPP.Z,25"$0000004820 001E 0000000040 GlbVar Export +$LK,"dev ",A="FL:C:/Kernel/KGlbls.CPP.Z,23"$0000004700 0020 00000000F0 GlbVar Export +$LK,"dsk ",A="FL:C:/Kernel/KGlbls.CPP.Z,26"$0000004860 0047 00000001DD GlbVar Export +$LK,"eps ",A="FL:C:/Kernel/KernelA.HPP,55"$(0x3CB0000 0000 0000000020 DefineStr +$LK,"exp_1 ",A="FL:C:/Kernel/KernelA.HPP,49"$(0x4005BF0 0000 0000000020 DefineStr +$LK,"ext ",A="FL:C:/Kernel/KernelB.HPP,36"$00000015D8 0003 0000000008 GlbVar Public Export +$LK,"fat_long_name_map ",A="FL:C:/Kernel/Dsk/FileSysFAT.CPP.Z,187"$0000020F1B 0006 000000000D GlbVar Export +$LK,"fp_doc_put ",A="FL:C:/Kernel/KGlbls.CPP.Z,30"$0000004A50 0002 0000000008 GlbVar Export +$LK,"fp_getstr2 ",A="FL:C:/Kernel/KGlbls.CPP.Z,28"$0000004A40 0005 0000000008 GlbVar Export +$LK,"fp_set_std_palette ",A="FL:C:/Kernel/KGlbls.CPP.Z,31"$0000004A58 0002 0000000008 GlbVar Export +$LK,"fp_update_ctrls ",A="FL:C:/Kernel/KGlbls.CPP.Z,29"$0000004A48 0002 0000000008 GlbVar Export +$LK,"inf ",A="FL:C:/Kernel/KernelA.HPP,45"$(0x7FF0000 0000 0000000020 DefineStr +$LK,"ip ",A="FL:C:/Kernel/KGlbls.CPP.Z,18"$00000042C8 0052 00000000C0 GlbVar Export +$LK,"ip_grid ",A="FL:C:/Kernel/KGlbls.CPP.Z,19"$0000004448 001F 0000000050 GlbVar Export +$LK,"ip_last ",A="FL:C:/Kernel/KGlbls.CPP.Z,18"$0000004388 0001 00000000C0 GlbVar Export +$LK,"kbd ",A="FL:C:/Kernel/KGlbls.CPP.Z,21"$00000045A8 003A 000000007A GlbVar Export +$LK,"keydev ",A="FL:C:/Kernel/KGlbls.CPP.Z,22"$0000004628 0015 00000000D8 GlbVar Export +$LK,"local_time_offset ",A="FL:C:/Kernel/KGlbls.CPP.Z,13"$0000004240 0009 0000000008 GlbVar Export +$LK,"log10_2 ",A="FL:C:/Kernel/KernelA.HPP,52"$(0x3FD3441 0000 0000000020 DefineStr +$LK,"log2_10 ",A="FL:C:/Kernel/KernelA.HPP,50"$(0x400A934 0000 0000000020 DefineStr +$LK,"log2_e ",A="FL:C:/Kernel/KernelA.HPP,51"$(0x3FF7154 0000 0000000020 DefineStr +$LK,"loge_2 ",A="FL:C:/Kernel/KernelA.HPP,53"$(0x3FE62E4 0000 0000000020 DefineStr +$LK,"mon_start_days1 ",A="FL:C:/Kernel/Date.CPP.Z,3"$00000093EE 0003 0000000018 GlbVar Export +$LK,"mon_start_days2 ",A="FL:C:/Kernel/Date.CPP.Z,5"$0000009406 0003 0000000018 GlbVar Export +$LK,"mouse ",A="FL:C:/Kernel/KGlbls.CPP.Z,20"$0000004498 005F 0000000083 GlbVar Export +$LK,"mouse_last ",A="FL:C:/Kernel/KGlbls.CPP.Z,20"$0000004520 000C 0000000083 GlbVar Export +$LK,"mp_cnt ",A="FL:C:/Kernel/KernelB.HPP,182"$0000001700 0011 0000000008 GlbVar Public Export +$LK,"mp_cnt_initial ",A="FL:C:/Kernel/KernelB.HPP,183"$0000001708 0003 0000000008 GlbVar Export +$LK,"mp_cnt_lock ",A="FL:C:/Kernel/KernelB.HPP,184"$0000001710 0003 0000000008 GlbVar Export +$LK,"num_lock_map ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,174"$00000116E3 0001 0000000100 GlbVar Export +$LK,"pi ",A="FL:C:/Kernel/KernelA.HPP,47"$(0x400921F 0000 0000000020 DefineStr +$LK,"pow10_I64 ",A="FL:C:/Kernel/KGlbls.CPP.Z,14"$0000004248 0003 0000000008 GlbVar Export +$LK,"progress1 ",A="FL:C:/Kernel/KernelB.HPP,162"$00000015F0 0008 0000000008 GlbVar Public Export +$LK,"progress1_desc ",A="FL:C:/Kernel/KernelB.HPP,163"$0000001600 0005 0000000030 GlbVar Public Export +$LK,"progress1_max ",A="FL:C:/Kernel/KernelB.HPP,164"$00000015F8 0005 0000000008 GlbVar Public Export +$LK,"progress2 ",A="FL:C:/Kernel/KernelB.HPP,165"$0000001630 0000 0000000008 GlbVar Public Export +$LK,"progress2_desc ",A="FL:C:/Kernel/KernelB.HPP,166"$0000001640 0000 0000000030 GlbVar Public Export +$LK,"progress2_max ",A="FL:C:/Kernel/KernelB.HPP,167"$0000001638 0000 0000000008 GlbVar Public Export +$LK,"progress3 ",A="FL:C:/Kernel/KernelB.HPP,168"$0000001670 0000 0000000008 GlbVar Public Export +$LK,"progress3_desc ",A="FL:C:/Kernel/KernelB.HPP,169"$0000001680 0000 0000000030 GlbVar Public Export +$LK,"progress3_max ",A="FL:C:/Kernel/KernelB.HPP,170"$0000001678 0000 0000000008 GlbVar Public Export +$LK,"progress4 ",A="FL:C:/Kernel/KernelB.HPP,171"$00000016B0 0000 0000000008 GlbVar Public Export +$LK,"progress4_desc ",A="FL:C:/Kernel/KernelB.HPP,172"$00000016C0 0000 0000000030 GlbVar Public Export +$LK,"progress4_max ",A="FL:C:/Kernel/KernelB.HPP,173"$00000016B8 0000 0000000008 GlbVar Public Export +$LK,"reverse_bits_table ",A="FL:C:/Kernel/KGlbls.CPP.Z,11"$0000004230 0003 0000000008 GlbVar Export +$LK,"scan_code_map ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,154"$00000115E3 0001 0000000100 GlbVar Export +$LK,"set_bits_table ",A="FL:C:/Kernel/KGlbls.CPP.Z,12"$0000004238 0003 0000000008 GlbVar Export +$LK,"snd ",A="FL:C:/Kernel/KGlbls.CPP.Z,16"$0000004250 0006 0000000029 GlbVar Export +$LK,"sqrt2 ",A="FL:C:/Kernel/KernelA.HPP,54"$(0x3FF6A09 0000 0000000020 DefineStr +$LK,"sys_boot_base ",A="FL:C:/Kernel/KernelB.HPP,24"$0000000018 0004 0000000004 GlbVar Export +$LK,"sys_boot_patch_table_base",A="FL:C:/Kernel/KernelB.HPP,25"$0000000008 0001 0000000004 GlbVar Export +$LK,"sys_boot_src ",A="FL:C:/Kernel/KernelB.HPP,26"$0000000004 0001 0000000004 GlbVar Export +$LK,"sys_cache_line_width",A="FL:C:/Kernel/KernelB.HPP,216"$0000001740 0001 0000000008 GlbVar Public Export +$LK,"sys_clipboard_doc ",A="FL:C:/Kernel/KGlbls.CPP.Z,5"$0000004208 0000 0000000008 GlbVar Export +$LK,"sys_code_bp ",A="FL:C:/Kernel/KernelB.HPP,150"$00000015E0 0009 0000000008 GlbVar Public Export +$LK,"sys_compile_time ",A="FL:C:/Kernel/KernelB.HPP,158"$0000000010 0001 0000000008 GlbVar Public Export +$LK,"sys_ctrl_alt_flags ",A="FL:C:/Kernel/KernelB.HPP,159"$00000015D0 0005 0000000008 GlbVar Export +$LK,"sys_data_bp ",A="FL:C:/Kernel/KernelB.HPP,151"$00000015E8 0007 0000000008 GlbVar Public Export +$LK,"sys_focus_task ",A="FL:C:/Kernel/KernelB.HPP,177"$00000016F0 000C 0000000008 GlbVar Public Export +$LK,"sys_font_8x8 ",A="FL:C:/Kernel/Font8x8.CPP.Z,3"$0000006261 0001 0000000800 GlbVar Export +$LK,"sys_gdt ",A="FL:C:/Kernel/KernelB.HPP,217"$00000003E0 0003 0000001080 GlbVar Export +$LK,"sys_heap_base ",A="FL:C:/Kernel/KernelB.HPP,154"$00000015B8 0003 0000000008 GlbVar Export +$LK,"sys_heap_dbg ",A="FL:C:/Kernel/KernelB.HPP,141"$00000015CE 0000 0000000001 GlbVar Export +$LK,"sys_heap_init_flag ",A="FL:C:/Kernel/KernelB.HPP,142"$00000015CA 0000 0000000001 GlbVar Export +$LK,"sys_heap_init_val ",A="FL:C:/Kernel/KernelB.HPP,143"$00000015CB 0000 0000000001 GlbVar Export +$LK,"sys_heap_limit ",A="FL:C:/Kernel/KernelB.HPP,155"$00000015C0 0003 0000000008 GlbVar Export +$LK,"sys_macro_root ",A="FL:C:/Kernel/KGlbls.CPP.Z,3"$0000004180 0002 0000000080 GlbVar Export +$LK,"sys_macro_util_task ",A="FL:C:/Kernel/KGlbls.CPP.Z,4"$0000004200 0001 0000000008 GlbVar Export +$LK,"sys_mem_init_flag ",A="FL:C:/Kernel/KernelB.HPP,144"$00000015C8 0001 0000000001 GlbVar Export +$LK,"sys_mem_init_val ",A="FL:C:/Kernel/KernelB.HPP,145"$00000015C9 0001 0000000001 GlbVar Export +$LK,"sys_neg_powers_lets ",A="FL:C:/Kernel/StrPrint.CPP.Z,211"$000000A1A0 0001 0000000008 GlbVar Export +$LK,"sys_neg_powers_lst ",A="FL:C:/Kernel/StrPrint.CPP.Z,213"$000000A1F0 0000 0000000008 GlbVar Export +$LK,"sys_num_spawned_tasks",A="FL:C:/Kernel/KGlbls.CPP.Z,8"$0000004218 0001 0000000008 GlbVar Export +$LK,"sys_pci_busses ",A="FL:C:/Kernel/KernelB.HPP,191"$000000146A 0000 0000000002 GlbVar Public Export +$LK,"sys_pci_services ",A="FL:C:/Kernel/BIOS32.CPP.Z,159"$000001665F 0007 0000000004 GlbVar Export +$LK,"sys_pos_powers_lets ",A="FL:C:/Kernel/StrPrint.CPP.Z,210"$000000A188 0001 0000000008 GlbVar Export +$LK,"sys_pos_powers_lst ",A="FL:C:/Kernel/StrPrint.CPP.Z,212"$000000A1B8 0000 0000000008 GlbVar Export +$LK,"sys_progresses ",A="FL:C:/Kernel/KernelB.HPP,174"$00000015F0 0002 0000000100 GlbVar Public Export +$LK,"sys_run_level ",A="FL:C:/Kernel/KernelB.HPP,27"$000000000C 000C 0000000004 GlbVar Export +$LK,"sys_semas ",A="FL:C:/Kernel/KernelB.HPP,185"$0000001760 003A 0000000540 GlbVar Export +$LK,"sys_task_being_screen_updated",A="FL:C:/Kernel/KGlbls.CPP.Z,10"$0000004228 0001 0000000008 GlbVar Export +$LK,"sys_var_init_flag ",A="FL:C:/Kernel/KernelB.HPP,147"$00000015CC 0000 0000000001 GlbVar Export +$LK,"sys_var_init_val ",A="FL:C:/Kernel/KernelB.HPP,146"$00000015CD 0000 0000000001 GlbVar Export +$LK,"sys_winmgr_task ",A="FL:C:/Kernel/KGlbls.CPP.Z,10"$0000004220 0004 0000000008 GlbVar Export +$LK,"tS ",A="FL:C:/Kernel/KMisc.CPP.Z,122",BI=603$000000E4CE 0020 0000000057 Funct Export Res +$LK,"text ",A="FL:C:/Kernel/KGlbls.CPP.Z,24"$00000047F0 005E 0000000030 GlbVar Export +throw 00000107DB 0000 ExportSysSym +$LK,"throw ",A="FL:C:/Kernel/Except.CPP.Z,82",BI=604$00000107DB 0035 0000000164 Funct Export Res +$LK,"ã ",A="FL:C:/Kernel/KernelA.HPP,48"$(0x400921F 0000 0000000020 DefineStr +$LK,"ì ",A="FL:C:/Kernel/KernelA.HPP,46"$(0x7FF0000 0007 0000000020 DefineStr + „ˆzMzMƒM�M•M x|"M"M+M8M=M ”˜êMêMóMNN0%-’i’i–i›iµiÎiÓiÕi`ÓçZgZgfgvgygzgg‡gŠg�g£g¨g¶g½gËgËgËgËgÍgÍg ½ÁbObOkO}Oh““œª¹ÄÔäô€€"€2€B€c€e€t€ƒ€“€£€Ì€Ì€Ñ€,;BC‚C‚R‚^‚l‚u‚z‚€‚ l¢¹S†S†g†s†�†�†�†¸†Û†æ†ð†ù†‡‡‡;‡B‡F‡N‡R‡Z‡ +¤Chƒ‚ƒ‚¬‚±‚¼‚Æ‚ЂÜ‚Ü‚ä‚ ƒƒƒ$ƒ'ƒ+ƒ+ƒDƒZƒ]ƒ`ƒfƒmƒqƒ ƒ¤ƒ¬ƒ®ƒ¹ƒ¹ƒ¾ƒ¾ƒ̓݃ ¨Äêû¢û¢£#£-£I£P£]£e£r££´£»£ñ£¤!¤W¤g¤g¤Ф˜¤±¤ç¤ï¤ÿ¤¥J¥R¥R¥R¥]¥v¥Š¥Ž¥’¥ ˆ.L‹Œ‹Œ›Œ¦Œ±Œ¸Œ¸Œ׌ãŒòŒÿŒ ���&�,�3�3�7�7�7�7�D�G�W� Hëù“¥“¥º¥Õ¥ã¥î¥ò¥ö¥ú¥¦¦¦¦¦80:Ã�Ã�Ì�ô�‚#‚0‚:‚?‚Dk”k””§”Ê”×”ä”ï” •••€›·[�[�u�„�Œ�Ÿ�±�¼�È�ß�ä�ô�‘ ‘ ‘U‘Z‘Z‘x‘x‘�‘°‘¶‘Ø‘x€š � �(�*�8�8�F�Y���¤�²�Â�å�Í�ÿ� �4�9�9�9�K�N�Z�lüSŠSŠgŠpŠ�Š©ŠÌŠÛŠèŠóŠ‹#‹6‹6‹F‹F‹S‹e‹o‹w‹t-{‹{‹‹‹—‹ ‹±‹Ù‹ü‹ ŒŒ,Œ#ŒMŒaŒgŒiŒkŒqŒsŒ€ŒƒŒ‹Œ@‚Žë„ë„ù„!…D…Q…^…i…‹…“…™…@u�;„;„D„l„�„œ„©„´„ׄß„ä„X�¡›…›…°…º…¾…¾…æ… ††2†C†E†E†M†\ó›“›“©“®“¶“½““ê“ ””'”2”O”W”^”^”a”g”LM\[�[�d�d�s�‚�“�—�¤�º�¾�¾�Ã�¼@••1•9•C•O•]•m•••¸•Ç•ò•ö•þ•–0–S–a–q–|–§–·–¼–Ä–ï–ó–— +——!—/—/—9—C—<itãƒãƒ÷ƒþƒ„„ „,„2„8„<t›Ž›Ž³ŽÁŽÈŽËŽÎŽÒŽÙŽùŽ �X¸ÊÛ‘Û‘ý‘’’ +’’’&’3’=’@’C’I’W’h]sÃ�Ã�å�ë�ô�ô�ý� ŽŽDŽOŽWŽYŽkŽkŽkŽ|Ž‰Ž‰Ž—Žºû[‡[‡i‡q‡v‡|‡¤‡LJχׇâ‡ç‡ù‡ˆˆˆCˆJˆRˆTˆ]ˆlˆsˆšˆšˆ£ˆºˆɈêˆòˆ‰‰%‰5‰D‰T‰d‰t‰މ“‰›‰›‰ ‰®‰½‰Þ‰é‰ø‰ŠŠ(Š?Š?Š?ŠKŠQŠ €Ã‹ž‹ž¥ž¸žÄžÄžÕžÜžÜžðžùž +ŸŸ4Ÿ9ŸTŸ[Ÿ[ŸqŸ}Ÿ}Ÿ¤Ÿ§ŸÆŸåŸ  ' > @ Q h  ž ½ É à ÷ ü  ¡$¡;¡;¡C¡Q¡b¡y¡�¡¡¡¸¡Ï¡Ù¡â¡é¡ÿ¡¢"¢ú¢ xZt;œ;œiœmœqœˆœ˜œ®œÄœÖœòœ÷œ� � ���� �#�#�#�¾�!8uÃ�Ã�É�Ç�×�ò�þ�žž„ž"4£¬»Ç»ÇÉÇÎÇÙÇÜÇàÇæÇ#ˆA_C—C—i—m—u—{—„—Œ—’—•—¡—¡—Ë—Ø—â—å—è—ï—÷—ý— +˜ +˜ ˜$<$/K�K�Y�a�i�v���‹�º�¼�Â�%<#Ó€Ó€á€é€ñ€þ€ ��B�D�J�&¬Ëò[’[’}’ƒ’Œ’Œ’—’¦’³’·’Á’Ó’Ó’ã’ï’ô’ô’ “““!“3“3“3“;“I“W“a“d“j“w“„“„“–“'X¡³SaSaka~a’a¡aºaÁaÃaÏaèab bbb!b(<¾É£b£b¹bÌbàbæbccc#c)c_c)4´½#b#b7bIbObibpb†bŒbŸb*Ào›Æ~Æ~Þ~å~í~  &,,6=HMWkmxx‡�šž£§²¸»¾ÃÊÔä+$õúÞ‚Þ‚ç‚ð‚ö‚û‚,hÞô‚‚3‚B‚G‚W‚_‚_‚m‚w‚†‚Ž‚š‚©‚µ‚À‚ƂтԂ܂-,gnŽ~Ž~œ~¢~®~¹~½~Ã~.ì¦Ý&€&€@€H€P€_€p€r€‰€›€—€ª€º€À€Æ€Í€Ö€ô€ð€��*�;�>�C�I�i��Œ�“�ž�¢�§�²�½�Ã�Æ�Ì�Û�ì�ñ�ý�‚‚/4œ¥ææïý€€ €!€!€&€0$mrpp +pp p/p1(ïõ[e[eqe�eŸe¥eÀe2,çîãdãdñdeÿd'e-eTe3ˆú#¦#¦-¦/¦G¦U¦r¦{¦©¦¬¦µ¦ã¦æ¦ê¦ï¦û¦§$§'§0§R§U§U§X§c§j§q§44Ýæ{d{d�d¡d°dÁdÔdÚdãd5Hœª>ù>ùYù\ùlùwù}ùˆùˆùŒù–ù6d«À–ù–ù¯ù²ùÀùÀùÉùÔùÙùÜùìù÷ùýùúúú úú7,'.ââââ"â<âAâGâ8Tó!`!`/`<`I`g`i`p`w`…`‰`‹`•`�`9pw�RlRlZlfl|l‡l•lÂlÜlñlölýlmmm:0.vÚiÚiíióij jjjj$j)j3jGjXjljnj‰j¹jÐjæjñjkkk(k3k=kHkRk]kkkrk€k€kŠk£kËkÖkÞkøkýkÿk ll$l+l-l5lPl;4zƒÎ˜Î˜Þ˜à˜è˜ü˜™™™<D¾Ëžçžç­ç»çÊçÖçÝçìçøçøçþç=$‚‡&å&å*å7ålåxå> –kÃkÃ�Ã�×íÃÀÃÄÃÐÃîÃîÃüÃÄ +ÄÄÄÄ"Ä(Ä4Ä9Ä@ÄGÄNÄXÄdÄvÄ{Ä~ąąėħĮĻÄÚÄðÄÅÅ"Å:ÅnÅnÅuÅŅŇŇŇŇŇŇҜޝŶżÅÅÅËÅÍÅÍÅÔÅÞÅàÅàÅàÅãÅåÅåÅìÅïÅöÅöÅùÅþÅ ÆÆ$Æ*Æ?ÆBÆaÆaÆfÆfÆfÆmÆwÆÆÆÆŠÆ–Æ™Æ@Ç?(qwspsp|p�pœp®p®p³p@Ì9hã¨ã¨õ¨©©&©+©I©I©R©g©|©„©�©œ©¨©¸©½©©©É©ЩÙ©Û©Û©â©í© ª ªª#ª,ª=ª=ª=ªHªOªTª[ªuªxª†ªADs§s§|§‚§‚§�§¡§©§®§º§À§§§ǧBdãÂãÂóÂÃÃÃÃÃÃ)Ã2ÃCÃOÃRÃTÃWÃYÃYÃYÃeÃCˆš¸3¬3¬J¬M¬M¬^¬g¬q¬u¬x¬…¬ެެ˜¬˜¬ž¬¥¬©¬²¬²¬»¬À¬̬Þ¬à¬ê¬DL+#¨#¨2¨8¨8¨E¨W¨c¨k¨q¨v¨|¨~¨~¨„¨EX<N;Ñ;ÑEÑXÑkÑsѤÑÒ ÒF8is‹ª‹ª•ª�ª®ªê˪ΪЪÔªGPùXùX Y/Y/Y;YFYJYQY\Y`YhYiYqYH8qYqY‡Y”Y¦YºYÈYÑYÛYIx#˜#˜5˜D˜G˜h˜ˆ˜˜˜½˜͘Ö˜™™!™'™7™7™I™L™Q™Q™a™g™j™Í™JYÓ™Ó™ç™î™þ™ššš'šNšmšŒš˜š©š­š³šÁšÅšËšÙšÙšÙšøš›+›@›D›J›X›\›b›t›t›t›t›w›|›�›‡›˜›œ›¢›­›±›·››››Ç›Í›Þ›â›è›ó›÷›ý›œœœ;œKl]t–÷–÷·÷º÷È÷È÷Ô÷Û÷à÷ã÷é÷ì÷ô÷ù÷ù÷þ÷øøøøLTŠ›¶ø¶øÚøÝøëøëøÿøùù ù+ù+ù+ù/ù=ùM`u‰øø;øAøOøOøcønørøyø|ø†ø�ø�ø¡ø¡ø¡ø¥ø±øN$ˆ�ó ó ü  - -/ -8 -F -M -M -[ -d -äp:Rqïqï|ï‹ïšïµïÇïÓïáïêïùï ð'ð9ð^ðið~ð…ð…ðšð›ðŸðå$/4"Q"Q0QDQJQæ\ä÷&4BBZ`iq|†�¥¥¥¬¬­³çX ޜޜýœ�����/�:�>�A�A�G�J�X�è82<9d9dSdedod‰d“dél#:ÆoÆoÜoÞoíopp pppp-pmpzp„p”pžp©p¬pºpêDr³=³=»=Ü=à=ó=ü=>>ëd…š[[iv€€“›®°ÃÃÇÑÖÖÜìÜñ$»»ÎÕóó/DPz€…ªÇä  ; X u ’ ¯ Ì é  # @ ] z — ´ Ñ î  !(!E!b!|!–!°!Ê!â!â!â!ñ!R$íà{¯örörss@sJs\s_sgsjspsss‘sžs¤s±s¼sÁsÇsÙsÙsèsësõsøst#t)t6tAtFtLt^t^t^t^tititwtî\’>>>,>D>P>\>\>n>t>t>€>Œ>Ž>Ž>–>ïØ'Y»;»;Û;é;î;ø;ø;þ; -< -<<<<<*<-<1<=<=<I<O<\<k<m<m<m<p<u<�<�<�<¬<¯<Å<Å<È<Ë<Û<ðœªÍ«]«]Ã]Ò]à]ð]ö]ö]^ ^^^^,^3^4^@^F^L^O^X^Y^Y^e^g^s^ñ, Ó_Ó_ó_```òhYÇYÇiDŽDŽdždždžǎǟǨǹÇÅÇÈÇÊÇÍÇÏÇÏÇÏÇÛÇó<¢­û(û().)4)E)[)z)�)�)—)ôà7I´I´g´q´z´˜´˜´›´¢´¢´´´»´È´Û´ä´ð´ó´ø´µ/µ/µAµCµCµUµWµWµ`µ`µqµƒµ‰µŒµŒµ�µ”µœµ­µ´µºµ̵ϵëµëµðµðµðµ ¶õ`Òæ¹²¹²Ó²å²å²ò²û²³ ³ ³³0³J³J³J³T³ö88B~~,~B~M~R~`~m~v~‡~÷|+Fãã .5FMMccqy‡��²Õø##00JZø<6A&â&â<âOâ`ânâtâ|â†âŽâù@Õá6636C6H6k6Ž6²6¹6À6Å6Ñ6ú4‚‹ 2 22E2[2—2¥2©2ûP“£æŠæŠ‹ ‹‹‹$‹=‹H‹M‹V‹n‹x‹x‹�‹üHSa££§¶ÂÎÚèôû ý$Ûàfìfìpìƒìˆìþ$~í~íˆí›í íÿ0—Ÿ>ê>êGêQêtêtêyê0�—æéæéôéêêê1ê7ê|Ÿº~ê~ê‡ê”ê£ê´ê¿êåêúêëë ëë6ë6ëJëTë\ëeë}ë†ë†ë›ëÌÏþŒ2Œ2¨2®2¸2»2»2Ä2Ï2Ù2ã2ï2ñ2÷2þ233 333#3)3,3.393?3E3N3N3V3_3e3n3n3n3n3t3|33�3ÀÝ ËNËN÷NO.O5OAOMOTObO�O�O OªO²O¹OÁOËOÓOçOøO PP%P.P4P„P„T„W„`„c„t„t„t„{„ˆ„‹„�„�„ê„………… …"…*…:…:…C…R…`…p…~…‡…Ž…“…“…“…™…­… (‹X‹X”X�X£X¨X -<«X«X»X¾XÃXÆXÔXÚXÝXßXçX \fK`K`S`_`g`s`y`�`‹`®`®`À`Í`á`î`ö`?a…aŠaŠaœa©a½aÊaÏaÞabb'b-b2b2bDbQbebrbwb†bºbÁbÎbÔbÖbÖbÞbÞbëbccc@cMc]cbchcuc€c†c‘c‘c—c c«c»cÀcâcïcücddd!d:d ˆf„;d;dOdVdddddpd~d�dˆd¨d¨d«d­d­d²d²d´d´d´d¶d¿dÂdÅdÔd ,ëXëXôXþX YYYD‡”UUUUU+UNUUUdUsUxUzUzUL„“ÛdÛdódee8eEeXedeue}eƒe‡e™e4”�{U{UUŒU¨U½UÂUÜUÌg–îñîñ òò!ò'ò1ò1ò>òDòHòKòMòTò[òeòqòzòŽò£òÀò°òÕòÕò ó óó ó6óBóJóLófó�ó�óšóÐóÀœÈÞØÞØðØöØÙÙ Ù)ÙAÙEÙ]ÙaÙ{Ù{َٗ٢٫ٸÙÁÙÓÙÝÙêÙóÙõÙûÙÚ -Ú/Ú2ÚJÚZÚkÚoÚsÚ~Ú~Ú‚Ú‚Ú‚Ú±ÚTÈÙ¶Ú¶ÚÄÚËÚÖÚùÚÛÛÛ Û$Û2Û8Û;ÛGÛ8‹ÕFÇFÇ^ÇfÇtÇǃljÇ�Ç�DzǷǽÇÔÇÙÇßÇöÇûÇÈÈÈ#È1È5ÈQÈdÈtÈyȈȕȥȴÈÁÈÔÈÚÈáÈãÈöÈ ÉÉ"É4É4ÉGÉIÉ\É^ÉqÉsɆɆɢɹɿÉÅÉÐÉôÉ\8‹ÅÅ4Å:ÅAÅQÅXÅ`ÅfÅmŃő঩ŮűŶŹŹÅÉÅ×ÅÙÅëÅíÅúÅÿÅÆÆÆÆÆ'Æ5Æ8Æ:ÆFÆHÆhÆmÆtÆ}ƃƉÆ�ƓƓƣƱƳÆÛÆýÆÿÆÇÇÇÇ(Ç,Ç,ÇBÇì8.Ã.ÃLÃOÃRÃfÃnÃuÉÌÎññôÃÄÃÆÃÆÃÉÃËÃËÃÎÃåÃúÃÄ Ä)Ä3Ä;Ä;Ä;Ä=Ä=ÄBÄaÄgÄvăėĤĦĸÄÅÄÊÄÊÄÖÄÖÄãĿĿÄÅœb…¤6¤6Â6Å6Ý6Ý6ß6ð6ý67 7%7(73777777777B7W7Z7e7i7i7i7r7u7ƒ78.85505L5N5Y5[5[5c5T8Id5d5‚5ˆ5�5©5¯5´5Ò5Ô5â5è5ë5ù58ISü5ü5666+64696C6LSbD6D6^6n6~6‚6„6�6“6–6 6L®½‚O‚O˜O�O¶OÂOËOÍOÙOÜOßOéO8ÅÏD2D2X2Z2c2c2p2x2}2…2$§¬^Á^ÁrÁ€Á†Á <¯º~t~t’t•tžt®t³tÇtØt < ))(),)/):)X)\)a)|)!Ð -÷§F¥F¥g¥i¥€¥‰¥”¥Ÿ¥¡¥´¥Â¥Í¥Ø¥ì¥÷¥ú¥¦¦¦ ¦¦¦¦*¦?¦G¦J¦b¦r¦u¦{¦~¦‘¦¦¦®¦±¦É¦Ù¦Þ¦Þ¦æ¦æ¦ § § § §§§§§§§§§ § § §"§$§$§'§,§2§5§9§;§A§D§\§p§u§{§~§ƒ§–§±§³§É§É§É§Î§Î§Ð§Ð§Õ§Ø§þ§þ§þ§¨8¨=¨=¨U¨s¨x¨x¨�¨®¨°¨°¨È¨ä¨æ¨æ¨þ¨©©8©D©I©I©a©x©}©}©•©±©¶©¶©º©Ò©ð©ô©ö©ö©ú©ª0ª4ª4ªRªWªWªoª†ª�ª’ª’ªªªÁªÈªÖªæª -««««!«)«R«T«T«l«l«‘«²«Ñ«Ö«Ö«î«î«¬¬2¬V¬u¬–¬™¬ž¬ž¬¶¬Ê¬Ñ¬Ö¬á¬á¬ç¬ò¬­ ­­#­#­V­a­g­z­‚­‹­‹­—­›­›­¤­³­¼­¼­Å­Ï­ë­®,®2®G®O®[®e®e®}®®Š®¢®¤®Ä®Ä®É®É®ü®¯¯¯¯ ¯ ¯)¯8¯A¯A¯J¯P¯l¯w¯�¯‘¯œ¯´¯¶¯Ò¯Ò¯Ò¯â¯°°°°1°6°6°N°e°u°z°�°�°§°§°³°·°½°Æ°Õ°Þ°Þ°ç°ò° -± ±(±3±N±P±P±Y±q±|±’±Ÿ±§±È±Ê±Ò±ì±ï±ø±ý±²(²(²@²J²U²q²„²—²Ÿ²©²©²²²¶²É²þ² ³ ³ ³³&³*³=³r³r³t³t³Œ³–³ž³ž³§³«³¾³ó³´´´"´/´4´4´=´A´T´‰´—´ ´¥´¥´°´´´Ì´ã´ó´ø´µ&µ&µPµZµZµwµ{µŽµ–µ�µ¨µ­µ´µ´µ¹µìµ¶¶-¶7¶A¶A¶Q¶w¶‡¶™¶¥¶©¶Ã¶Õ¶á¶å¶å¶å¶å¶é¶î¶î¶ù¶ý¶·,·<·A·W·o·o·™·£·Å·Ê·Ê·Ê·Õ·Ù·ñ·¸¸¸3¸3¸K¸K¸}¸‡¸¤¸«¸¶¸»¸à¸æ¸¹¹¹¹2¹@¹]¹m¹m¹š¹œ¹Æ¹È¹à¹ë¹õ¹ÿ¹º º)º)ºRºjºmºˆºˆºˆº�º’ºÅºÙºóº» »» »H»\»_»v»v»v»v»€»–»©»³»¸»¸»Ð»ä»î»þ»þ»¼+¼.¼:¼H¼N¼a¼i¼r¼w¼w¼w¼�¼¤¼§¼³¼É¼Î¼Î¼æ¼ú¼½½½-½A½D½P½^½d½w½½ˆ½�½�½�½¦½º½½½É½ß½ä½ä½ä½ü½¾¾&¾&¾H¾S¾a¾g¾z¾‚¾‹¾�¾�¾�¾²¾½¾Ó¾Ø¾Ø¾Ø¾ð¾¿ -¿¿¿<¿H¿V¿\¿o¿w¿€¿…¿…¿…¿§¿³¿É¿Î¿Î¿ã¿ã¿ã¿ÿ¿ÿ¿À À]Á"¸g‘8‚8‚X‚[‚d‚x‚‚‚�‚�‚£‚°‚¹‚½‚½‚Ƃ؂݂ñ‚ƒ/ƒ6ƒ8ƒ\ƒtƒtƒvƒvƒvƒ�ƒ¥ƒ¥ƒíƒ#ÕUöÉöÉÊÊÊ,Ê?ÊIÊOÊSÊVÊXÊ^ÊbÊeÊkÊnÊ�ʙʡʤʵÊÉÊÐÊÚÊÞÊñÊôÊËË ËË&Ë@ËHËKË\ËtË{Ë{ˊ˘˲˾ËÝËÝËîËÌÌÌÌ)Ì=ÌDÌIÌIÌZÌnÌ…ÌŠÌŠÌ�̵̡ÌÔÌÙÌÙÌßÌðÌÍ#Í(Í(Í9ÍMÍZÍ_Í_Íp͖͖̈́͑ͧͻÍÈÍÊÍÊÍÊÍÊÍÊÍÛÍóÍÎÎÎÎ)Î2Î2Î8Î8ÎAÎAÎÊÎ$Ðþ.”3”3¬3²3Ì3Ï3Û3ð3ö3ü34!4&4.4.4<4B4G4l4r4t4ƒ4‡4–4œ4Ÿ4¡4°4´4Ã4É4Ì4Î4Þ4â4ö4ù4ü4þ4 555%LÞ–Þ–î–ü– ——=—a—r—·—»—×&H6D{J{J�JžJžJ¦J¼JÀJÀJÄJÌJ'$™žÐ9Ð9Ù9ä9ó9($ž£ø9ø9: ::)$êïÎìÎìØìëìðì*ˆaFÒFÒJÒYÒYÒhÒhÒwÒwÒ†Ò•Ò•Ò¤Ò³ÒÂÒÂÒÖÒÑÒÑÒàÒ7×+luŒž]µ]·]Ð]î]î]^^^0^2^2^B^D^D^T^T^Z^]^”^,„§Ä±Ú±ÚÅÚÌÚÔÚÛÚöÚöÚÛÛÛÛÛÛ#Û%Û%Û5Û=Û=ÛFÛRÛoÛoÛ�Û�Û…Û¬Û-, QÓQÓ\ÓpÓ�ÓƒÓ.,V]^û^ûiû}ûŒû�û/Cøˆøˆ‰‰‰6‰C‰T‰b‰w‰Œ‰“‰¦‰¹‰ˉÓ‰ñ‰ŠŠŠ Š1ŠdŠwЉоŠÀŠÑŠÝŠâŠêŠþŠ‹:‹M‹Y‹ˆ‹0TCTˆ‹ˆ‹Œ‹�‹§‹²‹½‹Æ‹Ï‹à‹ó‹õ‹Œ Œ,Œ,Œ.Œ1<*5&�&�:�V�^�n�u�w��2Ho}C C G W m o } „ ‰ Ž • § § © 3\=Pöæöæççç ç=çAçMçMçaçjçnçrç4D>Kû -û -  -  & 5 J ^ m v ˜ œ 5,KR£ £ « ¹ Ë Ô Ö 6$LQ0g0g?gYg_g7°Qy`g`grg�g‡g›g®gÅgØgïghh0hGh_hchihphth†hŸh­h´hÌhÐhÖhÝháhóh ii!i$i.i8˜#®n®nÈnçnóno oo%o*o6oGoSoYo\o_obogoiomoyoŠo˜ožo¡o¤o§o§o±o´oÆo9„Jg&ñ&ñEñSñcñoñuñ~ñ…ñŒñ‘ñ�ñ¡ñ«ñ«ñ²ñµñ»ñ»ñÅñÓñÚñÚñÚñèñ:P cPcPrP€P€PŠP”P±P¼PÅPËPÌPÒP;h¥ûVV V(V1V7VCVOVWV]VcVkVyV„VŒV«VÀVÎVÚVÚVßVäVòVùVþVþVW WWW$W-W-W5WDWHWUWbWgWqWqWzW�W�W˜W´W´W´W¼WÃWÊWÑWØWßWæWíWôWûWX -XXX*X4X<ûKXKXUXoXoXvX|XX„XˆX?�Ý“L“L§L¶LÏLÏLñLMMM4MAMOM]MkMyM�M¥M®M°M·MÎMâMâMâMçMîMøMÿMÿMN N&N-N4N;NCNSN[NkN¥N¾NÁNÉN@È|ª+\+\U\X\c\t\†\�\š\ž\¦\µ\¹\½\Å\Ï\Þ\ç\]]] ]]!],];]A]C]E]K]Q]i]r]r]y]”]—]©]ALZiiZiZ}Z�Z”Z¢Z©Z°Z·Z¸ZÀZB@wƒ[[[![([6[=[D[M[CHiwÁZÁZÑZÚZáZèZïZöZ÷ZÿZDt!¾÷¾÷Ì÷ç÷ó÷ÿ÷ øøø&ø/ø8øAøJøSø\øeønøwø€ø€ø‚ø˜øEH'YY$Y2Y2Y4Y:YEYEYTYUYZYF8MW K KK)K4KCK]KaKeKGÔK|cZcZ�Z•Z¥Z¶ZÈZâZéZöZúZ[ -[[[([3[W[f[m[t[…[‡[�[š[¥[´[»[¾[À[Æ[Ì[ä[í[í[\ \&\H$PUvçvçzç¦ç¨çI4kIkItI†I›IŸI£I£I¨IJ`ã÷ó^ó^____%_/_E_P_R_W_Y_Z_Z_b_K<}ˆ« « ´ Ä Ñ Ñ Ø ç î î ó L¤UzÆçÆçÏçßçíçè è"è@èOèOèdèfè|è”è›è›èœèœèªèµèÄèÆèÒèÝèíèõèéM”Tu0Œ0Œ:Œ@ŒGŒMŒcŒˆŒ�Œ�Œ¢Œ©ŒÁŒÚŒóŒøŒüŒ � ��#�.�.�2�ND"/`}`}~}Š}—}¢}®}»}Á}Ä}Ç}Ù}O<it�~�~�~š~¥~Ä~Ú~Ý~è~P(+1^Ð^ÐgÐxÐŠÐÆÐQH-;fðfðtð‚ð‚ðŠð©ðÃðÃðÇðÍðR<oz T TTT8TMT^TgTlTˆTShYo+S+S3S7S7SFShSwS€S‰S¡S³S¼SÃSæSïSöSTTT$\aßß -ßßßU [±·±·¹·½·É·Ù·â·ñ·ý·¸ ¸¸0¸n¸z¸…¸£¸£¸ʸ̸̸̸ä¸ä¸ö¸ý¸¹¹¹)¹0¹0¹B¹H¹P¹V$»À‘Æ‘Æ«Æ¼ÆÆÆW¤–»ÅÅÅ"Å2ÅAÅMÅoÅoŜŤũũŶÅÌÅÕÅÝÅåÅ÷Å$Æ0ÆCÆKÆPÆPÆYÆYÆkÆrÆrƄƉÆ�ÆX„æY³Y³w³†³œ³®³óɳγÔ³׳å³ñ³ô³÷³´´´´´3´3´I´Y …©„7„7ž7¤7¤7³7¿7Æ7Ì7Ì7Ö7ß7ß7å7é7ì7ö788888$8)8,8/82858<8<8<8<8<8J8Z�a�ßß ß-ß-ßEß[ßj߃ߟ߮ßÇßãßéß÷ßàà!à#à9àOàeà{à{à�à[4¼Å«g«gÉgågúghhh3h\,çîÛiÛiõijjj!j],îõ#j#j=jPj[jajoj^8ÅÏ3h3hQhmh‚h�h–hœh£hÂh_(f–f–|–¶–Ì–Ú–`PWgžqžq§q·q·qÕqÛqëqñq÷qr r r r0ra0z‚éééHé[é[éeéb€RnÛ Û ò ü  $ ? R _ ‰ ¥ ª µ ¿ Ì Ö ä ê ö ý   ?  \ No newline at end of file + +% +ODŽ›+ ++ +9 +G +V +^ +d +p +ƒ +ƒ +Œ +P8ˆ’~å~åŒå˜åÀåÍåÏåÖåÞåàåæåQ(}ƒBMBMVMaMjMmMuMR8£­zNzNžN¢N¸NÌNÖNàNãNóNS¬´Û [ [:[I[Y[h[x[‹[–[œ[´[´[À[Ò[Ü[ë[ð[ð[ü[ü[\\m\r\r\Ÿ\Ÿ\¬\¯\²\¾\Å\Î\ö\T´là]à]ö]^ +^^^1^C^Q^c^l^r^w^Ž^—^¯^½^½^Ê^Ø^ä^ô^__ +___%_%_)_-_<_L_P_d_‰_‰_˜_š_ _¨_º_Ï_Ù_è_í_í_ù_ù_``` `M`Q`T`X`_`j`€`•`ž`«`µ`·`½`Ê`Ð`×`ä`ê`ê`ñ`a aaa%a,a5aQaµaUˆäø\ø\]] ]+]D]Y]_]m]r]y]…]…]�]”]›]¦]´]¸]»]¾]Ç]Ú]V,ããû6YaW0>Fƒ¼ƒ¼‘¼›¼¡¼ª¼±¼µ¼»¼XHt‚rdrd†d“d–dšd¨d±dÐdÜdædêdídÿdY R–›F›F£F°F¿FÄFØFíFG G'GFGYGmG»G½GÁGZH;IÎìÎìÞìäìïìøìûìííííí í[\–©ÖïÖïêïøïýïðððð'ð3ð7ðOðVðYð[ð~ð\0wV½V½p½s½s½|½�½�½˜½]4%n77"7%7+77797H7O7U7|7ƒ7®7µ7¹7Ô7ã78 8 88U8a8m8}8�8ž8¯8Â8Ï8à8ù89 9&9&9294949@9B9B9N9P9P9`9c9c9o9~9š9¤9­9¸9Î9Ü9Ü9Ü9ð9 ::: :#:o:^P»v»vÏvØvñvw'w*wAwKwXwXwZwbw_8>HQQ Q&Q-QCQCQJQaQaQgQ`$).jPjPxPP“P™PaÈÂðããû(--?DDV[[mrr„‰‰‰‰�••§¬¬¾ÃÃÚ +-4;DS¶bœa„)2?LYq…‡››£¸ÅÅÒÚéû)1ELLVcD”¡cµcµvµ€µ„µ˜µ¤µ¦µ²µ¹µ¿µÙµãµd0ï÷£u£u·uöuýuvv#v/veH†ë†ë�ë¤ë­ë¸ëºë¼ëËëËëÚëÜëÜëáëfD ,æëæëúëüëì7ì<ìSìXìXì\ìdìgHëë'ëBëKëVëXëZëiëiëxëzëzëëh0 ‚O‚O†OšOšO®O²O¶OiDºº)º/ºIºIºNºNºNº[º[ºgºgºqºjˆãó¸ó¸û¸¹¹#¹/¹Q¹Q¹Q¹Y¹^¹^¹‚¹‘¹²¹ʹÒ¹Ô¹Ô¹à¹à¹ò¹ù¹ù¹ ºººkXÊÜKÂKÂfÂlÂw‘‘ššŸ°¹ÂÄÂÄÂÐÂÝÂl€›ÓÓÓÓ)Ó)Ó@ÓTÓrÓtӌӟӪӻÓÒÓÒÓéÓýÓÔÔ5ÔHÔHÔKÔ¤Ôm€2΃΃îƒúƒ„ +„„„1„9„?„S„b„n„z„~„�„ƒ„•„£„§„±„µ„¾„ĄׄnøQèTU U:U>UPUYUbUiUrU{U“U¢UºUÍUÖUßUíUVV!V5V9V?VHVNVYV[V^VfV{V�V“VžV¤V¬V°VÂVÈVÎVÕVÛVëVñVW +W W\Wo`ØSñSóSûST!T5TCTHT[TqTwTƒT“T“T¥TåTp "&6ê6ê:êIêMêq4'0NêNêRê\êlê�ê¢ê¢ê¢ê¦êr !êê"ê1ê5ês 15¦ê¦êªê·ê»êt 6:¾ê¾êÂêÇêËêu8‘›%%/%F%L%]%s%’%¥%¥%¯%v ;?ÎêÎêÒêçêëêw @Dîêîêòêëëx EIëë +ëëy@‰•qq'q5q5qEqmqxq|q�q�q˜qzŒªÉ~ð~ðŸð¢ð«ðÇðÚðÚðåðêðòð ññ'ñ1ñ6ñBñHñOñ\ñ_ñhñkñnñsñšñ{,ÏÖ¾ñ¾ñÌñØñïñóñõñ ò|@<H;à;àMàXàeàmàuà}à…à�à•à›à}Œ&Eƕƕ֕ڕã•û• ––– –$–=–E–o–s–“–•–�–Ç–Ë–ë–õ–ü–—-—I—e—�—ˆ—�—~0%~•~•‡•‡•ž•»•»•À•4}†$-€t3^^mw…�µÊåëø((9@GPcl�˜÷¶ü¶ü¼üºüÊüW‚81;ŽÌŽÌœÌ³Ì¾Ì¾ÌÉÌÍÌÍÌÓ̃8JTFÍFÍTÍkÍvÍvÍ�͉͉Í�Í„< –ʖʪʽÊÉÊÖÊÞÊúÊ +Ë ËË…„ *ËË8Ë;ËNË[ËwËzˀˉ˕˗˪˽ËÁË×ËÚËàËíËùËûËûË ÌÌ$̆ UY–͖ͪ͹ÍÁ͇(Z`ÆÍÆÍàÍóÍúÍÎΈD<IÖÌÖÌêÌÍÍ$Í&Í(Í3Í7Í7Í?͉hî > >·>¹>Ò>ð>ð>???2?4?4?D?F?F?V?V?\?_?–?Š0ø3v3vGv†v�v“v«v®vºv‹<âíH>H>_>t>„>Š>�>‘>‘>›>Œèó)«Ù«ÙÊÙÌÙÛÙéÙõÙ +ÚÚÚÚ Ú*Ú*Ú4Ú7ÚMÚeÚaÚsÚxÚ–Ú¯Ú¸Ú»Ú¾ÚÃÚçÚéÚÛÿÚ1Û1ÛAÛQÛXÛ^ÛaÛfÛvÛ}ÛRÜ� TXkÔkÔyÔ‡ÔŽd>S«Ó«ÓÄÓÈÓÔÓÔÓàÓàÓíÓíÓüÓ ÔÔ,ÔAÔKÔZÔZÔdÔ�0ÓÒÓÒÜÒáÒêÒðÒðÒõÒ�4#ûÒûÒÓ ÓÓÓ!Ó!Ó&Ó‘Ø-_;x;xQx`xkx}x”x”x¥x½xÊxÝxéxôxy&y(yEyRyRyRycy�y–yŸy¥y¬y²y·y½yÁyÈyÓyÙyÜyz’xŒ¦ËÕËÕçÕìÕïÕüÕÖÖ ÖÖ%Ö-Ö-Ö8Ö8Ö@ÖBÖBÖIÖLÖXÖ“Ì\‹‹Ô‹Ô§ÔªÔ­Ô¶Ô¹Ô¾ÔÁÔÄÔÐÔâÔåÔèÔíÔýÔÕÕÕ'Õ)Õ)Õ=Õ=Õ@ÕCÕQÕUÕkÕqÕxÕՂՇ՜՟աանննÕÈÕ”xËå((DGLW_|‡Ž•»»Ãàëððø!,115D•ð–Λq›q¯qÑqáqáqõqÿqrrr%r.r2rArWr]rdrsrvr�r¶rÂrÎrÖràrîrÿrs s0sCsKsVslszszs†sªs¶sÁsÈsÎsÕsÞsást–L#Ò#Ò>ÒXÒXÒeÒeÒrÒrÒ‚Ò†Ò†Ò–Ò˜Ò˜ÒÏÒ—@$0+Ó+Ó9Ó>ÓAÓSÓYÓ\Ó^ÓdÓ˜@1=kÓkÓyÓ~Ó�ӓәӜӞӤә ÊΞñžñ¬ñµñ»ñš@ ccw…“�®¿ÉÓäê›0FN®ö®ö¼öÊöÒöõö÷6÷œp $66)63676=6I6U6a6a6m6m6w6†6¦6À6À6À6À6Æ6Æ6Ö6Ø6Ø67�,X_ÃoÃoÌoØoÞoãoèož$RW›o›o¤o²o¾o¾oÃoŸ<—¢CÇCÇKÇOÇ^ÇnǘǟǬDzǶǠ@˧˧Ô§Ú§ã§÷§¨¨¨¨¨¨ ¨¡@‹+«+«<«S«a«m«�«Ž«•«˜« «¢4¹Âë¬ë¬ô¬ú¬­­ ­'­:­?­£<ÃÎC­C­Q­]­h­x­�­œ­®­Æ­Æ­Æ­Ì­¤pÏçÓ­Ó­í­ÿ­®® ®"®"®0®2®2®>®>®D®L®P®[®s®�®�®š®¥H±¿c¶c¶x¶‚¶…¶޶š¶¢¶¿¶ζԶ׶㶦DŒ™£«£«²«É«׫ã«ã«÷« ¬¬$¬&¬,¬§˜Àâã¶ã¶ó¶··$·(·1·8·H·J·g·p·Ž·p·¬·»·Ì·Ò·á·ò·ø·ø·¸)¸3¸8¸í¸¨H¢°ãµãµøµ¶¶¶¶"¶?¶N¶T¶W¶c¶©Ü9‹¯‹¯©¯³¯¼¯Ú¯Ú¯ݯä¯ä¯ö¯ý¯ +°°&°2°5°:°V°q°q°ƒ°…°…°—°™°™°¥°¥°¶°ȰΰѰѰÔ°Ù°á°ò°ù°ÿ°±±0±0±5±5±5±P±ª@,8‹¨‹¨š¨ ¨´¨¾¨ƨΨӨ٨ۨۨᨫ8t~ÛªÛªåªíª«««!«#«'«¬`K_;};}[}g}r}w}…}�}Ÿ}¥}¶}º}¾}Ä}Ç}Î}Ù}Ù}å}­<?Jë|ë|} }}} }%})}-}7}®$',#|#|1|9|K|Q|¯¤&³z³zÅzÐzÕzãzïzûz{{{%{*{8{F{T{m{x{{“{²{º{Â{Í{Ï{à{ë{| | || |°X�““´“´›´§´°´¿´Ë´Ô´Û´é´µ3µ3µEµLµLµ^µ_µcµ±d`uë}ë}û}~~~$~-~1~7~=~E~M~U~t~w~‚~‚~Š~²84>“|“|£|Â|Î|Ò|Ö|Ú|â|ê|³(-3S|S|\|j|y|ˆ|�|´DÚƒÚƒöƒøƒ „„ „-„3„6„B„µà:.2o2oKoSonoyo€o�ošo§o¾oÑoîoùopp p#p-p1pLpQpXp`prpupƒp’p£p©p¯p»pÊpâpæpëpøpq$q+q2q2q9qAqNqPqbqjqlqvq}q}q}q„qŒq“qžq§qµqËq÷q÷qrr"r,rBrdririrprxrŽr°rµrµr¸r×rÚrærérìr +s +sssss s0s3sLsLsQsQsdsksus‹s©s¬s®s®sÁsÈsÐsæstt t t$t'tGtbtktttxt†tŒtŒt©t©t©t®t®t®tºtÍt×tètëtîtótótøtuu9u=uXuquzuƒu‡u•u›užu£u£u³u¶u¹uÇuÐuÖuÙuÞuÞuòuþu +vv2vWvdvhv~v˜v¦v¯v³v¶v¶vÆvÌvÞvãvëvòvþvww w1w8wDw]wjwmwtwwwyw‘w¤w«w¹w¹w¹wÀwÌwÖwäwíwówúwxxx,x;x[xdxÎx¶8<FRyRyfyvyˆy‘y”yœy·Ø9’m’m¬m³m·m»mÆm×måmùmnnnn3n8nAnDnNnVnYn\npn‡n�n¦n­n¶n¹n»nËnÎnÐn×nçnënònõnoo.o¸D&¾á¾áÆáÎáÖáÞáæáîáöáþáâ +ââ¹,^á^áfánává~á‚á†áº4†á†áŽá–ážá¦á®á¶áºá¾á»  JÓKÓKíKûKL L2L?LQLfLvLzLŠL•L¤L¯LËLËLÏLÚLæLèLèLèLîLîLñLûLûLM M M%M5MHMNMWMaMnM~M¢M¢M´M´M´MÊM×MîM÷MýM NNNNN-N¼TÃCÃCÇCàCïCDDD#D5DHD[DuD…DŠDŠDŒD½xûþ‚þ‚ƒ&ƒ-ƒIƒIƒYƒ[ƒ[ƒ[ƒlƒwƒ~ƒ‚ƒŠƒŽƒ–ƒœƒ¢ƒ¤ƒ¤ƒ¶ƒ¶ƒ¹ƒÇƒ¾ôǰ°¸¼ÄÕäîú5GYY]lv‰‘•¤ÁÆÆÜä÷'4<ATc„‘œ®ÀÛâôô#'+¿>008@Q`jvvz‚†ŸÙëÿ&/88=PU`vŠ‘Âø  / C J { ±  Ò Ò Ù ë ë ù ù ú     " ÀDæóHH\iyŽ•žµ¸ÀÁDŽ›$:T__p€‚¬Âèô*ÀÀÞáäîü %/R_jx‰–¡ÊÏÕû  $2CPXw|‚ž£·Ïâõ 0Wmr„ÃX?Ñ( ( 3 I P f w † “ ¢ ¶ Î æ ù !!.Q.i.|.„.„.’.›.¦.´.».Æ.Ô.Ô.Ù.å.ÊHH–H0H0S0^0n0v0—0¦0·0À0×0ï0ÿ01(101L1a1l1t1™1ž1¨1µ1Ç1à1ï122D2O2W2r2}2’2µ2Ä2Ð2Ù2ë23!3,343Q3\3\3g3g3x3x3‹3�3°3¹3¹3Ì3ß3ç3ç3ç3õ34444'4+424Ë$@…  # 3 C S b k y ‡ Ž ˜ £ ¸ Å Í á î  + +# +- +A +K +_ +i +} +Š +Š +— +¢ +­ +Á +è +ö +   ' 8 M b r | � ž ¯ À ó   ; R [ j … œ ¥ ° ·  Ì Õ å ̸œÆ°°¸ÀÉèï#/::Ij‹˜ ¶ÁÉÉØù'/EPbbpw‰‰——˜«Ͱ—¿8484C4S4d4s4~4�4š4³4Ê4Î4Ò4Ú4â4ë45 5 5$5(5,545<5E5[5n5w5ˆ5�5�5 5©5ÎH¬º[[sv‹”§¾ÌØâõ +Ïx† ë ë ÿ    + . 2 ; K N W Z l ’ š £ £ © Õ Ú à í Ð8¡«ó ó  2HQWÑtIbøLøLMMM-M1M6MMM[M[MzM–MœMªMªM¶M¿MÅMÅMËMÒ  H`J`J€J�J›J¦J±JÅJØJãJïJþJKKKK6KBKBK]KoKƒK‘K¦K¬KÐKØKØKàKäKèKLL9LLHLSLmLqLxLƒLˆLˆLˆL�L£LÂLÇLÇLÓLÙLßLáLñLÓÜ�´øNøNO&O2OGOGO]OdOtOƒOƒOˆO£O¦O«O¹OÍOÔOÞOÞOóOóO PPP%P0PNPXP[P^PcPqP‡P‘P”P—PŸP­PÃPÍPÐPÐP×PÛPíPÔ„c€ÐMÐMóM÷MN N N NANKNKNaNmNtN‡NŒN�N£NÄNÎNÎNâNâNåNóNÕ,@J@JIJTJVJVJ[JÖdµ +ðPðPQQQ/Q/QEQMQ]Q]QiQxQ}Q–Q™QžQ£Q³Q¾QÅQÉQÍQÛQïQöQRR RRR-RDRFRIRIRKReRqRwR€RŒR­R±R½RÄRËRÑRÔRâRøRøRøRýR S!S%S0S3S6S;J;Z;];r;|;‰;´;·;»;Æ;Ï;ó;û; <,<><J<V<V<j<m<}<Š<“<£<¥<¸<Â<Ò<Û<ë<ò<ò<ò<ù<== = ==*=é8cwcwqwww€w†wŒw•w˜wžwê0 clclql{l’l˜lšl lë< +£l£l·lÆlÖlÙlÛlãlælîlì�[»°C°CÑCÔC×CôCDD D*D@DMDWDaDsDD„D‹D¡D¿D¿DÚDÜDÜD÷DùDùDEEE&E&E0EDExEŸEŸE¥E¨EÎEÛEåEïEF FFF/FUFaFwF•F•F°FµFµFÐFÕFÕFðFõFõFGGG(G\GƒGƒG‰GŒG–G›G¬G°G½G½GÆGÉGBHíŒÏî t t*t&t9tItVtZt^t�tŽtšt¥t±tºtùtu u7uEuLuSuZu{u�uˆu‹u¡uîL,£w£w±w´wÀwÊwÐwÝwñwñwxx-x1x5x;xï kokzkzoz¯zðdZ˜?˜?¬?®?¾?Ì?Ö?ú?@&@8@F@P@a@f@|@„@‰@¢@Ä@Ä@è@ê@ê@AAA4A6A6AFAFALAOATAjArAwA�A¶AÂAçAçA BBB4B9B9B]BbBbBrBrB}B€BŠBžB®BºBÚBÚBæBêBöBC C!C5CI>INIPIPI`I`I„I‹I”IžI¢I»I½IâIëIñIøI:Jòx¸Ò0=0=F=c=i=u=„=Š=Ž=£=°=·=½=À=Ê=ó´(QÓmÓmëm÷mnnn)n3n9nJnLnQnQn^nxnznn™n›n�n·n¹n»nÕn×nÙnónõn÷nününününooooo–oô8FP–—–—£—«—®—¼—À—Ηҗחõ<al6˜6˜C˜K˜N˜\˜`˜d˜r˜v˜{˜ö\Qdzz"z$z/z4zGzPzUzZzjzwzwz}zˆz÷4GP¢y¢y¶yÌy×yÜyêy÷yzzø44=ÂPÂPÐPìPìPïPQQ Qù $(BPBPPPdPjPú,Y`8888%8-82888û¬Œ³ØYØYüYZ ZZ!Z&Z6Z;ZVZVZ]ZcZiZqZ}ZƒZ…Z…ZŒZ’Z˜Z Z¬Z²Z´Z´ZÄZÆZÆZÖZÖZ [ü4ÔÝ–Š–ŠªŠ¸ŠÐŠÛŠÝŠÝŠåŠý ÞâæŠæŠúŠ ‹‹þ<íøv‹v‹Œ‹�‹�‹º‹¾‹Í‹Ú‹ÿ4ãì‹‹0‹>‹V‹i‹k‹k‹u‹pÁÙúú$ú2úHúWú\úlúnútú}ú…ú�úªúºúÉúÉúÐúÐúÐúÄû4ÚãÆûÆûÔûâûêûõûüüü ü¬;ÏÏ#Ï9ÏOÏMÏ]ÏeÏlÏpÏxψϖϥϫϳϿÏÅÏÅÏÌÏÐÏÐÏÒÏ9Ñ8½ÇK;K;g;t;y;�;’;§;¸’¼Ã9Ã9á9÷9: :C:M:R:w:~:€:€:�:™:¤:©:·:¼:¾:Í:Ò:á:ú:;;-;9;=;I;Paq;8;8]8q88…8™8Ÿ8¤8¬8Æ8É8×8<KVÆnÆnÏnÙnénëno%o%o%o(odÉÞ{Y{Y‰YŽYžY£Y²Y·Y¹Y¿YÎYÓYÕYäYïYóYùY Øü+<+<J<L<]<b<p<‘<ž<¨<²<Ê<Ñ<Ó<Ó<å<ë<ò<ô<ú<== += ==!=(=(=(=.=?= LÈ׫;«;Å;Ø;í;ó;ù;<<<<$< +,“ +“ +— +À +Û +    0 ŠzŠz˜z¢z¶z¼z¾zÄz 0ËÓ>Š>ŠXŠoŠƒŠ…Š…Š�Š „;Xæ…æ…ï…ù…ù… †† †(†1†:†N†N†Y†_†a†p†x†‡†�†¶†¶†¸†È†Î†Ó†@Š–ˆˆ:ˆHˆSˆWˆ[ˆ_ˆcˆoˆ|ˆˆ�ˆ`¶Ê¶‰¶‰Ò‰Õ‰Ú‰à‰é‰î‰ú‰ŠŠŠŠ&Š(Š(Š+Š7ŠH§µ>‰>‰Y‰u‰‰†‰†‰¥‰ª‰¬‰¬‰¶‰L—¦–ˆ–ˆ²ˆ¹ˆÀˆËˆÔˆíˆøˆýˆ‰‰(‰(‰=‰PYiÖ†Ö†è†ï†ø†‡ ‡‡‡‡‡'‡-‡7‡02:ž…ž…²…¾…Ñ…Ù…Ü…ä…Œj‰>‡>‡T‡W‡c‡c‡e‡r‡€‡…‡ˆ‡“‡–‡›‡±‡Ã‡Î‡Ú‡ä‡ç‡é‡ì‡î‡ñ‡ö‡û‡ÿ‡ ˆ,Þ„Þ„ç„……… …° 1………1…1…7…7…=…=…=…=…=…=…=…=…B…B…N…T…T…Z…_…h…h…{…{…{…{…{…{…�…�…�…�…ƒ…ƒ…›…D)6AZAZYZfZyZ‹ZŸZ­Z¶Z¹ZÅZ\7JÉZÉZÙZÞZèZðZùZüZ[[[[[[<(áYáYõYZZZZ Z0Z3Z;ZÀ1¡`¡`µ`Â`È`Ð`Ý`ß`õ`ý`ý`a a.a7aBaMaPaWa\adaiava{a�a”aºa½aØaØaØaÜaáaáaïa,sz6p6p:p?pIpYpYp…px+Eã ã  .5FMMccqy‡��²Õø##00JZTFW[[_v�˜£¾çò &6GN” *  = a … ª ¸ õ 2 o q  � › › µ Ï ì þ  # < N ^ s Œ “ š ¶ Ò Þ  Ds€ÃáÃá×áááóáúáâââ*â-â5â DØå æ ææ'æ=æWæbæbæsæƒæ…æ±æ!DIV›à›à¨à¶à¾àÆàÔàÜàäàìàôàþàá"ô�º;â;âCâGâhâqâxâŽâ¢â®âÆâÜâýâ3ãUãmãvãxã€ãˆãŸã§ã²ã¿ãÃãÇãÉãÜãããöãä ä"ä7ä9ä=ä=ä=äIäUäUäZäcäuä|ä|äŽä”ä©ä#€»×«ä«ä¶ä¾äÇäÒäÝäääúäåå+åRåhå‚åŠå¦å±å¼åÔåßåæåñåöå æ$èæ³æ³æÍæÔæèæëæ ç ç1ç?çhç„ç•çœçžç¡ç§ç«ç¼çÆçÌçÏçÒçÔçàçðçøç èèè è0è@èLè[ènèƒè†è‰è™è¡è¡è©è°è·è·èÅèÝè%|Wrááá%á,á8á;áIáLáPáRáUáXá`ácákáá‰áŸá¥á¨áªá°á¼á&è;SÜSÜ[Üg܇ܛܟܮܺÜÈÜ×ÜÝÝ>Ý[ÝeÝrݞݞݬÝÒÝÒÝáÝðÝÞ)Þ-Þ/Þ/Þ;Þ;Þ=Þ=ÞMÞYÞYÞ]ÞbÞkÞ}Þ„Þ’Þ¡ÞÌÞÕÞçÞçÞíÞ8à' ¾é¾éÈéÛéàé(¤&c5c5k5q5~5�5¬5Å5Å5Ì5Þ5é5ø5ø5666'6N6U6b6n6w6|6|6|6œ6¼6Ö6Û6à6)D/<NâNâWâlâxâƒâŒâšâ¥â­â²â*<^i­s­s»sÌsÔsØsäsésísós+\j}õsõstt't8tDtMtltxt�t‡t‹t™t,D“  u uu0u;uAuGuMu`uguluru-H¡¯uuuu~uŠu�u¨uÀuÂuÈuÓu×uÛuÞu.`°Äåuåuîuøuvv,vBvUvkv…v‰v/(Œ’åtåtítótùtu u0D~‹�t�t¡t§t­t³t¹t¿tÅtËtÑt×tÝtßt1 æéæéêéøéúé2HÓáÐ=Ð=ä=ù=>>>#>'>->4>7>H>30 'cmcmqm‰mÂmÈmÊmÊmÐm40ólólmmRmXmZmZm`m50€ˆãpãpòpûpq q qq6 ÚÞNèNèRè`èbè7 éí®è®è²èÉèËè8 ÿVéVéZé{é}é9 äèŽèŽè’è©è«è:   ¦é¦éªé¸éºé;0?GFF FF F2F4F4F9F< ó÷öèöèúèé +é=ŒèÒgÒghh#h0h@hDhLhThXh\h`hdh‡h‘h–h­h³h»h¾hÐh><ny¾ß¾ßÒßáßõßàà!à#à#à+à?Dz‡.à.à>àMàaàkà|à˜àžà à à¨à@0ZbVßVß_ßißoßußwßwß|ßA8cm~ß~ߌߖߠ߫߳ߵߵ߻ßB0$lS S { } † ‰ Ž Ž ’ ± Å È × ß æ ÿ ! +!#!,!,!,!^!h!r!y!€!‡!“!Ÿ!©!©!©!Ê!Ñ!Ø!ß!æ!ë!ë!ë!ð! " "*"2"A"F"N"Z"d"p"ƒ"–"¨"³"Í"ê" # # # # ## #&#¦#C(+1 !&:<FD0"*««³ÉÎâíöE<!CCVl�Š‘““œªFpµÍ“'“'›'¬'Ð'×'è' ((#(6(=(G(U(k(�(ƒ(™(¯(¯(¯(±(Gpœ´³%³%·%Æ%Ë%×%ã%ï%ø%& &&&4&F&_&x&‘&ª&Ã&Ü&õ&ˆ'H@„�Ã$Ã$Ï$Ö$Ý$ç$î$ð$%%%ITAR##+:FT]div‡™™�J,áè;);)?)X)_)a)K %#3#333=3B3G3G3V3[3`3j3t3z3„3†3‡3‡3�3š3œ3«3­3¹3Ã3Ñ3Ö3å3ì3î3î3î3ô3L4áêû1û1ÿ1222(232:2<2M`&:û3û3ÿ34#434F4M4d4t4„4•4¦4·4Ø4ù455&5`5NXÎà³(³(¿(Á(Ð(æ(ò(ù())))))+).)4)Ohmƒ»#»#Ã#á#ò#$ $-$>$Q$X$i$�$ƒ$ƒ$–$§$¿$Á$Á$Ã$PH2@KKSgkƒ›³ÂÎÜãð QDS`££§¶ÂÎÚèôû RX€ÒR‰R‰V‰c‰h‰q‰v‰{‰€‰…‰Љ¢‰ÉЉê‰÷‰ŠŠ +ŠŠŠŠ"Š@Š@ŠEŠUŠ[ŠeŠjŠsŠxСЦЫаŠÙŠúŠúŠ +‹‹>‹>‹E‹P‹N‹^‹j‹�‹Š‹‘‹�‹©‹Ë‹Ë‹Ò‹Ù‹â‹ã‹ì‹ñ‹²ŒS86@æÝæÝüÝÞ Þ.Þ4Þ<ÞFÞNÞTPAQNÞNÞsއގޘޜޠޤޮޮ޸ÞËÞåÞèÞøÞU8ˆ’®à®à²àÅàØàãà÷àá*áNáV,RYþÞþÞ ß ß.ßHßNßTßW`0ÓDÓDêDþDEE2E9EDEIENE_EyEEE™E›E¥EXLQ`Þ—Þ—ë—ó—ö—˜˜˜˜˜˜'˜.˜3˜Y@my~˜~˜‹˜“˜–˜¤˜¨˜¬˜¯˜½˜Ä˜É˜Z,x³p³pÄpÎpÒpØpÛpãp[P`pëoëoúoppp,p;pGpbphpkpqp\4ývýv w wwwww#w]4 µvµvÉvØvÝvëvîvôvüv^4 +�v�v›v v£v©v¬v®v´v_4 (%w%w3w5w:wCwFwKwQw`ø³í¶‘¶‘Ô‘å‘ú‘’’’’$’+’1’C’C’V’f’m’|’�’›’²’´’Ì’Î’Ñ’Ó’Ó’×’×’ã’ê’ê’î’ù’ÿ’ ““5“K“\“s“z“€“ƒ“›“a8îøž“ž“¢““ê“bà5Þ‹Þ‹ø‹û‹ý‹ŒŒŒ!Œ<ŒFŒKŒRŒWŒWŒZŒwŒ�Œ›Œ°Œ¹ŒÁŒÒŒÒŒÒŒÛŒâŒïŒñŒûŒ� �0�8�J�S�d�l�~�����������Ð�chA—6Ž6ŽPŽRŽkŽwŽ{ޗ޲޲޲޲޲޾ŽÊŽÑŽßŽãŽîŽþŽ� � ��&�+�+�<�A�D�P�a�q�s�s�s���’�’�¯�¯�µ�Á�Í�Ô�Ø�è�ë�÷�����1�3�3�I�I�O�[�g�n�r�‚�…�‘�¢�´�¶�¶�¶�»�ÿ�dx˜²‘‘‘-‘3‘6‘Q‘l‘l‘v‘x‘x‘‚‘„‘„‘„‘�‘‘‘‘‘‘‘œ‘œ‘œ‘¡‘³‘eÄ�¼„0„0¦0°0³0Ã0Û0å0ë0î0ñ0ô001316181K1N1Q1Y1_1d1d1j1v1x1�1�1�1�1‡1Š1�1’1š1¬1fX|Ž$0$020;0G0M0P0U0[0^0c0c0p0t0w0w0}0g4™¢ +N +N.N2NHN\NfNiNyNh8‰“šMšM°M¹MÂMÍMÖMÙMãMi`¼ÐÂfÂfÆfÏf÷fg(g7gFgKgQgSgj8�š +m +mmm$m+m3mXm’mk(£©ÒeÒeÖeáeæeðeòelPƒ“eeee$e&e8e8e8e:eAeGegeueve|em4”�‚e‚eŒeŽe•e›e­e®e³en ž¢ºeºe¾eÉeËeoTª»òeòeûef0fMfMfbfjff™f¶f¶f·f·f¼fp(=Cfœfœsœˆœ´œÈœqøD~ÎœÎœèœøœÿœ��*�E�E�K�T�]�f�o�q�z�ƒ�…�…�Ž���¢�¢�«�´�¹�¹�Â�Ë�Ð�Ð�Ù�â�ç�ç�ç�ð�ù�þ�þ� +žžž/ž3ž3žMžOžOž]žažÓžr(6<œœœ(œMœaœsXÑÖžÖžòžŸ ŸŸŸ4Ÿ8ŸZŸZŸ|Ÿ|Ÿ|Ÿ…Ÿ‡Ÿ‡Ÿ�Ÿ’Ÿ’Ÿ›Ÿ�Ÿ�Ÿ¦Ÿ¨Ÿ¨Ÿ±Ÿ³Ÿ³Ÿ¼Ÿ¾Ÿ¾ŸÇŸÉŸÉŸÒŸÒŸÕŸÚŸÚŸÚŸÝŸàŸàŸúŸ +  . . 0 0 9 < A A J J O O X e j j s ‡ Š � � ˜ ˜ ¦ ª ƒ¡t,‡ŽÖ½Ö½ì½ÿ½ +¾¾¾¾uP:JNnNnfnrnynnˆnŽn‘n‘n¤n±n·nºnÆnvL .B„B„Z„\„f„�„�„Ÿ„´„À„DŽ܄w8 °5°5¿5Õ5ä5ÿ56 6 6 66x,ÚOÚOÞOòOöOöOúOy°(�[<[<y<|<~<Š<Š<–<ž<¥<¥<«<²<²<½<¿<Ç<Í<Ò<Ò<Þ<è<ì<ñ<ñ<ñ<ñ<ø<ø<=== = ==="=3=5=;=@=@=X=c=g=r=€=Œ=–=š=œ=œ=Ÿ=©=­=º=Ç=Ë=Ñ=Ô=Û=Ý=Ý=í=ó=ü=>>>>>>>>>>> >%>/>B>H>Q>[>_>q>z|ÁÜ“?“?±?º?Æ?É?Ö?Û?å?ñ?÷?@@@@$@/@6@:@B@C@C@Q@{l‘¨s>s>�>’>£>¦>©>¶>»>Ä>Ú>à>é>ë>î>þ>|l©À?? ?"?3?6?9?F?K?T?j?p?y?{?~?Ž?}�¥Åñ]ñ] ^^^$^7^O^W^_^l^v^}^„^ˆ^Œ^—^�^¦^ª^³^¹^¼^Ê^Ì^Ú^~PÆÖá^á^ï^ö^____$_+_-_0_;_A_|hƒ9\9\C\P\a\k\r\y\‚\Š\¢\©\°\º\Â\É\Ð\Ø\Þ\é\í\ï\ï\ó\€€Kg![![1[8[K[W[~[ˆ[’[š[¢[ª[¶[È[Ú[ô[\ \\\#\&\-\5\�0ÀS:S:m:o:r:~:~:Š:—:¤:¬:±:·:¹:½:Í:Û:ë:ö:û:û:;; ; ;,;:;E;G;M;O;Q;S;S;^;`;h;n;p;p;|;†;‰;‰;‰;‰;Œ;—;Ÿ;£;±;‚ˆ '³;³;Í;Ò;Þ;Þ;ê;ö;ú;<<<<<!<0<;<C<K<L<L<V<ƒ¬ÝS@S@m@…@š@¢@±@·@·@º@Á@Ì@Ð@Õ@Û@å@ë@î@ð@ó@ö@ö@û@ +A A A„L#A#A1A6A8AGAIAWAbApApAqAwA…P×çA_A_S_V_a_f_s_~_�_£_­_¶_¿_Â_Ì_†8èòÑ_Ñ_ß_æ_ñ_ö_ø_````‡<„�ù\ù\ +] ]]];]D]I]Q]ˆ<´¿ó9ó9 +:::+:9:?:B:L:‰,¤«‹9‹9”9¤9©9©9®9Š,¬³³9³9¼9Ù9ë9ë9ð9‹`�¤Q]Q]_]a]n]{]‚]‰]�]˜]œ]³]Å]Ô]Ü]å]ç]ç]ï]Œ, +ºOºO¾OÒOÖOÖOÚO�˜Rt`W`WrWuWƒW�W¨W¹WÂW×WÜWîWþWXX3X5X5XLXNXNX^X`X`XpXpXvXvX|XXÜXŽŒ­ ëÇëÇ È ÈÈÈÈ=ÈDÈ\ÈZÈjÈyȀȃȓȧȧȬȼÈÎÈâÈøÈÉ5ÉQÉmÉqÉvÉŽÉ�É É´ÉÊÉÊÉÚÉéÉ÷ÉþÉ +ÊÊ Ê4ÊDÊXÊXʅʔʘʞʺÊÏÊèÊèÊôÊËË"Ë-Ë=ËGËQËfË˂˂˖˦˦˸˸ËÊËÙÎ�dëC2M2U2`2g2w2…2›2£2¶2À2×2Ü2ã2ñ2ø233 3�8$S*S*\*f*n*{*}*Š*Š*�*‘ °Ôû/û/ 0000+0=0G0L0^0s0‰0Ÿ0µ0Ç0Î0Î0ä0ñ0ñ01111%1,11191’<Õà;1;1[1k1p1“1¶1Ú1á1è1í1ù1“@ ** ***!*5*<*>*C*L*”< c)c)k)‰)š)ª)»)Ç)á)ù)û)ý)•€%�“*“*›*Ÿ*¦*­*µ*Ã*Ô*Ü*ã*ã*õ*õ*+ ++!+++A+P+U+]+d+q+‡+›+¢+¯+°+º+Ä+Î+Õ+ß+æ+ë+õ+ü+, ,,,&,-,7,;,D,L,U,r,y,†,‡,‹,­,º,Ï,Ú,ç,ç,î,--#---–0‚Š3-3-=-m-ƒ-¿-Í-Ñ-—„’¯...E.n.—.á.î.ð.//R/_/a/y/y/©/°/µ/¿/æ/í/ï/ô/÷/˜(‹‘Ó-Ó-Ü-ã-. +. .™$ +[[5[Q[šDÌÙþçþç èèè-è.èBèEèK蛼Gr»¼»¼Ƽʼî¼÷¼½½½=½U½e½ƒ½ƒ½¤½¦½¦½ǽɽɽê½ì½ì½ø½ø½¾¾ ¾ ¾0¾8¾8¾J¾Q¾Q¾c¾p¾|¾€¾Ÿ¾œÀsŸ£¾£¾®¾²¾Ö¾ß¾î¾ú¾ +¿)¿1¿I¿Y¿{¿{¿Ÿ¿¡¿¡¿Å¿Ç¿Ç¿ë¿í¿í¿ù¿ù¿ÀÀ À!À1À9À9ÀKÀRÀRÀdÀqÀ}À�À À�(¾Änšnšvš€š“šžô„½™™(™+™5™B™F™L™L™P™U™Y™]™d™j™q™w™~™„™‹™‘™˜™ž™¥™«™²™¸™Á™Ç™Ë™Ó™Û™Û™ä™å™ö™ š šš"š-š8šCšNšYšdšdšnšŸd 5››>›F›`›k›n›t›|›‘›¡›¯›±›¿›Í›Ý›ò›ô›ô›œ (OU6÷6÷?÷I÷N÷T÷W÷¡p !³k³kÇkÔkÙkåkìkòklDlMlVlbl¢X¶ÈËhËhëhøhýh i#i*i7iDiKiTiXidi£XÉÛkiki‹i˜i�i©iÃiÊi×iâiéiòiöij¤X£µ+h+hKhXh]hihƒhŠh—h¤h«h´h¸hÄh¥Hëù“j“j³jÀjÅjÑjëjòjùjkkkk¦Hú#k#kCkPkUkak{k‚k‰k–kŸk k¬k§HÜêjj#j0j5jAj[jbjijvjj€jŒj¨p<T||,|5|O|c|r|‡|Ž|–|º|È|ì|ü|} }%}%}3}©\Uh:}:}P}W}f}m}v}v}Œ}—}Ÿ}³}¼}Â}Í}Í}ë}ªÔ +;ÊzÊzäzçzêzôzúz{ {{{({6{?{B{H{N{U{\{^{h{m{w{…{‹{š{¦{©{¬{´{¹{Ï{Û{Þ{á{á{á{á{ä{ì{ô{ü{ÿ{|«l€—ã_ã_``:`?`N`V`p`t`t`�`�`˜`¤`µ`½`É`ã`ç`ç`ý`¬0˜ aaa,a>aDaGaOa­$NáNáRáVáXá®8óýkZkZ‹Z–Z¤ZœZ·ZÈZÈZÈZÔZ¯4#úOúOPPP%P:P:P?P°$glÆoÆoÊoÚoåop±(€†ž½ž½²½Ä½Ê½Ð½Ö½²,�–¾¾2¾D¾I¾Z¾`¾‡¾³,—ž޾޾¢¾´¾¹¾Ê¾÷¾´ þéþéêêêµ,æÜæÜïÜôÜÝÝ Ýݶ@æò+Ù+Ù9Ù@ÙEÙ[Ù]ÙfÙxÙ~Ù~٩ٷ$.3££§Õû¸”Äå[×[×v׀׊ס׷׼×É×Î×ê× ØØØØ8ØMØOØiØ~Ø~؅؅؅Ø*Ù¹, ç(ç(ù())()1)ºXFÜFÜZÜdÜkÜzܓܓܤܳܿÜÔÜÖÜÙÜÛÜÛÜÛÜãÜ»t5ÝÝ"Ý(Ý2Ý9ÝLÝeÝeÝt݊ݓݡݨݨݫݵÝËÝÓÝÕÝØÝÚÝÚÝæÝ¼H:ƒ:ƒTƒgƒ€ƒ•ƒ›ƒ¡ƒ¡ƒ©ƒ«ƒ׃½Œ‰è A A1ADANANAQAUAiAnA€AŠAŒA�AœAœA«A°A´AÐAÙAéAúAýAÿA +BBB!B#B)B>BABKBPBaBiBiBlBxB–B›B¬BµB·BºBÄBÍB×B×BêBïBòB CC+C0C:CCCMCPCRC]CrCuCxCzC€C™CœC¦C­C­C¿C¾´0Yc>c>�>�>„>ˆ>œ>¡>´>¾>À>Ä>Ð>Ð>ß>ä>è>? +??+?.?0?;?K?N?Q?S?Y?o?r?|?Š?¿ÈZˆ‹?‹?±?µ?µ?¸?Ä?à?å?õ?þ?@@ @@ @ @3@8@;@U@^@s@x@‚@‹@•@˜@š@¥@¼@¿@Â@Ä@Ê@å@è@ò@AÀÈ/C=C=c=m=m=p=t=„=‰=š=¤=¦=ª=¶=¶=Å=Ê=Î=é=î=þ=>>> >*>->0>2>A>D>N>N>^>Á8AK x xx x"x'x*x-x2x:xÂ<5@¥w¥w½wÌwÓwØwãwøwûwx xÃ<)4UwUwlwowtwwwŠw�w“w•wŸwÄ8LV=x=xMxPxRxWx`xcxhxpxÅ,„‹¥y¥y®y³y»yÁyÁyÆyÆHŒšÍyÍyáyèyúyýyýyzz!z&z(z0zÇ0W_uxuxƒx’xœx¬x°x³x¹xÈœ`ƒ½x½xØxßxêxðxóxóxúxyyyyy'y'y'y+y5yDyLyayly~y‚y„y–yšyšyšy¤yÉœ:]S±S±[±_±k±{±„±“±Ÿ±¨±æ±ò±ò±ù±²!²?²?²f²h²h²h²€²€²’²™²³²³²³²Ų̲̲Þ²ä²ì²Ê|v‘‹~‹~«~»~Æ~Ë~Í~Ó~å~÷~(***0Ifvxx��Ë 9=K¼K¼e¼v¼€¼Ì°8sºsº{º„º”º£º¯ºѺѺþº#»(»(»=»E»J»J»q»y»�»“»À»Ì»ß»ç»ì»¼¼¼¼¼!¼(¼(¼:¼?¼K¼Í$€…úSúSTT#T.TÎ0JRjQjQrQ�QŸQ°QÁQÆQÈQÏ0\d*R*R2ROR_RpR�R…R‡RÐ0nvêRêRóR SS+SLSkSnSÑ0S[ÊQÊQÒQïQÿQR!R&R(RÒ0emŠRŠR’R¯R¿RÐRáRäRæRÓ0wrSrS{S“S£S³SÔSóSöSÔ(øþééé"éLéQéÕLè÷¶ò¶òÒòÞòùòóó%ó+ó7óÖLø>ó>óZófó�óŠó—ó«ó±ó½ó× !Ežôžô³ôºôÄôÒôÒôÚôóôõõ:õQõsõ™õ»õÅõÏõÝõõõ ööö/ö9öRö`öböiöpö©öØP×çòò,ò?òKòfòwò„ò˜òŸò¥ò´òÙx[××0×D×Q×W×`×h×q×yדטטנ׺׿׿×Ç×Ð×ê×ï×ï×õ×ü×üרØ!Ø(Ø/Ø:ØAØWØgØiØ}؟صØÂØÙíØÙOÙ]ÙgÙ~Ù�ميٜٓÙÄÙ¿ÙßÙúÙÚÚ(Ú(Ú=ÚDÚNÚcÚlÚƒÚ‡ÚŽÚ�Ú‘Ú˜Ú²ÚÄÚÚHqúˆúˆ‰‰ ‰‰ ‰%‰+‰/‰3‰C‰H‰K‰ÛÔ/` ö ööö)ö<öKöUöaölözö‰öšö¶ö¾öÊöÒöÚöÚöåöçöüö÷÷.÷`÷q÷~÷™÷¶÷¸÷Ê÷Ó÷Ó÷å÷å÷ó÷ú÷ ø øøø ø#øÜDíúóó%ó/óEó_ójójó{ó‹ó�ó¸óÝ´aÊ#ø#ø.øOøVøeørø~ø�ø¡ø±øÇøÔøçøùù$ù-ù-ùFùiù‡ùºù¿ùÙùíù úú4ú=úEúRúdúvú–ú«ú¾úØúíúûû%û*û<ûNûfûvû‚û•û•ûÈûÓûÞûøûüüüü#ü2ü@üYüƒüŠü�ü¯ü¶üÛüÛüþü ý6ý8ý8ý=ýXý_ýjýjýxý�ý�ýžý¥ýºýºýËýËýÎýÖýÞl:Q ë ëë%ë4ëOëaëmë{ë„ë“ë¥ëÁëÓëøëìììì2ì3ì7ìßLRa;ì;ìFìMì\ìlì™ì£ì¼ìÃìÊì×ìàìäìàØ�Ï‹ï‹ï“ï—ï¸ïÅïÎïÕïëïþïð'ð3ðCðVðcðvð”ð�ðªðµðÀðÀðÍð×ðæðûðñ(ñAñEñGñLñQñZñlñsñsñ…ñ‹ñ²ñá€Ðì³ñ³ñ¾ñÆñÏñÚñåñìñòò ò3òZòpòŠò’ò®ò¹òÄòÜòçòîòùòþòóâ|ÿ33dgu}}“¤¹¾ÑÕã÷'69nãÜËþÛýÛýãýþþþ%þ6þFþYþfþyþ—þ þ­þ¸þÃþÃþÐþÚþÿþÿ0ÿBÿBÿbÿnÿ�ÿ´ÿ¹ÿËÿÏÿ×ÿ×ÿåÿðÿþÿ#/äøUss{†Ž¯¾ÇÞî!?HU`kp�••¢¬¿Ìåô#.6Q\q�›¤¾áü,77<JU\glsåøbœëìëìóìíí"í+í9íGíRíbíwíŒí£í²íÒíáíôíîî.î7îFîbîyî‰î–î£î®îÃîÒîäîéîôîÿî ï!ï3ïJïSï^ïeïpïzïƒï‡ïæÜû.»ó»óÃóÇóÐóÞóåóûóôô%ô0ô>ôMômô‡ôŸô£ô¼ôÔôãôçôòôþô õõ'õJõXõgõ�õ�õ¡õ®õÀõÀõÎõÕõçõçõõõõõöõ +öç`ãèãèëèúèéé+é6é?éGéIé[émétété†é‡é‹éè”9‹é‹é“é·éÆéÒéÝéëéýé êê!ê5êhêjênênêyê„ê“ê¢êÅêÐêÕêçêîêîêëëëé”Vwss{”£°¿Éâï 16CNYds‚”§°¾ÅÅÓÜê /3šPšP¨P¼PÂPëXäö&ü4üBüBüZü`üiüqü|ü†ü�ü¥ü¥ü¥ü¬ü¬ü­ü³üìT –š–šµš¸š½šÀšÉšÔšçšòšöšùšùšÿš››íD2?ñaña b"b/b/b9bSb]bîh#9VmVmlmnm}m‘m“mœmžmžm¡m½mým +nn$n.n9næ>æGæQætætæyæû,“šæåæåôåæææ1æ7æüx£½~æ~æ‡æ”æ£æ´æ¿æåæúæçç çç6ç6çJçTç\çeç}ç†ç†ç›çýÈÇõô1ô122 2#2#2,272A2K2W2Y2_2f2i2l2t2€2†2‹2‘2”2–2¡2§2­2¶2¶2¾2Ç2Í2Ö2Ö2Ö2Ö2Ü2ä2ç2÷2þ¼ÏúËIËI÷IJ.J5JAJMJTJbJ�J�J JªJ²J¹JÁJËJÓJçJøJ KK%K.K4K‚F‚J‚J‚J‚M‚O‚S‚S‚X‚f‚t‚‚‚‡‚‰‚‰‚Ÿ‚è“ɪªÄÜèø +€€€€€.€.€.€5€B€E€J€G€¤€»€¾€À€×€Ú€Ü€ä€ô€ô€ý€ ��*�8�A�H�M�M�M�S�g�$“S“SœS¥S«S°S0†ŽƒPƒP‡P”P°PÅPÊPäP8³S³SÃSÆSËSÎSÜSâSåSçSïSXaS[S[[[g[o[{[�[‰[“[¶[¶[È[Õ[é[ö[þ[G\�\’\’\¤\±\Å\Ò\×\æ\]"]/]5]:]:]L]Y]m]z]]Ž]Â]É]Ö]Ü]Þ]Þ]æ]æ]ó]^^!^H^U^e^j^p^}^ˆ^Ž^™^™^Ÿ^¨^³^Ã^È^ê^÷^_ _ _%_)_B_„bC_C_W_^_l_l_x_†_‰_�_°_°_³_µ_µ_º_º_¼_¼_¼_¾_Ç_Ê_Í_Ü_(óSóSüSTTTT @y… P PPPP3PVP]PlP{P€P‚P‚P +Èg•îíîí îî!î'î1î1î>îDîHîKîMîTî[îeîqîzîŽî£îÀî°îÕîÕî ï ïï ï6ïBïJïLïfï�ï�ïšïÐï ¼œÇ¦Ô¦Ô¸Ô¾ÔÌÔÌÔçÔñÔ Õ Õ%Õ)ÕCÕCÕVÕ_ÕjÕsÕ€Õ‰Õ›Õ¥Õ²Õ»Õ½ÕÃÕÌÕÒÕ÷ÕúÕÖ"Ö3Ö7Ö;ÖFÖFÖJÖJÖJÖyÖ TÈÙ~Ö~֌֓֞ÖÁÖÍÖ×ÖÝÖçÖìÖúÖ××× 4ŠÓÃÃ&Ã.Ã<ÃGÃKÃQÃWÃeÃzÃÅÜáçþÃÃÃÉÃàÃåÃëÃùÃýÃÄ,Ä<ÄAÄPÄ]ÄmÄ|ĉĜĢĩīľÄÕÄÜÄêÄüÄüÄÅÅ$Å&Å9Å;ÅNÅNÅjÅ�ŇÅ�ŘżÅX7‰ÞÀÞÀüÀÁ ÁÁ Á(Á.Á5ÁKÁYÁ]ÁbÁhÁvÁyÁ~Á�Á�Á‘ÁŸÁ¡Á³ÁµÁÂÁÇÁÎÁÐÁÝÁßÁßÁïÁýÁÂÂÂÂ0Â5Â<ÂEÂKÂQÂXÂ[Â[ÂkÂyÂ{£ÂÅÂÇÂÎÂÐÂÜÂÜÂðÂôÂô +Ãä6þ¾þ¾¿ ¿"¿6¿>¿E¿Y¿\¿^¿�¿�¿„¿”¿–¿–¿™¿›¿›¿ž¿µ¿Ê¿å¿ï¿ù¿ÀÀÀÀÀÀ'À-À<ÀIÀ]ÀjÀlÀ~À‹À�À�ÀœÀœÀ©À¬À¬À×À˜Z| 6 6*6-6E6E6G6X6e6p6u6�6�6›6Ÿ6Ÿ6Ÿ6Ÿ6ª6¿6Â6Í6Ñ6Ñ6Ñ6Ú6Ý6ë64&/„4„4˜4´4¶4Á4Ã4Ã4Ë4P0@Ì4Ì4ê4ð4õ4555:5<5J5P5S5a54AJd5d5z5|5†5“5œ5¡5«5HKY¬5¬5Æ5Ö5æ5ê5ì5ø5û5þ56H®¼úNúNOO.O:OCOEOQOTOWOaO4½Æ¬1¬1À1Â1Ë1Ë1Ø1à1å1í1 rv.½.½B½P½V½<¯ºrr"r%r.r>rCrWrhr8 w(w(‘(•(˜(£(Á(Å(Ê(å(l +Úq&¢&¢G¢I¢`¢i¢t¢¢�¢”¢¢¢­¢¸¢Ì¢×¢Ú¢à¢ä¢ç¢í¢ñ¢ô¢÷¢ +£ £'£*£B£R£U£[£^£q£†£Ž£‘£©£¹£¾£¾£Æ£Æ£é£é£é£í£ï£ï£ó£õ£õ£ù£û£û£ÿ£ÿ£ÿ£¤¤¤¤ ¤¤¤¤¤!¤$¤<¤P¤U¤[¤^¤c¤v¤‘¤“¤©¤©¤©¤®¤®¤°¤°¤µ¤¸¤Þ¤Þ¤Þ¤ö¤¥¥¥3¥Q¥V¥V¥n¥Œ¥Ž¥Ž¥¦¥Â¥Ä¥Ä¥Ü¥ø¥ø¥¦"¦'¦'¦?¦V¦[¦[¦s¦�¦”¦”¦˜¦°¦Î¦Ò¦Ô¦Ô¦Ø¦ð¦§§§0§5§5§M§d§k§p§p§ˆ§Ÿ§¦§´§Ä§è§ï§ñ§ñ§ÿ§¨0¨2¨2¨J¨J¨o¨�¨¯¨´¨´¨Ì¨Ì¨å¨ú¨©4©S©t©w©|©|©”©¨©¯©´©¿©¿©Å©Ð©â©ç©ñ©ªª4ª?ªEªXª`ªiªiªuªyªyª‚ª‘ªšªšª£ª­ªÉªûª +««%«-«9«C«C«[«]«h«€«‚«¢«¢«§«§«Ú«å«î«î«ú«þ«þ«¬¬ ¬ ¬(¬.¬J¬U¬m¬o¬z¬’¬”¬°¬°¬°¬À¬á¬ã¬ã¬û¬­­­,­C­M­R­h­h­­­‹­�­•­ž­­­¶­¶­¿­Ê­â­ä­® ®&®(®(®1®I®T®j®w®® ®¢®ª®Ä®Ç®Ð®Õ®ö®¯¯¯"¯-¯I¯\¯o¯w¯�¯�¯Š¯Ž¯¡¯Ö¯á¯á¯á¯õ¯þ¯°°J°J°L°L°d°n°v°v°°ƒ°–°Ë°Ù°ß°ò°ú°± ± ±±±,±a±o±x±}±}±ˆ±Œ±¤±»±Å±Ê±à±ø±ø±"²,²,²I²M²`²h²o²z²²†²†²‹²¾²Ò²ì²ÿ² ³³³#³I³Y³k³w³{³•³§³³³·³·³·³·³»³À³À³Ë³Ï³ç³þ³´ ´#´;´;´e´o´‘´–´–´–´¡´¥´½´Ô´Þ´ã´ù´ù´µµCµMµjµqµ|µ�µ¦µ¬µÆµØµàµâµøµ¶#¶3¶3¶`¶b¶Œ¶Ž¶¦¶±¶»¶Å¶Ì¶æ¶ï¶ï¶·0·3·N·N·N·S·X·‹·Ÿ·¹·Ì·Ñ·Û·å·¸"¸%¸<¸<¸<¸<¸F¸\¸o¸y¸~¸~¸–¸ª¸´¸Ä¸Ä¸Ý¸ñ¸ô¸¹¹¹'¹/¹8¹=¹=¹=¹V¹j¹m¹y¹�¹”¹”¹¬¹À¹Ê¹Ú¹Ú¹ó¹º +ºº$º*º=ºEºNºSºSºSºlº€ºƒº�º¥ºªºªºªºÂºÖºÜºìºìº»»'»-»@»H»Q»V»V»V»x»ƒ»™»ž»ž»³»³»³»Ï»Ï»é»ð»-½´i’ò}ò}~~~2~<~G~I~]~j~s~w~w~€~’~—~«~Ð~é~ð~ò~..000J__§ÔT¾Å¾ÅÜÅàÅãÅôÅÆÆÆÆÆ Æ&Æ*Æ-Æ3Æ6ÆIÆaÆiÆlÆ}ƑƘƢƦƹƼÆÈÆÍÆÓÆÛÆîÆÇÇÇ$Ç<ÇCÇCÇRÇ`ÇzdžǥǥǶÇÎÇÛÇàÇàÇñÇÈ ÈÈÈ"È6ÈMÈRÈRÈXÈiÈ}ȜȡȡȧȸÈÌÈëÈðÈðÈÉÉ"É'É'É8ÉLÉYÉ^É^ÉoɃÉ�ɒɒɒɒɒɣɻÉÊÉÌÉÌÉÝÉñÉúÉúÉÊÊ Ê Ê’ÊÌö%ü2ü2334373C3X3^3d3j3‰3Ž3–3–3¤3ª3¯3Ô3Ú3Ü3ë3ï3þ344 444+4144464F4J4^4a4d4f4u4x4„4H–”–”¦”´”Ĕǔò”•'•l•p•x• D1>«E«EÀEÎEÎEÖEìEðEðEôEüE  šž;9;9D9O9^9! Ÿ£c9c9l9w9ˆ9" îòÎèÎèØèëèðè#„a~ÎÎÎ!Î!Î0Î0Î?Î?ÎNÎ]Î]ÎlÎ{ΊΊΞΙΙΨÎÿÒ$hu‹àX÷XùXY0Y0YPYRYRYrYtYtY„Y†Y†Y–Y–YœYŸYÖY%€§Ã[Ö[ÖoÖvÖ~Ö…Ö Ö Ö­Ö¯Ö¯Ö¾ÖÀÖÀÖÍÖÏÖÏÖßÖçÖçÖðÖüÖ××+×+×/×V×&( ÛÎÛÎæÎúÎ Ï Ï'(V\^÷^÷i÷}÷Œ÷�÷(>â„â„ì„ø„……&…4…I…^…e…x…‹…�…¥…Ã…×…Ú…â…ò…†*†=†O†„†††—†£†¨†°†ĆÞ†‡‡ ‡H‡)P?OJ‡J‡N‡_‡h‡s‡~‡Ÿ‡¡‡¬‡·‡À‡ɇÚ‡í‡í‡ï‡*86@Ö�Ö�ê�ŽŽŽ%Ž'Ž/Ž+Do|C C G W m o } „ ‰ Ž • § § © ,X=O¶â¶âÀâÂâ×âßâýâã ã ã!ã*ã.ã2ã-@>Jûû +&5J^mv˜œ.(KQ££«¹ËÔÖ/ GKrbrb�b›b¡b0¬Ls¢b¢b´bÃbÉbÝbðbcc1cDc[crc‰c¡c¥c«c²c¶cÈcácïcöcddd d#d5dNd\dcdfdpd1”">l>lXlwlƒl–lœl­lµlºlÆl×lãlélìlïlòl÷lùlýl mm(m.m1m4m7m7mAmDmVm2|Je&í&íEíSícíoíuí~í…íŒí‘í�í¡í«í«í²íµí»í»íÅíÓíÚíÚíÚíèí3Lû +cKcKrK€K€KŠK”K±K¼KÅKËKÌKÒK4d—ìQQ'Q0Q9Q?QKQWQ_QeQkQsQ�QŒQ”Q³QÈQÖQâQâQçQìQúQRRR RRR$R,R5R5R=RLRPR]RjRoRyRyR‚R‰R•R R¼R¼R¼RÄRËRÒRÙRàRçRîRõRüRS SSS$S2SD&#T#T,T:T:TÂHÂQ  Ä£À£À«À´ÀÄÀÓÀßÀÁÁÁÁ#Á#Á0ÁFÁRÁZÁbÁtÁ¡Á­ÁÀÁÈÁÍÁÍÁÙÁÙÁëÁòÁòÁ ÂÂR€é›®›®¹®È®Þ®ð®¯ ¯¯¯¯'¯3¯6¯9¯E¯J¯S¯X¯_¯u¯u¯‹¯S }¡ì6ì67 7 77'7.74747>7G7G7M7Q7T7^7i7i7x7�7�7Œ7‘7”7—7š7�7¤7¤7¤7¤7¤7²7T�a�ÖÚÖÚßÚíÚíÚÛÛ*ÛCÛ_ÛnÛ‡Û£Û©Û·ÛÅÛÓÛáÛãÛùÛÜ%Ü;Ü;ÜAÜU0ÊÒcccc�c�c²c¿cÆcÌcëcV(öüÃeÃeÝeðeûef fW,ý f f%f8fCfIfWfX4ÓÜëcëc d%d:dGdNdTd[dzdY$ ””4”n”„”’”ZLWf.o.o7oGoGoeoko{o�o‡o—o™o™o™oÀo[,z�ÎäÎäÒäååå%å\xRlÛÛòü $?R_‰¥ªµ¿ÌÖäêöý ?  \ No newline at end of file diff --git a/Kernel/Kernel.PRJ b/Kernel/Kernel.PRJ index 28fe3d0..e669707 100644 --- a/Kernel/Kernel.PRJ +++ b/Kernel/Kernel.PRJ @@ -1,43 +1,45 @@ -//Compile this by calling $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). -//Don't do it directly. See $LK,"Cmp(\"Kernel\")",A="FF:::/Adam/Boot/InsBoot.CPP,Cmp(\"Kernel\""$. +//Compile this by calling $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). +//Don't do it directly. See $LK,"Cmp(\"/Kernel/Kernel\")",A="FF:::/Adam/Boot/BootIns.CPP,Cmp(\"/Kernel/Kernel\""$. #exe { -OptOn(OPTf_WARN_PAREN); -OptOn(OPTf_WARN_DUP_TYPES); -#include "KCfg" -CKernelCfg *kernel_cfg; -kernel_cfg=KernelCfgNew; + Cd(__DIR__);; + OptOn(OPTf_WARN_PAREN); + OptOn(OPTf_WARN_DUP_TYPES); + #include "KCfg" + CKernelCfg *kernel_cfg; + kernel_cfg=KernelCfgNew; }; -#include "Adam1a.HPP" +#include "KernelA.HPP" #include "KStart" -#include "Utils1a" -#include "Math1a" -#include "/Compiler/CmpDefs.HPP" -#include "Adam1b.HPP" +#include "KUtils" +#include "KMathA" +#include "/Compiler/CompilerA.HPP" +#include "KernelB.HPP" #include "KExts" -#include "Str1a" -#include "Mem1a" +#include "StrA" +#include "MemA" #include "KGlbls" -#include "Mem1b" -#include "Math1b" +#include "MemB" +#include "KMathB" #include "Sched" -#include "Mem1c" +#include "MemC" #include "Font8x8" -#include "Hash1a" -#include "Str1b" +#include "KHashA" +#include "StrB" #include "Ints" -#include "DataTypes1a" +#include "KDataTypes" #include "Compress" -#include "Hash1b" +#include "KHashB" +#include "KLoad" #include "Date" #include "StrPrint" #include "StrScan" -#include "Define1a" +#include "KDefine" #include "Display" #include "KeyDev" -#include "Misc1a" -#include "Dbg1a" +#include "KMisc" +#include "KDbg" #include "Except" #include "KbdMouse/InputPointer" #include "KbdMouse/Keyboard" @@ -45,7 +47,7 @@ kernel_cfg=KernelCfgNew; #include "KbdMouse/Message" #include "QSort" -#include "Task1a" +#include "Task" #include "SrvCmd" #include "BIOS32" @@ -53,15 +55,16 @@ kernel_cfg=KernelCfgNew; #include "DskStr" #include "DskCache" #include "DskATA" -#include "Dsk1a" +#include "DskATAId" +#include "DskA" #include "DskAddDev" #include "DskDir" -#include "FileSysISO1" +#include "FileSysISO" #include "FileSysRedSea" #include "FileSysFAT" -#include "Dsk1b" +#include "DskB" #include "DskCFile" -#include "Dsk1c" +#include "DskC" #exe {Cd("..");}; #include "MultiProc" diff --git a/Kernel/Adam1a.HPP b/Kernel/KernelA.HPP similarity index 92% rename from Kernel/Adam1a.HPP rename to Kernel/KernelA.HPP index 59ef56d..f9bc97e 100644 --- a/Kernel/Adam1a.HPP +++ b/Kernel/KernelA.HPP @@ -38,6 +38,7 @@ extern class CIntermediateCode; #define INVALID_PTR MAX_I64 //(Int to F64 conversion is signed) +//Turn off 80-bit float constants with $LK,"OPTf_NO_BUILTIN_CONST",A="MN:OPTf_NO_BUILTIN_CONST"$. #define MAX_U64_F64 (0x43F0000000000000(F64)) #define MAX_F64 (0x7FEFFFFFFFFFFFFF(F64)) #define MIN_F64 (0xFFEFFFFFFFFFFFFF(F64)) @@ -207,13 +208,13 @@ public class CMass CMass *next,*last; COrder2D3 *state,*DstateDt; - U0 start_saved_area; + U0 start; U32 flags,num; F64 mass,drag_profile_factor; U0 saved_state; F64 x,y,z, DxDt,DyDt,DzDt; - U0 end_saved_area; + U0 end; }; #define SSF_INACTIVE 1 @@ -225,11 +226,11 @@ public class CSpring CMass *end1,*end2; F64 f,displacement; //set for you to check - U0 start_saved_area; + U0 start; U32 flags,num, end1_num,end2_num; F64 const,rest_len; - U0 end_saved_area; + U0 end; }; //Ordinary Differential Equations @@ -237,11 +238,9 @@ public class CSpring #define ODEF_PAUSED 2 #define ODEF_STARTED 4 -#define ODE_SIGNATURE_VAL 'ODES' public class CMathODE { CMathODE *next,*last; - U32 ode_signature,pad; I64 flags,n,n_internal; CMass *next_mass,*last_mass; CSpring *next_spring,*last_spring; @@ -344,6 +343,12 @@ class CGDT CGDTEntry tr_ring3[MP_MAX_PROCESSORS]; }; +class CSysLimitBase +{ + U16 limit; //Offset of last byte, not size. + U8 *base; //&GDT or &IDT +}; + #help_index "Memory/Info" #define MEM_NUM_E820_ENTRIES 48 #define MEM_E820_ENTRY_SIZE 20 @@ -362,13 +367,13 @@ class CMemE820 #define BIN_SIGNATURE_VAL 'TOSB' class CBinFile -{//$LK,"Bin File Header Generation",A="FF:::/Compiler/CmpMain.CPP,16 ALIGN"$ by compiler. +{//$LK,"Bin File Header Generation",A="FF:::/Compiler/CMain.CPP,16 ALIGN"$ by compiler. U16 jmp; U8 module_align_bits, reserved; U32 bin_signature; I64 module_org, - patch_table_offset, //$LK,"Patch Table Generation",A="FF:::/Compiler/CmpMain.CPP,EIT_ABS_ADDR"$ + patch_table_offset, //$LK,"Patch Table Generation",A="FF:::/Compiler/CMain.CPP,EIT_ABS_ADDR"$ file_size; }; @@ -392,7 +397,7 @@ class CPatchTableAbsAddr #define EIT_REL_I32 8 #define EIT_IMM_U32 9 #define EIT_REL_I64 10 -#define EIT_IMM_U64 11 +#define EIT_IMM_I64 11 //reserved #define EIT_REL32_EXPORT 16 #define EIT_IMM32_EXPORT 17 @@ -410,54 +415,56 @@ class CKernel {//Must match $LK,"OSStartUp",A="FF:::/Kernel/KStart.CPP,SYS_BOOT_BASE"$ CBinFile h; U32 jmp, - boot_base, - boot_patch_table_base; + boot_src, + boot_patch_table_base, + sys_run_level; CDate compile_time; - U32 os_32start, - boot_code; + + U0 start; + U32 boot_base; U16 sys_mem_E801[2]; CMemE820 sys_mem_E820[MEM_NUM_E820_ENTRIES]; CGDT sys_gdt; - U16 sys_gr_mode, - sys_pci_busses; + CSysLimitBase sys_gdt_ptr; + U16 sys_pci_busses; }; //Run-Levels #define RLf_16BIT 0 -#define RLf_32BIT 1 -#define RLf_PATCHED 2 -#define RLf_64BIT 3 -#define RLf_BOOT_HEAP 4 -#define RLf_FULL_HEAP 5 -#define RLf_RAW 6 -#define RLf_INTERRUPTS 7 -#define RLf_MP 8 -#define RLf_DSK 9 -#define RLf_COMPILER 10 -#define RLf_DOC 11 -#define RLf_WINMGR 12 -#define RLf_LOGIN 13 +#define RLf_VGA 1 +#define RLf_32BIT 2 +#define RLf_PATCHED 3 +#define RLf_64BIT 4 +#define RLf_BOOT_HEAP 5 +#define RLf_FULL_HEAP 6 +#define RLf_RAW 7 +#define RLf_INTERRUPTS 8 +#define RLf_MP 9 +#define RLf_DSK 10 +#define RLf_COMPILER 11 +#define RLf_DOC 12 +#define RLf_WINMGR 13 #define RLf_REGISTRY 14 -#define RLf_ADAM2 15 +#define RLf_HOME 15 #define RLf_ADAM_SERVER 16 -#define RLF_16BIT 0x000001 -#define RLF_32BIT 0x000002 -#define RLF_PATCHED 0x000004 -#define RLF_64BIT 0x000008 -#define RLF_BOOT_HEAP 0x000010 -#define RLF_FULL_HEAP 0x000020 -#define RLF_RAW 0x000040 -#define RLF_INTERRUPTS 0x000080 -#define RLF_MP 0x000100 -#define RLF_DSK 0x000200 -#define RLF_COMPILER 0x000400 -#define RLF_DOC 0x000800 -#define RLF_WINMGR 0x001000 -#define RLF_LOGIN 0x002000 -#define RLF_REGISTRY 0x004000 -#define RLF_ADAM2 0x008000 -#define RLF_ADAM_SERVER 0x010000 +#define RLF_16BIT 0x00001 +#define RLF_VGA 0x00002 +#define RLF_32BIT 0x00004 +#define RLF_PATCHED 0x00008 +#define RLF_64BIT 0x00010 +#define RLF_BOOT_HEAP 0x00020 +#define RLF_FULL_HEAP 0x00040 +#define RLF_RAW 0x00080 +#define RLF_INTERRUPTS 0x00100 +#define RLF_MP 0x00200 +#define RLF_DSK 0x00400 +#define RLF_COMPILER 0x00800 +#define RLF_DOC 0x01000 +#define RLF_WINMGR 0x02000 +#define RLF_REGISTRY 0x04000 +#define RLF_HOME 0x08000 +#define RLF_ADAM_SERVER 0x10000 #help_index "Processor" #define LAPIC_BASE 0xFEE00000 @@ -508,11 +515,10 @@ class CKernel #define IA32_FS_BASE 0xC0000100 #define IA32_GS_BASE 0xC0000101 -//Multi-Processor -class CMPMain -{ +class CAP16BitInit +{//AP Multicore U32 jmp; - I64 sys_temp_ptr; + CSysLimitBase ap_gdt_ptr; }; #help_index "Time/CPU Cycles;Time/HPET;Time/Jiffies" @@ -606,7 +612,7 @@ class CSema #help_index "Hash/System" //Hash table types -//$LK,"ST_HTT_TYPES",A="FF:::/Kernel/Define1a.CPP,ST_HTT_TYPES"$ +//$LK,"ST_HTT_TYPES",A="FF:::/Kernel/KDefine.CPP,ST_HTT_TYPES"$ #define HTt_EXPORT_SYS_SYM 0 #define HTt_IMPORT_SYS_SYM 1 #define HTt_DEFINE_STR 2 @@ -644,8 +650,8 @@ class CSema #define HTT_CLASS 0x00010 //CHashClass #define HTT_INTERNAL_TYPE 0x00020 //CHashClass #define HTT_FUN 0x00040 //CHashFun -#define HTT_WORD 0x00080 //CHashWS -- only in WS table -#define HTT_DICT_WORD 0x00100 //CHashGeneric -- only in WS table +#define HTT_WORD 0x00080 //CHashAC--only in AutoComplete table +#define HTT_DICT_WORD 0x00100 //CHashGeneric--only in AutoComplete table #define HTT_KEYWORD 0x00200 //CHashGeneric #define HTT_ASM_KEYWORD 0x00400 //CHashGeneric #define HTT_OPCODE 0x00800 //CHashOpcode @@ -684,17 +690,13 @@ public class CHash //in front for searches. Old function code is not freed //because a reference might use it. CHash *next; -//Sometimes, the whole hash table is traversed, for example, in $LK,"PSectFind",A="MN:PSectFind"$(). -//To speed traversal, the following links allow skipping -//the empty slots. - CHash *next_added,*last_added; U8 *str; U32 type,use_cnt; //use_cnt is never decremented. It is incremented //each time a node is found in a hash search. //One place it is used is to tell if a externed function was unused //before being defined. It is also used for popularity measures -//in wordstat. You can do a $LK,"Who",A="MN:Who"$() to see +//in autocomplete. You can do a $LK,"Who",A="MN:Who"$() to see //roughly how many times a symbol has been //referenced. Beware of instances where //a hash entry is continuously searched for and @@ -732,12 +734,11 @@ public class CHashReg:CHash public class CHashTable { CHashTable *next; - CHash *next_added,*last_added; I64 mask,locked_flags; CHash **body; }; -public class CHashWS:CHash +public class CHashAC:CHash { I32 num; U32 hits; @@ -789,7 +790,8 @@ public class CMemberLstMeta public class CMemberLst { - CMemberLst *next,*left,*right,*left2,*right2; + CMemberLst *next,*left,*right, + *left2,*right2; //For finding dup class local vars, not names. U8 *str; CHashClass *member_class,*member_class2; CMemberLstMeta *meta; @@ -820,7 +822,7 @@ public class CHashClass:CHashSrcSym {//See $LK,"PrsClassNew",A="MN:PrsClassNew"$(). base_class of $LK,"CHashFun",A="MN:CHashFun"$ I64 size,neg_offset; U32 member_cnt; - U8 ptr_cnt,raw_type; + U8 ptr_stars_cnt,raw_type; U16 flags; CMemberLst *member_lst,*member_lst2, *last_in_member_lst; @@ -992,20 +994,20 @@ public class CHashGlblVar:CHashSrcSym #define DOCEF_CHECKED_COLLAPSED 0x40000000000 //Checked or Collapsed #define DOCEF_CHECK_COLLAPSABLE 0x80000000000 #define DOCEF_REFRESH_DATA 0x100000000000 -#define DOCEF_DATA_IS_PTR 0x200000000000 -#define DOCEF_HAS_TERMINATOR 0x400000000000 -#define DOCEF_ZERO_BASED 0x800000000000 -#define DOCEF_HOLD 0x1000000000000 -#define DOCEF_TREE 0x2000000000000 -#define DOCEF_LST 0x4000000000000 -#define DOCEF_SKIP 0x8000000000000 -#define DOCEF_POPUP 0x10000000000000 -#define DOCEF_SKIP_IN_FORM 0x20000000000000 -#define DOCEF_HARD_SKIP 0x40000000000000 -#define DOCEF_FILTER_SKIP 0x80000000000000 -#define DOCEF_NO_CLICK_ON 0x100000000000000 -#define DOCEF_DONT_DRAW 0x200000000000000 //only works on sprites -#define DOCEF_UPDATE_DATA 0x400000000000000 +#define DOCEF_UPDATE_DATA 0x200000000000 +#define DOCEF_DATA_IS_PTR 0x400000000000 +#define DOCEF_HAS_TERMINATOR 0x800000000000 +#define DOCEF_ZERO_BASED 0x1000000000000 +#define DOCEF_HOLD 0x2000000000000 +#define DOCEF_TREE 0x4000000000000 +#define DOCEF_LST 0x8000000000000 +#define DOCEF_SKIP 0x10000000000000 +#define DOCEF_POPUP 0x20000000000000 +#define DOCEF_SKIP_IN_FORM 0x40000000000000 +#define DOCEF_HARD_SKIP 0x80000000000000 +#define DOCEF_FILTER_SKIP 0x100000000000000 +#define DOCEF_NO_CLICK_ON 0x200000000000000 +#define DOCEF_DONT_DRAW 0x400000000000000 //only works on sprites #define DOCEG1_DONT_EDIT (DOCEF_DEFINE|DOCEF_HTML_LINK|\ DOCEF_BIN_PTR_LINK|DOCEF_SCROLLING_X|DOCEF_TAG_CB) @@ -1067,20 +1069,20 @@ public class CHashGlblVar:CHashSrcSym #define DOCEf_CHECKED_COLLAPSED 42 //Checked or Collapsed #define DOCEf_CHECK_COLLAPSABLE 43 #define DOCEf_REFRESH_DATA 44 -#define DOCEf_DATA_IS_PTR 45 -#define DOCEf_HAS_TERMINATOR 46 -#define DOCEf_ZERO_BASED 47 -#define DOCEf_HOLD 48 -#define DOCEf_TREE 49 -#define DOCEf_LST 50 -#define DOCEf_SKIP 51 -#define DOCEf_POPUP 52 -#define DOCEf_SKIP_IN_FORM 53 -#define DOCEf_HARD_SKIP 54 -#define DOCEf_FILTER_SKIP 55 -#define DOCEf_NO_CLICK_ON 56 -#define DOCEf_DONT_DRAW 57 //only works on sprites -#define DOCEf_UPDATE_DATA 58 +#define DOCEf_UPDATE_DATA 45 +#define DOCEf_DATA_IS_PTR 46 +#define DOCEf_HAS_TERMINATOR 47 +#define DOCEf_ZERO_BASED 48 +#define DOCEf_HOLD 49 +#define DOCEf_TREE 50 +#define DOCEf_LST 51 +#define DOCEf_SKIP 52 +#define DOCEf_POPUP 53 +#define DOCEf_SKIP_IN_FORM 54 +#define DOCEf_HARD_SKIP 55 +#define DOCEf_FILTER_SKIP 56 +#define DOCEf_NO_CLICK_ON 57 +#define DOCEf_DONT_DRAW 58 //only works on sprites #define DOCEf_NUM_FLAGS 59 public class CDocBin @@ -1217,11 +1219,13 @@ class CEdFileName #define EDF_BAIL 0x100 #define EDF_COLLAPSE 0x200 #define EDF_UNCOLLAPSE 0x400 +#define EDF_WAS_WRITE 0x800 //Was exit ESC or SHIFT_ESC? //Combines with $LK,"Document Flags",A="MN:DOF_MIN_SIZE"$ #define EDf_BAIL 8 #define EDf_COLLAPSE 9 #define EDf_UNCOLLAPSE 10 +#define EDf_WAS_WRITE 11 // DOC header flags #define DOCF_PLAIN_TEXT 0x1 @@ -1334,7 +1338,7 @@ public class CDoc //Linked Text File header cmd_U8; U32 doc_signature,cur_bin_num; I64 max_entries, - refresh_cnt; + updates_cnt; CEdFindText *find_replace; U8 *cur_sprite; @@ -1420,26 +1424,22 @@ class CWinMgrTimingGlbls I64 last_total_jiffies, last_idle_pt_hits[MP_MAX_PROCESSORS], last_swap_cnter[MP_MAX_PROCESSORS]; - F64 last_refresh_time, - last_refresh_start_time, - last_refresh_end_time, - refresh_time, - refresh_delta_time; - I64 refresh_cnt, - refresh_skips; + F64 last_calc_idle_time,calc_idle_delta_time; + I64 calc_idle_cnt; }; +#define WMG_FPS 30 + public class CWinMgrGlbls { I64 updates; F64 ode_time, last_ode_time, - desired_fps, //This is chosen by the winmgr. - fps; //You can read but not write this. You have no control. + fps, //You can read but not write this. You have no control. + last_refresh_tS; CTask *old_focus_task; CWinMgrTimingGlbls *t; - Bool first, //First after start-up complete - show_menu, + Bool show_menu, grab_scroll, grab_scroll_closed; }; @@ -1477,10 +1477,10 @@ public class CWinMgrGlbls #define RT_I32 8 #define RT_U32 9 #define RT_I64 10 -#define RT_PTR 10 +#define RT_PTR 10 //Signed to allow negative err codes. $LK,"DOCM_CANCEL",A="MN:DOCM_CANCEL"$ #define RT_U64 11 #define RT_F32 12 //Not implemented -#define RT_UF32 13 //Not implemented +#define RT_UF32 13 //Not implemented, Fictitious #define RT_F64 14 #define RT_UF64 15 //Fictitious #define RT_NUM_IT 16 @@ -1572,7 +1572,7 @@ class CIntermediateCode:CIntermediateCodeBase //points back to its two earlier addend instructions, not MAlloced, //just pointers to previous CIntermediate codes in the array. - //Tree links get destroyed during Pass789 when they get overwrites + //Tree links get destroyed during Pass789A when they get overwrites //by machine code. (Saves room to union the output machine code buffer //with these links, since they are not needed after pass4. @@ -1920,6 +1920,13 @@ class CLexCodeCtrl }; #help_index "Compiler/Lex" +#define __DATE__ #exe{StreamPrint("\"%D\"",Now);} +#define __TIME__ #exe{StreamPrint("\"%T\"",Now);} +#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);} +#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);} +#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);} +#define __DIR__ #exe{StreamDir;} + #define LFSF_DOC 1 #define LFSF_DEFINE 2 class CLexFile @@ -1927,7 +1934,7 @@ class CLexFile U8 *buf, *buf_ptr; I64 line_num,flags; - U8 *name, + U8 *full_name, *line_start; CDoc *doc; CDocEntry *cur_entry; @@ -2065,7 +2072,7 @@ public class CLex U8 *cur_str; I64 cur_str_len, class_ip; - U8 *dollar; + U8 *dollar_buf; I64 dollar_cnt; U8 *cur_help_index; I64 last_U16, @@ -2086,7 +2093,7 @@ public class CLex I64 pass, opts, - pass_trace_mask, + otrace_mask, error_cnt,warning_cnt; //For intermediate codes with multiple float ops (int<->float conversions) @@ -2100,7 +2107,7 @@ public class CLex CAOTCtrl *a; I64 a_depth; - U0 end_of_zeroed_members; + U0 end_zeroed; CLexFile lfns[LFN_CNT]; CLexFile stk[LFN_STK_CNT]; U0 pad;#assert !($$&7) //(compiler lags one token) @@ -2115,15 +2122,11 @@ public class CCmpGlbls CIntermediateCode ic_nop; U32 *dual_U16_tokens1,*dual_U16_tokens2,*dual_U16_tokens3, *binary_ops; - U8 *arg_cnt,*result_cnt, - *ic_bitmap_deref,*ic_bitmap_assign, - *ic_bitmap_not_const,*ic_bitmap_cmp, - *ic_bitmap_fpop; I64 num_stk_temps,num_reg_vars,num_non_ptr_vars, stk_temps_mask,reg_vars_mask,non_ptr_vars_mask; U8 *to_stk_temps_map_odd,*to_stk_temps_map_even, *to_reg_vars_map,*non_ptr_vars_map; - I64 compiled_lines,compiled_funs,compiled_bytes; + I64 compiled_lines; }; #help_index "Debugging/Unassemble" @@ -2153,7 +2156,7 @@ public class CATARep I64 num,type,base0,base1,unit,irq; }; -//See $LK,"::/Doc/Acknowledgements.TXT"$. +//See $LK,"::/Doc/Credits.TXT"$. #define ATA_NOP 0x00 #define ATA_DEV_RST 0x08 #define ATA_PACKET 0xA0 @@ -2207,27 +2210,28 @@ class CMBRPrt end_head; U16 end_cyl; U32 offset, //Sects between MBR and first sect - size; //Sects in partition + size; //Sects in drv }; class CMasterBoot { - U8 boot_code[440]; + U8 code[440]; U32 media_id; U16 zero; CMBRPrt p[4]; U16 signature; //AA55 }; -class CBootStruct +class CRedSeaBoot { U8 jump_and_nop[3], signature,reserved[4]; //MBR_PT_REDSEA=0x88. Distinguish from real FAT32 - I64 sects, + I64 base_offset, //For CD/DVD image copy. + sects, root_cluster, bitmap_sects, unique_id; - U8 code[470]; + U8 code[462]; U16 signature2; //0xAA55 }; @@ -2240,7 +2244,7 @@ class CFAT32Boot U16 reserved_sects; U8 copies_of_fat; U16 max_root_dir_entries, //Not used - old_sects_in_prt; //Not used + old_sects_in_drv; //Not used U8 media_desc; //F64 for hard disk U16 old_sects_per_fat, //Not used sects_per_track, @@ -2270,7 +2274,7 @@ class CFAT32FileInfoSect U8 unknown[480]; U32 signature2, free_clusters, - most_recently_allocated; + most_recently_alloced; U8 reserved[12]; U32 signature3; }; @@ -2376,7 +2380,7 @@ class CISO1PathEntry #define ISO1T_BOOT_RECORD 0 #define ISO1T_PRI_VOL_DESC 1 #define ISO1T_SUPPLEMENTARY_DESC 2 -#define ISO1T_VOL_PRT_DESC 3 +#define ISO1T_VOL_DRV_DESC 3 #define ISO1T_TERMINATOR 255 class CISO1PriDesc @@ -2554,7 +2558,7 @@ public class CDirEntry #define BD_SIGNATURE_VAL 'BDSV' public class CBlkDev { - CBlkDev *lock_fwding; + CBlkDev *lock_fwding; //If two blkdevs on same controller, use just one lock I64 locked_flags; U32 type,flags, bd_signature; @@ -2569,21 +2573,21 @@ public class CBlkDev U32 max_reads,max_writes; }; -//Partition locked flags -#define Plf_LOCKED 0 +//Drive locked flags +#define DVlf_LOCKED 0 -//See $LK,"ST_PRT_TYPES",A="MN:ST_PRT_TYPES"$ -#define PT_NULL 0 -#define PT_REDSEA 1 //Supported -#define PT_FAT32 2 //Supported except for short names, to some degree -#define PT_ISO9660 3 //Supported (CD-ROM) -#define PT_ISO13490 4 //Not Supported (CD-ROM) -#define PT_ISO13346 5 //Not Supported (CD-ROM) -#define PT_NTFS 6 //Not Supported -#define PT_UNKNOWN 7 -#define PT_NUM_TYPES 8 +//See $LK,"ST_DRV_TYPES",A="MN:ST_DRV_TYPES"$ +#define DVT_NULL 0 +#define DVT_REDSEA 1 //Supported +#define DVT_FAT32 2 //Supported except for short names, to some degree +#define DVT_ISO9660 3 //Supported (CD-ROM) +#define DVT_ISO13490 4 //Not Supported (CD-ROM) +#define DVT_ISO13346 5 //Not Supported (CD-ROM) +#define DVT_NTFS 6 //Not Supported +#define DVT_UNKNOWN 7 +#define DVT_NUM_TYPES 8 -#define PTf_DISABLE 31 //High bit of type is disable +#define DVTf_DISABLE 31 //High bit of type is disable #define MBR_PT_FAT12 0x01 #define MBR_PT_FAT32a 0x0B @@ -2601,33 +2605,31 @@ class CFreeLst I64 start,size; }; -#define NUM_PRTS 32 +#define NUM_DRVS 32 -#define PRT_SIGNATURE_VAL 'PTSV' -public class CPrt +#define DRV_SIGNATURE_VAL 'DVSV' +public class CDrv { //Don't access ->drv_let directly in case a drive has been remapped. -//Use $LK,"Prt2Drv",A="MN:Prt2Drv"$(). +//Use $LK,"Drv2Let",A="MN:Drv2Let"$(). I64 locked_flags; U32 type, //Bit31 is used as a disable, since it will be unknown - flags, //Flags not used at the moment - pt_signature; - U8 drv_let,text_attr,pad[2]; - I64 offset, + dv_signature; + U8 drv_let,text_attr,pad[6]; + I64 base_offset, size, file_system_info_sect, map1,map2, root_cluster, - data, + data_area, spc; //sectors per cluster CTask *owning_task; - CBlkDev *bdev; + CBlkDev *bd; CFAT32FileInfoSect *fis; - I64 num_buffered_map_blks, + I64 map_blk_dirty, cur_map_blk_num; U32 *cur_map_blk; - U8 *buffered_map_dirty_bits; CFreeLst *next_free,*last_free; }; @@ -2637,7 +2639,7 @@ class CCacheBlk { CCacheBlk *next_lru,*last_lru; CCacheBlk *next_hash,*last_hash; - CPrt *p; + CDrv *dv; I64 blk; U8 body[BLK_SIZE]; }; @@ -2649,17 +2651,17 @@ public class CDskGlbls CCacheBlk *cache_base,*cache_ctrl,**cache_hash_table; I64 cache_size,read_cnt,write_cnt; CBlkDev *blkdevs; - CPrt *prts,*drv_to_prt[32]; + CDrv *drvs,*let_to_drv[32]; I64 auto_mount_ide_cnt; - U8 first_hd_drv_let,first_cd_drv_let, - temp_filename[136]; + U8 temp_filename[136],boot_drv_let, + first_hd_drv_let,first_cd_drv_let; Bool boot_rescue_drv_pmt,cdrom_boot_is_good; }; #help_index "File/Internal" public class CFileAccess { - CPrt *old_prt,*p; + CDrv *old_dv,*dv; U8 *old_dir,*mask; }; @@ -2677,7 +2679,7 @@ public class CFile { I64 flags; CDirEntry de; - CPrt *p; + CDrv *dv; I64 fblk_num,cluster,file_cluster_num,max_blk; U8 *cluster_buf; }; @@ -2686,30 +2688,30 @@ public class CFile #define _CFG_HEAP_DBG FALSE #if _CFG_HEAP_DBG -class CMemUnusedAllocated +class CMemUnused { CHeapCtrl *hc; U8 *caller1,*caller2; - CMemUnusedAllocated *next; + CMemUnused *next; I64 size; }; -class CMemUsedAllocated +class CMemUsed { CHeapCtrl *hc; U8 *caller1,*caller2; - CMemUsedAllocated *next,*last; + CMemUsed *next,*last; I64 size; U0 start; }; #else -class CMemUnusedAllocated +class CMemUnused { U0 hc; U0 caller1,caller2; - CMemUnusedAllocated *next; + CMemUnused *next; I64 size; }; -class CMemUsedAllocated +class CMemUsed { CHeapCtrl *hc; U0 caller1,caller2; @@ -2719,7 +2721,7 @@ class CMemUsedAllocated }; #endif -#help_index "Memory/Blk Pool" +#help_index "Memory/BlkPool" /*TempleOS does not mess with page tables after it identity-maps them during boot -- $LK,"SYS_INIT_MEM",A="MN:SYS_INIT_MEM"$. $LK,"PAGE_SIZE",A="MN:PAGE_SIZE"$ is arbitrary, and is not related to CPU hardware. @@ -2773,23 +2775,20 @@ class CMemRange #define SETH_STK (PAGE_SIZE*512) #define INTERRUPT_STK (PAGE_SIZE*512) #define DFT_STK (PAGE_SIZE*512) -#define MP_DFT_STK (PAGE_SIZE*512) -#define ADAM_HASH_SIZE (1<<18) -#define STD_HASH_SIZE (1<<12) -#define MP_STD_HASH_SIZE (1<<12) +#define TASK_HASH_SIZE (1<<10) //locked flags #define BPlf_LOCKED 0 public class CBlkPool { - I64 locked_flags,size,allocated_u8s; + I64 locked_flags,alloced_u8s,used_u8s; CMemBlk *mem_free_lst,*mem_free_2meg_lst, *free_page_hash[FREE_PAGE_HASH_SIZE], *free_page_hash2[64-PAGE_BITS]; }; -#help_index "Memory/Heap Ctrl" +#help_index "Memory/HeapCtrl" //locked flags #define HClf_LOCKED 0 @@ -2798,12 +2797,12 @@ public class CHeapCtrl { CBlkPool *bp; U32 hc_signature,pad; - I64 locked_flags,used_u8s; + I64 locked_flags,alloced_u8s,used_u8s; CTask *mem_task; CMemBlk *next_mem_blk,*last_mem_blk; - CMemUnusedAllocated *malloc_free_lst; - CMemUsedAllocated *next_um,*last_um; - CMemUnusedAllocated *heap_hash[HEAP_HASH_SIZE/sizeof(U8 *)]; + CMemUnused *malloc_free_lst; + CMemUsed *next_um,*last_um; + CMemUnused *heap_hash[HEAP_HASH_SIZE/sizeof(U8 *)]; }; #help_index "Devices" @@ -2885,7 +2884,7 @@ public U32i class CBGR U8 b,g,r,reserved; }; -#help_index "Keyboard Devices" +#help_index "Keyboard Devices;Char/Input" #define KBD_PORT 0x60 #define KBD_CTRL 0x64 public class CKbdStateGlbls @@ -3024,7 +3023,6 @@ public class CCtrl }; #help_index "Menus" -#define MENU_SIGNATURE_VAL 'MnuS' public class CMenuEntry { CMenuEntry *next; @@ -3040,8 +3038,7 @@ public class CMenu CMenuEntry *sub; CTask *task; I64 flags; - U32 mu_signature; - U8 attr,checked_attr,pad[2]; + U8 attr,pad[7]; }; #help_index "Task" @@ -3064,7 +3061,7 @@ class CFPU U8 body[512]; }; -#help_index "Task/Srv" +#help_index "Task/Srv/Exe" #define SVCf_WAKE_MASTER 0 #define SVCf_FOCUS_MASTER 1 #define SVCf_EXIT_ON_COMPLETE 2 @@ -3076,12 +3073,12 @@ class CFPU #define SVCf_FREE_ON_COMPLETE 7 #define SVCf_ADD_TO_QUE 8 -#define SVCT_TEXT_INPUT 0 -#define SVCT_MSG 1 -#define SVCT_EXE_STR 2 +#define SVCT_TEXT_INPUT 0 //$LK,"TaskText",A="MN:TaskText"$() Feed StdIn +#define SVCT_MSG 1 //$LK,"TaskMsg",A="MN:TaskMsg"$() Post msg +#define SVCT_EXE_STR 2 //$LK,"TaskExe",A="MN:TaskExe"$() Compile & execute src code text //MP cmds -#define SVCT_CALL 3 -#define SVCT_SPAWN_TASK 4 +#define SVCT_CALL 3 //$LK,"JobQue",A="MN:JobQue"$() Tell MP to call function +#define SVCT_SPAWN_TASK 4 //$LK,"Spawn",A="MN:Spawn"$() Tell MP to spawn task class CSrvCmd { @@ -3145,6 +3142,7 @@ class CSrvCtrl public class CTaskSettings { CTaskSettings *next; + U8 *cur_dir; I64 left,right,top,bottom; U0 (*draw_it)(CTask *task,CDC *dc); U0 (*task_end_cb)(); @@ -3155,15 +3153,15 @@ public class CTaskSettings U8 text_attr,title_src, border_attr,border_src, task_title[TASK_TITLE_LEN+1]; - Bool border,preempt,cursor,scroll,wordstat,pad[3]; + Bool border,preempt,cursor,scroll,autocomplete,pad[3]; U0 pad;#assert !($$&7) //(compiler lags one token) }; #help_index "Task" //Border ATTR src #define BDS_CONST 0 -#define BDS_CUR_PRT 1 -#define BDS_ED_FILENAME_PRT 2 +#define BDS_CUR_DRV 1 +#define BDS_ED_FILENAME_DRV 2 //Task title src #define TTS_CONST 0 @@ -3187,6 +3185,7 @@ U0 pad;#assert !($$&7) //(compiler lags one token) #define TASKf_PENDING_BREAK 11 #define TASKf_BREAK_TO_SHIFT_ESC 12 #define TASKf_KILL_AFTER_DBG 13 +#define TASKf_NONTIMER_RAND 14 //locked flags #define TASKLf_TASK_LOCK 0 @@ -3210,7 +3209,7 @@ class CTaskStk U0 stk_base; }; -public class CTask //The Fs segment reg points to current CTask +public class CTask //The Fs segment reg points to current CTask. { CTask *addr; //Self-addressed ptr U32 task_signature,task_in_que_signature; @@ -3224,7 +3223,7 @@ public class CTask //The Fs segment reg points to current CTask *border_doc; I64 win_left,win_right,win_top,win_bottom; - CPrt *cur_prt; + CDrv *cur_dv; U8 *cur_dir; CTask *parent_task, @@ -3288,7 +3287,7 @@ public class CTask //The Fs segment reg points to current CTask U0 (*task_end_cb)(); CTask *song_task,*animate_task; - I64 rnd_seed, + I64 rand_seed, task_num, fault_num,fault_err_code; CTask *popup_task; @@ -3335,7 +3334,7 @@ class CTSS #define CPUf_RAN_A_TASK 0 #define CPUf_SETH_SLEEP 1 -public class CCPU //The Gs segment reg points to current CCPU +public class CCPU //The Gs segment reg points to current CCPU. { CCPU *addr; //Self-addressed ptr I64 num,cpu_flags, @@ -3357,8 +3356,9 @@ U0 pad;#assert !($$&7) //(compiler lags one token) }; #help_index "Memory/Page Tables" -#define MEM_MAPPED_SPACE 0x2000000000 //Arbitrarily set to 128 Gig -#define MEM_NUM_PML1 1 //First 2 Meg are 4K resolution +#define MEM_MIN_MEG 512 //512 Meg minimum. +#define MEM_MAPPED_SPACE 0x2000000000 //Arbitrarily set to 128 Gig. +#define MEM_NUM_PML1 1 //First 2 Meg are 4K resolution. #define MEM_NUM_PML2 (MEM_MAPPED_SPACE>>(9+21)) #define MEM_NUM_PML3 1 #define MEM_NUM_PML4 1 @@ -3498,7 +3498,7 @@ public class CTextGlbls I64 raw_col,raw_flags; U8 *raw_screen_image; I64 rows,cols; //Use TEXT_ROWS,TEXT_COLS - U8 *font; + U64 *font; }; #define FONT_WIDTH 8 @@ -3546,11 +3546,11 @@ class CGrSym public class CDC { - U0 start_saved_area; - I32 width,width_internal,height, + U0 start; + I32 width,width_internal, + height, flags; - I64 body_size; - U0 end_saved_area; + U0 end; //public (Change directly) CColorROPU32 color, @@ -3608,41 +3608,35 @@ U0 pad;#assert !($$&7) //(compiler lags one token) }; #help_index "Devices" -#define VGA_GRAPHIC_MEM_BASE 0xA0000 -#define VGA_TEXT_MEM_BASE 0xB8000 +//VGA Memory +#define VGAM_GRAPHICS 0xA0000 +#define VGAM_TEXT 0xB8000 -#define VGA_ATTR_INDEX 0x03C0 -#define VGA_ATTR_DATA_WRITE 0x03C0 //alias -#define VGA_ATTR_DATA_READ 0x03C1 -#define VGA_MISC_OUTPUT 0x03C2 -#define VGA_SC_INDEX 0x03C4 -#define VGA_SC_DATA 0x03C5 -#define VGA_PALETTE_MASK 0x03C6 -#define VGA_REG_READ 0x03C7 -#define VGA_REG_WRITE 0x03C8 -#define VGA_PALETTE_DATA 0x03C9 -#define VGA_CRTC_INDEX 0x03D4 -#define VGA_CRTC_DATA 0x03D5 -#define VGA_INPUT_STAT 0x03DA -#define VGA_MAP_MASK 0x02 +//VGA I/O ports +#define VGAP_ATTR_INDEX 0x03C0 +#define VGAP_ATTR_DATA_WRITE 0x03C0 //alias +#define VGAP_ATTR_DATA_READ 0x03C1 +#define VGAP_MISC_OUTPUT 0x03C2 +#define VGAP_INDEX 0x03C4 +#define VGAP_DATA 0x03C5 +#define VGAP_PALETTE_MASK 0x03C6 +#define VGAP_REG_READ 0x03C7 +#define VGAP_REG_WRITE 0x03C8 +#define VGAP_PALETTE_DATA 0x03C9 +#define VGAP_CRTC_INDEX 0x03D4 +#define VGAP_CRTC_DATA 0x03D5 +#define VGAP_INPUT_STAT 0x03DA -#define VGA_H_TOTAL 0x00 -#define VGA_H_BLANK_START 0x02 -#define VGA_H_RETRACE_START 0x04 -#define VGA_V_TOTAL 0x06 -#define VGA_MAX_SCAN_LINE 0x09 -#define VGA_V_RETRACE_END 0x11 -#define VGA_OFFSET 0x13 -#define VGA_V_BLANK_START 0x15 -#define VGA_MODE_CTRL 0x17 +//VGA Registers +#define VGAR_MAP_MASK 0x02 #help_index "Compression/Piece by Piece" #define ARC_MAX_BITS 12 #define ARC_MAX_ENTRY (1<diff -public _extern _D3_SUB_EQU CD3 *D3SubEqu(CD3 *diff,CD3 *d); //diff-=d public _extern _D3_UNIT CD3 *D3Unit(CD3 *d); //Convert to unit vect +public _extern _D3_SUB_EQU CD3 *D3SubEqu(CD3 *diff,CD3 *d); //diff-=d public _extern _D3_ZERO CD3 *D3Zero(CD3 *dst); //Convert to zero #help_index "Memory" @@ -146,12 +143,12 @@ _extern SYS_HEAP_INIT_FLAG U8 sys_heap_init_flag; _extern SYS_HEAP_INIT_VAL U8 sys_heap_init_val; _extern SYS_MEM_INIT_FLAG U8 sys_mem_init_flag; _extern SYS_MEM_INIT_VAL U8 sys_mem_init_val; -_extern SYS_VAR_INIT_FLAG U8 sys_var_init_flag; _extern SYS_VAR_INIT_VAL U8 sys_var_init_val; +_extern SYS_VAR_INIT_FLAG U8 sys_var_init_flag; -#help_index "Memory/Blk Pool" -public _extern SYS_CODE_BP CBlkPool *sys_code_bp; //System's blk pool for code. -public _extern SYS_DATA_BP CBlkPool *sys_data_bp; //System's blk pool for data. +#help_index "Memory/BlkPool" +public _extern SYS_CODE_BP CBlkPool *sys_code_bp; //System's BlkPool for code. +public _extern SYS_DATA_BP CBlkPool *sys_data_bp; //System's BlkPool for data. #help_index "Memory/Info" _extern SYS_HEAP_BASE U8 *sys_heap_base; @@ -181,9 +178,9 @@ public _extern SYS_FOCUS_TASK CTask *sys_focus_task; //Current focus task. #help_index "MultiCore" #help_file "::/Doc/MultiCore" -public _extern SYS_CPU_STRUCTS CCPU *cpu_structs;//$LK,"Gs",A="MN:Gs"$ points to cur $LK,"CCPU",A="MN:CCPU"$. +public _extern SYS_CPU_STRUCTS CCPU *cpu_structs; //$LK,"Gs",A="MN:Gs"$ points to cur $LK,"CCPU",A="MN:CCPU"$. public _extern SYS_MP_CNT I64 mp_cnt; //Count of cores -_extern SYS_MP_CNT_INITIAL I64 mp_cnt_initial; //only used during $LK,"MPStart",A="MN:MPStart"$ +_extern SYS_MP_CNT_INITIAL I64 mp_cnt_initial; //only used during $LK,"BSPStartMP",A="MN:BSPStartMP"$ _extern SYS_MP_CNT_LOCK I64 mp_cnt_lock; _extern SYS_SEMAS CSema sys_semas[NUM_SYS_SEMAS]; @@ -220,8 +217,10 @@ public _extern SYS_CACHE_LINE_WIDTH I64 sys_cache_line_width; //CPU's Cache line _extern SYS_GDT CGDT sys_gdt; #help_index "Processor/Cache;Memory/Cache" -public _intern IC_CLFLUSH U0 CLFlush(U8 *a); //Flush cache line. -public _intern IC_INVLPG U0 InvlPg(U8 *a); //Invalidate page at addr. +public _intern IC_CLFLUSH U0 CLFlush(U8 *a); //Flush cache line instruction. + +#help_index "Processor/Page Tables;Memory/Page Tables" +public _intern IC_INVLPG U0 InvlPg(U8 *a); //Invalidate page at addr instruction. #help_index "Task" public _intern IC_PREEMPT Bool Preempt(Bool val); //Turn mutli-tasking preemption OFF/ON. diff --git a/Kernel/Adam1c.HPP b/Kernel/KernelC.HPP similarity index 85% rename from Kernel/Adam1c.HPP rename to Kernel/KernelC.HPP index e4da383..d609350 100644 --- a/Kernel/Adam1c.HPP +++ b/Kernel/KernelC.HPP @@ -96,28 +96,28 @@ public extern U0 PutChars(U64 ch); extern U0 PutHex(I64 num,I64 width); public extern U0 PutKey(I64 ch=0,I64 sc=0); extern U0 PutS(U8 *st); //Use $LK,"Print",A="MN:Print"$() -public extern Bool Silent(Bool val); +public extern Bool Silent(Bool val=ON); extern U8 *StrPrintHex(U8 *dst,I64 num;I64 width); #help_index "Char;Debugging/Raw Output" public extern CTextGlbls text; #help_index "Compiler/Lex" -public extern U0 SetSrcFileInfo(CLex *lx,CHashSrcSym *h,I64 line_num_offset=0); +public extern U0 HashSrcFileSet(CLex *lx,CHashSrcSym *h,I64 line_num_offset=0); #help_index "Compiler;Cmd Line (Typically)" extern U8 *Load(U8 *filename,I64 ld_flags=0,CBinFile *bfh_addr=INVALID_PTR); //INVALID_PTR means don't care what load addr. #help_index "Compression" -public extern CArcCompress *CompressBuf(U8 *src,I64 size,I64 flags=0,CTask *mem_task=NULL); +public extern CArcCompress *CompressBuf(U8 *src,I64 size,CTask *mem_task=NULL); public extern U8 *ExpandBuf(CArcCompress *r,CTask *mem_task=NULL); #help_index "Compression/Piece by Piece" public extern U0 ArcCompressBuf(CArcCtrl *c); public extern U0 ArcCtrlDel(CArcCtrl *c); -public extern CArcCtrl *ArcCtrlNew(Bool expand,Bool seven_bit); +public extern CArcCtrl *ArcCtrlNew(Bool expand,I64 compression_type=CT_8_BIT); public extern U0 ArcExpandBuf(CArcCtrl *c); -public extern U0 ArcFinishCompression(CArcCtrl *c); +public extern Bool ArcFinishCompression(CArcCtrl *c); #help_index "Data Types/Circular Queue" public extern I64 QueCnt(CQue *root); @@ -172,7 +172,7 @@ public extern I64 B2(CTask *task=NULL,Bool live=TRUE); extern CBpt *BptFind(U8 *needle_addr,CTask *haystack_task=NULL,Bool rem=FALSE); public extern Bool BptR(U8 *addr,CTask *task=NULL,Bool live=TRUE,Bool rem=TRUE); public extern Bool BptS(U8 *addr,CTask *task=NULL,Bool live=TRUE); -public extern U0 E(U8 *addr,I64 cnt=512,I64 edf_dof_flags=0); +public extern Bool E(U8 *addr,I64 cnt=512,I64 edf_dof_flags=0); public extern U0 G(U8 *ip=INVALID_PTR,CTask *task=NULL); public extern U0 G2(U8 *ip=INVALID_PTR,CTask *task=NULL); public extern Bool InDbg(Bool val); @@ -180,7 +180,7 @@ public extern Bool IsDbg(); public extern U0 S(U8 *ip=INVALID_PTR,CTask *task=NULL); #help_index "Debugging/Debugger;DolDoc/Cmd Line (Typically);Cmd Line (Typically);Training" -public extern U0 Man(U8 *st); +public extern Bool Man(U8 *st,I64 edf_dof_flags=0); #help_index "Debugging/Dump" public extern U0 CallerRep(U8 **rbp=NULL,CTask *task=NULL); @@ -213,10 +213,10 @@ public extern U0 VGAFlush(); #help_index "Debugging;Debugging/Debugger" public extern U0 Dbg(U8 *msg=NULL,I64 msg_num=0); -public extern U0 EdLite(U8 *filename,I64 num=1); -extern U0 EdLiteFileLine(U8 *fl_file_line); -public extern U0 Fix(); -public extern U0 SetFix(U8 *filename,I64 line); +public extern Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0); +extern Bool EdLiteFileLine(U8 *fl_file_line,I64 edf_dof_flags=0); +public extern Bool Fix(I64 edf_dof_flags=0); +public extern U0 FixSet(U8 *filename,I64 line); #help_index "Define;Char/Define" #help_file "::/Doc/Define" @@ -264,12 +264,12 @@ public extern I64 FSize(CFile *f); public extern Bool FWBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1); #help_index "File/Cmd Line (Typically);Cmd Line (Typically)" -public extern Bool Cd(U8 *dirname,Bool make_dirs=FALSE); +public extern Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE); public extern U0 ChgDsk(U8 drv_let=0); public extern I64 Del(U8 *wild,Bool print_msg=TRUE); public extern I64 Dir(U8 *wild="*",Bool full=FALSE); public extern Bool Drv(U8 drv_let); -public extern Bool MapDrv(U8 drv_let,CPrt *p); +public extern Bool MapDrv(U8 drv_let,CDrv *dv); public extern Bool MkDir(U8 *filename); #help_index "File/FileNames" @@ -292,52 +292,50 @@ public extern U0 PutDirLink(U8 *dirname); public extern U0 PutFileLink(U8 *filename,I64 line=0,Bool plain_text=FALSE); public extern U0 ToFileLine(U8 *_fl_file_line,U8 **_filename,I64 *_linenum); public extern U8 *ToggleZorNotZ(U8 *name); -public extern U8 *sys_acct; #help_index "File/FileNames;Misc" public extern U8 *FileNameTempTxt(); #help_index "File/Internal" -public extern Bool DirNew(CPrt *p,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain=TRUE); +public extern Bool DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain=TRUE); public extern U0 FileAccessDel(CFileAccess *fa); public extern CFileAccess *FileAccessNew(U8 *mask,Bool make_mask=FALSE,Bool make_dirs=FALSE,Bool no_mask=FALSE); extern I64 FileAttr(U8 *name,I64 old_attr=0); #help_index "File/Low Level" -public extern U0 BlkDevChk(CBlkDev *bdev); -public extern Bool BlkDevLock(CBlkDev *bdev); +public extern U0 BlkDevChk(CBlkDev *bd); +public extern Bool BlkDevLock(CBlkDev *bd); public extern CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type); -public extern Bool BlkDevUnlock(CBlkDev *bdev,Bool rst=FALSE); +public extern Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE); public extern U0 BlkDevsRelease(); -extern U0 CleanMAPBuf(CPrt *p); -public extern I64 Cluster2Blk(CPrt *p,I64 c); -public extern I64 ClusterNumNext(CPrt *p,I64 c,I64 cnt=1); -public extern I64 ClustersAlloc(CPrt *p,I64 c=0,I64 cnt=1,Bool contiguous=FALSE); +public extern I64 Cluster2Blk(CDrv *dv,I64 c); +public extern I64 ClusterNumNext(CDrv *dv,I64 c,I64 cnt=1); +public extern I64 ClustersAlloc(CDrv *dv,I64 c=0,I64 cnt=1,Bool contiguous=FALSE); extern Bool CopySingle(U8 *f1,U8 *f2); //Just one file -public extern CBlkDev *Drv2BlkDev(U8 drv_let=0); -public extern CPrt *Drv2Prt(U8 drv_let=0); +public extern U8 Drv2Let(CDrv *dv=NULL); +public extern U0 DrvChk(CDrv *dv); +public extern Bool DrvLock(CDrv *dv); +public extern CDrv *DrvMakeFree(U8 drv_let); public extern U8 *DrvModelNum(U8 drv_let=0); +public extern CDrv *DrvNextFree(U8 first_drv_let='C'); public extern U8 *DrvSerialNum(U8 drv_let=0); -extern U0 FAT32FreeClusters(CPrt *p,I64 c); -extern I64 Name2DirCluster(CPrt *p,U8 *dirname); -extern I64 Name2ParentDirCluster(CPrt *p,U8 *dirname); -public extern U8 Prt2Drv(CPrt *p=NULL); -public extern U0 PrtChk(CPrt *p); -public extern Bool PrtLock(CPrt *p); -public extern CPrt *PrtMakeFree(U8 drv_let); -public extern CPrt *PrtNextFree(U8 first_drv_let='C'); -public extern Bool PrtUnlock(CPrt *p,Bool rst=FALSE); -public extern U0 PrtsRelease(); -public extern Bool RBlks(CPrt *p,U8 *buf, I64 blk, I64 cnt); -public extern I64 RClusters(CPrt *p,U8 *buf,I64 c,I64 cnt); -public extern I64 RClustersBlks(CPrt *p,U8 *buf,I64 c,I64 blks); -extern U0 RedSeaFSFreeClusters(CPrt *p,I64 c,I64 cnt); +public extern Bool DrvUnlock(CDrv *dv,Bool rst=FALSE); +public extern U0 DrvsRelease(); +extern U0 FAT32FreeClusters(CDrv *dv,I64 c); +public extern CBlkDev *Let2BlkDev(U8 drv_let=0); +public extern CDrv *Let2Drv(U8 drv_let=0); +extern I64 Name2DirCluster(CDrv *dv,U8 *dirname); +extern I64 Name2ParentDirCluster(CDrv *dv,U8 *dirname); +public extern Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt); +public extern I64 RClusters(CDrv *dv,U8 *buf,I64 c,I64 cnt); +public extern I64 RClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks); +extern U0 RedSeaFreeClusters(CDrv *dv,I64 c,I64 cnt); extern I64 SysDel(U8 *wild,Bool make_mask); //this is dangerous extern CDirEntry *SysFilesFind(U8 *files_find_mask,I64 fuf_flags); -public extern Bool WBlks(CPrt *p,U8 *buf, I64 blk, I64 cnt); -public extern I64 WClusters(CPrt *p,U8 *buf,I64 c,I64 cnt); -public extern I64 WClustersBlks(CPrt *p,U8 *buf,I64 c,I64 blks); -public extern U0 WZeroBlks(CPrt *p,I64 blk,I64 cnt); +public extern Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt); +public extern I64 WClusters(CDrv *dv,U8 *buf,I64 c,I64 cnt); +public extern I64 WClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks); +public extern U0 WZeroBlks(CDrv *dv,I64 blk,I64 cnt); #help_index "File/Program Routines" public extern U0 DirEntryDel(CDirEntry *tempde); @@ -345,24 +343,23 @@ public extern U0 DirEntryDel2(CDirEntry *tempde); public extern U0 DirTreeDel(CDirEntry *tempde); public extern U0 DirTreeDel2(CDirEntry *tempde); public extern Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0); -public extern U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL,Bool raw=FALSE); -public extern I64 FileWrite(U8 *filename,U8 *fbuf, - I64 size,CDate cdt=0,I64 attr=0,Bool raw=FALSE); +public extern U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL); +public extern I64 FileWrite(U8 *filename,U8 *fbuf,I64 size,CDate cdt=0,I64 attr=0); #help_index "File/Program Routines;File/FileNames" public extern CDirEntry *FilesFind(U8 *files_find_mask,I64 fuf_flags=0); #help_index "File/System" -public extern CATARep *ATAIDDrvs(CATARep *root,U8 _sys_acct_drv,CATARep **_ata_drv,CATARep **_atapi_drv); +public extern CATARep *ATAIDDrvs(CATARep *root,I64 _sys_boot_drv,CATARep **_ata_drv,CATARep **_atapi_drv); extern CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit); -extern Bool ATAPIStartStop(CBlkDev *bdev,F64 timeout,Bool start); +extern Bool ATAPIStartStop(CBlkDev *bd,F64 timeout,Bool start); extern I64 ATAProbe(I64 base0,I64 base1,I64 unit); -extern U0 ATAReadBlks(CBlkDev *bdev,U8 *buf, I64 blk, I64 cnt); -extern U0 ATAWriteBlks(CBlkDev *bdev,U8 *buf, I64 blk, I64 cnt); +extern U0 ATAReadBlks(CBlkDev *bd,U8 *buf, I64 blk, I64 cnt); +extern U0 ATAWriteBlks(CBlkDev *bd,U8 *buf, I64 blk, I64 cnt); public extern I64 AutoMountIDE(); -extern I64 BlkDevAdd(CBlkDev *bdev,Bool one_prt,Bool make_free); +extern I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free); extern U0 DskCacheInit(I64 size_in_U8s); -public extern U0 DskCacheInvalidate(CPrt *p); +public extern U0 DskCacheInvalidate(CDrv *dv); public extern CDskGlbls dsk; #help_index "Graphics/Color" @@ -390,14 +387,14 @@ public _extern _HASH_STR I64 HashStr(U8 *st); public extern U0 HashTableDel(CHashTable *table); public extern CHashTable *HashTableNew(I64 size,CTask *mem_task=NULL); public extern I64 HashTablePurge(CHashTable *table); -public extern I64 HashVal(CHash *temph); public extern I64 HashTypeNum(CHash *temph); +public extern I64 HashVal(CHash *temph); extern U0 SysSymImportsResolve(U8 *sptr,I64 ld_flags=0); #help_index "Hash/Frame" #help_file "::/Doc/Frame" public extern I64 FramePtr(U8 *name,CTask *task=NULL); -public extern CHashGeneric *FramePtrAdd(U8 *name,I64 val,CTask *task=NULL); +public extern CHashGeneric *FramePtrAdd(U8 *name,I64 val=0,CTask *task=NULL); public extern I64 FramePtrDel(U8 *name,CTask *task=NULL); public extern I64 FramePtrSet(U8 *name,I64 val,CTask *task=NULL); @@ -408,12 +405,12 @@ public extern I64 HashLstAdd(U8 *lst,I64 type,CHashTable *table); public extern I64 HashDefineLstAdd(U8 *name,I64 type,CHashTable *table); #help_index "Info;File/Cmd Line (Typically);Cmd Line (Typically);Install" -public extern U0 PrtRep(); +public extern U0 DrvRep(); #help_index "Input Pointer" #help_file "::/Doc/InputPointer" public extern U0 GridInit(); -public extern U0 SetIP(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64); +public extern U0 IPSet(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64); public extern CIPStateGlbls ip; public extern CGridGlbls ip_grid; extern CIPStateGlbls ip_last; @@ -432,18 +429,18 @@ extern CATARep *ATARepFind(CATARep *haystack_root,I64 needle_num); public extern Bool DrvEnable(U8 drv_let,Bool val); #help_index "Install;File/Cmd Line (Typically);Cmd Line (Typically);" -public extern U0 Fmt(U8 drv_let,Bool quick=TRUE,Bool confirm=TRUE,I64 type=PT_FAT32); +public extern U0 Fmt(U8 drv_let,Bool quick=TRUE,Bool confirm=TRUE,I64 type=DVT_FAT32); public extern U0 Mount(Bool repartition=FALSE); -#help_index "Install;Memory/Blk Pool" +#help_index "Install;Memory/BlkPool" public extern I64 Scale2Mem(I64 min,I64 max,I64 limit=2*1024*1024*1024); #help_index "Keyboard Devices/System;Char/System" #help_file "::/Doc/KeyDev" +public extern U0 CtrlAltLetCBSet(U8 ch,U0 (*fp_handler)(I64 sc),U8 *desc,Bool in_irq=FALSE); +public extern U0 KeyDescSet(U8 *fmt,...); public extern CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc),Bool (*fp_puts)(U8 *st),I64 priority,Bool key_descs=FALSE); public extern U0 KeyDevRem(CKeyDevEntry *tempp); -public extern U0 SetCtrlAltLetCB(U8 ch,U0 (*fp_handler)(I64 sc),U8 *desc,Bool in_irq=FALSE); -public extern U0 SetKeyDesc(U8 *fmt,...); extern CKeyDevGlbls keydev; extern CSrvCmd sys_macro_root; extern CTask *sys_macro_util_task; @@ -460,13 +457,13 @@ public extern I64 KbdMouseEvtTime(); extern U0 KbdMouseHandler(Bool poll_kbd,Bool poll_mouse); extern U0 KbdMouseVarsInit(); extern I64 KbdMsgsQue(); +public extern U0 KbdTypeMatic(U8 delay); extern Bool MouseDriverInstall(); public extern I64 PressAKey(); public extern I64 ScanChar(); -public extern Bool ScanKey(I64 *_ch=NULL,I64 *_scan_code=NULL,Bool echo=FALSE); -public extern U0 SetTypeMatic(U8 delay); public extern Bool YorN(); public extern CKbdStateGlbls kbd; +public extern Bool ScanKey(I64 *_ch=NULL,I64 *_scan_code=NULL,Bool echo=FALSE); #help_index "Math" public extern I64 CeilI64(I64 num,I64 to); @@ -478,42 +475,29 @@ public extern F64 Max(F64 n1,F64 n2); public extern F64 Min(F64 n1,F64 n2); public extern F64 Pow10I64(I64 i); public extern F64 Rand(); //With timestamp -public extern F64 Rand2(); //Without timestamp -public extern I16 Rand2I16(); -public extern I32 Rand2I32(); -public extern I64 Rand2I64(); -public extern U16 Rand2U16(); -public extern U32 Rand2U32(); -public extern U64 Rand2U64(); public extern I16 RandI16(); public extern I32 RandI32(); public extern I64 RandI64(); public extern U16 RandU16(); public extern U32 RandU32(); public extern U64 RandU64(); -public extern U0 Randomize(I64 seed=0); public extern I64 RoundI64(I64 num,I64 to); -extern I64 sys_rnd_seed; +public extern I64 Seed(I64 seed=0,CTask *task=NULL); #help_index "Memory/Adam Heap" public extern U8 *ACAlloc(I64 size); public extern U8 *AMAlloc(I64 size); public extern U8 *AMAllocIdentical(U8 *src); -#help_index "Memory/Blk Pool" +#help_index "Memory/BlkPool" public extern U0 BlkPoolAdd(CBlkPool *bp,CMemBlk *m,I64 pages512); public extern U0 BlkPoolInit(CBlkPool *bp,I64 pages512); -public extern U8 *MemBlks2MegAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL); -public extern U0 MemBlks2MegFree(CMemBlk *m,I64 pages2Meg,CBlkPool *bp=NULL); -public extern U8 *MemBlksIndependentAlloc(I64 *_pages512,CBlkPool *bp=NULL); -public extern U0 MemBlksNonTaskFree(CMemBlk *m,I64 pages512,CBlkPool *bp=NULL); -public extern U8 *MemBlksUncachedAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL); -public extern U8 *MemBlksWriteThroughAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL); - -#help_index "Memory/Heap Ctrl" -public extern CHeapCtrl *HeapCtrlBPInit(CBlkPool *bp,I64 pages512); -public extern U0 HeapCtrlDel(CHeapCtrl *hc); -public extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL,CTask *task=NULL,CBlkPool *bp); +public extern U8 *Mem2MegAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL); +public extern U0 Mem2MegFree(CMemBlk *m,I64 pages2Meg,CBlkPool *bp=NULL); +public extern U8 *Mem2MegUncachedAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL); +public extern U8 *Mem2MegWriteThruAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL); +public extern U8 *Mem512Alloc(I64 *_pages512,CBlkPool *bp=NULL); +public extern U0 Mem512Free(CMemBlk *m,I64 pages512,CBlkPool *bp=NULL); #help_index "Memory/Heap" public extern U8 *CAlloc(I64 size,CTask *mem_task=NULL); @@ -526,6 +510,11 @@ public _extern _MHEAP_CTRL CHeapCtrl *MHeapCtrl(U8 *src); public _extern _MSIZE I64 MSize(U8 *src); //size of heap object public _extern _MSIZE2 I64 MSize2(U8 *src); //Internal size +#help_index "Memory/HeapCtrl" +public extern CHeapCtrl *HeapCtrlBPInit(CBlkPool *bp,I64 pages512); +public extern U0 HeapCtrlDel(CHeapCtrl *hc); +public extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL,CTask *task=NULL,CBlkPool *bp); + #help_index "Memory/Page Tables" public extern Bool MemLowPagesProtect(Bool val=TRUE); public extern Bool MemPagePresentMark(U8 *a,Bool val); @@ -550,11 +539,11 @@ public extern U0 QSortI64(I64 *base,I64 num, I64 (*fp_compare)(I64 e1,I64 e2)); public extern U0 ProgressBarsRst(); #help_index "MultiCore" +extern U0 APSethTask(); +extern U0 BSPStartMP(); public extern U0 MPInt(U8 num,I64 cpu_num=1); public extern U0 MPIntAll(U8 num); public extern U0 MPNMInt(); -extern U0 MPSethServerTask(); -extern U0 MPStart(); public extern U0 MPWake(I64 target_cpu); extern CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL, U8 *task_name=NULL,I64 target_cpu, @@ -564,7 +553,7 @@ extern CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL, #help_index "MultiCore;Boot" public extern U0 MPHalt(); -#help_index "MultiCore;Task/Srv" +#help_index "MultiCore;Task/Srv/Exe" public extern CSrvCmd *JobQue(I64 (*fp_addr)(U8 *data),U8 *data=NULL, I64 target_cpu=1,I64 flags=1<hi) - return hi; - return num; -} - -F64 Min(F64 n1,F64 n2) -{//Min of two F64s. - if (n1<=n2) - return n1; - else - return n2; -} - -F64 Max(F64 n1,F64 n2) -{//Max of two F64s. - if (n1>=n2) - return n1; - else - return n2; -} - -F64 Pow10I64(I64 i) -{//F64 integer powers of ten. - if (i>308) - return ì; - else if (i<-308) - return 0.0; - else - return pow10_I64[i+309]; -} - -U64 FloorU64(U64 num,U64 to) -{//Integer multiples of num. - return num-num%to; -} - -U64 CeilU64(U64 num,U64 to) -{//Integer multiples of num. - num+=to-1; - return num-num%to; -} - -I64 RoundI64(I64 num,I64 to) -{//Integer multiples of num. - return num-num%to; -} - -I64 FloorI64(I64 num,I64 to) -{//Integer multiples of num. - if (num>=0) - return num-num%to; - else { - num++; - return num-num%to-to; - } -} - -I64 CeilI64(I64 num,I64 to) -{//Integer multiples of num. - if (num>=0) { - num+=to-1; - return num-num%to; - } else { - num+=to-1; - return num-num%to-to; - } -} - -//See $LK,"::/Doc/Acknowledgements.TXT"$. -I16 RandI16() -{//Random I16. Xor with TimsStamp. - sys_rnd_seed.i32[0]=(1664525*sys_rnd_seed.i32[0]+1013904223)^GetTSC>>4; - return sys_rnd_seed.i16[0]; -} - -U16 RandU16() -{//Random U16. Xor with TimsStamp. - sys_rnd_seed.i32[0]=(1664525*sys_rnd_seed.i32[0]+1013904223)^GetTSC>>4; - return sys_rnd_seed.u16[0]; -} - -I32 RandI32() -{//Random I32. Xor with TimsStamp. - sys_rnd_seed.i32[0]=(1664525*sys_rnd_seed.i32[0]+1013904223)^GetTSC>>4; - return sys_rnd_seed.i32[0]; -} - -U32 RandU32() -{//Random U32. Xor with TimsStamp. - sys_rnd_seed.i32[0]=(1664525*sys_rnd_seed.i32[0]+1013904223)^GetTSC>>4; - return sys_rnd_seed.u32[0]; -} - -I64 RandI64() -{//Random I64. Xor with TimsStamp. - I64 result; - result.u32[0]=sys_rnd_seed.i32[0]=(1664525*sys_rnd_seed.i32[0]+1013904223)^GetTSC>>4; - result.u32[1]=sys_rnd_seed.i32[0]= 1664525*sys_rnd_seed.i32[0]+1013904223; - return result; -} - -U64 RandU64() -{//Random U64. Xor with TimsStamp. - U64 result; - result.u32[0]=sys_rnd_seed.i32[0]=(1664525*sys_rnd_seed.i32[0]+1013904223)^GetTSC>>4; - result.u32[1]=sys_rnd_seed.i32[0]= 1664525*sys_rnd_seed.i32[0]+1013904223; - return result; -} - -F64 Rand() -{//Random F64. Xor with TimsStamp. 0.0<=x<1.0 - I64 result; - result.u32[0]=sys_rnd_seed.i32[0]=(1664525*sys_rnd_seed.i32[0]+1013904223)^GetTSC>>4; - result.u32[1]=sys_rnd_seed.i32[0]= 1664525*sys_rnd_seed.i32[0]+1013904223; - result&=0x3FFFFFFFFFFFFFFF; - return result/ToF64(0x4000000000000000); -} - -I16 Rand2I16() -{//Random I16. No time input. - Fs->rnd_seed.i32[0]=1664525*Fs->rnd_seed.i32[0]+1013904223; - return Fs->rnd_seed.i16[0]; -} - -U16 Rand2U16() -{//Random U16. No time input. - Fs->rnd_seed.i32[0]=1664525*Fs->rnd_seed.i32[0]+1013904223; - return Fs->rnd_seed.u16[0]; -} - -I32 Rand2I32() -{//Random I32. No time input. - Fs->rnd_seed.i32[0]=1664525*Fs->rnd_seed.i32[0]+1013904223; - return Fs->rnd_seed.i32[0]; -} - -U32 Rand2U32() -{//Random U32. No time input. - Fs->rnd_seed.i32[0]=1664525*Fs->rnd_seed.i32[0]+1013904223; - return Fs->rnd_seed.u32[0]; -} - -I64 Rand2I64() -{//Random I64. No time input. - I64 result; - result.u32[0]=Fs->rnd_seed.i32[0]= 1664525*Fs->rnd_seed.i32[0]+1013904223; - result.u32[1]=Fs->rnd_seed.i32[0]= 1664525*Fs->rnd_seed.i32[0]+1013904223; - return result; -} - -U64 Rand2U64() -{//Random U64. No time input. - U64 result; - result.u32[0]=Fs->rnd_seed.i32[0]= 1664525*Fs->rnd_seed.i32[0]+1013904223; - result.u32[1]=Fs->rnd_seed.i32[0]= 1664525*Fs->rnd_seed.i32[0]+1013904223; - return result; -} - -F64 Rand2() -{//Random F64. No time input. 0.0<=x<1.0 - I64 result; - result.u32[0]=Fs->rnd_seed.i32[0]= 1664525*Fs->rnd_seed.i32[0]+1013904223; - result.u32[1]=Fs->rnd_seed.i32[0]= 1664525*Fs->rnd_seed.i32[0]+1013904223; - result&=0x3FFFFFFFFFFFFFFF; - return result/ToF64(0x4000000000000000); -} - -U0 Randomize(I64 seed=0) -{//Randomizes $LK,"CTask",A="MN:CTask"$ seed. - if (seed) - Fs->rnd_seed=seed; - else - Fs->rnd_seed=GetTSC>>4; -} diff --git a/Kernel/Mem1a.CPP b/Kernel/MemA.CPP similarity index 87% rename from Kernel/Mem1a.CPP rename to Kernel/MemA.CPP index 5e72fcc..6a524b6 100644 --- a/Kernel/Mem1a.CPP +++ b/Kernel/MemA.CPP @@ -1,5 +1,5 @@ asm { -/*See $LK,"::/Doc/Acknowledgements.TXT"$. +/*See $LK,"::/Doc/Credits.TXT"$. See $LK,"::/Doc/MemOverview.TXT"$ */ @@ -9,7 +9,7 @@ SYS_INIT_MEM:: MOV EDI,SYS_FIXED_AREA XOR EAX,EAX MOV ECX,sizeof(CSysFixedArea)/4 - REP_STOSD + REP_STOSD //Init entire SYS_FIXED_AREA to zero //PML1 MOV EAX,0x107 @@ -24,7 +24,7 @@ SYS_INIT_MEM:: ADC EDX,0 LOOP @@05 -//0xA0000-0xBFFFF: video ram=write through +//0xA0000-0xBFFFF: video ram=write thru MOV EAX,0xF XOR EDX,EDX MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml1+0xA0*8 @@ -146,7 +146,8 @@ pain without MAlloc up-and-running. MOV U32 CBlkPool.mem_free_lst+4[ESI],0 MOV U32 CMemBlk.mb_signature[EBX],MBS_UNUSED_SIGNATURE_VAL MOV U32 CMemBlk.pages[EBX],EAX - ADD U32 CBlkPool.size[ESI],EAX + SHL EAX,PAGE_BITS + ADD U32 CBlkPool.alloced_u8s[ESI],EAX RET } @@ -188,9 +189,9 @@ Bool MemPagePresentMark(U8 *a,Bool val) return result; } -U8 *MemBlksIndependentAlloc(I64 *_pages512,CBlkPool *bp=NULL) -{/*Alloc 512Byte pages from bp. Don't link to task. -(Linking to a task means it will be freed when the task dies.) +U8 *Mem512Alloc(I64 *_pages512,CBlkPool *bp=NULL) +{/*Alloc 512Byte pages from BlkPool. Don't link to task. +(Linking to a task means they will be freed when the task dies.) It might give you more than you asked for so a ptr to a page count is passed. @@ -255,14 +256,14 @@ Return: NULL if out of memory. } at_done: *_pages512=num; - bp->allocated_u8s+=num<used_u8s+=num<locked_flags,BPlf_LOCKED); POPFD return result; } -U0 MemBlksNonTaskFree(CMemBlk *m,I64 pages512,CBlkPool *bp=NULL) -{//Return nontask 512Byte pages(s) to bp. +U0 Mem512Free(CMemBlk *m,I64 pages512,CBlkPool *bp=NULL) +{//Return non-task 512Byte pages to BlkPool. I64 i; if (m) { if (!bp) bp=sys_code_bp; @@ -272,7 +273,7 @@ U0 MemBlksNonTaskFree(CMemBlk *m,I64 pages512,CBlkPool *bp=NULL) PAUSE m->mb_signature=MBS_UNUSED_SIGNATURE_VAL; m->pages=pages512; - bp->allocated_u8s-=pages512<used_u8s-=pages512<next=bp->free_page_hash[pages512]; bp->free_page_hash[pages512]=m; @@ -292,8 +293,8 @@ U0 MemBlksNonTaskFree(CMemBlk *m,I64 pages512,CBlkPool *bp=NULL) } } -U8 *MemBlks2MegAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL) -{/*Alloc 2Meg pages from bp. Don't link to task. +U8 *Mem2MegAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL) +{/*Alloc 2Meg pages from BlkPool. Don't link to task. (Linking to a task means they will be freed when the task dies.) It might give you more than you asked for so a ptr to a page count is passed. @@ -381,7 +382,7 @@ Return: NULL if out of memory. } am_done: i=num<allocated_u8s+=i; + bp->used_u8s+=i; num>>=21-PAGE_BITS; *_pages2Meg=num; m=result; @@ -397,9 +398,9 @@ am_done: return result; } -U8 *MemBlksUncachedAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL) -{/*Alloc 2Meg pages from bp. Don't link to task. -(Linking to a task means it will be freed when the task dies.) +U8 *Mem2MegUncachedAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL) +{/*Alloc 2Meg pages from BlkPool. Don't link to task. +(Linking to a task means they will be freed when the task dies.) It will be marked uncached. It might give you more than you asked for so a ptr to a page count is passed. @@ -407,7 +408,7 @@ Return: NULL if out of memory. */ CMemBlk *result,*m,*m1; I64 num=*_pages2Meg,*pte; - if (result=MemBlks2MegAlloc(_pages2Meg,bp)) { + if (result=Mem2MegAlloc(_pages2Meg,bp)) { num=*_pages2Meg; m=result; m1=m(U8 *)+num<<21; @@ -421,8 +422,8 @@ Return: NULL if out of memory. return result; } -U8 *MemBlksWriteThroughAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL) -{/*Alloc 2Meg pages from bp. Don't link to task. +U8 *Mem2MegWriteThruAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL) +{/*Alloc 2Meg pages from BlkPool. Don't link to task. (Linking to a task means they will be freed when the task dies.) It will be marked write-through. It might give you more than you asked for so a ptr to a page count is passed. @@ -431,7 +432,7 @@ Return: NULL if out of memory. */ CMemBlk *result,*m,*m1; I64 num=*_pages2Meg,*pte; - if (result=MemBlks2MegAlloc(_pages2Meg,bp)) { + if (result=Mem2MegAlloc(_pages2Meg,bp)) { num=*_pages2Meg; m=result; m1=m(U8 *)+num<<21; @@ -445,8 +446,8 @@ Return: NULL if out of memory. return result; } -U0 MemBlks2MegFree(CMemBlk *m,I64 pages2Meg,CBlkPool *bp=NULL) -{//Return 2Meg page(s) to bp. +U0 Mem2MegFree(CMemBlk *m,I64 pages2Meg,CBlkPool *bp=NULL) +{//Return non-task 2Meg pages to BlkPool. I64 *pte; CMemBlk *m1,*m2; if (m) { @@ -465,7 +466,7 @@ U0 MemBlks2MegFree(CMemBlk *m,I64 pages2Meg,CBlkPool *bp=NULL) PAUSE m->mb_signature=MBS_UNUSED_SIGNATURE_VAL; m->pages=pages2Meg<<(21-PAGE_BITS); - bp->allocated_u8s-=pages2Meg<<21; + bp->used_u8s-=pages2Meg<<21; m->next=bp->mem_free_2meg_lst; bp->mem_free_2meg_lst=m; LBtr(&bp->locked_flags,BPlf_LOCKED); @@ -473,7 +474,7 @@ U0 MemBlks2MegFree(CMemBlk *m,I64 pages2Meg,CBlkPool *bp=NULL) } } -CMemBlk *MemBlksAlloc(I64 *_pages512,CHeapCtrl *hc) +CMemBlk *Mem512TaskAlloc(I64 *_pages512,CHeapCtrl *hc) {/*hc must be locked. Interrupts should probably be off Currently, this is only called from $LK,"MAlloc",A="MN:MAlloc"$(). @@ -481,10 +482,11 @@ Return: NULL if out of memory. */ CMemBlk *result; I64 threshold,cnt,size; - CMemUnusedAllocated *uum,**_uum,**_ptr; - if (result=MemBlksIndependentAlloc(_pages512,hc->bp)) { + CMemUnused *uum,**_uum,**_ptr; + if (result=Mem512Alloc(_pages512,hc->bp)) { QueIns(result,hc->last_mem_blk); result->mb_signature=MBS_USED_SIGNATURE_VAL; + hc->alloced_u8s+=*_pages512<malloc_free_lst; while (uum=*_uum) { -#assert !offset(CMemUnusedAllocated.next) +#assert !offset(CMemUnused.next) size=uum->size; if (sizenext; @@ -512,7 +514,7 @@ Return: NULL if out of memory. return result; } -U0 MemBlksFree(CMemBlk *m,CHeapCtrl *hc) +U0 Mem512TaskFree(CMemBlk *m,CHeapCtrl *hc) {//hc must be locked if (m) { PUSHFD @@ -521,7 +523,8 @@ U0 MemBlksFree(CMemBlk *m,CHeapCtrl *hc) SysBadFree(m); else { QueRem(m); - MemBlksNonTaskFree(m,m->pages,hc->bp); + hc->alloced_u8s-=m->pages<pages,hc->bp); } POPFD } diff --git a/Kernel/Mem1b.CPP b/Kernel/MemB.CPP similarity index 67% rename from Kernel/Mem1b.CPP rename to Kernel/MemB.CPP index 9f31a6e..efda13d 100644 --- a/Kernel/Mem1b.CPP +++ b/Kernel/MemB.CPP @@ -27,12 +27,12 @@ _MALLOC:: @@15: MOV RAX,U64 SF_ARG1[RBP] PUSHFD - ADD RAX,CMemUsedAllocated.start+7 //round-up to I64 + ADD RAX,CMemUsed.start+7 //round-up to I64 AND AL,0xF8 -#assert CMemUsedAllocated.start>=sizeof(CMemUnusedAllocated) - CMP RAX,CMemUsedAllocated.start +#assert CMemUsed.start>=sizeof(CMemUnused) + CMP RAX,CMemUsed.start JAE @@20 - MOV RAX,CMemUsedAllocated.start + MOV RAX,CMemUsed.start @@20: CLI @@ -46,7 +46,7 @@ _MALLOC:: MOV RSI,U64 CHeapCtrl.heap_hash[RAX+RDX] TEST RSI,RSI JZ @@35 - MOV RCX,U64 CMemUnusedAllocated.next[RSI] + MOV RCX,U64 CMemUnused.next[RSI] MOV U64 CHeapCtrl.heap_hash[RAX+RDX],RCX JMP I32 MALLOC_ALMOST_DONE @@ -54,14 +54,14 @@ _MALLOC:: @@30: ADD RAX,sizeof(CMemBlk)+PAGE_SIZE-1 SHR RAX,PAGE_BITS - PUSH RDX //preserve heap ctrl + PUSH RDX //preserve HeapCtrl PUSH RAX //num blks (we must pass address of this) MOV RAX,RSP PUSH RDX PUSH RAX //addr of num blks - CALL &MemBlksAlloc + CALL &Mem512TaskAlloc MOV RSI,RAX - POP RAX //blks that were allocated + POP RAX //blks that were alloced POP RDX TEST RSI,RSI JZ @@45 //Out of memory @@ -72,24 +72,24 @@ _MALLOC:: JMP I32 MALLOC_ALMOST_DONE //Little allocation, chunk-off piece from free lst chunks -@@35: LEA RSI,U64 CHeapCtrl.malloc_free_lst-CMemUnusedAllocated.next[RDX] +@@35: LEA RSI,U64 CHeapCtrl.malloc_free_lst-CMemUnused.next[RDX] @@40: MOV RBX,RSI - MOV RSI,U64 CMemUnusedAllocated.next[RBX] + MOV RSI,U64 CMemUnused.next[RBX] TEST RSI,RSI JNZ @@55 PUSH RAX //-**** save byte size ADD RAX,16*PAGE_SIZE-1 SHR RAX,PAGE_BITS - PUSH RDX //preserve heap ctrl + PUSH RDX //preserve HeapCtrl PUSH RAX //num blks (we must pass address of this) MOV RAX,RSP PUSH RDX PUSH RAX //addr of num blks - CALL &MemBlksAlloc + CALL &Mem512TaskAlloc MOV RSI,RAX - POP RAX //blks that were allocated + POP RAX //blks that were alloced POP RDX TEST RSI,RSI JNZ @@50 @@ -107,43 +107,43 @@ _MALLOC:: @@50: LEA RSI,U64 sizeof(CMemBlk)[RSI] SHL RAX,PAGE_BITS SUB RAX,sizeof(CMemBlk) - LEA RBX,U64 CHeapCtrl.malloc_free_lst-CMemUnusedAllocated.next[RDX] - MOV RDI,U64 CMemUnusedAllocated.next[RBX] - MOV U64 CMemUnusedAllocated.next[RSI],RDI - MOV U64 CMemUnusedAllocated.size[RSI],RAX - MOV U64 CMemUnusedAllocated.next[RBX],RSI + LEA RBX,U64 CHeapCtrl.malloc_free_lst-CMemUnused.next[RDX] + MOV RDI,U64 CMemUnused.next[RBX] + MOV U64 CMemUnused.next[RSI],RDI + MOV U64 CMemUnused.size[RSI],RAX + MOV U64 CMemUnused.next[RBX],RSI POP RAX //+**** JMP @@65 -@@55: CMP U64 CMemUnusedAllocated.size[RSI],RAX +@@55: CMP U64 CMemUnused.size[RSI],RAX JB @@40 JNE @@65 -@@60: MOV RDI,U64 CMemUnusedAllocated.next[RSI] - MOV U64 CMemUnusedAllocated.next[RBX],RDI +@@60: MOV RDI,U64 CMemUnused.next[RSI] + MOV U64 CMemUnused.next[RBX],RDI JMP MALLOC_ALMOST_DONE -@@65: SUB U64 CMemUnusedAllocated.size[RSI],RAX //UPDATE FREE ENTRY - CMP U64 CMemUnusedAllocated.size[RSI],sizeof(CMemUnusedAllocated) +@@65: SUB U64 CMemUnused.size[RSI],RAX //UPDATE FREE ENTRY + CMP U64 CMemUnused.size[RSI],sizeof(CMemUnused) JAE @@70 //take from top of block - ADD U64 CMemUnusedAllocated.size[RSI],RAX //doesn't fit, undo + ADD U64 CMemUnused.size[RSI],RAX //doesn't fit, undo JMP I32 @@40 -@@70: ADD RSI,U64 CMemUnusedAllocated.size[RSI] +@@70: ADD RSI,U64 CMemUnused.size[RSI] MALLOC_ALMOST_DONE: -//RSI=result-CMemUsedAllocated.size -//RAX=size+CMemUsedAllocated.size -//RDX=heap ctrl +//RSI=result-CMemUsed.size +//RAX=size+CMemUsed.size +//RDX=HeapCtrl ADD U64 CHeapCtrl.used_u8s[RDX],RAX #if _CFG_HEAP_DBG //QueIns MOV RDI,U64 CHeapCtrl.last_um[RDX] - MOV U64 CMemUsedAllocated.next[RDI],RSI + MOV U64 CMemUsed.next[RDI],RSI MOV U64 CHeapCtrl.last_um[RDX],RSI - MOV U64 CMemUsedAllocated.last[RSI],RDI - LEA RDI,U64 CHeapCtrl.next_um-CMemUsedAllocated.next[RDX] - MOV U64 CMemUsedAllocated.next[RSI],RDI + MOV U64 CMemUsed.last[RSI],RDI + LEA RDI,U64 CHeapCtrl.next_um-CMemUsed.next[RDX] + MOV U64 CMemUsed.next[RSI],RDI //Caller1/Caller2 PUSH RDX @@ -152,9 +152,9 @@ MALLOC_ALMOST_DONE: CMP RDI,RDX JB @@75 XOR RDI,RDI - MOV U64 CMemUsedAllocated.caller1[RSI],RDI + MOV U64 CMemUsed.caller1[RSI],RDI JMP @@85 -@@75: MOV U64 CMemUsedAllocated.caller1[RSI],RDI +@@75: MOV U64 CMemUsed.caller1[RSI],RDI MOV RDI,U64 SF_RBP[RBP] CMP RDI,RDX JB @@80 @@ -164,7 +164,7 @@ MALLOC_ALMOST_DONE: CMP RDI,RDX JB @@85 XOR RDI,RDI -@@85: MOV U64 CMemUsedAllocated.caller2[RSI],RDI +@@85: MOV U64 CMemUsed.caller2[RSI],RDI POP RDX #endif @@ -172,9 +172,9 @@ MALLOC_ALMOST_DONE: BTR U32 CHeapCtrl.locked_flags[RDX],HClf_LOCKED POPFD - MOV U64 CMemUsedAllocated.size[RSI],RAX - MOV U64 CMemUsedAllocated.hc[RSI],RDX - LEA RAX,U64 CMemUsedAllocated.start[RSI] + MOV U64 CMemUsed.size[RSI],RAX + MOV U64 CMemUsed.hc[RSI],RDX + LEA RAX,U64 CMemUsed.start[RSI] TEST U8 [SYS_SEMAS+SYS_SEMA_HEAPLOG_ACTIVE*SEMA_STRUCT_SIZE],1 JZ @@100 @@ -193,8 +193,8 @@ MALLOC_ALMOST_DONE: JZ MALLOC_FINAL_EXIT PUSH RAX - MOV RCX,U64 CMemUsedAllocated.size-CMemUsedAllocated.start[RAX] - SUB RCX,CMemUsedAllocated.start + MOV RCX,U64 CMemUsed.size-CMemUsed.start[RAX] + SUB RCX,CMemUsed.start MOV RDI,RAX MOV AL,U8 [SYS_HEAP_INIT_VAL] REP_STOSB @@ -207,7 +207,7 @@ MALLOC_FINAL_EXIT: RET1 16 //************************************ _FREE:: -//Be aware of $LK,"heap_hash",A="FF:::/Kernel/Mem1b.CPP,heap_hash"$ in $LK,"MemBlksAlloc",A="MN:MemBlksAlloc"$(). +//Be aware of $LK,"heap_hash",A="FF:::/Kernel/MemB.CPP,heap_hash"$ in $LK,"Mem512TaskAlloc",A="MN:Mem512TaskAlloc"$(). PUSH RBP MOV RBP,RSP PUSH RSI @@ -218,7 +218,7 @@ _FREE:: MOV RBX,U64 SF_ARG1[RBP] TEST RBX,RBX JZ @@05 - MOV RAX,U64 CMemUsedAllocated.size-CMemUsedAllocated.start[RBX] + MOV RAX,U64 CMemUsed.size-CMemUsed.start[RBX] TEST RAX,RAX JGE @@05 //Aligned alloced chunks have neg size ADD RBX,RAX @@ -240,23 +240,23 @@ _FREE:: JZ FREE_DONE #endif - MOV RAX,U64 CMemUsedAllocated.size-CMemUsedAllocated.start[RSI] + MOV RAX,U64 CMemUsed.size-CMemUsed.start[RSI] TEST RAX,RAX JGE @@20 //Aligned alloced chunks have neg size. - //The neg size is offset to start of $LK,"CMemUsedAllocated",A="MN:CMemUsedAllocated"$ struct. + //The neg size is offset to start of $LK,"CMemUsed",A="MN:CMemUsed"$ struct. ADD RSI,RAX @@20: PUSHFD - SUB RSI,CMemUsedAllocated.start - MOV RDX,U64 CMemUsedAllocated.hc[RSI] + SUB RSI,CMemUsed.start + MOV RDX,U64 CMemUsed.hc[RSI] CMP U32 CHeapCtrl.hc_signature[RDX],HEAP_CTRL_SIGNATURE_VAL JE @@25 - ADD RSI,CMemUsedAllocated.start + ADD RSI,CMemUsed.start PUSH RSI CALL &SysBadFree JMP I32 _SYS_HLT -@@25: MOV RAX,U64 CMemUsedAllocated.size[RSI] +@@25: MOV RAX,U64 CMemUsed.size[RSI] SUB U64 CHeapCtrl.used_u8s[RDX],RAX CLI @@30: LOCK @@ -265,10 +265,10 @@ _FREE:: JC @@30 #if _CFG_HEAP_DBG //QueRem - MOV RDX,U64 CMemUsedAllocated.next[RSI] - MOV RDI,U64 CMemUsedAllocated.last[RSI] - MOV U64 CMemUsedAllocated.last[RDX],RDI - MOV U64 CMemUsedAllocated.next[RDI],RDX + MOV RDX,U64 CMemUsed.next[RSI] + MOV RDI,U64 CMemUsed.last[RSI] + MOV U64 CMemUsed.last[RDX],RDI + MOV U64 CMemUsed.next[RDI],RDX //Caller1/Caller2 MOV RDX,U64 [SYS_HEAP_LIMIT] @@ -276,9 +276,9 @@ _FREE:: CMP RDI,RDX JB @@35 XOR RDI,RDI - MOV U64 CMemUnusedAllocated.caller1[RSI],RDI + MOV U64 CMemUnused.caller1[RSI],RDI JMP @@45 -@@35: MOV U64 CMemUnusedAllocated.caller1[RSI],RDI +@@35: MOV U64 CMemUnused.caller1[RSI],RDI MOV RDI,U64 SF_RBP[RBP] CMP RDI,RDX JB @@40 @@ -288,18 +288,18 @@ _FREE:: CMP RDI,RDX JB @@45 XOR RDI,RDI -@@45: MOV U64 CMemUnusedAllocated.caller2[RSI],RDI +@@45: MOV U64 CMemUnused.caller2[RSI],RDI - MOV RDX,U64 CMemUsedAllocated.hc[RSI] + MOV RDX,U64 CMemUsed.hc[RSI] #endif CMP RAX,HEAP_HASH_SIZE JAE @@50 -#assert CMemUnusedAllocated.size==CMemUsedAllocated.size -// MOV U64 CMemUnusedAllocated.size[RSI],RAX +#assert CMemUnused.size==CMemUsed.size +// MOV U64 CMemUnused.size[RSI],RAX MOV RBX,U64 CHeapCtrl.heap_hash[RAX+RDX] - MOV U64 CMemUnusedAllocated.next[RSI],RBX + MOV U64 CMemUnused.next[RSI],RBX MOV U64 CHeapCtrl.heap_hash[RAX+RDX],RSI JMP @@55 @@ -307,7 +307,7 @@ _FREE:: PUSH RDX PUSH RDX PUSH RSI - CALL &MemBlksFree + CALL &Mem512TaskFree POP RDX @@55: LOCK @@ -326,12 +326,12 @@ _MSIZE:: XOR RAX,RAX TEST RBX,RBX JZ @@10 - MOV RAX,U64 CMemUsedAllocated.size-CMemUsedAllocated.start[RBX] + MOV RAX,U64 CMemUsed.size-CMemUsed.start[RBX] TEST RAX,RAX JGE @@05 //Aligned alloced chunks have neg size ADD RBX,RAX - MOV RAX,U64 CMemUsedAllocated.size-CMemUsedAllocated.start[RBX] -@@05: SUB RAX,CMemUsedAllocated.start + MOV RAX,U64 CMemUsed.size-CMemUsed.start[RBX] +@@05: SUB RAX,CMemUsed.start @@10: POP RBP RET1 8 //************************************ @@ -342,11 +342,11 @@ _MSIZE2:: XOR RAX,RAX TEST RBX,RBX JZ @@10 - MOV RAX,U64 CMemUsedAllocated.size-CMemUsedAllocated.start[RBX] + MOV RAX,U64 CMemUsed.size-CMemUsed.start[RBX] TEST RAX,RAX JGE @@05 //Aligned alloced chunks have neg size ADD RBX,RAX -@@05: MOV RAX,U64 CMemUsedAllocated.size-CMemUsedAllocated.start[RBX] +@@05: MOV RAX,U64 CMemUsed.size-CMemUsed.start[RBX] @@10: POP RBP RET1 8 //************************************ @@ -357,11 +357,11 @@ _MHEAP_CTRL:: XOR RAX,RAX TEST RBX,RBX JZ @@10 - MOV RAX,U64 CMemUsedAllocated.size-CMemUsedAllocated.start[RBX] + MOV RAX,U64 CMemUsed.size-CMemUsed.start[RBX] TEST RAX,RAX JGE @@05 //Aligned alloced chunks have neg size ADD RBX,RAX -@@05: MOV RAX,U64 CMemUsedAllocated.hc-CMemUsedAllocated.start[RBX] +@@05: MOV RAX,U64 CMemUsed.hc-CMemUsed.start[RBX] @@10: POP RBP RET1 8 } @@ -370,11 +370,11 @@ _extern _FREE U0 Free(U8 *addr); //Free $LK,"MAlloc",A="MN:MAlloc"$()ed memory c _extern _MSIZE I64 MSize(U8 *src); //Size of heap object. _extern _MSIZE2 I64 MSize2(U8 *src); //Internal size of heap object. _extern _MHEAP_CTRL CHeapCtrl *MHeapCtrl(U8 *src); //$LK,"CHeapCtrl",A="MN:CHeapCtrl"$ of object. -_extern _MALLOC U8 *MAlloc(I64 size,CTask *mem_task=NULL); //Allocate memory chunk. +_extern _MALLOC U8 *MAlloc(I64 size,CTask *mem_task=NULL); //Alloc memory chunk. //Accepts a $LK,"CTask",A="MN:CTask"$ or $LK,"CHeapCtrl",A="MN:CHeapCtrl"$. NULL allocs off current task's heap. U8 *AMAlloc(I64 size) -{//Allocate memory in Adam's heap. +{//Alloc memory in Adam's heap. return MAlloc(size,adam_task); } @@ -386,7 +386,7 @@ U8 *CAlloc(I64 size,CTask *mem_task=NULL) } U8 *ACAlloc(I64 size) -{//Allocate and set to zero memory in Adam's heap. +{//Alloc and set to zero memory in Adam's heap. return CAlloc(size,adam_task); } @@ -402,7 +402,7 @@ U8 *MAllocIdentical(U8 *src,CTask *mem_task=NULL) } U8 *AMAllocIdentical(U8 *src) -{//Allocate in Adam's heap, identical copy of heap node. +{//Alloc in Adam's heap, identical copy of heap node. return MAllocIdentical(src,adam_task); } @@ -412,7 +412,7 @@ U8 *MAllocAligned(I64 size,I64 alignment,CTask *mem_task=NULL,I64 misalignment=0 U8 *ptr=MAlloc(size+mask+sizeof(I64)+misalignment,mem_task), *result=(ptr+sizeof(I64)+mask)&~mask+misalignment; result(I64 *)[-1]=ptr-result; -#assert offset(CMemUsedAllocated.size)==offset(CMemUsedAllocated.start)-sizeof(I64) +#assert offset(CMemUsed.size)==offset(CMemUsed.start)-sizeof(I64) return result; } @@ -422,7 +422,7 @@ U8 *CAllocAligned(I64 size,I64 alignment,CTask *mem_task=NULL,I64 misalignment=0 U8 *ptr=MAlloc(size+mask+sizeof(I64)+misalignment,mem_task), *result=(ptr+sizeof(I64)+mask)&~mask+misalignment; result(I64 *)[-1]=ptr-result; -#assert offset(CMemUsedAllocated.size)==offset(CMemUsedAllocated.start)-sizeof(I64) +#assert offset(CMemUsed.size)==offset(CMemUsed.start)-sizeof(I64) MemSet(result,0,size); return result; } @@ -443,6 +443,6 @@ U8 *StrNew(U8 *buf,CTask *mem_task=NULL) } U8 *AStrNew(U8 *buf) -{//Allocate copy of string in Adam's heap. +{//Alloc copy of string in Adam's heap. return StrNew(buf,adam_task); } diff --git a/Kernel/Mem1c.CPP b/Kernel/MemC.CPP similarity index 92% rename from Kernel/Mem1c.CPP rename to Kernel/MemC.CPP index baba671..444a63c 100644 --- a/Kernel/Mem1c.CPP +++ b/Kernel/MemC.CPP @@ -1,5 +1,5 @@ U0 BlkPoolAdd(CBlkPool *bp,CMemBlk *m,I64 pages512) -{//Add memory to blk pool. +{//Add mem to BlkPool. if (sys_mem_init_flag) MemSet(m,sys_mem_init_val,pages512*512); PUSHFD @@ -9,20 +9,20 @@ U0 BlkPoolAdd(CBlkPool *bp,CMemBlk *m,I64 pages512) m->next=bp->mem_free_lst; m->pages=pages512; m->mb_signature=MBS_UNUSED_SIGNATURE_VAL; - bp->size+=pages512; + bp->alloced_u8s+=pages512<mem_free_lst=m; LBtr(&bp->locked_flags,BPlf_LOCKED); POPFD } U0 BlkPoolInit(CBlkPool *bp,I64 pages512) -{//Make memory chunk into a blk pool. +{//Make mem chunk into a BlkPool. I64 num; CMemBlk *m; MemSet(bp,0,sizeof(CBlkPool)); m=(bp(U8 *)+sizeof(CBlkPool)+PAGE_SIZE-1)&~(PAGE_SIZE-1); num=(bp(U8 *)+pages512<>PAGE_BITS; - bp->size=pages512-num; //Compensate before num added. + bp->alloced_u8s=(pages512-num)<mem_task=task; hc->bp=bp; QueInit(&hc->next_mem_blk); - hc->next_um=hc->last_um=(&hc->next_um)(U8 *)-offset(CMemUsedAllocated.next); + hc->next_um=hc->last_um=(&hc->next_um)(U8 *)-offset(CMemUsed.next); return hc; } CHeapCtrl *HeapCtrlBPInit(CBlkPool *bp,I64 pages512) -{//Make memory chunk into heap ctrl and blk pool. +{//Make mem chunk into HeapCtrl and BlkPool. I64 num; CMemBlk *m; CHeapCtrl *hc; @@ -47,13 +47,13 @@ CHeapCtrl *HeapCtrlBPInit(CBlkPool *bp,I64 pages512) hc=HeapCtrlInit(bp(U8 *)+sizeof(CBlkPool),,bp); m=(bp(U8 *)+sizeof(CBlkPool)+sizeof(CHeapCtrl)+PAGE_SIZE-1)&~(PAGE_SIZE-1); num=(bp(U8 *)+pages512<>PAGE_BITS; - bp->size=pages512-num; + bp->alloced_u8s=(pages512-num)<next_mem_blk; while (m!=&hc->next_mem_blk) { m1=m->next; - MemBlksFree(m,hc); + Mem512TaskFree(m,hc); m=m1; } LBtr(&hc->locked_flags,HClf_LOCKED); @@ -305,9 +305,12 @@ U0 HeapsInit() I64 Scale2Mem(I64 min,I64 max,I64 limit=2*1024*1024*1024) {//Helps pick DiskCache and RAMDisk sizes. -//Can be used in $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() config scripts. -//Scale-back allocations if less than 2048 Meg. - I64 i=sys_code_bp->size<alloced_u8s; + else + i=sys_code_bp->alloced_u8s; if (i>=limit) return max; else diff --git a/Kernel/MultiProc.CPP b/Kernel/MultiProc.CPP index 3dc3d27..af13ba6 100644 --- a/Kernel/MultiProc.CPP +++ b/Kernel/MultiProc.CPP @@ -5,33 +5,28 @@ USE16 //This code gets copied to $LK,"MP_VECT_ADDR",A="MN:MP_VECT_ADDR"$. //See $LK,"MemCpy(MP_VECT_ADDR",A="FF:::/Kernel/MultiProc.CPP,MemCpy(mp:2"$. -SYS_MP_INIT_START:: - JMP MP2_START2 +AP_16BIT_INIT:: + JMP @@05 + ALIGN 4,OC_NOP -MP2_SYS_TEMP_PTR: DU32 0,0; - -MP2_START2: - CLI +AP_GDT_PTR: DU16 sizeof(CGDT)-1; + DU64 0; +@@05: CLI WBINVD - MOV AX,MP_VECT_ADDR/16 MOV DS,AX - -//See $LK,"mp->sys_temp_ptr",A="FF:::/Kernel/MultiProc.CPP,mp->sys_temp_ptr:2"$ -#assert MP2_SYS_TEMP_PTR-SYS_MP_INIT_START==CMPMain.sys_temp_ptr - LGDT U32 [CMPMain.sys_temp_ptr] + LGDT U32 [CAP16BitInit.ap_gdt_ptr] //See $LK,"mp->ap_gdt_ptr",A="FF:::/Kernel/MultiProc.CPP,mp->ap_gdt_ptr:2"$ MOV EAX,SYS_START_CR0 MOV_CR0_EAX - - DU8 0x66,0xEA; //JMP CGDT.cs32:MP_INIT_OS - DU32 MP_INIT_OS; + DU8 0x66,0xEA; //JMP CGDT.cs32:AP_32BIT_INIT + DU32 AP_32BIT_INIT; DU16 CGDT.cs32; +AP_16BIT_INIT_END:: -SYS_MP_INIT_END:: USE32 -MP_INIT_OS: +AP_32BIT_INIT: MOV AX,CGDT.ds MOV DS,AX MOV ES,AX @@ -58,8 +53,8 @@ MP_INIT_OS: LEA ESP,U32 CCPU.start_stk+sizeof(CCPU.start_stk)[ESI] PUSH U32 SYS_START_RFLAGS POPFD - PUSH U32 0 - CALL INIT_EM64T + PUSH U32 0 //Return from next call will be 64-bit + CALL SYS_EM64T USE64 FNINIT MOV RAX,RSI @@ -193,7 +188,7 @@ U0 MPWake(I64 target_cpu) U0 MPAPICInit() {//Called by adam during start-up //and other cores during initialization -//after $LK,"MPStart",A="MN:MPStart"$(). +//after $LK,"BSPStartMP",A="MN:BSPStartMP"$(). *LAPIC_SVR(U32 *)|=LAPICF_APIC_ENABLED; dev.mp_apic_ids[Gs->num]=*LAPIC_APIC_ID(U32 *)>>24; *LAPIC_LDR(U32 *)=dev.mp_apic_ids[Gs->num]<<24; @@ -213,7 +208,7 @@ U0 MPAPICInit() #assert !offset(CSrvCtrl.next_waiting) -U0 MPSethServerTask() +U0 APSethTask() { CSrvCtrl *my_ctrl=&Fs->srv_ctrl; CSrvCmd *tempc,*tempc1=&my_ctrl->next_waiting; @@ -222,7 +217,6 @@ U0 MPSethServerTask() TaskFinishOffDying; if (!LBts(&my_ctrl->flags,SVCRf_LOCKED)) { tempc=tempc1->next; - //Jobs for this core are highest priority. if (tempc==tempc1 || !SrvCmdRun(tempc,GetRFlags)) { LBtr(&my_ctrl->flags,SVCRf_LOCKED) ; if (my_ctrl->next_waiting==my_ctrl) { @@ -296,20 +290,20 @@ CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL, return result; } -U0 MPCPUTaskInit() -{//Called by multicore's seth task after $LK,"MPStart",A="MN:MPStart"$() +U0 APSethInit() +{//Called by multicore's seth task after $LK,"BSPStartMP",A="MN:BSPStartMP"$() //as the first thing a CPU does before waiting for jobs. MPAPICInit; - Fs->rip=&MPSethServerTask; + Fs->rip=&APSethTask; Fs->time_slice_start=GetTSC; TaskContextRestore; } -U0 MPStart() -{//Called by adam during $LK,"start-up",A="FF:::/Kernel/KEnd.CPP,MPStart"$. +U0 BSPStartMP() +{//Called by adam during $LK,"start-up",A="FF:::/Kernel/KEnd.CPP,BSPStartMP"$. CTask *task; U8 buf[128]; - CMPMain *mp=MP_VECT_ADDR; + CAP16BitInit *mp=MP_VECT_ADDR; CCPU *c; I64 i,my_mp_cnt; CRAXRBCRCXRDX ee; @@ -334,9 +328,8 @@ U0 MPStart() //When you start-up other cores, they jump to an addr //specified by a byte vect number, $LK,"MPN_VECT",A="MN:MPN_VECT"$ which corresponds //to a location 4096*vect number, $LK,"MP_VECT_ADDR",A="MN:MP_VECT_ADDR"$$WW,0$. - MemCpy(mp,SYS_MP_INIT_START,SYS_MP_INIT_END-SYS_MP_INIT_START); - - mp->sys_temp_ptr=sizeof(CGDT)-1+(&sys_gdt)(U8 *)<<16; + MemCpy(mp,AP_16BIT_INIT,AP_16BIT_INIT_END-AP_16BIT_INIT); + MemCpy(&mp->ap_gdt_ptr,SYS_GDT_PTR,sizeof(CSysLimitBase)); mp_cnt_initial=mp_cnt=1; mp_cnt_lock=0; @@ -360,9 +353,9 @@ U0 MPStart() for (i=1;irflags=SYS_START_RFLAGS; - //$LK,"CTask",A="MN:CTask"$ allocated off this core's seth_task's heap (Which is Adam) + //$LK,"CTask",A="MN:CTask"$ alloced off this core's seth_task's heap (Which is Adam) task->task_in_que_signature=TASK_IN_QUE_SIGNATURE_VAL; CPUStructInit(i,&cpu_structs[i],task); WBINVD //Not sure why this is needed. Might just need delay. @@ -379,7 +372,7 @@ U0 MPStart() mp_cnt=my_mp_cnt; //Finalize cnt } -U0 MPInit() +U0 BSPInit() {//Called by adam during start-up CRAXRBCRCXRDX ee; CPUId(0x1,&ee); diff --git a/Kernel/PSect.CPP b/Kernel/PSect.CPP index 54472ce..fda32b6 100644 --- a/Kernel/PSect.CPP +++ b/Kernel/PSect.CPP @@ -8,46 +8,48 @@ I64 HasLower(U8 *src) } CHash *PSectFind(U8 *addr,I64 *_offset) -{//See $LK,"::/Kernel/Hash1a.CPP",A="FL:::/Kernel/Hash1a.CPP,1"$. +{//See $LK,"::/Kernel/KHashA.CPP",A="FL:::/Kernel/KHashA.CPP,1"$. CHash *result=NULL; CHashExport *tempex; Bool has_lower=FALSE; CHashTable *h=Fs->hash_table; - U64 best=0xFFFF,j; + U64 i,j,best=0xFFFF; if (!ChkCodePtr(addr)) { *_offset=best; return NULL; } while (h) { - tempex=h->next_added; - while (tempex!=h) { - j=0; - if (tempex->type&HTT_FUN) { - if (!Bt(&tempex(CHashFun *)->flags,Cf_EXTERN) && - !Bt(&tempex(CHashFun *)->flags,Ff_INTERNAL)) - j=tempex(CHashFun *)->executable_addr; - } else if (tempex->type&HTT_EXPORT_SYS_SYM) - j=tempex->val; - if (j) { - j=addr(I64)-j; - if (0<=j<=best) { - if (tempex->type&HTT_EXPORT_SYS_SYM) { - if (jstr); - best=j; - result=tempex; - } - } else if (tempex->type&HTT_FUN) { - if (jtype&HTT_EXPORT_SYS_SYM||!has_lower)) { - has_lower=HasLower(tempex->str); - best=j; - result=tempex; + for (i=0;i<=h->mask;i++) { + tempex=h->body[i]; + while (tempex) { + j=0; + if (tempex->type&HTT_FUN) { + if (!Bt(&tempex(CHashFun *)->flags,Cf_EXTERN) && + !Bt(&tempex(CHashFun *)->flags,Ff_INTERNAL)) + j=tempex(CHashFun *)->executable_addr; + } else if (tempex->type&HTT_EXPORT_SYS_SYM) + j=tempex->val; + if (j) { + j=addr(I64)-j; + if (0<=j<=best) { + if (tempex->type&HTT_EXPORT_SYS_SYM) { + if (jstr); + best=j; + result=tempex; + } + } else if (tempex->type&HTT_FUN) { + if (jtype&HTT_EXPORT_SYS_SYM||!has_lower)) { + has_lower=HasLower(tempex->str); + best=j; + result=tempex; + } } } } + tempex=tempex->next; } - tempex=tempex->next_added; } h=h->next; } @@ -254,7 +256,7 @@ U8 *SrcEdLink(U8 *addr,I64 cnt=1,CTask *mem_task=NULL) } Bool PutSrcLink(U8 *addr,I64 cnt=1,U8 *buf=NULL) -{//Put to StdOut a $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT.Z"$ file,line link to src of addr. +{//Put to StdOut a $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ file,line link to src of addr. U8 *src; if (src=SrcEdLink(addr,cnt)) { if (buf) @@ -268,28 +270,32 @@ Bool PutSrcLink(U8 *addr,I64 cnt=1,U8 *buf=NULL) return FALSE; } -U0 E(U8 *addr,I64 cnt=512,I64 edf_dof_flags=0) +Bool E(U8 *addr,I64 cnt=512,I64 edf_dof_flags=0) {//Edit src at addr. U8 *st; + Bool result=FALSE; if (st=SrcEdLink(addr,cnt)) { if (IsRaw) - EdLiteFileLine(st); + result=EdLiteFileLine(st,edf_dof_flags); else - Ed(st,edf_dof_flags); + result=Ed(st,edf_dof_flags); Free(st); } + return result; } -U0 Man(U8 *st) +Bool Man(U8 *st,I64 edf_dof_flags=0) {//Owner's manual for symbol. Edit src code for symbol. + Bool result=FALSE; U8 **st2; CHashSrcSym *temph; if (IsRaw) { if ((temph=HashFind(st,Fs->hash_table,HTG_SRC_SYM)) && temph->src_link) - EdLiteFileLine(temph->src_link); + result=EdLiteFileLine(temph->src_link,edf_dof_flags); } else { st2=MStrPrint("MN:%s",st); - Ed(st2); + result=Ed(st2,edf_dof_flags); Free(st2); } + return result; } diff --git a/Kernel/Sched.CPP b/Kernel/Sched.CPP index 2ee7a65..602f37c 100644 --- a/Kernel/Sched.CPP +++ b/Kernel/Sched.CPP @@ -1,11 +1,14 @@ /*See $LK,"TempleOS MultiTasking",A="FI:::/Doc/MultiTasking.TXT"$. -Tasks are ordered in a circular queue -by front-to-back window stack order with -the window mgr as the head (paints -the wallpaper). The scheduler is -round-robin. It checks if a task -is ready and runs it or skips it. +On each core, tasks are linked in a +circular doubly-linked list queue with +the Seth task as the head. On core#0, +the queue order represents the front-to-back +window stack order with the window mgr +as the wallpaper. + +The scheduler is round-robin. It checks +if a task is ready and runs it or skips it. Swapping tasks just involves storing and restoring regs (no disk I/O for virtual memory and no addr map changes). It is @@ -35,7 +38,7 @@ The scheduler checks for a few keys: Each core has its own circular task queue. For AP processors, they have a "Seth" task which stays in a loop waiting for jobs or -requests to spawn tasks. See $LK,"MPSethServerTask",A="MN:MPSethServerTask"$(). +requests to spawn tasks. See $LK,"APSethTask",A="MN:APSethTask"$(). $HL,1$*/ asm { diff --git a/Kernel/SrvCmd.CPP b/Kernel/SrvCmd.CPP index 5e1b612..f717e88 100644 --- a/Kernel/SrvCmd.CPP +++ b/Kernel/SrvCmd.CPP @@ -37,10 +37,9 @@ U0 TaskRstAwaitingMsg(CTask *task=NULL) } CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) -{//Queues a request to compile and execute text. +{//Queues a request to compile and execute src code text. CSrvCmd *result; - if (!data || !TaskValidate(srv) || - master && !TaskValidate(master) || + if (!data || !TaskValidate(srv) || master && !TaskValidate(master) || srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; result=ACAlloc(sizeof(CSrvCmd)); @@ -73,12 +72,11 @@ CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) } CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags) -{//Post text to servant task. Tell who the master task is. +{//Post StdIn text to servant task. Tell who the master task is. CSrvCmd *result; Bool old_preempt=Preempt(OFF); CTask *task; - if (!data || !TaskValidate(srv) || - master && !TaskValidate(master) || + if (!data || !TaskValidate(srv) || master && !TaskValidate(master) || srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) { Preempt(old_preempt); return NULL; @@ -126,8 +124,7 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags) //See $LK,"flags",A="MN:SVCf_WAKE_MASTER"$ and $LK,"msg_code",A="MN:MSG_CMD"$. CSrvCmd *tempc1,*tempc; CTask *srv=_srv; - if (!TaskValidate(srv) || - master && !TaskValidate(master)|| + if (!TaskValidate(srv) || master && !TaskValidate(master)|| srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; tempc=ACAlloc(sizeof(CSrvCmd)); @@ -139,8 +136,7 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags) tempc->flags=flags; PUSHFD if (Bt(&sys_semas[SYS_SEMA_RECORD_MACRO],0) && - srv!=sys_macro_util_task && - msg_code==MSG_KEY_DOWN) { + srv!=sys_macro_util_task && msg_code==MSG_KEY_DOWN) { tempc1=AMAllocIdentical(tempc); CLI QueIns(tempc1,sys_macro_root.last); @@ -385,17 +381,35 @@ sch_done: return cnt; } -I64 SrvUser(U8 *fmt,...) -{//Spawns a visible task and sends text which gets compiled and run. - U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); - I64 result=0; +I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL) +{//Execute code text in PopUp win task. + I64 result; CSrvCmd *tempc; - CTask *task=Spawn(&SrvUserCmdLine,NULL,"Servant",,Fs); - Fs->popup_task=task; - tempc=TaskExe(task,Fs,buf,1<popup_task=NULL; - Kill(task,FALSE); + Bool old_preempt=Preempt(OFF); + CTask *task=Spawn(&SrvCmdLine,NULL,"Servant",,parent); + if (!parent) { + TaskExe(task,parent,buf,1<popup_task=task; + tempc=TaskExe(task,parent,buf,1<popup_task=NULL; + Kill(task); + if (_pu_task) *_pu_task=NULL; + Preempt(old_preempt); + return result; + } +} + +I64 PopUpPrint(U8 *fmt,...) +{//Execute code text in PopUp win task. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + I64 result; + result=PopUp(buf,Fs); Free(buf); return result; } @@ -445,7 +459,7 @@ U0 XTalk(CTask *task,U8 *fmt,...) {//Sends text to other task. See $LK,"::/Misc/OSTestSuite.CPP"$. U8 *buf=StrPrintJoin(NULL,fmt,argc,argv),*st=AStrNew(buf), *st2=MStrPrint("\"%%s\",%d;Free(%d);",st,st); - TaskText(task,0,st2,0); + TaskText(task,NULL,st2,0); Free(st2); Free(buf); } @@ -454,7 +468,7 @@ U0 XTalkWait(CTask *task,U8 *fmt,...) {//Send text to other task and wait for it to idle. U8 *buf=StrPrintJoin(NULL,fmt,argc,argv),*st=AStrNew(buf), *st2=MStrPrint("\"%%s\",%d;Free(%d);",st,st); - TaskText(task,0,st2,0); + TaskText(task,NULL,st2,0); Free(st2); Free(buf); TaskWait(task); @@ -466,19 +480,20 @@ U0 AutoStr(U8 *fmt,...) if (Bt(&Fs->task_flags,TASKf_INPUT_FILTER_TASK)) ExePrint("%s",buf); else - TaskText(Fs,0,buf,1<cur_dv),Fs->cur_dir,name); Free(name); } U0 Auto(U8 *fmt,...) -{//Send text to own input buffer. See $LK,"::/Demo/AcctExample/TSDistro.CPP"$. +{//Send text to own input buffer. See $LK,"::/Demo/AcctExample/TOSDistro.CPP"$. U8 *buf=StrPrintJoin(NULL,fmt,argc,argv),*st=AStrNew(buf); AutoStr("\"%%s\",%d;Free(%d);",st,st); Free(buf); @@ -487,14 +502,14 @@ U0 Auto(U8 *fmt,...) U0 XTalkStr(CTask *task,U8 *fmt,...) {//Send AutoFile code to other task. U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); - TaskText(task,0,buf,0); + TaskText(task,NULL,buf,0); Free(buf); } U0 XTalkStrWait(CTask *task,U8 *fmt,...) {//Send AutoFile code to other task and wait for it to idle. U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); - TaskText(task,0,buf,0); + TaskText(task,NULL,buf,0); Free(buf); TaskWait(task); } diff --git a/Kernel/Str1a.CPP b/Kernel/StrA.CPP similarity index 95% rename from Kernel/Str1a.CPP rename to Kernel/StrA.CPP index c483167..df73972 100644 --- a/Kernel/Str1a.CPP +++ b/Kernel/StrA.CPP @@ -314,9 +314,8 @@ _extern _STRMATCH U8 *StrMatch(U8 *needle,U8 *haystack_str); //Scan for string i _extern _STRIMATCH U8 *StrIMatch(U8 *needle,U8 *haystack_str); //Scan for string in string, ignoring case. _extern _STRCPY U0 StrCpy(U8 *dst,U8 *src); //Copy string. -/*These bitmaps go to 0-511 so that -$LK,"Lex",A="MN:Lex"$() can use them with $LK,"Token Codes",A="MN:TK_EOF"$. -*/ +//These bitmaps go to 0-511 so that $LK,"Lex",A="MN:Lex"$() can use them with $LK,"Token Codes",A="MN:TK_EOF"$. + U32 chars_bitmap_alpha[16]= {0x0000000,0x00000000,0x87FFFFFF,0x07FFFFFE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, @@ -334,36 +333,29 @@ chars_bitmap_word[16]= 0,0,0,0,0,0,0,0}, chars_bitmap_filename[16]= -{0x0000000,0x03FF73FB,0xEFFFFFFF,0x2FFFFFFF,0,0,0,0, +{0x0000000,0x03FF73FB,0xEFFFFFFF,0x2FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, chars_bitmap_dec_numeric[16]= -{0x0000000,0x03FF0000,0,0,0,0,0,0, -0,0,0,0,0,0,0,0}, +{0x0000000,0x03FF0000,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, chars_bitmap_hex_numeric[16]= -{0x0000000,0x03FF0000,0x7E,0x7E,0,0,0,0, -0,0,0,0,0,0,0,0}, +{0x0000000,0x03FF0000,0x7E,0x7E,0,0,0,0,0,0,0,0,0,0,0,0}, chars_bitmap_white_space[16]= -{0x80003600,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0}, +{0x80003600,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, chars_bitmap_non_eol_white_space[16]= -{0x80001200,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0}, +{0x80001200,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, chars_bitmap_zero_cr_nl_cursor[16]= -{0x00002421,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0}, +{0x00002421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, chars_bitmap_zero_tab_ff_cr_nl_cursor[16]= -{0x00003621,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0}, +{0x00003621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, chars_bitmap_zero_tab_ff_cr_nl_cursor_dollar[16]= -{0x00003621,0x10,0,0,0,0,0,0, -0,0,0,0,0,0,0,0}, +{0x00003621,0x10,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, chars_bitmap_getkey[16]= {0x80002600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, diff --git a/Kernel/Str1b.CPP b/Kernel/StrB.CPP similarity index 100% rename from Kernel/Str1b.CPP rename to Kernel/StrB.CPP diff --git a/Kernel/StrPrint.CPP b/Kernel/StrPrint.CPP index 701e14c..afbbd5d 100644 --- a/Kernel/StrPrint.CPP +++ b/Kernel/StrPrint.CPP @@ -67,7 +67,7 @@ U8 *MPrintDate(CDate cdt) U8 *MPrintQ(U8 *ptr,I64 flags) { - U8 **_buf,*buf,**_dst,*dst; + U8 **_buf,*buf,**_dst,*dst,buf2[8],*ptr2; I64 ch; buf=MAlloc(128); _buf=&buf; @@ -79,9 +79,9 @@ U8 *MPrintQ(U8 *ptr,I64 flags) case '$$': if (flags&SPF_DOLLAR) { SPutChar(_dst,'\\',_buf); - SPutChar(_dst,'$$'>>6&7+'0',_buf); - SPutChar(_dst,'$$'>>3&7+'0',_buf); - SPutChar(_dst,'$$'&7+'0',_buf); + SPutChar(_dst,'x',_buf); + SPutChar(_dst,'2',_buf); + SPutChar(_dst,'4',_buf); } else { SPutChar(_dst,ch,_buf); SPutChar(_dst,ch,_buf); @@ -110,13 +110,13 @@ U8 *MPrintQ(U8 *ptr,I64 flags) SPutChar(_dst,ch,_buf); break; default: - if (CH_SHIFT_SPACE<=ch<=0x7F) { + if (ch>=CH_SHIFT_SPACE && ch!=0x7F) SPutChar(_dst,ch,_buf); - } else { - SPutChar(_dst,'\\',_buf); - SPutChar(_dst,ch>>6&7+'0',_buf); - SPutChar(_dst,ch>>3&7+'0',_buf); - SPutChar(_dst,ch&7+'0',_buf); + else { + StrPrint(buf2,"\\x%02X",ch); + ptr2=buf2; + while (*ptr2) + SPutChar(_dst,*ptr2++,_buf); } } } @@ -160,56 +160,27 @@ U8 *MPrintq(U8 *ptr,I64 flags) case 't': SPutChar(_dst,'\t',_buf); break; + case '0': + SPutChar(_dst,0,_buf); + break; sub_switch_end: ptr++; break; - sub_switch_start: - case 'x': - case 'X': - i=0; - ptr++; - while (TRUE) { - ch1=ToUpper(*ptr++); - if (Bt(chars_bitmap_hex_numeric,ch1)) { - if (ch1<='9') - i=i<<4+ch1-'0'; - else - i=i<<4+ch1-'A'+10; - } else - break; - } - break; - case 'b': - case 'B': - i=0; - ptr++; - while (TRUE) { - ch1=*ptr++; - if ('0'<=ch1<='1') - i=i<<1+ch1-'0'; + case 'x': + case 'X': + i=0; + ptr++; + while (TRUE) { + ch1=ToUpper(*ptr++); + if (Bt(chars_bitmap_hex_numeric,ch1)) { + if (ch1<='9') + i=i<<4+ch1-'0'; else - break; - } - break; - case 'o': - case 'O': - i=0; - ptr++; - goto sq_octal; - case '0'...'7': - i=ch1-'0'; - ptr++; -sq_octal: - while (TRUE) { - ch1=*ptr++; - if ('0'<=ch1<='7') - i=i<<3+ch1-'0'; - else - break; - } - break; - sub_switch_end: + i=i<<4+ch1-'A'+10; + } else + break; + } SPutChar(_dst,i,_buf); ptr--; break; @@ -897,30 +868,6 @@ sp_out_eng: //Engineering notation } while (m && k=argc) - throw('StrPrint'); - m=argv[cur_arg++]; - if (flags&SPF_COMMA) { - comma_fmt_cnt=comma_cnt=3; - do { - temp_buf[k++]= m&7 +'0'; - m>>=3; - if (!m) break; - if (!--comma_cnt) { - temp_buf[k++]=','; - comma_cnt=3; - } - } while (k>=3; - } while (m && k='B' && (radix<=10 || ch>'A'+radix-11)) switch (ch) { case 'B': radix=2; st++; break; - case 'O': radix=8; st++; break; case 'D': radix=10; st++; break; case 'X': radix=16; st++; break; } @@ -141,7 +140,7 @@ CDate Str2Date(U8 *_src) It also supports some funs SM() start of mon EM() end of mon - SM() start of year + SY() start of year EY() end of year Full expressions are not implimented but you can do stuff like SM(*-7)+3 diff --git a/Kernel/Task1a.CPP b/Kernel/Task.CPP similarity index 89% rename from Kernel/Task1a.CPP rename to Kernel/Task.CPP index 854b357..bace57f 100644 --- a/Kernel/Task1a.CPP +++ b/Kernel/Task.CPP @@ -25,30 +25,25 @@ Bool TaskValidate(CTask *task) return TRUE; } -U0 Kill(CTask *task,Bool wait=TRUE) +Bool Kill(CTask *task,Bool wait=TRUE) {//Terminate other task. I64 i; - CCPU *c; - Bool found,old_preempt=Preempt(OFF); - if (TaskValidate(task)) { - if (task==sys_winmgr_task) - found=TRUE; - else - found=FALSE; - for (i=0;iseth_task) - found=TRUE; - } - if (!found) { - LBts(&task->task_flags,TASKf_KILL_TASK); - if (wait) { - do Yield; - while (TaskValidate(task) && Bt(&task->task_flags,TASKf_KILL_TASK)); - } + Bool old_preempt=Preempt(OFF); + if (TaskValidate(task) && task!=sys_winmgr_task) { + for (i=0;itask_flags,TASKf_KILL_TASK); + if (wait) { + do Yield; + while (TaskValidate(task) && Bt(&task->task_flags,TASKf_KILL_TASK)); } + Preempt(old_preempt); + return TRUE; } +kl_fail: Preempt(old_preempt); + return FALSE; } Bool Suspend(CTask *task=NULL,Bool state=TRUE) @@ -86,6 +81,7 @@ CTaskStk *TaskStkNew(I64 stk_size,CTask *task) #exe {OptOn(OPTf_NO_REG_VAR);}; argpop I64 CallStkGrow(I64 stk_size_threshold,I64 stk_size,/*argpop*/I64 (*fp_addr)(...),...) {//Grow stk in call with any fixed num of args. +//See $LK,"::/Demo/StkGrow.CPP"$. CTaskStk *temps,*temps2,**_stk; I64 result,*rsp,*rsp2,*old_stk; @@ -183,22 +179,10 @@ I64 TaskInit(CTask *task,I64 stk_size) task->fpu_mmx=MAllocAligned(sizeof(CFPU),0x10,task); MemCpy(task->fpu_mmx,SYS_FIXED_AREA+offset(CSysFixedArea.init_fpu_mmx),sizeof(CFPU)); - if (task==SYS_FIXED_AREA+offset(CSysFixedArea.adam)) { -// Delayed until heap expanded. See $LK,"Expand Heap",A="FA:::/Kernel/Mem1a.CPP,ExpandHeap"$ -// task->hash_table=HashTableNew(ADAM_HASH_SIZE,task); - } else { - if (!Gs->num) - task->hash_table=HashTableNew(STD_HASH_SIZE,task); - else - task->hash_table=HashTableNew(MP_STD_HASH_SIZE,task); - } + task->hash_table=HashTableNew(TASK_HASH_SIZE,task); - if (!stk_size) { - if (!Gs->num) - stk_size=DFT_STK; - else - stk_size=MP_DFT_STK; - } + if (!stk_size) + stk_size=DFT_STK; task->stk=temps=TaskStkNew(stk_size,task); task->rsp=(&temps->stk_base)(U8 *)+temps->stk_size; @@ -211,9 +195,11 @@ I64 TaskInit(CTask *task,I64 stk_size) task->win_top =13; task->win_bottom =text.rows-2; - //Beware Adam $LK,"TaskInit",A="FF:::/Kernel/KStart.CPP,TaskInit"$ gets NULL. Okay, I guess, until $LK,"ChgDsk",A="FF:::/Kernel/KEnd.CPP,ChgDsk"$(). - task->cur_prt=dsk.drv_to_prt[ToUpper(*sys_acct)-'A']; - task->cur_dir=StrNew(sys_acct+2,task); + if (dsk.boot_drv_let) //Beware Adam $LK,"TaskInit",A="FF:::/Kernel/KStart.CPP,TaskInit"$. Okay, I guess, until $LK,"ChgDsk",A="FF:::/Kernel/KEnd.CPP,ChgDsk"$(). + task->cur_dv=dsk.let_to_drv[ToUpper(dsk.boot_drv_let)-'A']; + task->cur_dir=StrNew("/Home",task); + + Seed(,task); return task; } @@ -226,7 +212,7 @@ CTask *Spawn(U0 (*fp_start_addr)(U8 *data),U8 *data=NULL, I64 flags=1<=0) return SpawnQue(fp_start_addr,data,task_name,target_cpu,parent,stk_size,flags); @@ -375,7 +361,7 @@ U0 UserCmdLine(I64 dummy=0) UserTaskCont; } -CTask *SpawnUser(U8 *fmt=NULL,...) +CTask *User(U8 *fmt=NULL,...) {//Create user term task. U8 *st; CTask *task=Spawn(&UserCmdLine); @@ -401,7 +387,7 @@ U0 SrvTaskCont() } } -U0 SrvUserCmdLine(I64 dummy=0) +U0 SrvCmdLine(I64 dummy=0) { nounusedwarn dummy; Fs->win_inhibit=WIG_USER_TASK_DFT; @@ -440,7 +426,7 @@ I64 TaskEnd() return task->parent_task; } - PrtsRelease; + DrvsRelease; BlkDevsRelease; tempt1=(&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task); tempt=tempt1->next_sibling_task; diff --git a/Linux/TSZ.CPP b/Linux/TOSZ.CPP similarity index 95% rename from Linux/TSZ.CPP rename to Linux/TOSZ.CPP index de9ffb2..f39c1db 100644 --- a/Linux/TSZ.CPP +++ b/Linux/TOSZ.CPP @@ -15,9 +15,9 @@ typedef unsigned char BOOL; #define ARC_MAX_BITS 12 #define ARC_MAX_TABLE_ENTRY ((1<dst_pos=dst_ptr-c->dst_buf; } -ArcCs *NewArcCs(DWORD expand,DWORD seven_bit) +ArcCs *NewArcCs(DWORD expand,DWORD compression_type) { ArcCs *c; c=(ArcCs *)malloc(sizeof(ArcCs)); @@ -184,7 +184,7 @@ ArcCs *NewArcCs(DWORD expand,DWORD seven_bit) c->stack_base=(BYTE *)malloc(ARC_MAX_TABLE_ENTRY+1); c->stack_ptr=c->stack_base; } - if (seven_bit) + if (compression_type==CT_7_BIT) c->min_bits=7; else c->min_bits=8; @@ -210,7 +210,6 @@ BYTE *ExpandBuf(ArcCompressStruct *r) ArcCs *c; ArcCompressStruct *r2=r; BYTE *result; - DWORD seven_bit; if (r->compression_type>CT_8_BIT) return NULL; @@ -220,12 +219,11 @@ BYTE *ExpandBuf(ArcCompressStruct *r) result=(BYTE *)malloc(r2->expanded_size+1); result[r2->expanded_size]=0; //terminate - seven_bit=(r2->compression_type==CT_7_BIT); if (r2->compression_type==CT_NONE) { memcpy(result,r2->body,r2->expanded_size); goto expand_end; } - c=NewArcCs(TRUE,seven_bit); + c=NewArcCs(TRUE,r2->compression_type); c->src_size=r2->compressed_size*8; c->src_pos=(sizeof(ArcCompressStruct)-1)*8; c->src_buf=(BYTE *)r2; @@ -303,8 +301,8 @@ int main(int argc, char* argv[]) if (okay) convert(name,cvt_ascii); else - puts("TSZ [-ascii] filename\r\n\r\n" - "TSZ expands a single TempleOS file.\r\n" + puts("TOSZ [-ascii] filename\r\n\r\n" + "TOSZ expands a single TempleOS file.\r\n" "The -ascii flag will convert nonstandard TempleOS\r\n" "ASCII characters to regular ASCII.\r\n" ); diff --git a/Misc/MakeDistro.CPP b/Misc/MakeDistro.CPP index 98eb0e5..069cf5d 100644 --- a/Misc/MakeDistro.CPP +++ b/Misc/MakeDistro.CPP @@ -1,18 +1,6 @@ -/*$HL,0$ -$FG,5$$TX+CX,"Roll Your Own Distro"$$FG$ +//Make Your own Distro by #include-ing this file. -It's unlikely you will get it running on bare hardware, so you'll probably -run it in a virtual machine such as VMware. Download the free 64-bit -$FG,4$$TX,"VMware Player",HTML="https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player/5_0"$$FG$ for Linux or Windows and point the CDROM at the $FG,4$$TX,"TempleOSCD.ISO",HTML="http://www.templeos.org/TempleOSCD.ISO"$$FG$. -(The $FG,4$$TX,"VMware",HTML="https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player/5_0"$$FG$ web page takes a whole minute to load. They hide the free version.) - -Purchase $FG,4$$TX,"VMware WorkStation",HTML="http://www.vmware.com"$$FG$ or download $FG,4$$TX,"WinImage",HTML="http://www.winimage.com/winimage.htm"$$FG$ if you wish to transfer files -in and out. The VMware Workstation will stretch to full-screen and make drives -accessible from Windows. - -$HL,1$*/ - -#define STD_DISTRO_CDROM_CFG "Tb1\nScale2Mem(2048,0x40000)\nt3 \n\n\n\n\n" +#define STD_DISTRO_CDROM_CFG "Tb1\nScale2Mem(2048,0x40000)\nt3 \n\n\n\n" U0 MakeMyISO(U8 *out_iso_filename) {//Does everything with current drive. @@ -21,10 +9,15 @@ U0 MakeMyISO(U8 *out_iso_filename) return; } DelTree("/Distro"); + MkDir("/Distro"); Auto(STD_DISTRO_CDROM_CFG); - MakeOSPrtBootInstall(,'T'); + MakeOSDrvBootInstall(,'T'); + + Copy("/*","/Distro"); + Del("/Distro/Kernel.BIN.C"); + CopyTree("/0000Boot", "/Distro/0000Boot"); - CopyTree("/Accts", "/Distro/Accts"); + CopyTree("/Home", "/Distro/Home"); CopyTree("/Adam", "/Distro/Adam"); CopyTree("/Apps", "/Distro/Apps"); CopyTree("/Compiler", "/Distro/Compiler"); @@ -32,9 +25,9 @@ U0 MakeMyISO(U8 *out_iso_filename) CopyTree("/Doc", "/Distro/Doc"); CopyTree("/Kernel", "/Distro/Kernel"); CopyTree("/Misc", "/Distro/Misc"); + //To save space, optionally delete dictionary. - //Del("/Distro/Adam/WordStat/WSDefs.DAT"); - CopyTree("/Windows","/Distro/Windows"); //You can leave this out + //Del("/Distro/Adam/AutoComplete/ACDefs.DAT"); CopyTree("/Linux","/Distro/Linux"); //You can leave this out. MkDir("/Distro/Temp"); MkDir("/Distro/Temp/ScreenShots"); @@ -45,17 +38,4 @@ U0 MakeMyISO(U8 *out_iso_filename) MakeMyISO("/MyDistro.ISO"); -// Study my account examples $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TSAdam.CPP,1"$ $LK,"Update Funs",A="FL:::/Demo/AcctExample/TSDistro.CPP,1"$. - - - - - -/* - -* "Linux" is probably a trademark owned by Linus Torvalds. -* "VMware Player" and "VMware WorkStation" are trademarks of VMware, Inc. -* "Windows" is a trademark of MicroSoft Corp. -* "WinImage" is a trademark of Gilles Vollant. - -*/ +// Study my account examples $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$. diff --git a/Accts/Install/DoOnce.CPP b/Misc/OSInstall.CPP similarity index 66% rename from Accts/Install/DoOnce.CPP rename to Misc/OSInstall.CPP index 77d9132..6630e4e 100644 --- a/Accts/Install/DoOnce.CPP +++ b/Misc/OSInstall.CPP @@ -2,14 +2,13 @@ Bool VMPrtDsk(CTask *task,CATARep *ata_drv) { if (ata_drv) { XTalkWait(task,"PrtDsk;\nYC2p%d\nYYY",ata_drv->num); - XTalkWait(task,"%d\nY\nY\n",(prt_dsk_dsk_size-PRT_HEADER)/2); + XTalkWait(task,"%d\nY\nY\n",(drv_dsk_dsk_size-DRV_HEADER)/2); return TRUE; } else return FALSE; } -U0 VMInstallBoot(CTask *task,U8 cd_drv,U8 drv,U8 *acct_name, - CATARep *ata_drv,CATARep *atapi_drv) +U0 VMInstallBoot(CTask *task,U8 cd_drv,U8 drv,CATARep *ata_drv,CATARep *atapi_drv) { U8 *st1,*st2; @@ -19,13 +18,13 @@ U0 VMInstallBoot(CTask *task,U8 cd_drv,U8 drv,U8 *acct_name, Free(st1); Free(st2); - st1=MStrPrint("%C:/Accts/%s",drv,acct_name); + st1=MStrPrint("%C:/Home",drv); MkDir(st1); Copy("::/Misc/MakeDistro.CPP.Z",st1); Free(st1); XTalkWait(task, - "MakeOSPrtBootInstall('%C');\n" + "MakeOSDrvBootInstall('%C');\n" "\nB1\n0x20000\n",drv); if (ata_drv) @@ -35,73 +34,53 @@ U0 VMInstallBoot(CTask *task,U8 cd_drv,U8 drv,U8 *acct_name, XTalkWait(task, "\n" //Exit Drives - "%s\n" //Acct "\n" //Dsk Cache - "\n", //Options - acct_name); + "\n"); //Options } U0 VMInstallWizard() { - U8 *acct_name; CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL; CTask *task; - while (TRUE) { - "Make-up a Log-In Name (account).\n"; - acct_name=GetStr("User Acct Name: "); - if (FileNameChk(acct_name)) - break; - Free(acct_name); - } - "\nIt's normal for this to freeze for a moment or two.\n"; PressAKey; - task=SpawnUser; + task=User; TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_top,(Fs->win_top+Fs->win_bottom)>>2-1,task); - SetWinVert(task->win_bottom+3,Fs->win_bottom); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_top,(Fs->win_top+Fs->win_bottom)>>2-1,task); + WinVert(task->win_bottom+3,Fs->win_bottom); WinToTop(Fs); ATARep(FALSE,TRUE,&root); - ATAIDDrvs(root,*sys_acct,&ata_drv,&atapi_drv); + ATAIDDrvs(root,dsk.boot_drv_let,&ata_drv,&atapi_drv); if (VMPrtDsk(task,ata_drv)) { - VMInstallBoot(task,*sys_acct,'C',acct_name,ata_drv,atapi_drv); - VMInstallBoot(task,*sys_acct,'D',acct_name,ata_drv,atapi_drv); + VMInstallBoot(task,dsk.boot_drv_let,'C',ata_drv,atapi_drv); + VMInstallBoot(task,dsk.boot_drv_let,'D',ata_drv,atapi_drv); MasterBootIntall('C'); } LinkedLstDel(root); - Free(acct_name); - SetWinVert(task->win_top,Fs->win_bottom); + WinVert(task->win_top,Fs->win_bottom); Kill(task); } U0 RegularInstallWizard() { I64 unit; - U8 *base0,*base1,*ms,*dst,*acct_name,*st1,*st2,*new_home_str; + U8 *base0,*base1,*ms,*dst,*st1,*st2,*new_home_str; CATARep *root=NULL,*tempha; I64 ch,num_hints; CTask *task; - while (TRUE) { - "Make-up a Log-In Name (account).\n"; - acct_name=GetStr("User Acct Name: "); - if (FileNameChk(acct_name)) - break; - Free(acct_name); - } - "\nIt's normal for this to freeze for a moment or two.\n"; PressAKey; - task=SpawnUser; + task=User; TaskWait(task); - SetWinHorz(Fs->win_left,Fs->win_right,task); - SetWinVert(Fs->win_top,(Fs->win_top+Fs->win_bottom)>>2-1,task); - SetWinVert(task->win_bottom+3,Fs->win_bottom); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_top,(Fs->win_top+Fs->win_bottom)>>2-1,task); + WinVert(task->win_bottom+3,Fs->win_bottom); WinToTop(Fs); XTalk(task,"Mount;\nC2 "); @@ -136,7 +115,7 @@ U0 RegularInstallWizard() } LinkedLstDel(root); XTalkWait(task,"%s\n%s\n%C\n",base0,base1,'0'+unit); - PrtRep; + DrvRep; while (TRUE) { dst=GetStr("\nDestination Partition Letter: "); if ('A'<=ToUpper(*dst)<='Z') @@ -145,7 +124,7 @@ U0 RegularInstallWizard() } '\n'; - st1=MStrPrint("%C:/",*sys_acct); + st1=MStrPrint("%C:/",dsk.boot_drv_let); st2=MStrPrint("%C:/",*dst); "$$RED$$Format %C Partition?$$FG$$\n",*dst; @@ -161,20 +140,20 @@ U0 RegularInstallWizard() break; } if (ch=='1') - Fmt(*dst,,FALSE,PT_FAT32); + Fmt(*dst,,FALSE,DVT_FAT32); else - Fmt(*dst,,FALSE,PT_REDSEA); + Fmt(*dst,,FALSE,DVT_REDSEA); } CopyTree(st1,st2); st2=MStrPrint("%C:/Temp",*dst); MkDir(st2); Free(st2); - new_home_str=MStrPrint("%C:/Accts/%s",*dst,acct_name); + new_home_str=MStrPrint("%C:/Home",*dst); MkDir(new_home_str); Copy("::/Misc/MakeDistro.CPP.Z",new_home_str); XTalkWait(task, - "MakeOSPrtBootInstall('%C');\n" + "MakeOSDrvBootInstall('%C');\n" "\nB1\n0x20000\n" "C" "2p" @@ -182,30 +161,43 @@ U0 RegularInstallWizard() "%s\n" "%C" "\n" //Exit Drives - "%s\n" //Acct "\n" //Dsk Cache - "\n", //Options - *dst,base0,base1,'0'+unit,acct_name); + "\n", //Options + *dst,base0,base1,'0'+unit); "$$RED$$Install Master Boot loader?$$FG$$"; if (YorN) { '\n'; MasterBootIntall(*dst); } Free(new_home_str); - Free(acct_name); Free(base0); Free(base1); Free(ms); Free(dst); - SetWinVert(task->win_top,Fs->win_bottom); + WinVert(task->win_top,Fs->win_bottom); Kill(task); } +U0 DoInstructions() +{ + CTask *task; + AutoComplete; + task=Fs->next_task; + while (task!=Fs) { + if (task!=adam_task && task!=sys_winmgr_task && task!=ac.task) { + XTalk(task,"Ed(\"::/Doc/Install.TXT.Z\");\n"); + break; + } + task=task->next_task; + } +} + U0 DoInstall() { I64 vm_install,pmt_reboot; - "\n\n\n\n\nInstall on virtual machine "; + "\n\n\n\n\nAre you installing inside VMware, QEMU, VirtualBox " + "or a similar virtual machine? "; vm_install=YorN; DocBottom; @@ -214,7 +206,7 @@ U0 DoInstall() pmt_reboot=TRUE; } else { "\n\nThis wizard works if you have a partition ready. " - "You can partition the drive or MakeOSPrtBootInstall() " + "You can partition the drive or MakeOSDrvBootInstall() " "with more options if you do it by hand, not using this wizard.\n\n" "Continue Install Wizard "; if (pmt_reboot=YorN) @@ -227,4 +219,5 @@ U0 DoInstall() } } +DoInstructions; DoInstall; diff --git a/Misc/OSTestSuite.CPP b/Misc/OSTestSuite.CPP index 9e95aef..2762375 100644 --- a/Misc/OSTestSuite.CPP +++ b/Misc/OSTestSuite.CPP @@ -6,7 +6,7 @@ U0 TSStart() U0 TS() { progress4=ts_num++; - progress4_max=155; + progress4_max=159; *progress4_desc=0; } U0 TSEnd() @@ -20,7 +20,7 @@ U0 TSEnd() U0 DoSpritePlot() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/SpritePlot\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -29,7 +29,7 @@ U0 DoSpritePlot() U0 DoElephant() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Elephant\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); @@ -38,7 +38,7 @@ U0 DoElephant() U0 DoSpritePlot3D() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/SpritePlot3D\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -47,7 +47,7 @@ U0 DoSpritePlot3D() U0 DoSpritePut() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/SpritePut\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -55,7 +55,7 @@ U0 DoSpritePut() U0 DoSpritePutExt() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/SpritePutExt\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -63,29 +63,56 @@ U0 DoSpritePutExt() U0 DoSpriteText() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/SpriteText\";\n"); Sleep(750); XTalk(task,"Exit;\n"); } +U0 DoSpriteRaw() +{ + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/Graphics/SpriteRaw\";\n"); + Sleep(750); + XTalk(task,"Exit;\n"); +} + U0 DoCarry() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Carry\";\n"); Sleep(750); XTalk(task,"Exit;\n"); } +U0 DoDirectives() +{ + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/Directives\";\n"); + Sleep(750); + XTalk(task,"Exit;\n"); +} + +U0 DoRandDemo() +{ + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/RandDemo\";\n"); + XTalkWait(task," "); + XTalkWait(task," "); + Sleep(750); + XTalk(task,"Exit;\n"); +} + U0 DoBalloon() { - CTask *task=SpawnUser; - XTalkWait(task,"#include \"::/Demo/Graphics/Balloon\";Exit;\n"); + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/Graphics/Balloon\";\n"); + XTalk(task,"Exit;\n"); } U0 DoEdCSprite() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/EdSprite\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -93,7 +120,7 @@ U0 DoEdCSprite() U0 DoExtents() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Extents\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -102,7 +129,7 @@ U0 DoExtents() U0 DoDotNet() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/NetOfDots\";\n"); Sleep(300); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -111,7 +138,7 @@ U0 DoDotNet() U0 DoSunMoon() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/SunMoon\";\n"); Sleep(300); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -120,7 +147,7 @@ U0 DoSunMoon() U0 DoLowPassFilter() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/LowPassFilter\";\n"); Sleep(300); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -137,7 +164,7 @@ U0 DoLowPassFilter() U0 DoMathAudioDemo() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/MathAudioDemo\";\n"); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -158,7 +185,7 @@ U0 DoMathAudioDemo() U0 DoLines() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Lines\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -167,7 +194,7 @@ U0 DoLines() U0 DoBounce() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Graphics/Bounce\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); @@ -176,7 +203,7 @@ U0 DoBounce() U0 DoMsgLoop() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MsgLoop\";\n"); Sleep(300); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -187,7 +214,7 @@ U0 DoMsgLoop() U0 DoASCIIOrgan() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Snd/ASCIIOrgan\";\n"); Sleep(100); SendMsg(task,MSG_KEY_DOWN_UP,'A',0); @@ -202,7 +229,7 @@ U0 DoASCIIOrgan() U0 DoDoodle() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Doodle\";\n"); SendMsg(task,MSG_IP_L_DOWN,10,10); SendMsg(task,MSG_IP_L_UP,100,200); @@ -214,7 +241,7 @@ U0 DoDoodle() U0 DoSpeedLine() { I64 i=PURPLE; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Speedline\";\n"); SendMsg(task,MSG_IP_L_DOWN,10,10); SendMsg(task,MSG_IP_L_UP,100,200); @@ -236,17 +263,19 @@ U0 DoSpeedLine() U0 DoKeyBitMap() { I64 i_sc=Char2ScanCode('i'); - CTask *task=SpawnUser; - XTalk(task,"#include \"::/Demo/KeyBitMap\" Exit;\n"); - Sleep(20); + CTask *task=User; + XTalk(task,"#include \"::/Demo/KeyBitMap\";\n"); + Sleep(50); LBts(kbd.down_bitmap,i_sc); Sleep(500); LBtr(kbd.down_bitmap,i_sc); + Sleep(50); + XTalk(task,"Exit;\n"); } U0 DoMountain() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Graphics/Mountain\";\n"); Sleep(1500); Kill(task); @@ -254,7 +283,7 @@ U0 DoMountain() U0 DoCoach() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Coach\";\n"); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(1000); @@ -264,7 +293,7 @@ U0 DoCoach() U0 DoDigits() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Digits\";\n"); Sleep(100); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -279,7 +308,7 @@ U0 DoDigits() U0 DoSymmetry() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Symmetry\";\n"); SendMsg(task,MSG_IP_R_DOWN,100,100); SendMsg(task,MSG_IP_R_UP,200,200); @@ -296,7 +325,7 @@ U0 DoSymmetry() U0 DoBSpline() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/BSpline\";\n"); SendMsg(task,MSG_IP_L_DOWN_UP,50,50); SendMsg(task,MSG_IP_L_DOWN_UP,300,100); @@ -309,7 +338,7 @@ U0 DoBSpline() U0 DoBlot() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Blot\";\n"); Sleep(1800); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -318,7 +347,7 @@ U0 DoBlot() U0 DoCaptureScreen() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/CaptureScreen\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -327,13 +356,13 @@ U0 DoCaptureScreen() Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); - Del("HOME/ScreenShot.GRA.Z"); + Del("/Home/ScreenShot.GRA.Z"); } /* U0 DoPullDownMenu() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/PullDownMenu\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -343,7 +372,7 @@ U0 DoPullDownMenu() U0 DoStadium() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Stadium/Stadium\";\n"); Sleep(50); SendMsg(task,MSG_IP_L_DOWN_UP,100,10); @@ -358,7 +387,7 @@ U0 DoStadium() U0 DoPalette() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Palette\";\n"); Sleep(400); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -370,7 +399,7 @@ U0 DoPalette() U0 DoElephantWalk() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/ElephantWalk\";\n"); for (i=0;i<15;i++) { SendMsg(task,MSG_KEY_DOWN,0,SC_CURSOR_RIGHT); @@ -382,7 +411,7 @@ U0 DoElephantWalk() U0 DoHalogen() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Halogen\";\n"); SendMsg(task,MSG_KEY_DOWN,0,SC_CURSOR_UP); Sleep(1000); @@ -397,7 +426,7 @@ U0 DoHalogen() U0 DoTheDead() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/TheDead\";\n"); for (i=0;i<15;i++) { SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); @@ -416,7 +445,7 @@ U0 DoTheDead() U0 DoBomberGolf() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/BomberGolf\";\n"); for (i=0;i<7;i++) { SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); @@ -434,7 +463,7 @@ U0 DoBomberGolf() U0 DoZoneOut() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Games/ZoneOut\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -453,7 +482,7 @@ U0 DoZoneOut() U0 DoVaroom() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Varoom\";\n"); for (i=0;i<15;i++) { SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); @@ -468,7 +497,7 @@ U0 DoVaroom() U0 DoFlatTops() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Games/FlatTops\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -485,7 +514,7 @@ U0 DoFlatTops() U0 DoWenceslas() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Games/Wenceslas\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -511,10 +540,10 @@ U0 DoWenceslas() XTalk(task,"Exit;\n"); } -U0 DoChessNet() +U0 DoTreeCheckers() { - CTask *task=SpawnUser; - XTalk(task,"#include \"::/Demo/Games/ChessNet\";\n"); + CTask *task=User; + XTalk(task,"#include \"::/Demo/Games/TreeCheckers\";\n"); while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); @@ -528,7 +557,7 @@ U0 DoChessNet() U0 DoRainDrops() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/RainDrops\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); @@ -537,7 +566,7 @@ U0 DoRainDrops() U0 DoMorseCode() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Snd/MorseCode\";\n"); Sleep(50); @@ -571,11 +600,11 @@ U0 DoMorseCode() U0 DoPixCollision() { I64 w,h; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Collision\";\n"); w=task->pix_width>>1 +task->pix_left+task->scroll_x; h=task->pix_height>>1+task->pix_top +task->scroll_y; - SetIP(w-35,h-35); + IPSet(w-35,h-35); AFSetIP(10,w+35,w+35); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); @@ -584,7 +613,7 @@ U0 DoPixCollision() U0 DoBlackDiamond() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/BlackDiamond\";\n"); for (i=0;i<15;i++) { SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); @@ -601,7 +630,7 @@ U0 DoBlackDiamond() U0 DoCtrlR1() { I64 i,task_num=-1; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"//"); PostMsg(task,MSG_KEY_DOWN_UP,CH_CTRLR,0); while (!TaskValidate(task->popup_task)) @@ -721,7 +750,7 @@ U0 DoTicTacToe() U0 DoBox() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Box\";\n"); Sleep(1500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -730,7 +759,7 @@ U0 DoBox() U0 DoShadow() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Shadow\";\n"); Sleep(1500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -739,7 +768,7 @@ U0 DoShadow() U0 DoPredatorPrey() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Graphics/PredatorPrey\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -752,7 +781,7 @@ U0 DoPredatorPrey() U0 Do3DPoly() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/3DPoly\";\n"); Sleep(1500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -761,7 +790,7 @@ U0 Do3DPoly() U0 DoRotateTank() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/RotateTank\";\n"); Sleep(1500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -770,7 +799,7 @@ U0 DoRotateTank() U0 DoScreenCodes() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/ScreenCodes\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -779,13 +808,14 @@ U0 DoScreenCodes() U0 DoPanText() { - CTask *task=SpawnUser; - XTalkWait(task,"#include \"::/Demo/Graphics/PanText\";\nExit;\n"); + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/Graphics/PanText\";\n"); + XTalk(task,"Exit;\n"); } U0 DoExtendedChars() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/ExtendedChars\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -793,7 +823,7 @@ U0 DoExtendedChars() U0 DoCharGraphics() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/CharGraphics\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -802,7 +832,7 @@ U0 DoCharGraphics() U0 DoDateTime() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DateTime\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -810,7 +840,7 @@ U0 DoDateTime() U0 DoSubSwitch() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/SubSwitch\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -818,7 +848,7 @@ U0 DoSubSwitch() U0 DoMaze() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Maze\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); @@ -827,16 +857,40 @@ U0 DoMaze() U0 DoFontEd() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/FontEd\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } +U0 DoLattice() +{ + I64 i; + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/Graphics/Lattice\";\n"); + for (i=0;i<20;i++) + SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + for (i=0;i<6;i++) { + SendMsg(task,MSG_KEY_DOWN_UP,'+',0); + SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + } + for (i=0;i<6;i++) { + SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + } + for (i=0;i<16;i++) { + SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + } + Sleep(500); + SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + XTalk(task,"Exit;\n"); +} + U0 DoTimeIns() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/TimeIns\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -845,7 +899,7 @@ U0 DoTimeIns() U0 DoWaterFowl() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Snd/WaterFowl\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -855,7 +909,7 @@ U0 DoWaterFowl() /* U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Apps/Psalmody/Examples\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -866,7 +920,7 @@ U0 Do() U0 DoMPPrint() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/MPPrint\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -874,7 +928,7 @@ U0 DoMPPrint() U0 DoCartesian() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Cartesian\";\n"); XTalkWait(task,"0.2*x`1.5\n"); Sleep(750); @@ -884,7 +938,7 @@ U0 DoCartesian() U0 DoHanoi() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Hanoi\";\n"); Sleep(3000); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -894,7 +948,7 @@ U0 DoHanoi() /* U0 DoLife() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Life\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -903,7 +957,7 @@ U0 DoLife() U0 DoZing() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Zing\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -914,7 +968,7 @@ U0 DoZing() U0 DoCommonAncestor() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/CommonAncestor\";\n"); Sleep(1500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); @@ -923,7 +977,7 @@ U0 DoCommonAncestor() U0 DoPalindrome() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/Palindrome\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -931,7 +985,7 @@ U0 DoPalindrome() U0 DoMagicPairs() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MagicPairs\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -939,7 +993,7 @@ U0 DoMagicPairs() U0 DoMPAdd() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/MPAdd\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -950,7 +1004,7 @@ U0 DoMPAdd() U0 DoLock() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/Lock\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -958,7 +1012,7 @@ U0 DoLock() U0 DoClouds() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/Clouds\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -968,8 +1022,8 @@ U0 DoClouds() /* U0 Do() { - CTask *task=SpawnUser; - XTalkWait(task,"#include \"::/Demo/Graphics/SliderCtrl\";\n"); + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/Graphics/Slider\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); @@ -977,7 +1031,7 @@ U0 Do() U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/ScrollBars\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -986,7 +1040,7 @@ U0 Do() U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/RegistryDemo\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -997,7 +1051,7 @@ U0 Do() U0 DoBugFlapper() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Games/BugBird\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -1016,7 +1070,7 @@ U0 DoBugFlapper() U0 DoBattleLines() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Games/BattleLines\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -1024,9 +1078,9 @@ U0 DoBattleLines() SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (TaskValidate(task->popup_task)) Yield; - SetIP(430,300,,TRUE); + IPSet(430,300,,TRUE); AFSetIP(10,530,400); - SetIP(,,,FALSE); + IPSet(,,,FALSE); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1034,7 +1088,7 @@ U0 DoBattleLines() U0 DoBigGuns() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Games/BigGuns\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -1060,7 +1114,7 @@ U0 DoBigGuns() U0 DoDunGen() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/DunGen\";\n"); for (i=0;i<10;i++) { SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); @@ -1081,7 +1135,7 @@ U0 DoDunGen() U0 DoTimeOut() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Apps/TimeOut/Run\";\n"); Sleep(200); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1105,7 +1159,7 @@ U0 DoTimeOut() U0 DoCollision() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Collision\";\n"); Sleep(1500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1114,7 +1168,7 @@ U0 DoCollision() U0 DoLoadTest() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/LoadTest\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1125,7 +1179,7 @@ U0 DoLoadTest() U0 DoPrimes() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/Primes\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1133,7 +1187,7 @@ U0 DoPrimes() U0 DoRadixSort() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/RadixSort\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1141,7 +1195,7 @@ U0 DoRadixSort() U0 DoPageTableEntries2() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Lectures/PageTableEntries2\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1149,7 +1203,7 @@ U0 DoPageTableEntries2() U0 DoInterrupts() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/Interrupts\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1157,7 +1211,7 @@ U0 DoInterrupts() U0 DoStkGrow() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/StkGrow\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1165,7 +1219,7 @@ U0 DoStkGrow() U0 DoSpan() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Apps/Span/Run\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -1178,66 +1232,66 @@ U0 DoSpan() U0 DoStrut() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Apps/Strut/Run\";\n"); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SetIP(200,200,,TRUE); + IPSet(200,200,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); WinMgrSync(2); - SetIP(GR_WIDTH-200,200,,TRUE); + IPSet(GR_WIDTH-200,200,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); - SetIP(GR_WIDTH/2,400,,TRUE); + IPSet(GR_WIDTH/2,400,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); SendMsg(task,MSG_KEY_DOWN_UP,'s',0); - SetIP(200,200,,TRUE); + IPSet(200,200,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); - SetIP(GR_WIDTH-200,200,,TRUE); + IPSet(GR_WIDTH-200,200,,TRUE); SendMsg(task,MSG_IP_L_UP,0,0); - SetIP(200,200,,TRUE); + IPSet(200,200,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); - SetIP(GR_WIDTH/2,400,,TRUE); + IPSet(GR_WIDTH/2,400,,TRUE); SendMsg(task,MSG_IP_L_UP,0,0); - SetIP(GR_WIDTH-200,200,,TRUE); + IPSet(GR_WIDTH-200,200,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); - SetIP(GR_WIDTH/2,400,,TRUE); + IPSet(GR_WIDTH/2,400,,TRUE); SendMsg(task,MSG_IP_L_UP,0,0); - SetIP(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); + IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); - SetIP(GR_WIDTH-200,200,,TRUE); + IPSet(GR_WIDTH-200,200,,TRUE); SendMsg(task,MSG_IP_L_UP,0,0); - SetIP(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); + IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); - SetIP(GR_WIDTH/2,400,,TRUE); + IPSet(GR_WIDTH/2,400,,TRUE); SendMsg(task,MSG_IP_L_UP,0,0); - SetIP(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); + IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); - SetIP(200,200,,TRUE); + IPSet(200,200,,TRUE); SendMsg(task,MSG_IP_L_UP,0,0); SendMsg(task,MSG_KEY_DOWN_UP,'t',0); - SetIP(GR_WIDTH/2,400,,TRUE); + IPSet(GR_WIDTH/2,400,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); - SetIP(GR_WIDTH-200,200,,TRUE); + IPSet(GR_WIDTH-200,200,,TRUE); SendMsg(task,MSG_IP_L_UP,0,0); - SetIP(GR_WIDTH/2,400,,TRUE); + IPSet(GR_WIDTH/2,400,,TRUE); SendMsg(task,MSG_IP_L_DOWN,0,0); - SetIP(200,200,,TRUE); + IPSet(200,200,,TRUE); SendMsg(task,MSG_IP_L_UP,0,0); - SetIP(,,,FALSE); + IPSet(,,,FALSE); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); LBts(kbd.down_bitmap,Char2ScanCode('1')); @@ -1256,7 +1310,7 @@ U0 DoStrut() U0 DoRawHide() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Games/RawHide\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -1269,7 +1323,7 @@ U0 DoRawHide() U0 DoAfterEgypt() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Apps/AfterEgypt/Run\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -1294,7 +1348,7 @@ U0 DoAfterEgypt() U0 DoShading() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Shading\";\n"); Sleep(1500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1303,7 +1357,7 @@ U0 DoShading() U0 DoPoleZeros() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Graphics/PoleZeros\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -1316,9 +1370,9 @@ U0 DoPoleZeros() U0 DoWhap() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Whap\";\n"); - SetIP(300,200); + IPSet(300,200); Sleep(500); AFSetIP(3,350,300); Sleep(500); @@ -1330,13 +1384,13 @@ U0 DoWhap() U0 DoPick() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Pick\";\n"); - SetIP(200,200); + IPSet(200,200); Sleep(500); - SetIP(,,,TRUE); + IPSet(,,,TRUE); AFSetIP(4,400,400); - SetIP(,,,FALSE); + IPSet(,,,FALSE); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); @@ -1344,13 +1398,13 @@ U0 DoPick() U0 DoPick3D() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Pick3D\";\n"); - SetIP(200,200); + IPSet(200,200); Sleep(500); - SetIP(,,,TRUE); + IPSet(,,,TRUE); AFSetIP(4,400,400); - SetIP(,,,FALSE); + IPSet(,,,FALSE); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); @@ -1358,7 +1412,7 @@ U0 DoPick3D() U0 DoTransform() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Transform\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); @@ -1368,7 +1422,7 @@ U0 DoTransform() /* U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Apps/ToTheFront\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1378,14 +1432,14 @@ U0 Do() U0 DoGrModels() { - CTask *task=SpawnUser; + CTask *task=User; I64 i,j,task_num=-1; XTalkWait(task,"#include \"::/Apps/GrModels/Run\";\n"); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); PostMsg(task,MSG_KEY_DOWN_UP,CH_ESC,0); for (i=0;i<4;i++) { - while (!TaskValidate(task->popup_task)|| - task->popup_task->task_num==task_num) + while (!TaskValidate(task->popup_task) || + task->popup_task->task_num==task_num) Yield; TaskWait(task->popup_task); task_num=task->popup_task->task_num; @@ -1400,13 +1454,13 @@ U0 DoGrModels() U0 DoKeepAway() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Apps/KeepAway/Run\";\n"); while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SetIP(100,100); + IPSet(100,100); Sleep(1500); SendMsg(task,MSG_IP_R_DOWN_UP,ip.pos.x,ip.pos.y); Sleep(1000); @@ -1416,7 +1470,7 @@ U0 DoKeepAway() U0 DoRocket() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Rocket\";\n"); SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); Bts(kbd.down_bitmap,SC_CURSOR_UP); @@ -1433,7 +1487,7 @@ U0 DoRocket() U0 DoRocketScience() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Games/RocketScience\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -1449,7 +1503,7 @@ U0 DoRocketScience() U0 DoMassSpring() { - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/Games/MassSpring\";\n"); while (!TaskValidate(task->popup_task)) Yield; @@ -1481,7 +1535,7 @@ U0 DoMassSpring() /* U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Whap\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1492,7 +1546,7 @@ U0 Do() U0 DoSquirt() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Squirt\";\n"); for (i=0;i<5;i++) { SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); @@ -1517,7 +1571,7 @@ U0 DoSquirt() U0 DoXCaliber() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Apps/X-Caliber/Run\";\n"); for (i=0;i<5;i++) { SendMsg(task,MSG_KEY_DOWN_UP,0,SCF_SHIFT|SC_CURSOR_UP); @@ -1537,7 +1591,7 @@ U0 DoXCaliber() U0 DoFPS() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/CastleFrankenstein\";\n"); for (i=0;i<15;i++) { SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); @@ -1562,7 +1616,7 @@ U0 DoFPS() U0 DoEagleDive() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/EagleDive\";\n"); Sleep(500); for (i=0;i<10;i++) { @@ -1580,7 +1634,7 @@ U0 DoEagleDive() /* U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Apps/Psalmody\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1590,7 +1644,7 @@ U0 Do() U0 DoPhoneNumWords() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/PhoneNumWords\";\n"); XTalkWait(task,"702-254-4223\n\n"); Sleep(750); @@ -1599,7 +1653,7 @@ U0 DoPhoneNumWords() U0 DoSuggestedSpelling() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/SuggestSpelling\";\n"); XTalkWait(task,"effecient\n\n"); Sleep(750); @@ -1608,7 +1662,7 @@ U0 DoSuggestedSpelling() U0 DoWordSearch() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/WordSearch\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1617,7 +1671,7 @@ U0 DoWordSearch() U0 DoFPrintF() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Dsk/FPrintF\";\n"); XTalkWait(task,"::/Demo/Dsk/FPrintF.TXT"); SendMsg(task,MSG_KEY_DOWN_UP,CH_ESC,0); @@ -1630,7 +1684,7 @@ U0 DoFPrintF() U0 DoSerializeTree() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Dsk/SerializeTree\";\n"); Sleep(500); XTalk(task,"Exit;\n"); @@ -1639,7 +1693,7 @@ U0 DoSerializeTree() /* U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Dsk/DataBase\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1648,7 +1702,7 @@ U0 Do() U0 DoRaw() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Dsk/Raw\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1658,7 +1712,7 @@ U0 DoRaw() U0 DoUnusedSpaceRep() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Dsk/UnusedSpaceRep\";\n"); Sleep(500); XTalk(task,"Exit;\n"); @@ -1666,7 +1720,7 @@ U0 DoUnusedSpaceRep() U0 DoBlkDevRep() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Dsk/BlkDevRep\";\n"); Sleep(500); XTalk(task,"Exit;\n"); @@ -1674,7 +1728,7 @@ U0 DoBlkDevRep() U0 DoLastClass() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/LastClass\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1686,7 +1740,7 @@ U0 DoLastClass() U0 DoMiniCompiler() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Lectures/MiniCompiler\";\n"); XTalkWait(task,"1+2*(3+4)\n"); Sleep(750); @@ -1696,15 +1750,14 @@ U0 DoMiniCompiler() U0 DoMiniGrLib() { - CTask *task=SpawnUser; - XTalk(task,"#include \"::/Demo/Lectures/MiniGrLib\";Exit;\n"); - while (TaskValidate(task)) - Yield; + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/Lectures/MiniGrLib\";\n"); + XTalk(task,"Exit;\n"); } U0 DoWebLog() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/WebLogExample/WebLogRep\";\n"); SendMsg(task,MSG_KEY_DOWN_UP,'\n',0); SendMsg(task,MSG_KEY_DOWN_UP,'\n',0); @@ -1715,18 +1768,17 @@ U0 DoWebLog() U0 DoReverseFile() { - CTask *task=SpawnUser; + CTask *task=User; Del("::/Demo/ReverseFileExample/PoemForward.TXT.Z"); - XTalk(task,"#include \"::/Demo/ReverseFileExample/Reverse\";" - "Type(\"::/Demo/ReverseFileExample/PoemForeward.TXT.Z\");" - "Sleep(750);" - "Exit;\n"); - while (TaskValidate(task)); + XTalkWait(task,"#include \"::/Demo/ReverseFileExample/Reverse\";\n"); + XTalkWait(task,"Type(\"::/Demo/ReverseFileExample/PoemForeward.TXT.Z\");\n"); + Sleep(750); + XTalk(task,"Exit;\n"); } U0 DoSortFile() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/SortFileExample/F64FileGen\";\n"); XTalkWait(task,"#include \"::/Demo/SortFileExample/F64FileSort\";\n"); Sleep(750); @@ -1736,7 +1788,7 @@ U0 DoSortFile() /* U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Apps/TimeClock\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1746,7 +1798,7 @@ U0 Do() U0 DoLogic() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Apps/Logic/Run\";\n"); XTalkWait(task,"NAND\nNOR\n\n0x100\n0xF0\n0xCC\n0xAA\n\n0x12\n\n"); Sleep(750); @@ -1757,7 +1809,7 @@ U0 DoLogic() /* U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Lectures\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1766,7 +1818,7 @@ U0 Do() U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/AutoFile\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1776,7 +1828,7 @@ U0 Do() U0 DoPrint() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Print\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1784,7 +1836,7 @@ U0 DoPrint() U0 DoSubIntAccess() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/SubIntAccess\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1792,7 +1844,7 @@ U0 DoSubIntAccess() U0 DoParenWarn() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/ParenWarn\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1800,7 +1852,7 @@ U0 DoParenWarn() U0 DoCompileDemo() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/CompileDemo\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1808,7 +1860,7 @@ U0 DoCompileDemo() U0 DoPrompt() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Prompt\";\n"); XTalkWait(task,"1+2*3<<4\n"); XTalkWait(task,"1.0+2*3`2\n"); @@ -1821,7 +1873,7 @@ U0 DoPrompt() U0 DoClassMeta() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/ClassMeta\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1829,7 +1881,7 @@ U0 DoClassMeta() U0 DoForm() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/Form\";\n"); Sleep(250); XTalk(task,"54321"); @@ -1854,7 +1906,7 @@ U0 DoForm() U0 DoClickCallBack() { I64 i; - CTask *task=SpawnUser; + CTask *task=User; XTalk(task,"#include \"::/Demo/DolDoc/ClickCallBack\";\n"); for (i=0;i<3;i++) { while (!TaskValidate(task->popup_task)) @@ -1869,7 +1921,7 @@ U0 DoClickCallBack() U0 DoMenuButton() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/MenuButton\";\n"); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); @@ -1892,7 +1944,7 @@ U0 DoMenuButton() U0 DoMenuSprite() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/MenuSprite\";\n"); SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); Sleep(50); @@ -1910,7 +1962,7 @@ U0 DoMenuSprite() U0 DoTreeDemo() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/TreeDemo\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1918,7 +1970,7 @@ U0 DoTreeDemo() U0 DoExceptions() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Exceptions\";\n"); XTalkWait(task,"yy"); Sleep(750); @@ -1927,7 +1979,7 @@ U0 DoExceptions() U0 DoTextDemo() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/TextDemo\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1935,7 +1987,7 @@ U0 DoTextDemo() U0 DoCursorMove() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/CursorMove\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1943,7 +1995,7 @@ U0 DoCursorMove() U0 DoDemoDoc() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"Ed(\"::/Demo/DolDoc/DemoDoc.TXT\");\n"); SendMsg(task,MSG_KEY_DOWN_UP,CH_CTRLG,0); XTalkWait(task,"100"); @@ -1956,7 +2008,7 @@ U0 DoDemoDoc() /* U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Spy\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1966,7 +2018,7 @@ U0 Do() U0 DoFileRead() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/FileRead\";\n"); Sleep(750); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -1977,7 +2029,7 @@ U0 DoFileRead() U0 DoData() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/Data\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1985,7 +2037,7 @@ U0 DoData() U0 DoDefineStr() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/DefineStr\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -1993,7 +2045,7 @@ U0 DoDefineStr() U0 DoCallBack() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/CallBack\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -2001,7 +2053,7 @@ U0 DoCallBack() U0 DoDefine() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Define\";\n"); XTalkWait(task,"YS\n"); Sleep(750); @@ -2011,7 +2063,7 @@ U0 DoDefine() /* U0 Do() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/UnusedDefine\";\n"); Sleep(500); SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); @@ -2021,7 +2073,7 @@ U0 Do() U0 DoAsmHelloWorld() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Asm/AsmHelloWorld\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -2029,7 +2081,7 @@ U0 DoAsmHelloWorld() U0 DoAsmAndC1() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Asm/AsmAndC1\";\n2\n"); XTalk(task,"Exit;\n"); while (TaskValidate(task)) @@ -2038,7 +2090,7 @@ U0 DoAsmAndC1() U0 DoAsmAndC2() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Asm/AsmAndC2\";\n2\n"); XTalk(task,"Exit;\n"); while (TaskValidate(task)) @@ -2047,7 +2099,7 @@ U0 DoAsmAndC2() U0 DoAsmAndC3() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Asm/AsmAndC3\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -2055,7 +2107,7 @@ U0 DoAsmAndC3() U0 DoBuzzFizz() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Asm/BuzzFizz\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -2063,7 +2115,7 @@ U0 DoBuzzFizz() U0 DoMulByHand() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Asm/MulByHand\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -2071,7 +2123,7 @@ U0 DoMulByHand() U0 DoDivByHand() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Asm/DivByHand\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -2079,7 +2131,7 @@ U0 DoDivByHand() U0 DoPutDec() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/Asm/PutDec\";\n"); Sleep(750); XTalk(task,"Exit;\n"); @@ -2087,7 +2139,7 @@ U0 DoPutDec() U0 DoGlblVars() { - CTask *task=SpawnUser; + CTask *task=User; XTalkWait(task,"#include \"::/Demo/GlblVars\";\n"); Sleep(1000); XTalk(task,"Exit;\n"); @@ -2095,7 +2147,7 @@ U0 DoGlblVars() U0 DoReps() { - CTask *task=SpawnUser; + CTask *task=User; TS; XTalkWait(task,"DocMax;Prof;HeapLog(ON);\n"); TS; XTalkWait(task,"PCIRep;Sleep(750);\n"); TS; XTalkWait(task,"MemBIOSRep;Sleep(750);\n"); @@ -2113,7 +2165,7 @@ U0 DoReps() TS; XTalkWait(task,"ATARep;\npSleep(750);\n"); TS; XTalkWait(task,"HashDepthRep(adam_task->hash_table);Sleep(750);\n"); TS; XTalkWait(task,"Who;Sleep(750);\n"); - TS; XTalkWait(task,"PrtRep;Sleep(750);\n"); + TS; XTalkWait(task,"DrvRep;Sleep(750);\n"); TS; XTalkWait(task,"TaskRep;Sleep(750);\n"); XTalk(task,"Exit;\n"); } @@ -2143,10 +2195,10 @@ U0 OSTestSuite() TS; DoWenceslas; TS; DoBomberGolf; TS; DoTheDead; - TS; DoChessNet; + TS; DoTreeCheckers; TS; DoMPAdd; TS; DoPrimes; - TS; if (FileFind(Define("ST_BIBLE_FILE"))) DoPalindrome; + TS; if (FileFind(BIBLE_FILENAME)) DoPalindrome; TS; DoClouds; TS; if (mp_cnt>1) DoRadixSort; TS; if (mp_cnt>1) DoLoadTest; @@ -2159,9 +2211,12 @@ U0 OSTestSuite() TS; DoSpritePut; TS; DoSpritePutExt; TS; DoSpriteText; + TS; DoSpriteRaw; TS; DoEdCSprite; TS; DoBalloon; TS; DoCarry; + TS; DoDirectives; + TS; DoRandDemo; TS; DoExtents; TS; DoDotNet; TS; DoSunMoon; @@ -2203,6 +2258,7 @@ U0 OSTestSuite() TS; DoHalogen; TS; DoMaze; TS; DoFontEd; + TS; DoLattice; TS; DoCtrlR1; TS; DoSubIntAccess; TS; DoDemoDoc; diff --git a/Misc/PCIDevices.TXT b/Misc/PCIDevices.TXT index 3e4aff2..7326898 100644 --- a/Misc/PCIDevices.TXT +++ b/Misc/PCIDevices.TXT @@ -1,21 +1,21 @@ 0033 Paradyne Corp. - 002F .43 ieee 1394 controller - 00333 HDAUDIO\FUNC_01&VEN_10DE&DEV_000B&SUBSYS_10DE0101& HDAUDIO\FUNC_01&VEN_10DE&DEV_000B&SUBSYS_10DE0101&REV_1002\5&11C58D40&0&0101 + 002F MAIAM Spitfire VGA Accelerator + 00333 OTI107 Spitfire VGA Accelerator 003D master 003a mx98715/25 i740pci 003d mx98715/25 1740pci 00D1 mx98715/25 i740 PCI 0070 Hauppauge Computer Works Inc. - 6800 PCI\VEN_14F1&DEV_8810&REV_05 Hauppage Nova -TD-500 DVB-T Tuner Device + 6800 PCI\VEN_14F1&DEV_2F30&SUBSY5_205D14F1&REV_01\3&130 Hauppage Nova -TD-500 DVB-T Tuner Device 68001 PCI\VEN_14F1&DEV_8810&REV_05 Hauppage Nova -TD-500 DVB-T Tuner Device 0100 USBPDO-8 0123 General Dynamics 0315 SK - Electronics Co., Ltd. 0402 Acer aspire one - 1050 0200 ethernet controller + 1050 0x1050 ethernet controller 5606 0x0436 0x4752 8086 0x8086 video controller - 9665 0009' ZCT8YBT' + 9665 PCI\VEN_168C&DEV_001A&CC_0200 ZCT8YBT' 046D Logitech Inc. 0805 atom ıntel ınsıde n.a. 0808 n/a Logitech Webcam C600 @@ -50,28 +50,30 @@ C52A Dell Wireless Keyboard w/ mouse HID Keyboard Device C52B FC8708A607198-10F1043TA3 USB Receiver for Wireless Mouse C52E n/a USB3 receiver + C52F Logitech Wireless Mouse USB Controller Logitech Wireless Mouse USB Controller 0483 UPEK 2016 UPEK fingerprint sensors Driver Windows xp 04A9 Canon 314D unknown uhknown 04B3 IBM - 24D5 PCI\VEN_8086&DEV_24D5&SUBSYS_24D58086&REV_02\3&267 Audio Controller + 24D5 PCI\VEN_8086&DEV_24D5&SUBSYS_218114A4& Audio Controller 401 8086 PCI\VEN_8086&DEV_293E&SUBSYS_20F217AA&REV_03\3&B1BFB68&0&D8 401 24C5 PCI\VEN_8086&DEV_24C6&REV_03\3 267A616A - 4010 cc020000 PCI\VEN_8086&DEV_108C&SUBSYS_02F61014&REV03 - 9876 CC_040100 PCI\VEN_8086&DEV_101E&SUBSYS_0591014&REV_03\4&39A85202&0&08F0 + 4010 cc020000 PCI\VEN_1180&DEV_E823&SUBSYS_21E217AA&REV_04 PCI\VEN_1180&DEV_E823&SUBSYS_21E217AA PCI\VEN_1180&DEV_ + 9876 CC_040100 PCI\VEN_8086&DEV_1C3A&SUBSYS_1C3A1458&REV_04 04D9 Filco 1603 n\a Samsung 2011 n/a n/a 04F2 Chicony Electronics Co. - b008 . .oem44.inf + b008 USB\VID_138A&PID_0001 .oem44.inf B044 . Webcam B175 0001 SN B217 01A000166 Integrated Camera B307 6030 Webcam -051D Intel® Smart Connect Technology - 0002 n/a n/a - 051D INT33A0 0 x051d +051D ACPI\VEN_INT&DEV_33A0 + 0002 E8600 Inter (R) Core [TM] 2 Duo cpu + 051D INT33A0 0x051d + 9876 returned by a chip returned by a chip 0529 Aladdin E-Token 0553 Aiptek USA 0200, 0x0201, 0x02 DS38xx Oregon Scientific @@ -79,10 +81,11 @@ 0001 6387 AM usb storage 0107 0x03 0x01 1234 9380 6387 + 1600 00000000 http://www.alldatasheet.com/datasheet-pdf/pdf/91600/ETC/AU9254A21.html 6362 UNKNOWN Unknown 4-in-1 card reader (istar) 6366 Unknown Multi Flash Reader USB Device 6387 intel g620 USB Mass Storage Device(USB1005B Flash Disk) - 8CBA Unknown PCI Simple Communications Controller + 8CBA PCI\VEN_8086&DEV_8CBA&SUBSYS_85341043&REV_00 PCI Simple Communications Controller 9254 AU9254A21-HAS http://www.alldatasheet.com/datasheet-pdf/pdf/91600/ETC/AU9254A21.html 9380 FC8708-3 Micron=MT29F32G08CBABA 9540 Unknown SmartCard Reader @@ -90,8 +93,8 @@ 0028 HEM-790IT hid device class blood pressure monitor 05ac Apple, Inc. 021e Keyboard IT USB Alluminium Keyboard IT USB - 1293 Apple iPod Apple iPod - 1297 Apple iPhone Apple iPhone 5s + 1293 Apple iPod 5 Apple iPod 5 + 1297 Apple iPhone Apple iPhone 4s 21e phone 3g Allumium keyboard it USB 05E1 D-MAX 0408 00000000000 USB 2.0 Video Capture Controller @@ -102,6 +105,7 @@ a103 SuYin WebCam a116 Suiyn Optronics USB 2.0 UVC 1.3M WebCam A219 SUYIN SUYIN 1.3M WebCam + B250 SuYin 1.3M HD WebCam c108 dont know its a webcam software d101 SuYin Web Cam D217 SUYIN HP TrueVision HD @@ -115,8 +119,9 @@ 06FE Acresso Software Inc. 9700 i don't know a netcard used usb interface 0711 SIIG, Inc. -093a KYE Systems Corp. - 2468 Genius iLook 110 http://genius.ru/products.aspx?pnum=24948&archive=1 +093a KYE Systems Corp. / Pixart Imaging + 2468 Genius iLook 300 http://genius.ru/products.aspx?pnum=24948&archive=1 + 2600 PAC7311 http://www.speedlink.com/support/bin/24-02-2012/SETUP.rar 2608 PAC7311 - Toshiba PX1342E-1 CAM USB\VID_093A&PID_2608&REV_0100&MI_00 2620 CNR-WCAM53G WEBCAM http://www.canyon-tech.com/archive/voip/webcams/CNR-WCAM53#pr-switcher 096E USB Rockey dongle from Feitain @@ -127,7 +132,7 @@ 2000 0578A97 Broadcom Bluetooth Firmware Upgrade Device 2009 Broadcom Bluetooth Controller 200a Broadcom Bluetooth Controller - 200f Broadcom Bluetooth Controller + 200f PCI\VEN_14E4&DEV_43B1&SUBSYS_2B231A3B&REV_03 Broadcom Bluetooth Controller 201d n450 BROADCOM Bluetooth Device 201e IBM Integrated Bluetooth IV 2020 Broadcom Bluetooth Dongle @@ -176,6 +181,7 @@ 2157 BCM2046 B1 USB 500 2158 Broadcom 2046 Bluetooth 2.1 Device 219C BCM2070 Broadcom BCM2070 Bluetooth 3.0+HS USB Device + 21E1 Broadcom 20702 Bluetooth 4.0 . 21E3 BCM43142A0 Broadcom Bluetooth 4.0 4500 BCM2046B1 Broadcom 2046 Bluetooth 2.1 USB Dongle 4502 BCM2046B1 Broadcom 2046 Bluetooth 2.1 USB Dongle @@ -191,7 +197,7 @@ 1010 1010&REV_0101&MI_00 RoMI/o by Egosys - Midi USB Cable 0AC8 ASUS 1234 1 1 - 6719 3330 PCI\VEN_8086&DEV_1E3A&SUBSYS_138D1043&REV_04 + 6719 3330 8086&DEV_0F18&SUBSYS_16DD1043&REV_0E 0b05 Toshiba Bluetooth RFBUS, RFCOM, RFHID 170C 6205 WIFI USB Card 0c45 Microdia Ltd. @@ -207,7 +213,7 @@ 6128 USB\VID_0C45&PID_613C&REV_0101 USB веб-камера 6128_ USB\VID_0C45&PID_6148&REV_0101 USB PC Camera Plus 6129 USB\VID_0C45&PID_6128\5&3875c171&0&1 USB WebCam - 6130 USB\VID_8564&PID_1000\0&REV_0106 USB HUB + 6130 USB\VID_0000&PID_0000\5&1AAEDD8&0&2 USB HUB 613A USB\VID_0C45&PID_613A\5&2F621EE5&0&5 USB WEBCAM 613c USB\VID_0C45&PID_613C\5&377B3285&0&1 USB Webcam 613E 5&29957435&0&1 USB Camera @@ -226,10 +232,11 @@ 644b not known not known 6489 0x6489 Integrated Webcam Universal Serial Bus controllers 6840 USB\VID_0C45&PID_6480&MI_00 sonix 1.3 mp laptop integrated webcam + 7401 n.a. RDing TEMPer1V1.4 9876 USB\VID_090C&PID_B371&MI_00\6&462987E&0&0000 webcam 0cf3 TP-Link 1002 Wireless USB 2.0 adapter TL-WN821N Wireless USB 2.0 adapter TL-WN821N - 3000 USB\VID_0CF3&PID_3000&REV_0200 USB\VID_0CF3&PID_3000&REV_0200 + 3000 USB\VID_0000&PID_0000\6&F763642&0&4 USB\VID_0000&PID_0000\6&F763642&0&4 3002 USB\VID_0CF3&PID_3002&REV_0001 USB\VID_0CF3&PID_3002&REV_0001 3002_ unknown unknown 3005 AR3011 Atheros Bluetooth Module @@ -335,7 +342,7 @@ 0035 LSI53C1035 PCI-X SCSI Controller 0040 LSI53C1035 PCI-X to Ultra320 SCSI Controller 0050 LSISAS1068E LSISAS1068E / LSI SAS 6i RAID Controller - 0054 LSISAS1068 PCI-X Fusion-MPT SAS + 0054 LSISAS1068 LSI Adapter SAS 3000 series 8-port with 1068 0056 LSISAS1064ET PCI-Express Fusion-MPT SAS 0058 LSISAS1068E PCI-Express Fusion-MPT SAS 005B LSISAS2108/2208 LSI Logic / Symbios Logic MegaRAID SAS 2208 [Thunderbolt] [1000:005b] (rev 05) @@ -347,6 +354,7 @@ 0073 LSISAS2008 IBM ServeRAID M1015, Dell Perc H310 0080 LSI Logic SAS2208 PCI-Express Fusion-MPT SAS 2.0/2.5 008F 53C810 LSI 53C8xx SCSI host adapter chip + 0097 LSISAS3008 SAS3008 PCI-Express Fusion-MPT SAS-3 0408 L3-01037-03D U320-2E Raid Controller 0621 LSIFC909 Fibre Channel I/O Processor 0622 53c885 Dial Channel Fibre Channel I/O Processor @@ -381,7 +389,7 @@ 0020 ispLSI1032E Universal digital I/O PCI-Interface 1002 Advanced Micro Devices, Inc. 4370 RV370 ATI RADEON X300/X550/X1050 Series Secondary - 00000100 (256) {4D36E968-E325-11CE-BFC1-08002BE10318} {4D36E968-E325-11CE-BFC1-08002BE10318} + 00000100 (256) {4D36E972-E325-11CE-BFC1-08002BE10318}\0016 {4D36E972-E325-11CE-BFC1-08002BE10318}\0016 0002 EMU10K1 Audio Cipset (SB) Livel 000D bhjkh ATI RADEON X1200 серии 0180200a LXPAY0Y001926158A92000 AMD Athlon(tm) X2 Dual-Core QL-62 @@ -389,10 +397,22 @@ 0B12 R580 ATI Radeon X1900 1002 0x675d pcie 0x675d pcie 10024152 RV360 ATI RADEON 9250 Series + 1028 R9 200 Radeon R9 200 Series 1043 RV410 ATI MOBILITY/ATI RADEON X700 11 0x215r2qzua21 0xbcg62 1111 ATI Technologies Inc. / Advanced Micro Devices, In ATI Technologies Inc. 1202 1202 PCI standard host CPU bridge + 1314 1314 High Definition Audio Controller + 1400 1400 PCI standard host CPU bridge + 1401 1401 PCI standard host CPU bridge + 1402 1402 PCI standard host CPU bridge + 1403 1403 PCI standard host CPU bridge + 1404 1404 PCI standard host CPU bridge + 1405 1405 PCI standard host CPU bridge + 1410 1410 PCI standard host CPU bridge + 1417 1417 PCI Express standard Root Port + 1419 1419 IOMMU Device + 1631 0000 bus 1714 A4-3400 AMD Radeon™ HD 6410D Audio 1ab8 hex 2 ati radeon 3150 M24 ATI MOBILITY /ATI RADEON X600 @@ -419,7 +439,7 @@ 4153 RV350 ATI RADEON 9550/X1050 Series 4154 RV350GL ATI FireGL T2 4155 RV350 ATI RADEON 9600 Series - 4158 1002 Mach32xBH + 4158 AA01 ven_1992&dev_5840 4164 R300 ATI RADEON 9500 Secondary 4166 R300 ATI RADEON 9600TX Secondary 4167 R300GL ATI FireGL Z1 Secondary @@ -445,7 +465,7 @@ 434d SB200 AC'97 Modem Controller 4353 SB200 SMBus Controller 4354 215CT Mach64 CT - 4358 210888CX PCI\VEN_1002&DEV_5B60&SUBSYS_00821043&REV_00 + 4358 113-A52021-104 PCI\VEN_1002&DEV_5B60&SUBSYS_00821043&REV_00 4361 ALC665 ATI AC97 REALTEK AUDIO DRIVER 4363 SB300 ATI SOUTH BRIDGE SB300 DRIVER 4369 IXP 3xx PATA 133 Controller @@ -484,6 +504,8 @@ 4398 SB700 Standard OpenHCD USB Host Controller 439C SB7xx PATA 133 Controller 439D SB700 LPC 74A + 43A0 43A0 PCI Express standard Root Port + 43A3 43A3 PCI Express standard Root Port 4437 ATI Mobility Radeon 7000 IGP RS250M 4554 Mach64 ET 4654 Mach64 VT 113--34004-104 @@ -551,7 +573,7 @@ 4C54 4372 Mach 64 LT 4C57 M7 [LW] Mobility Radeon 7500 4C58 (0x71C1) DAC type: Internal DAC(400MHz) FireGL Mobility - 4C59 Mobility 6 Radeon Mobility M6 Series (Also known as ATI R7000 64MB TV PCI) + 4C59 ATI Mobility Radeon 7000 with 16MB (7500 with 16 o ATI Mobility Radeon AGP (0x4C59), ATI Technologies Inc. -kompatible 4C5A Radeon Mobility M6 LZ 4C64 Radeon Mobility M9-GL 4C66 RV250 ATI MOBILITY RADEON 9000 @@ -645,7 +667,7 @@ 5354 Mach 64 ST 5446 unknown Rage 128 Pro Ultra TF 544C Rage 128 Pro TL - 5452 Rage 128 Pro TR + 5452 5452 Rage 128 Pro TR 5455 Rage 128 Pro Ultra TU 5457 RS200M RADEON IGP 345M 5460 M22 ATI MOBILITY /ATI RADEON X300 @@ -698,7 +720,7 @@ 5960 RV280 Radeon 9200 Pro 5960 AGP A051400005470 PN 1024-RC26-1F-SA 5961 RV280 ATI RADEON 9200 se agp - 5962 RV280 Radeon 9200 + 5962 Rev_01 Radeon 9200 5964 Radeon 9200 Radeon 9200 SE Series 5965 unknown FireMV 2200 5974 RS482 ATI RADEON Xpress Series @@ -764,8 +786,8 @@ 6738 HD6870 MSI 6739 Barts (Pro) AMD Radeon HD 6850 673E 0x2310 0x1787 - 6740 Whistler ATI Radeon HD 6670M - 6741 Whistler AMD Radeonâ„¢ HD 6700M/HD 6600M Series + 6740 Powered by AMD ATI Radeon HD 6700M + 6741 Whistler AMD Radeon™ HD 6700M/HD 6600M Series 6741_ AMD Radeon HD 7450M (6470M)、6630M、In PCI\VEN_1002&DEV_6741&SUBSYS_21E317AA&REV_00 6749 unknown unknown 674A V3900 AMD FirePro V3900 graphics @@ -773,12 +795,14 @@ 6758 NI AMD Radeon HD 6670 6759 1996 AMD Radeon HD 6570 675D HD7570 AMD Radeon HD7570 - 6760 3305M AMD/ATi Radeon 6470M + 6760 3305M AMD/ATi Radeon 6760M 6761 AMD Radeon HD 6430M 6430M 6778 7470 AMD Radeon HD 7470 6779 AMD Radeon HD 6470m AMD Radeon HD 6470m 677B Unknown Radeon HD 7450 - 6840 SUBSYS AMD Radeon HD 7600M Series + 6798 6798 AMD Radeon 7900 Series + 6810 R9 200 Radeon R9 200 Series + 6840 SUBSY AMD Radeon HD 7600M Series 6841 subsys 1789103c AMD Radeon HD 7500M/7600M 6898 EG CYPRESS XT ATI Radeon HD 5800 Series 6899 EG CYPRESS PRO ATI Radeon HD 5800 Series @@ -863,7 +887,7 @@ 718D M54 ATI MOBILITY /ATI RADEON X1450 718F RV515PCI ATI RADEON X1300 Series 7193 RV515 ATI RADEON X1550 Series - 7196 M52 ATI MOBILITY /ATI RADEON X1350 + 7196 M62 ATI MOBILITY /ATI RADEON X1350 719B RV515 ATI FireMV 2250 719F RV515 ATI RADEON X1550 64-bit 71A0 RV515 ATI RADEON X1300/X1550 Series Secondary @@ -878,7 +902,7 @@ 71c2 RV530 ATI RADEON X1600 Series 71C3 RV535 ATI RADEON X1650 Series 71C4 M56GL ATI MOBILITY FireGL V5200 - 71c5 M56 ATI MOBILITY /ATI RADEON X1600 + 71c5 M56 ATI MOBILITY / ATI RADEON X1600 71C5 PCIE M56 ATI MOBILITY /ATI RADEON X1600 71C6 RV530 ATI RADEON X1650 Series 71C7 RV535 ATI RADEON X1650 Series @@ -941,6 +965,15 @@ 72A8 R580 ATI RADEON X1950 GT Secondary 72B1 R580 ATI RADEON X1650 Series Secondary 72B3 R580 ATI RADEON X1650 Series Secondary + 7801 7801 SATA Controller + 7807 7807 Standard OpenHCD USB Host Controller + 7808 7808 Standard Enhanced PCI to USB Host Controller + 7809 7809 Standard OpenHCD USB Host Controller + 780B 780B SMBus + 780D 780D HDMI Audio + 780E 780E PCI standard ISA bridge + 780F 780F PCI standard PCI-to-PCI bridge + 7814 7814 AMD USB 3.0 Host Controller 7833 RS350 Radeon 9100 Pro 79 unknown, 2200 mhz Campo Valor Juego de instrucciones x86, x86-64, MMX, 3DNow!, SSE, SSE2, SSE3 791 RS690M ATI Mobility Radeon x1200 @@ -964,7 +997,7 @@ 940A R600GL ATI FireGL V8650 940B R600GL ATI FireGL V8600 940F R600GL ATI FireGL V7600 - 9440 RV770 ATI Radeon HD 4250 + 9440 RV770 ATI Radeon HD 4870 9441 R700 ATI Radeon HD 4870 X2 9442 RV770 ATI Radeon HD 4800 Series 9443 R700 ATI Radeon HD 4850 X2 @@ -979,7 +1012,7 @@ 9452 RV770 AMD FireStream 9250 9456 RV770 ATI FirePro V8700 (FireGL) 945A M98 ATI Mobility Radeon HD 4870 - 9460 RV790 ATI Radeon HD 4890 Series + 9460 RV790 ATI Radeon HD 4800 Series 9462 RV790 ATI Mobility Radeon HD 5650 9480 M96 ATI Mobility Radeon HD 4650 9487 RV730 ATI Radeon Graphics Processor @@ -1025,7 +1058,7 @@ 954E RV710 ATI Radeon Graphics Processor 954F RV710 ATI Radeon HD 4350 9552 M92 ATI Mobility Radeon HD 4330 Серии - 9553 M92 ATI Mobility Radeon HD 4570 series + 9553 M92 ATI Mobility Radeon HD 5145 9555 M93 ATI Mobility Radeon HD 4500 Series 9557 M93 ATI FirePro RG220 9581 M76M ATI Mobility Radeon HD 2600 @@ -1067,7 +1100,7 @@ 9615 RS780 AMD 780E 9616 RS780 AMD 760G 9644 A4-3420 AMD Radeon™ HD 6410D - 9647 AMD A6-3420M APU With AMD Radeon HD 6520G стандартный vga гр + 9647 AMD A6-3410MX APU With AMD Radeon HD 6520G стандартный vga гр 9648 9648 AMD Radeon(TM) HD 6480G 9649 HD 6480G AMD Radeon(TM) HD 6480G 970F 970F High Definition Audio Controller @@ -1076,15 +1109,19 @@ 9712 4250 ATI Mobility Radeon HD 4200 Series (ATI Mobility Radeon HD 4250) 9713 RS880MC ATI Mobility Radeon 4100 9715 RS880 ATI Radeon HD 4250 Graphics - 9802 AMD E-350 AMD Radeon™ HD 6310 Graphics + 9802 AMD E-350 AMD Radeon HD 6310 series 9803 2411E6FE Display driver http://support1.toshiba-tro.de/tedd-files2/0/display-20110404110958.zip 9804 AMD Radeon HD 6310 Graphics AMD Radeon HD 6310 Gr AMD Radeon HD 6310 Graphics 9806 AMD Radeon HD 6320 E-450 APU 9807 unknow amd radeon hd 6290 graphic 9808 E2-1800 E-Series APU (E2-1800, maybe more) 9809 7310M ATI Radeon 7310M + 9834 AMD Radeon HD 8210 PCI\VEN_1002&DEV_9834&SUBSYS_380217AA&REV_00 9876 ATI GTC (GT-C2U2) ATI 3D Rage Pro AGP 2X + 9902 9902 HDMI Audio + 9998 9998 Radeon HD 8370D 9999 (0x9498 ATI Radeon HD 4600 + 999C 999C Radeon HD 8550D AA01 Ati Function driver for high definition audio1 Ati Mobility Radeon HD HDMI Audio realtek AA08 All with HDMI support High Definition Audio Device AA10 677 HDMI Audio Support @@ -1138,7 +1175,7 @@ 0011 PC87560 PCI System I/O 0012 USB Controller 001B LM4560 Advanced PCI Audio Accelerator - 0020 DP83815/16 MacPhyter 10/100 Mb/s Ethernet MAC & PHY + 0020 DP83815 MacPhyter 10/100 Mb/s Ethernet MAC & PHY 0020h DP83815 10/100 MacPhyter3v PCI Adapter 0021 PC82440 PCI to ISA Bridge 0022 DP83820/1 10/100/1000 Mb/s PCI Ethernet NIC @@ -1163,7 +1200,7 @@ 3202 ET4000W32P-A GUI Accelerator 3205 ET4000W32P-B GUI Accelerator 3206 ET4000W32P-C GUI Accelerator - 3207 ET4000W32P-D GUI Accelerator + 3207 54005443 GUI Accelerator 3208 ET6000 Graphics/Multimedia Engine 4702 ET6300 100D AST Research @@ -1186,7 +1223,7 @@ 000F DEFPA FDDI 0014 DC21041 Tulip Plus Ethernet Adapter 0016 DGLPB ATM - 0019 DC21142/3 PCI/CardBus 10/100 Mbit Ethernet Ctlr + 0019 DC21142/3 Olicom RapidFire 2327 Fast Ethernet Adapter 0021 21052[-AB] PCI-PCI Bridge 0022 DC21150-AA PCI-PCI Bridge 0023 DC21150 PCI to PCI Bridge @@ -1336,6 +1373,18 @@ 1203 1203 PCI standard host CPU bridge 1204 1204 PCI standard host CPU bridge 1419 AMD IOMMU Device AMD Input/Outpu Memory Management Unit + 1510 1510 PCI standard host CPU bridge + 1513 1513 PCI standard PCI-to-PCI bridge + 1514 1514 PCI standard PCI-to-PCI bridge + 1515 1515 PCI standard PCI-to-PCI bridge + 1700 1700 PCI standard host CPU bridge + 1701 1701 PCI standard host CPU bridge + 1702 1702 PCI standard host CPU bridge + 1703 1703 PCI standard host CPU bridge + 1704 1704 PCI standard host CPU bridge + 1716 1716 PCI standard host CPU bridge + 1718 1718 PCI standard host CPU bridge + 1719 1719 PCI standard host CPU bridge 2000 Am79C970/1/2/3/5/6 PCnet LANCE PCI Ethernet Controller 2001 Am79C978 PCnet-Home Networking Ctrlr (1/10 Mbps) 2003 Am1772 Wireless LAN chipset SMC 2602W V3 http://www.smc.com/index.cfm?event=downloads.doSearchCriteria&loca @@ -1405,14 +1454,18 @@ 7804 AMD SATA Controller AMD SATA Controller 7807 Standard OpenHCD USB Host Controller Standard OpenHCD USB Host Controller 7808 Standard PCI-to-USB extended host controller Standard PCI-to-USB extended host controller + 7809 7809 Standard OpenHCD USB Host Controller 780b 2128103C SM Bus controller + 780D 780D High Definition Audio Controller + 780E 780E PCI standard ISA bridge + 780F 780F PCI standard PCI-to-PCI bridge 7812 amd_sata AMD USB 3.0 Host Controller 840 4u Used to blow up the motherboard. Highly explosive. Use at ur own risk 9601 9601 PCI standard host CPU bridge 9602 9602 PCI standard PCI-to-PCI bridge 9604 9604 PCI standard PCI-to-PCI bridge 9605 9605 PCI standard PCI-to-PCI bridge - 9606 9606 PCI standard PCI-to-PCI bridge + 9606 9609 PCI standard PCI-to-PCI bridge 9642 AMD-6370D AMD Radeon HD6370D 1023 TRIDENT MICRO 0194 82C194 CardBus Controller @@ -1529,19 +1582,21 @@ 0013 PERC 4e/Si and PERC 4e/Di Expandable RAID Controller 0014 DRAC4-0 Dell Remote Access Controller subsystem 0015 PERC 5/i RAID Controller Integrated RAID controller - 012c 82545 Intel Gigabit controller + 012c 915gm/gms,910gml Intel Gigabit controller 016d 82541GI Dell PRO/1000 MT Network Connection 0287 DELL PERC 320/DC Adaptec 2200S SCSI RAID controller 1000 FA82537EP A Intel 537 epg v.92 modem repackaged by dell 1050 0200 ethernet controller - 1f0c 1078 PCI Simple Communication Controller + 1f0c 4050 PCI Simple Communication Controller 3002 AR3011 Dell Wireless 1702 Bluetooth v3.0+HS - 3582 inspiron n5110 video controller + 3582 ispiron 4700 video controller 675d hd7570 amd radeon hd7570 + 6821 3 3 + 8184 Dell Wireless 5540 Dell Wireless 5540 HSPA Mini Card 9876 PowerEdge 3/Si Expandable RAID Controller 102A LSI Logic Headland Division 0000 HYDRA 4 port usb hub - 0003 0x0000 USB\VID_0000&PID_0003\5&18BB29D0&1&2 + 0003 0x0000 USB\VID_0000&PID_0000\6&76F8B18&0&2 0010 ASPEN i486 Chipset 002A 6.1.7601.18328 4 port usb hub 102A HYDRA P5 Chipset @@ -1657,7 +1712,7 @@ 00E7 uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr 00F2 D72874GC IEEE1394+OHCI+1.1+3-port+PHY-Link+Ctrlr 0165 - AVerMedia A313 MiniCard Hybrid DVB-T - 0194 720200 Renesas Electronics USB 3.0 Host Controller + 0194 0C0330 Renesas Electronics USB 3.0 Host Controller 0520 NEC D72874GC 1394 CARD 1033 0720101GJ NEC PCI to USB Open Host Controller 9876 uPD720100A uPD720102GC USB 2.0 Host Controller @@ -1761,7 +1816,7 @@ 5571 SiS5571 Memory/PCI bridge 5581 SiS 5581 p5 chipset 5582 SiS5582 PCI to ISA Bridge - 5591 MTC ms9377c (SIS 741) PCI\VEN_1039 + 5591 MTC ms9377c (SIS 741 PCI\VEN_1039 5596 SiS661FX VGA Controller 5597 SiS5597 Host to PCI bridge 5600 SiS600 Host-to-PCI Bridge @@ -1804,7 +1859,7 @@ 103A Seiko Epson Corporation 103B Tatung Corp. Of America 103b 82801DB LAN Controller with 82562EM/EX PHY -103C Hewlett-Packard - HP dv6 +103C Hewlett-Packard - HP dv9000 0024 ? Standard Vista USB Keyboard 0180000a 0x00000000 HID Keyboard Device 0A01 HP2400 HP Scanjet 2400 @@ -1840,7 +1895,7 @@ 137a AR5007 Atheros AR5007 1411 HPOJ750 HP PSC 750 171d HP Integrated Module with Bluetooth Wireless HP Integrated Module with Bluetooth Wireless - 1F1D USB\VID_03F0&PID_2F1D&REV_0000 3G Broadband device + 1F1D USB\VID_03F0&PID_201D&REV_0001 3G Broadband device 201D ? 3G Broadband device 231D USB\VID_03F0&PID_231D\6&23104BA&0&7 HP Integrated Module with Bluetooth Wireless Technology 241D USB\VID_0000_PID_0000_0000\5&39D01B80&0&4 HP compaq nx6125 @@ -1960,6 +2015,8 @@ CC17 STA2X11 ConneXt I/O Hub multifunction device CD00 V65204 SPEAr1300 CD80 SPEAr1300 Root Complex of SPEAr1300 + SMO8800 Unknown ST Microelectronics Free Fall Sensor + SMO8810 Unknown STMicroelectronics Freefall Sensor 104B Mylex / Buslogic 1040 BA81C15 BT958 SCSI Host Adaptor 8130 - Flashpoint LT @@ -1996,7 +2053,7 @@ 8038 PCI\VEN_104C&DEV_8038&SUBSYS_01861028&REV_00\4&2FA Texas Instruments PCI GemCore based SmartCard Controller 8039 104C 104C 803a PCIxx12 OHCI Compliant IEEE 1394 Host controller - 803B PCIxx12 Integrated FlashMedia Controlled Texas Instruments Card Reader + 803B PCIxx12 Integrated FlashMed Texas Instruments Card Reader 803c PCI0024 SDA Standard Compliant SD Host Controller 803D 0780 Texas Instruments PCI GemCore based SmartCard controller 8119 na iRDA Compatible Controller @@ -2018,7 +2075,7 @@ AC10 PCI1050 PC Card Controller AC11 PCI1030/1053 PC Card Controller AC12 PCI1131 PC card CardBus Controller - AC13 PCI9066 Texas Instrumentsâ„¢ PCIxx12 Integrated FlashMedia Controller + AC13 PCI9066 Texas Instrumentsââ€Å¾Â¢ PCIxx12 Integrated FlashMedia Controller AC15 PCI-1131 CardBus Controller AC16 PCI1250 PC Card CardBus Controller AC17 PCI1220 CardBus Controller @@ -2610,7 +2667,7 @@ 109E Brooktree Corp BT848 SVR-2000 V1.02m Multimedia Video Controllerm 109E - 0x036E 1822-0001 0400 video devce 2115 BtV 2115 BtV Mediastream Controller 9x - 2125 109 BtV Mediastream Controller + 2125 109E BtV Mediastream Controller 2164 BtV 2164 Display Adapter 2165 BtV 2165 MediaStream Controller 36e 878a 25878-13 @@ -2896,7 +2953,7 @@ 8920 5335fn800829 MCP67 High Definition Audio 8925 10C4 Award Software Int'l Inc. - 8363 s/n124102160 + 8363 s/n124102160 10C4 EA60 CP210x Silicon Labs CP210x USB to UART Bridge 10C5 Xerox Corporation 10C6 Rambus Inc. @@ -2992,7 +3049,7 @@ 001D NV35 nVidia GeForce FX 5900XT 0020 GTX680M NVIDIA RIVA TNT 0028 NV05 0DF4 MCP67 - 0028 0753 ACPI\NSC1200 + 0028 NVIDIA GeForce 635M ACPI\NSC1200 0029 NV05 NVIDIA RIVA TNT 2 Ultra 002A 0df4 TNT2 002B NV5 Riva TNT2 @@ -3101,7 +3158,7 @@ 0103 NV10 NVIDIA Quadro 0110 NV12 NVIDIA GeForce2 MX/MX 400 0111 NV11 NVIDIA GeForce2 MX 100/200 - 0112 NV11 NVIDIA GeForce2 Go + 0112 NV9 NVIDIA GeForce 9800gt 0112h ??? Nvidia GeForce2 Go/MX Ultra Video Adapter 0113 NV11 NVIDIA Quadro2 MXR/EX 0140 NV43 NVIDIA GeForce 6600 GT @@ -3194,7 +3251,7 @@ 01D0 G72 NVIDIA GeForce 7350 LE 01D1 G72 NVIDIA GeForce 7300 LE 01D2 G72 NVIDIA GeForce 7550 LE - 01D3 G7200 NVIDIA GeForce 7300 SE/7200 GS + 01D3 GS7200 NVIDIA GeForce 7300 SE/7200 GS 01D5 G72 NVIDIA GeForce 7300 LE 01D7 G72 NVIDIA GeForce Go 7300 01D8 G72 NVIDIA GeForce Go 7400 @@ -3417,7 +3474,7 @@ 0427 G86M Geforce 8400M GS 0428 NVIDIA GeForce 8400M G NVIDIA GeForce 8400M G 0429 Unknown nVidia Quadro NVS 135M or Quadro NVS 140M - 042b 8400 NVIDIA Quadro NVS 135M + 042b 9600 NVIDIA Quadro NVS 135M 042C G86 NVIDIA GeForce 8600gts 042D Quadro FX 360 M Quadro FX 360 M (Mobile) 042E GeForce 9300M G Mobile graphics @@ -3442,7 +3499,7 @@ 0543 Coprocessor Coprocessor 0548 ENE0100 ENE0100c 054c MCP67 MCP67 Ethernet Vista - 0550 MCP67 MCP67 SATA Controller(IDE mode) + 0550 Myson MTD803/TAMARACK TC6020 PCI Ethernet controller 0554 MCP67 MCP67 AHCI 0555 MCP67 MCP67 AHCI 0556 MCP67 MCP67 AHCI @@ -3615,13 +3672,17 @@ 0DFA 1000M Nvidia Quadro 1000M 0DFC NVS Notebook NVS 5200M 0E22 GTX 460 GTX 460 + 0F00 NVIDIA GeForce 8800 GTX NVIDIA GeForce 8800 GTX 0F01 - GeForce GT 620 + 0FC1 GK107 NVIDIA GeForce GT 640 0FC2 GT 630 NVIDIA GeForce 332.21 0FC6 GK107 NVIDIA GeForce GTX 670 0FD4 Alienware M17xR3 GTX 660M 0fe0 GK107M GeForce GTX 660M (Mac) + 0FF6 GK107 NVIDIA Quadro K1100M 0FFD GK107 NVIDIA NVS 510 0FFE GK107GL NVIDIA Quadro K2000 + 100c GK110 GeForce GTX TITAN Black 1021 nVidia K20Xm K20X passive cooling 1022 nVidia K20c K20 active cooling 1040 GT520 Nvidia GeForce GT520 @@ -3634,6 +3695,7 @@ 1058 NV34 Riva128 1086 GF110 GTX 570 10C3 GT218 NVIDIA GeForce 8400GS + 10C5 GT218 Nvidia Geforce 405(OEM) 10D8 GT218 NVIDIA NVS 300 10DE NV34 Riva 128 10DE-1004 GK110 GTX780 @@ -3648,6 +3710,7 @@ 11C0 GTX660 GeForce GTX 660 11C6 GTX650Ti NVIDIA GeForce GTX 650 Ti 11co 0x354e145 0xa1 + 11FA Quattro K4000 NVidia Quattro K4000 1200 GF114 560 GTX TI 1201 GF114 NVIDIA GeForce GTX 560 1202 gf114 nvidia gtx 560 ti @@ -3655,6 +3718,7 @@ 1251 GF116 (GTX 560m) Nvidia Geforce GTX 560m (MXM 3.0b) 1292 NVIDIA GEFORCE GT 740m NVIDIA GEFORCE GT 740m 135m 220gt navidia quadro nvs135m + 1381 GM107-300-A2 GeForce GTX 750 161 NV44 GeForce 6200 TurboCache 181 NV18B GeForce4 MX 440 AGP 8X 247 NVS210S GF6150 @@ -3750,6 +3814,7 @@ 10EC Realtek Semiconductor Corp 8136 Realtek AC97Audio drivers Realtek 171 High Definition Audio 0062 LSISAS1078 PCI-Express Fusion-MPT SAS + 0129 unknown Realtek USB 2.0 Card Reader 0185 802.11b Realtek 8180 Extensible 802.11b Wireless Device 0200 RTL8102E Realtek 10/100/1000 PCI-E NIC Family 0260 Realtek ALC260 High Definition Audio HDAUDIO\FUNC_01&VEN_10EC&DEV_0262&SUBSYS_144DC034&REV_1002 @@ -3769,12 +3834,13 @@ 0887 FUNC_01&VEN_10EC&DEV_0887&SUBSYS_1458A002&REV_1002 xHDAUDIO\FUNC_01&VEN_10EC&DEV_0887&SUBSYS_104383BC&REV_1002\4&159EE542&0&0001 0888 ALC260 Realtek High Definition Audio 0888 ALC888 Realtek High Definition Audio - 0889 1Device Ses GıgabyteТех HDAUDIO\FUNC_01&VEN_10EC&DEV_0862 + 0889 1Device Ses GigabyteTeh HDAUDIO\FUNC_01&VEN_10EC&DEV_0662 0892 ALC892 7.1+2 Channel HD Audio Codec with Content Protection 10B9 M5288 SATA/Raid controller cpi 10EC Realtek AC97Audio Realtek 171 High Definition Audio 10ECa Realtek AC97Audio Realtek 171 High Definition Audio 12ec naum tem naum tem + 1626 PCI\VEN_10EC&DEV_8039&SUBSYS_803910EC Realtek 10/100/1000 PCI-E NIC Family 5109 012659873654 cuenta 5208 8185 Realtek RTS5208 Card Reader 5209 Realtek Realtek PCIE CardReader @@ -3784,12 +3850,13 @@ 5287 5287 Realtek PCIE CardReader (PCI Device) 5288 Realtek USB 2.0 Card Reader card reader 5289 RTL8411 Realtek PCIE Card Reader + 5461 M5461 High Definition Audio Controller 5591 MTC ms9377c PCI /ven_1039 662 Realtek AC97Audio Realtek 171 High Definition Audio 7305 Realtek UWB Radio Driver PCI\VEN_10EC&DEV_7305 8029 8172 Realtek RTL8191SE Wireless LAN 802.11n PCI-E NIC 8039 10EC 10EC - 8136 RTL8102ENetwork ControllerPCI\VEN_10EC&DEV_8136&S Realtek 10/100/1000 PCI-E NIC Family + 8136 PCI\VEN_8086&DEV_1C3A&SUBSYS_1C3A1849&REV_04 Realtek 10/100/1000 PCI-E NIC Family 8137 RTL8102E Realtek 10/100/1000 PCI-E NIC Family 8139 RTL8139 RTL8139 Fast Ethernet NIC 8167 RTL8167 Realtek RTL8169/8110 @@ -3803,7 +3870,7 @@ 8178 PCE-N15 ASUS PCE-N15 Wireless LAN PCI-E Card 8179 RTL8188E IEEE 802.11b/g/n Single-Chip WiFi Chip 8180 RTL8180L 802.11b MAC Network controller - 8185 RTL8188ce RTL8185L Беспроводной PCI &# + 8185 RTL8188ce RTL8185L 8191 RTL8192CE Single-Chip IEEE 802.11b/g/n 2T2R WLAN Controller with PCI Express Interface 8199 RTL8187SE http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=21&PFid=40&Level=5&Conn=4&DownType 8339 RTL8139 Realtek 10/100M Fast Ethernet Controller @@ -3855,7 +3922,7 @@ 10F5 NKK Corporation A001 NDR4000 NR4600 Bridge 10F6 Creative Electronic Systems SA - 0111 PCI\VEN_1102&DEV_7002&REV_07 CMI8 + 0111 PCI\VEN_1102&DEV_0004&SUBSYS_20021102&REV_04 CMI8 10F6 pci\ven CMI8738/C3DX Multimedia Audio Controller 10F7 Matsushita Electric Industrial Corp. 10F8 Altos India Ltd. @@ -3905,7 +3972,7 @@ 9502 INIC-1620 pci sata controller 9700 Fast Wide SCSI 1102 Creative Technology LTD. - 0002 sb0350 Sound Blaster audigy! (Also Live! 5.1) - Drivers only 98SE/ME/2k/XP + 0002 sb8027112 Sound Blaster audigy! (Also Live! 5.1) - Drivers only 98SE/ME/2k/XP 0003 EMU8008 AWE64D OEM (CT4600) 0004 Creative SB Audigy 2 ZS (WDM) Audigy Audio Processor 0005 EMU20K1, CA20K1 Sound Blaster X-Fi XtremeMusic (SB0460), XtremeGamer OEM (SB0770) @@ -3933,7 +4000,7 @@ 8938 EV1938 Sound 9800 EMU10KX Game Port C00D11BA ca0103-dbq sound port for SB Live! Series - 1371 + 1371 PCI\VEN_1274&DEV_1371&CC_040100 1103 HighPoint Technologies, Inc. 0003 HPT 343/345/363 EIDE Controller 0004 HPT366/368/370/370A/372 ATA Raid Controller/ATA 100 @@ -3987,7 +4054,7 @@ 0441 VT2020 VIA HD Audio Controller 0448 0 0501 VT8501 Host Bridge - 0505 VIA S3G UniChrome IGP 3068 + 0505 VIA S3G UniChrome IGP 3059 0506 1106 0397 0561 82C570 MV IDE Controller 0571 VT8235 / VT8237a Bus Master IDE Controller @@ -4013,7 +4080,7 @@ 1006 3059 3249 1089 3059 VIA Sound VIA AC97 in VT82C686A/B,VIA AC97 in VT8233/AC,VT8235 10jn 1106 3108 - 1106 1106 HDAUDIO\FUNC + 1106 1106 management engine driver 1107 060000A ISA Bridge w/IDE 1111 060000A1106 VIA Sound VIA AC97 in VT82C686A/B, VIA AC97 in VT8233/AC, VT8235 & VT8237/R, VIA Vinyl audio VT1612A 1204 ??? CPU to PCI @@ -4051,10 +4118,10 @@ 3053 VT6105M Rhine III Management Adapter 3057 VT82C686A/B ACPI Power Management Controller 3058 VT1709 PCI\VEN_1106&DEV_3059&SUBSYS_73801462&REV_50 - 3059 VT 8233 VIA Vinyl (or Tremor) Audio VT1618 + 3059 3059 VIA Sound VIA AC97 in VT82C686A/B​, VIA AC97 in VT8233/AC, VT8235 30590 9739 C-Media Electronics Audio Controller 3065 VT6102 Rhine II PCI Fast Ethernet Controller - 3068 PCI\VEN_1106&DEV_3068&SUBSYS_10CD1734 VIA MC'97 Modem Controller - Agere Systems AC'97 Modem / AC-Link modems + 3068 PCI\VEN_1106&DEV_3068&SUBSYS_1AE1734 VIA MC'97 Modem Controller - Agere Systems AC'97 Modem / AC-Link modems 3068&CC_0000 VT82C686A/B&VT8231 APM(or ACPI?) 3068&CC_0780 VT82C686A/B&VT8231 MC97 MODEM 3074 VT8233 PCI to ISA Bridge @@ -4080,7 +4147,7 @@ 3133 VT3133 CPU to PCI Bridge 3147 VT8233 PCI to ISA Bridge 3148 VT8751 CPU-to-PCI Bridge - 3149 VT8237 Family/ VT6420 SATA RAID Controller + 3149 VT8237 Family/ VT6421a SATA RAID Controller 3156 VT8372 CPU to PCI Bridge 3157 VIA VT8237 CX700 - SATA RAID 3158 CPU-to-PCI Bridge @@ -4123,7 +4190,7 @@ 4259 ??? CPU to PCI Bridge 4269 KT880 CPU to PCI Bridge 4282 K8T880Pro CPU to PCI Bridge - 4397 VT1708S ALC662 Аудио Кодек + 4397 VT1708S VIA HD Audio Codecs 5000 3059 VIA Sound VIA AC97 in VT82C686A/B, VIA AC97 in VT8233/AC, VT8235 5030 VT82C596 ACPI Power Management Controller 5308 PT880 Pro / VT8237 Via I/O APIC Interrupt Controller @@ -4188,7 +4255,7 @@ D238 K8T890 PCI-to-PCI Bridge E208 PT890 PCI-to-PCI Bridge E238 K8T890 PCI-to-PCI Bridge - e721 060000A1106 VIA HD Audio Deck VT1708B + e721 104382EA VIA HD Audio Deck VT1708B e724 VT1705 VT HD AUDIO DECK vt8235 F208 PT890 PCI-to-PCI Bridge F238 K8T890 PCI-to-PCI Bridge @@ -4211,7 +4278,7 @@ 2104 PSB4610 PCI Interface for Telephony/Data Applications PITA-2 3141 01 PROFIBUS Communication Processor CP5611 A2 4033 ERTEC400 EB400 ProfiNet Device-Kit - 4036 XXX simens i/o control + 4036 Industrial Ethernet CP 1616 Siemens I/O Control 110B Chromatic Research Inc 0001 Mpact Media Processor 0002 GM90C7110VX MPACT DVD decoder. @@ -4344,6 +4411,7 @@ 76B2 92HD75B3 IDT Audio 76D1 IDT 92HD87B1 IDT High Definition Audio CODEC 76D5 0x76D1 IDT 92HD87B1/3 + 76D9 00000000 hp IDT Audio Codec 76E7 92HDxxx HDAUDIO 8018 PES12N3A PCI Express Switch 802d PES16T7 PCI Express Switch PES16T7 @@ -4370,7 +4438,7 @@ 112A Hermes Electronics Co. Ltd. 112C Zenith Data Systems 112D Ravicad - 8086 2200 PCI + 8086 2200 pci simple controller 112E Infomedia 0000 EIDE/hdd and IDE/cd-rom Ctrlr 000B EIDE/hdd and IDE/cd-rom Ctrlr @@ -4394,8 +4462,8 @@ 5402 TriMedia TM-1300EH Media Processor 5406 TriMedia PNX1700 7130 SAA7130HL 01384E42 - 7133 Philips SAA7133/35 Hybrid Capture Device or averme PCI audio and video broadcast decoder or only avertv dvb-t pci card - 7134 7134 SAA7134 TV Card Philips + 7133 Behold TV 609 FM PCI audio and video broadcast decoder or only avertv dvb-t pci card + 7134 0x7134 SAA7134 TV Card Philips 7145 d145ah ddddf 7146 saa7146ah 0X7146 7160 Philips SAA7134E, TDA10046 and TDA8275A PCI\VEN_1131&DEV_7160&SUBSYS_1F551461&REV_03 @@ -4593,6 +4661,7 @@ 1165 Imagraph Corporation 0001 Motion JPEG rec/play w/audio 0060 Foresight Imaging I-Color + 0088 03200-150 AccuStream 50a, 75a & 205a Frame Grabber & Video Streamer 1166 Broadcom / ServerWorks 0005 NB6536 (CNB20-LE) PCI to PCI Bridge, bus/dev/func 0/0/1 0006 NB6536 (CNB20-HE) Host Bridge, function 2 and function 3 @@ -4677,7 +4746,7 @@ 0602 TOS6205 PCI to ISA Bridge for Notebooks 0603 ToPIC95 PCI to CardBus Bridge for Notebooks 0604 PCI\VEN_104C&DEV_803B&SUBSYS_FF1E1179 PCI to PCI Bridge for Notebooks - 0605 ACPI\TOS6205 PCI to ISA Bridge for Notebooks + 0605 ACPI\IBM0068 PCI to ISA Bridge for Notebooks 0606 PCI to ISA Bridge for Notebooks 0609 0322 PCI to PCI Bridge for Notebooks 060A ToPIC95B Toshiba ToPIC95 CardBus Controller @@ -4685,7 +4754,7 @@ 0611 PNP0510 PCI-ISA Bridge 0617 ToPIC100 PCI to CardBus Bridge with ZV support 0618 CPU to PCI and PCI to ISA Bridge - 0701 1E3A PCI Communication Device + 0701 1E3D PCI Communication Device 0804 0x0804 Toshiba Smart Media Host Controller 0805 ACPI\TOS1901\2&DABA3FF&er.com1 ACPI\TOS1901\2&DABA3FF&1 0D01 0x0D01 FIR Port Type-O @@ -4693,7 +4762,7 @@ 13A8 XR17C158/154/152 Multi-channel PCI UART 3b64 intel 3b64 Management Engine Driver 8136 0x8136 pci\ven_10 EC - 9876 ACPI\TOS1900 SD Card Controller + 9876 ACPI\TOS1901 SD Card Controller 117A A-Trend Technology 117B LG (Lucky Goldstar) Electronics Inc. 8320 NOFM12 VGA @@ -4704,20 +4773,20 @@ 117E T/R Systems 0001 Printer Host 117F Integrated Circuit Systems -1180 Ricoh +1180 RicohCompany,Ltd. 0475 RL5c592 Cardbus Controller 0476 RL5c476 II RICOH SmartCard Reader 0478 RB5c478 Cardbus Controller 0552 R5C552 FireWire (IEEE 1394) Controller 0575 44192 I11fXI DUAL SERIAL 5053 4348 3253 - 7173 ch CH35X + 7053 35255 PCI Serial Port + 7173 ch350L CH35X 4680 UMAX Computer Corp. 4843 Hercules Computer Technology 4943 Growth Networks @@ -7900,6 +7992,7 @@ 4D54 Microtechnica Co Ltd 4DDC ILC Data Device Corp. 4E8 Samsung Windows Portable Devices + 618c rev_0400 usb lan adapter4 618d rev_0400 usb lan adapter4 5053 TBS/Voyetra Technologies 2010 14441 Daytona Audio Adapter @@ -7943,7 +8036,7 @@ 88F2 86C968 Vision 968 GUI Accelerator VRAM rev. 2 88F3 86C968 Vision 968 GUI Accelerator VRAM rev. 3 8900 86C775 Trio64V2/DX - 8901 pci\ven_5333dev_8C2E&SUBSYS_00011179&REV_05\4&74C6 S3 trio64uv+ for windows xp + 8901 pci\ven_5333dev_8C2E&SUBSYS_00011179&REV_05\4&74C6 S3 trio64uv+ for windows 7 8902 86C551 SMA Family 8903 TrioV Family 8904 86C365/366 Trio3D QFP/BGA @@ -8009,32 +8102,35 @@ 3c03 DWL-G122 Wifi PCI Same chipset of RALINK RT2500 3C07 D-Link Wireless G DWA-110 USB Adapter PCI\VEN_1799&DEV_700F&SUBSYS_700F1799&REV_20\3&61AAA01&0&48 8080 Xirlink, Inc - 1040 VIA 82C259 rev 0 PCI\VEN_8086&DEV_1040&SUBSYS_1008086&REV_00 + 1040 VIA 82C259 rev 0 PCI\VEN_8086&DEV_0084&SUBSYS_13158086&REV_00 8086 Intel Corporation 27B8 82801GB/GR Intel(R) 82801GB/GR (ICH7 Family) LPC Interface Controller 0008 Extended Express System Support Ctrlr 0011 0x108D Ethernet Controller 0042 Intel graphics Intel Q57/H55 Clarkdale (Onboard on D2912-A1x) - 0046 Intel Graphics Media Accelerator HD Intel Graphics Media Accelerator HD + 0044 0044 Intel(R) Processor DRAM Controller + 0046 Intel(R) HD Graphics (Core i3) Intel(R) HD Graphics 0054 not known Audio 0082 6205 Centrino Advanced-N 6205 - 0083 Mobile Intel® 5 Series Chipset Intel® PROSet/Wireless Software and Drivers for Windows 7 32-Bit + 0083 Mobile Intel® 5 Series Chipset Intel Centrino Wireless-N 1000 0084 Intel PROSet WiFi 1000 Intel Wireless Link WiFi 1000, download -> http://downloadmirror.intel.com/20791/eng/Wireless_14.3.0 0085 0x0280 Intel Centrino(R) Advanced-N 6205 0087 1306 00E1 008A ??? Intel Centrino Wireless-N1030 008B Intel Wireless-N 1030 Intel(R) Centrino(R) Wireless-N 1030 0091 622ANHW Intel® Centrino® Advanced-N 6230 + 0100 0100 2nd Generation Intel(R) Core(TM) Processor Family DRAM Controller 0102 0001 Intel HD Graphics 3000 0104 2nd Gen Intel(R) Core(TM) Processor Family DRAM Controller (Host Bus Controller) - 0106 HD Graphics 3000/2000 2nd Generation Intel® Core™ Processors with Intel® HD Graphics 3000/2000 + 0106 HD Graphics 3000/2000 asus x501a 010A 010A Lenovo TS130 Intel Video Adapter HD 0111 82915 Intel Graphics Conroller 0116 intel core i3 Intel HD Graphics 3000 0123 0300 hardwareids 0152 GT635 NVIDIA Graphics Driver Discrete GeForce GT635 2G Win8_Win7 64bit System + 0154 0x01548086 3rd Gen Core processor DRAM Controller (rev 09) 0162 Core I5, Core I7, Ivy Bridge Graphics embedded - 0166 I3 3rd Generation Intel® HD Graphics 4000 + 0166 I3 Intel(R) HD Graphics 4000 0189 Intel Centrino Wireless-N 1030 Bluetooth Adapter Intel Centrino Wireless Bluetooth 3.0 + High Speed Adapter 027AE 82945GM Mobile Intel(R) 945 Express Chipset Family 027D8 293esd High Definition Audio Controller @@ -8060,7 +8156,7 @@ 0341 41210 Serial to Parallel PCI Bridge B 0370 80333 Segment-A PCI Express-to-PCI Express Bridge 0371 80333 A-Bus IOAPIC - 0372 80333 Segment-B PCI Express-to-PCI Express Bridge + 0372 0893 network controller 0373 80333 B-Bus IOAPIC 0374 80333 Address Translation Unit 0401 266E P040100 @@ -8069,7 +8165,7 @@ 0482 82375MB PCI-EISA Bridge (PCEB)hp dx 7300 microwave tower 0483 82424TX/ZX CPU (i486) Bridge (Saturn) 0484 82378ZB/IB SIO ISA Bridge - 0486 PCI\VEN_8086&DEV_27D8&SUBSYS_82901043&REV_01\3&115 1261028 + 0486 PCI\VEN_8086&DEV_1C22&SUBSYS_2AC2103C&REV_04 HP Pro 3400 XPx32/7x32 drivers 04A3 82434bX/zX Mercury/Neptune Cache/DRAM Controller 0500 E8870 Processor Bus Controller 0501 E8870 Memory Controller @@ -8101,13 +8197,30 @@ 0894 86881 Centrino Wireless-N 105 0896 Wireless-N 130 Intel Centrino Wireless-N 130 08AE 802.11n Intel Centrino Wireless-N 100 + 08B1 PCI\VEN_8086&DEV_08B1 Intel(R) Dual Band Wireless-AC 7260 08B3 ? Intel Dual Band Wireless-AC 3160 0960 80960RP i960 RP Microprocessor/Bridge 0962 80960RM/RN i960RM/RN Microprocessor/Bridge 0964 80960RP i960 RP Microprocessor Bridge + 0A03 0A03 Intel(R) Dynamic Platform and Thermal Framework Processor Participant + 0A04 0A04 PCI standard host CPU bridge + 0A0C 0A0C High Definition Audio Controller + 0A16 3000 Intel HD Graphics Controller + 0A1E 0A1 Intel(R) HD Graphics 0BE1 0000000 Intel Graphics Media Accelerator 3600 Series 0C00 0C00 Intel(R) 4th Gen Core processor DRAM Controller 0C05 V9201015 Intel(R) 6 Series/C200 Series Chipset Family SMBus Controller + 0F00 0F00 Intel(R) Pentium(R)/Celeron(R) processor N-/J- series SoC Transaction Router + 0F04 0F04 High Definition Audio Controller + 0F12 0F12 Intel(R) Pentium(R)/Celeron(R) processor N-/J- series Platform Control Unit - SMBus Port + 0F18 0F18 Intel(R) Trusted Execution Engine Interface + 0F1C 0F1C Intel(R) Pentium(R)/Celeron(R) processor N-/J- series Platform Conrol Unit LPC: Bridge to Intel Lega + 0F23 0F23 Intel(R) Pentium(R)/Celeron(R) processor N-/J- series AHCI + 0f31 5200 Iris pro 5200 + 0F35 0F35 Intel(R) USB 3.0 eXtensible Host Controller + 0F48 0F48 Intel(R) Pentium(R)/Celeron(R) processor N-/J- series PCI Express Root Port + 0F4A 0F4A Intel(R) Pentium(R)/Celeron(R) processor N-/J- series PCI Express Root Port + 100 0100 2nd Generation Intel(R) Core(TM) Processor Family DRAM Controller 1000 82542 Gigabit Ethernet Controller 1001 2572 10/100/1000 Ethernet Controller (Fiber) 1002 Pro 100 LAN+Modem 56 CardBus II @@ -8161,7 +8274,7 @@ 1050 82562EZ PRO/100 VE Network Connection 1051 82801EB/ER PRO/100 VE Network Connection 1052 82801EB/ER PRO/100 VM Network Connection - 1053 82801EB/ER PRO/100 VM Network Connection + 1053 82801EB/ER PRO/100 VM ork NetConnectionw 1054 82801EB/ER PRO/100 VE Network Connection (mobile) 1055 82801EB/ER PRO/100 VM Network Connection (mobile) 1059 82551QM Fast Ethernet PCI/CardBus Controller @@ -8196,6 +8309,7 @@ 10c4 82562GT Intel 82562GT 10/100 Network Controller 10c4 82562EZ PLC Intel 82562GT 10/100 Network Controller 10c9 82576? 82576 Gigabit ET Dual Port Server Adapter + 10cd 82567 Intel gigabit Ethernet controller 10CE 82567V-2 Intel 82567V-2 Gigabit Network Connection 10d3 82574L Intel® 82574L Gigabit Ethernet Controller 10d6 82575 82566 DM-2-gigabyte @@ -8248,7 +8362,7 @@ 123F 82466GX Integrated Hot-Plug Controller (IHPC) 1240 82752 AGP Graphics Accelerator 124B 293esd Mobile PCI-to-PCIsdsdsdI2) - 124B PCI\VEN_8086 24D5 + 124B PCI\VEN_1106&DEV_3122 2815 124C 9776 Mobile PCI-to-PCI Bridge (MPCI2) 1250 82430HX System Controller (TXC) 12D8 92XX SIGMATEL STAC 92XX C-Major HD Audio @@ -8273,8 +8387,12 @@ 1525 82567V-4 Intel 82567V-4 Gigabit Network Connection 1526 82576 Intel Gigabit ET2 Quad Port Server Adapter 1533 210 Intel I210 Gigabit Network Connection - 153A 217 Intel I217-LM Ethernet Connection + 153A 330 Intel I217-LM Ethernet Connection 153B I217-V Intel Gigabit Ethernet Controller I217-V + 1559 0x8CBA Intel Ethernet I218-V + 155a I218LM Gigabit Ethernet + 15A1 0x8CBA Intel® Ethernet Connection I218-V + 15A2 I218LM Gigabit Ethernet 167D 2200bg PCI Simple Communications Controller 1960 80960RP i960RP Microprocessor 1962 ??? Promise SuperTrak SX6000 IDE RAID Controller @@ -8288,35 +8406,49 @@ 1A30 82845G[GL/GV/GE/PE] Host-Hub Interface Bridge 1A31 82845[MP/MZ] AGP Bridge 1A38 5000P 5000 Series Chipset DMA Engine - 1c02 8086&dev_1c02 SATA ahci controller 3Gbps 6 ports + 1c02 1C02 Intel(R) 6/C200 Series Chipset Family 6 Port SATA AHCI Controller 1c02_ 8086&dev_1c02 Intel(R) Desktop/Workstation/Server Express Chipset SATA AHCI Controller 1C03 Intel(R) Mobile Express Chipset SATA AHCI Controll Intel(R) CPT Chipset Family 6 Port SATA AHCI Controller - 1C22 win7 64-bit (tc40140300b.exe) Intel(R) 6 Series/C200 Series Chipset Family SMBus Controller - 1C26 HM65 USB Enhanced Host Controller + 1C10 1C10 Intel(R) 6/C200 Series Chipset Family PCI Express Root Port + 1C18 1C18 Intel(R) 6/C200 Series Chipset Family PCI Express Root Port + 1C1A 1C3Afsfsdf 1C3Asfsfsdf + 1C1C 1C1C Intel(R) 6/C200 Series Chipset Family PCI Express Root Port + 1C1E 1C1E Intel(R) 6/C200 Series Chipset Family PCI Express Root Port + 1C20 1C20 High Definition Audio Controller + 1C22 win7 64-bit Intel(R) 6 Series/C200 Series Chipset Family SMBus Controller + 1C26 HM65 Intel(R) 6/C200 Series Chipset Family USB Enhanced Host Controller + 1C2D 1C2D Intel(R) 6/C200 Series Chipset Family USB Enhanced Host Controller 1c34a 0780 pci simple communications controller 1c3a 161C103C Intel Management Engine Interface 1c3a. 161C103C Intel Management Engine Interface 1C3b 111 Series Chipset Family HECI Controller #2 1C3D Intel(R) 6 Series Series Chipset Family Intel(R) Active Management Technology - SOL 1C49 FCD01179 04 + 1C4C Q65 Intel(R) Q65 Express Chipset Family LPC Interface Controller 1D3A X79 series chipset HECI Controller X79/C600 series chipset Management Engine Interface + 1D3D CC0700 Intel Active Management Technology AMT 1e00 Intel H77 Express Chipset 2 ports IDE Controller 1e02 SUBSYS_102E17AA&REV_04 Intel 7 Series/C216 Chipset Family SATA AHCI Controller 1E03 PCI\CC_010601 Intel(R) 7 Series Chipset Family SATA AHCI Controller 1e08 Intel H77 Express Chipset 2 ports IDE Controller + 1E10 C216 Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port 1E12 c4 rev + 1E16 C216 Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port + 1E20 1E20 High Definition Audio Controller 1E22 Intel(R) 7 SeriesC216 Chipset Family SMBus Host Co SM-Bus Controller of the Intel Z77 Chipset + 1E26 C216 Intel(R) 7 Series/C216 Chipset Family USB Enhanced Host Controller + 1E2D C216 Intel(R) 7 Series/C216 Chipset Family USB Enhanced Host Controller 1e31 Intel USB 3.0 eXtensible Host Controller 1E31 Intel USB 3.0 1E3A PCI\VEN_8086&DEV_1E3A&SUBSYS Intel Management Engine Interface (MEI) 1E3A_ C216 8555555555555999999999999999999999999999999999999999999999999999999900000000000000000001222222222222 1E3A__ Z77 C216 Chipset - Platform controller hub 1E3D 833810F7 Intel(R) AMT LMS_SOL for AMT 8.xx - 1E59 140889 140889 + 1E59 140889 Intel(R) HM76 Express Chipset LPC Controller 2000 CA 95054 505943621 2014 0x18C9 Framegrabber 2048 Atheros L2 Fast Ethernet 10/100 Base-T Controller 2124 27DA PRO/100 VE Network Connection - 2125 82801AA AC97 Audio Controller. website to download - http://www.intel.com/design/chipsets/manuals/29802801.p + 2125 82801G AC97 Audio Controller. website to download - http://www.intel.com/design/chipsets/manuals/29802801.p 2222 82801 Intel Management Interface 2255 810D1043 02\3 2406 82801 / ? AC97 Modem Controller / PCI Modem @@ -8542,8 +8674,8 @@ 27d8xzx PCI\VEN_8086&DEV_2485&SUBSYS_AD021458&REV_02 Microsoft UAA Bus HD Audio 27D9 A62516F3 IDT High Definition Audio Driver 27DA 82801G Intel(R) N10/ICH7 Family SMBus Controller - 27DC 336C1462 Intel® PRO/100 VE Desktop Adapter - 27DC0x27DC 336C1462 Intel® PRO/100 VE Desktop Adapter + 27DC 336C1462 Intel® PRO/100 VE Desktop Adapter + 27DC0x27DC 336C1462 Intel® PRO/100 VE Desktop Adapter 27DE RTL8100C AUDIO (ALC850) << Realtek 27df 82801GB/GBM Intel(R) ICH7 Family Ultra ATA Storage Controller 27RR ALC850 no @@ -8579,6 +8711,7 @@ 2914 ICH9D0 LPC bridge of ICH9 2916 3 PCI Simple Communications-Controller 2918 ATK0110 driver for WindowsXP/Vista/Win7 32&64-bit http://dlcdnet.asus.com/pub/ASUS/misc/utils/MB_WIN7_ATK.ZIP + 2919 ICH9M Intel(R) ICH9M/M-E Family 4 Port SATA AHCI Controller 2920 82801(IB)/IR/IH/IO SATA IDE Controller:4 port 2921 82801IR/IH/IO SATA IDE Controller:2 port1 2922 82801IR/IH/IO AHCI Controller @@ -8591,9 +8724,21 @@ 292E ?(ICH9M Family) SATA IDE Controller:1port2 2930 8086 2930 2930 Intel ICH9 Family SMBus Controller Intel ICH9 Family SMBus Controller + 2932 ICH9 Intel(R) ICH9 Family Thermal Subsystem + 2934 ICH9 Intel(R) ICH9 Family USB Universal Host Controller + 2935 ICH9 Intel(R) ICH9 Family USB Universal Host Controller 2936 0x02141028 Intel(R) ICH9 Family USB Univeral Host Controller + 2937 ICH9 Intel(R) ICH9 Family USB Universal Host Controller + 2938 ICH9 Intel(R) ICH9 Family USB Universal Host Controller + 2939 ICH9 Intel(R) ICH9 Family USB Universal Host Controller + 293A ICH9 Intel(R) ICH9 Family USB2 Enhanced Host Controller + 293C ICH9 Intel(R) ICH9 Family USB2 Enhanced Host Controller 293E 486486 82801IB/IR/IH (ICH9 Family) HD Audio Controller 293E 486486 82801IB/IR/IH (ICH9 Family) HD Audio Controller + 2940 ICH9 Intel(R) ICH9 Family PCI Express Root Port + 2942 ICH9 Intel(R) ICH9 Family PCI Express Root Port + 2944 ICH9 Intel(R) ICH9 Family PCI Express Root Port + 2948 ICH9 Intel(R) ICH9 Family PCI Express Root Port 294C 82566DC-2 Intel(R) 82566DC-2 Gigabit Network Connection 2972 82946GZ Onboard Video Device for 82946GZ chips 2986 265452 Intel @@ -8602,7 +8747,7 @@ 2993 G965 Intel(R) Express Chipset Dell Version 2994 2802103C Intel Management Engine Interface (HECI) 2996 Q963/Q965 IDE Controller - 2997 Q965/Q963 Intel® Active Management Technology (AMT) - SOL + 2997 Q965/Q963 PCI Serial Port 29a0 ?(82P965) Intel P965/G965 Processor to I/O Controller 29a1 ?(82Q965, 82G965, 82P965) Intel P965/G965 PCI Express Root Port 29A2 Intel 82G965 Graphics and Memory Controller Hub (G Intel 82G965 Graphics and Memory Controller Hub (GMCH) @@ -8629,12 +8774,17 @@ 2A08 Q965 Chipset Intel(R) Extended Thermal Model MCH 2A12 965 Mobile Intel(R) 965 Express Chipset Family 2A16 96xMG IDE Controller + 2A40 2A40 Mobile Intel(R) 4 Series Chipset Processor to DRAM Controller 2A42 Mobile Intel 4 Series Chipset Family Intel Mobile Graphic 2A43 Mobile Intel 4 Series Chipset Family Intel Mobile Graphic 2A44 Mobile 4 Series Chipset IC658 2A46 M4x IDE Controller 2a47 20EC17AA Active Management Technology - SOL 2A52 Cantiga IDE Controller + 2C62 2C62 QuickPath Architecture Generic Non-core Registers + 2D01 2D01 QuickPath Architecture System Address Decoder + 2D10 2D10 QPI Link + 2D11 2D11 QPI Physical 2E06 4x IDE Controller 2E12 - Intel Q45/Q43 Express Chipset 2e13 Intel Q43/Q45/G43/G45 (Eaglelake) Graphics Control Intel(R) 4 Series Internal Chipset @@ -8642,7 +8792,7 @@ 2E15 PCI\VEN_8086&DEV_29C2&SUBSYS_29C28086&REV_10\3&115 Intel AMT LMS_SOL for AMT 5.xx 2E16 4x IDE Controller 2E17 CC_0700 Intel AMT LMS_SOL for AMT 5.xx - 2E24 PCI\VEN_8086&DEV_2E24&SUBSYS_72671462&REV_01\3&115 Intel Management Engine Interface + 2E24 pci\VEN 8086&DEV_3B64&subsys _ 76361462&rev _06 pci simple communications controller 2E24&CC PCI\VEN_8086 Intel Management Engine Interface 2E26 4x IDE Controller 2e29 2e29 Intel(R) 4 Series Chipset PCI Express Root Port - 2E29 @@ -8714,7 +8864,7 @@ 3B02 Intel(R) 5 Series/3400 Series Chipset Family LPC Interface Controller 3B03 Intel(R) 5 Series/3400 Series Chipset Family LPC Interface Controller 3B06 Intel(R) 5 Series/3400 Series Chipset Family LPC Interface Controller - 3B07 Intel(R) 5 Series/3400 Series Chipset Family LPC Interface Controller + 3B07 3B07 Intel(R) 5/3400 Series Chipset LPC Interface Controller 3B08 Intel(R) 5 Series/3400 Series Chipset Family LPC Interface Controller 3B09 Intel(R) 5 Series/3400 Series Chipset Family LPC Interface Controller 3B0A Intel(R) 5 Series/3400 Series Chipset Family LPC Interface Controller @@ -8737,11 +8887,19 @@ 3B2C PCHM SATA Raid Controller 3B2D PCHM SATA IDE Controller:2 port 3B2E PCH (Ibex Peak) SATA IDE 4-Port Mobile - 3B2F PCH (Ibex Peak) SATA AHCI 6-Port Mobile - 3B30 Intel(R) 5 Series/Сери SMBus Контроллер - 3B32 Intel(R) Turbo Boost Technology Driver LPC Interface Controller + 3B2F PCH (Ibex Peak) Intel(R) 5/3400 Series Chipset Family 6 Port SATA AHCI Controller + 3B30 3B30 Intel(R) 5/3400 Series Chipset Family SMBus Controller + 3B32 3B64 Intel(R) 5/3400 Series Chipset Family Thermal Subsystem + 3B34 3B34 Standard Enhanced PCI to USB Host Controller + 3B3C 3B3C Standard Enhanced PCI to USB Host Controller + 3B42 3B42 Intel(R) 5/3400 Series Chipset Family PCI Express Root Port + 3B44 3B44 Intel(R) 5/3400 Series Chipset Family PCI Express Root Port + 3B46 3B46 Intel(R) 5/3400 Series Series Chipset Family PCI Express Root Port + 3B48 3B48 Intel(R) 5/3400 Series Chipset Family PCI Express Root Port + 3B56 3B56 High Definition Audio Controller 3b63 ff1e1179 06 3B64 3B64 Management Engine Driver + 3B64&subsys REV_06 Intel Management Engine Interface 3B64&SUBSYS_048210 Intel 3B09 Management Engine Driver 3B64&subsys_048710 REV_06 Intel Management Engine Interface 3B64&SUBSYS_116817 REV_06 Intel Management Engine Interface @@ -8758,7 +8916,7 @@ 4227 3945ABG Intel(R) PRO/Wireless 3945ABG 4229 Intel 4965AGN Intel® Wireless WiFi Link 4965AGN(supporting 802.11a/b/g/Draft-N) 422B Intel(R) Centrino(R) Ultimate-N 6300 AGN - 422C BCM4311KFBG Broadcom Wifi + 422C BCM4311KFBG Intel(R) Centrino(R) Advanced-N 6200 AGN 422D Intel 4965AGN Intel® Wireless WiFi Link 4965AGN 4230 Intel 4965AGN Intel® Wireless WiFi Link 4965AGN 4232 Intel® WiFi Link 5100 Carte Intel® WiFi Link 5100 AGN @@ -8784,6 +8942,7 @@ 5201 i960 Network Controller 5309 80303 I/O Processor Address Translation Unit 530D 80312 I/O Companion Unit Address Translation + 6741_ 0x8086 Intel USB 3.0 6960 EHCI 960 emulator 7000 82371SB PIIX3 PCI-to-ISA Bridge (Triton II) 7010 82371SB PIIX3 IDE Interface (Triton II) @@ -8799,7 +8958,7 @@ 7121 801F104 Graphics Controller 7122 82810-DC100 Host-Hub Interface Bridge / DRAM Ctrlr 7123 82810-DC100 Intel® 82810 Graphics Controller - 7123 82810-DC100 Intel® 82810 Graphics Controller + 7123 82810-DC100 Intel® 82810 Graphics Controller 7124 82810E Host-Hub Interface Bridge / DRAM Ctrlr 7125 82810E Intel Direct AGP 810Chipset 7126 82810-DC133 Host Bridge and Memory Controller Hub @@ -8832,13 +8991,13 @@ 78000 PCI\VEN_8086&DEV_3B64&CC_0780 PCI\VEN_8086&DEV_3B64&CC_0780 803b 0x104d 0x81ef 8083 Intel PM45 Intel Wireless WiFi Link 5100 ABGN 10/100/1000 Base T - 8086 https://downloadcenter.intel.com/detail_desc.aspx? PCI-X61 + 8086 https://downloadcenter.intel.com/detail_desc.aspx? 0x8086&DEV_3B64&CC_0780 8086&DEV 9.3.0.1019 intel 8086&DEV-24C5 VIA vynil v700b VIA vynil v700b 8086&DEV_1040 SUBSYS_148A103C REV_00\3&61AAA01&0&50 8086&DEV_24C5 82801DBM SoundMax Controller VIA vynil v700b - 8086&DEV_3B64 SUBSYS_89271033 pci simple communications controller - 8086&DEV_7191&SUBS PCI\VEN_8086&DE4E&REV_01\3&241 HDAUDIO\FUNC_01&VEN_8086&DEV_1000 + 8086&DEV_3B64 SUBSYS_03701025 pci simple communications controller + 8086&DEV_7191&SUBS Intel 3B69Management Engine Driver Management Engine Driver 80861 (0x2994) Intel(R) Management Engine Interface 8108 SCH US15WP Intel(R) Graphics Media Accelerator 500 https://downloadcenter.intel.com/confirm.aspx?httpDown=http 811A Atom SCH Atom SCH PATA @@ -8865,9 +9024,11 @@ 85AA 6300ESB USB 1.1 UHCI Controller #2 8C02 C220 Intel(R) 8 Series/C220 Series SATA AHCI Controller 8C22 8C22 Intel(R) 8 Series/C220 Series SMBus Controller - 8c31 PCI\VEN_8068&DEV_8C31&SUBSYS_201F1043&REV_05 Intel USB 3.0 eXtensible + 8c31 PCI\VEN_8086&DEV_8C31&SUBSYS_78501462&REV_05 Intel USB 3.0 eXtensible 8C3A 0x8C31 Intel(R) Management Engine Interface 8C5C 8C5C Intel(R) H81 LPC Controller + 8CBA PCI\VEN_8086&DEV_8CBA&SUBSYS_1C3A1458&REV_00 PCI Simple Communications Controller + 8d3a PCI\VEN_8086 Intel Corporation 9620 I2O RAID PCI to PCI Bridge 9621 SRCU21 I2O 1.5 RAID Controller 9622 SRCUxx I2O 1.5 RAID Controller @@ -8881,10 +9042,16 @@ 9888 HDAUDIO\FUNC_01&VEN_8086&DEV_27d8&SUBSYS_80860101& HDAUDIO\FUNC_01&VEN_8086&DEV_27d8&REV_1000 9998 42468068 02 9999 pci30b2103c Interface chip - 9C22 PCI\VEN_8086&DEV_9C22&SUBSYS_05EA1028&REV_04 Intel Chipset + 9C03 9C03 Intel(R) 8 Series SATA Controller + 9C14 9C14 Intel(R) 9 Series PCI Express Root Port + 9C20 9C20 High Definition Audio Controller + 9C22 9C22 Intel(R) 8 Series SMBus Controller + 9C24 9C24 Intel(R) 8 Series Thermal + 9C26 9C26 Intel(R) 8 Series USB Enhanced Host Controller 9C31 Unknown Intel USB 3.0 eXtensible Host Controller 9C3A PCI\VEN_8086 Intel Management Engine Interface driver 9c3a Subsys_05eb1 9c3a Subsys_05eb1028 & rev_04\3 & 11583659 PCI Simple Communication Controller + 9C43 9C43 Intel(R) 8 Series LPC Controller A001 3150 Intel Media Accelerator 3150 A002 GMA 3150 Intel® Grafik-Media-Accelerator 3150 (Intel® GMA 3150) A011 02\3 Intel(R) Graphics Media Accelerator 3150 @@ -8896,15 +9063,16 @@ B555 21555 Non-Transparent PCI-to-PCI Bridge C50 fd sdf E13A 7600 NXMOQSN00430812D49 + F4E 0F4E Intel(R) Pentium(R)/Celeron(R) processor N-/J- series PCI Express Root Port PCI\VEN_8086&DEV_2 11583659 PCI\VEN_8086&DEV_27DA&SUBSYS_31031565 - PCI\VEN_8086&DEV_2 11583659 PCI/VEN_8086&DEV_2A07&SUBSYS + PCI\VEN_8086&DEV_2 11583659 PCI\VEN_8086&DEV_8C22&SUBSYS_FA301179&REV_04\3&11583659&0&FB PCI\VEN_8086&DEV_3 11583659 PCI\VEN_8086&DEV_3B64&SUBSYS_04821025&REV_06 x27c8 PCI\VEN_8086&DEV_27D8&SUBSYS_02D61028&REV_01\3&61A Microsoft UAA Bus HD Audio x27d8 A62516F3 INTEL IDT Audio x999 2930 PCI\VEN_8086&DEV_2930&SUBSYS_037E1014&REV_02\3&61AAA01&0&FB _1c3a REV_04 REV-04 _1E3A 0c05 i5-3450 - _3B64 3b69 REV_02 + _3B64 3b69 Chip Description:Management Engine Driver __1c3a SUBYS_308C17AA REV-04 3&11583659 ___1C3A 8086 Intel(R) Management Engine Interface 8671 @@ -8967,7 +9135,7 @@ 7778 AIC-787x SCSI Ctrlr 7810 aic 7810 Memory control IC 7815 AIC-7515 RAID + Memory Controller IC - 7850 aic-7850 Fast/Wide SCSI-2 Controller + 7850 aic-7850P Fast/Wide SCSI-2 Controller 7855 AHA-2930 Single channel SCSI Host Adapter 7860 AIC-7860 PCI SCSI Controller 7870 AIC-7870 Fast/Wide SCSI-2 Controller diff --git a/Misc/StockSprites.TXT b/Misc/StockSprites.TXT deleted file mode 100644 index d1fdc65..0000000 Binary files a/Misc/StockSprites.TXT and /dev/null differ diff --git a/Misc/Tour/Tour.AUT b/Misc/Tour/Tour.AUT index 376ac16..a6bb58f 100644 --- a/Misc/Tour/Tour.AUT +++ b/Misc/Tour/Tour.AUT @@ -1,3 +1,72 @@ +CTask *tour_put,*tour_task; +Bool tour_okay_pressed; + +U0 TourPutTask() +{ + CDoc *doc; + I64 ch; + DocTermNew; + WinHorz(TEXT_COLS/2,TEXT_COLS-2); + WinVert(TEXT_ROWS/2+5,TEXT_ROWS-7); + LBts(&Fs->display_flags,DISPLAYf_WIN_ON_TOP); + WinToTop; + Fs->text_attr=Fs->border_attr=LTGRAY<<4+BLUE; + Fs->border_src=BDS_CONST; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; + doc=DocPut; + doc->flags|=DOCF_FORM; + DocCursor(FALSE,doc); + "$$WW+H,1$$"; + while (TRUE) { + WinMgrSync; + if (ScanMsg(&ch,,1<parent_task,FALSE); + break; + } + DocLock(doc); + if (ch==CH_SPACE && doc->cur_entry!=doc) { + if (doc->cur_entry->de_flags & DOCEF_LINK) + '' CH_SPACE; + else if (doc->cur_entry->type_u8==DOCT_BUTTON) + tour_okay_pressed=TRUE; + } + DocUnlock(doc); + if (tour_okay_pressed) { + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; + if (sys_focus_task==Fs) + WinRefocus; + } else { + Fs->win_inhibit=0; + WinFocus; + } + } + tour_put=NULL; +} + +U0 TourPut(U8 *st,Bool wait_okay=FALSE) +{ + CDoc *doc; + CTask *old_focus_task; + if (TaskValidate(tour_put)) { + doc=DocPut(tour_put); + DocClear(doc); + DocPrint(doc,"%s",st); + if (!wait_okay) + tour_okay_pressed=TRUE; + else { + DocPrint(doc,"\n\n$$CM-RE+CX,LE=-2$$$$BT,\"Okay\",LM=\"b\"$$\n\n"); + DocFormBwd(doc); + old_focus_task=sys_focus_task; + tour_okay_pressed=FALSE; + do WinMgrSync; + while (!tour_okay_pressed); + WinFocus(old_focus_task); + DocClear(doc); + } + } else + ThrowBreak(tour_task); +} + public I64 PopUpTourPart() { I64 i; @@ -7,16 +76,16 @@ public I64 PopUpTourPart() "$$CM+LX,4,4$$$$BT,\"Part 2: Editing and running programs\",LE=2$$" "$$CM+LX,4,4$$$$BT,\"Part 3: Adding macros to PersonalMenu\",LE=3$$" "$$CM+LX,4,4$$$$BT,\"Part 4: Choose filename, choose dir\",LE=4$$" - "$$CM+LX,4,4$$$$BT,\"Part 5: WordStat\",LE=5$$" - "$$CM+LX,4,4$$$$BT,\"Part 6: Search (Grep)\",LE=6$$" - "$$CM+LX,4,4$$$$BT,\"Part 7: TempleOS File masks\",LE=7$$" + "$$CM+LX,4,4$$$$BT,\"Part 5: AutoComplete\",LE=5$$" + "$$CM+LX,4,4$$$$BT,\"Part 6: Search (Find)\",LE=6$$" + "$$CM+LX,4,4$$$$BT,\"Part 7: TempleOS file masks\",LE=7$$" "$$CM+LX,4,4$$$$BT,\"Part 8: Editor filter\",LE=8$$" "$$CM+LX,4,4$$$$BT,\"Part 9: Debugging\",LE=9$$" "$$CM+LX,4,4$$$$BT,\"Part 10: Wow!!\",LE=10$$" "$$CM+LX,4,4$$$$BT,\"Part 11: Test Suite\",LE=11$$" "$$CM+LX,4,4$$$$BT,\"Done\",LE=DOCM_CANCEL$$\n"); doc->flags|=DOCF_FORM; - i=SrvUser("WinMax;DocMenuDo(0x%X,0);",doc); + i=PopUpPrint("WinMax;DocMenuDo(0x%X,0);",doc); DocDel(doc); return i; } @@ -25,18 +94,29 @@ U0 TourMenu() { U8 buf[128]; I64 i; + tour_task=Fs; + tour_okay_pressed=TRUE; + tour_put=Spawn(&TourPutTask,NULL,"TourPut",,Fs); + TaskWait(tour_put); while (TRUE) { + Cd(__DIR__); + AutoComplete; + if (LBtr(&tour_put->display_flags,DISPLAYf_SHOW)) + WinZBufUpdate; i=PopUpTourPart; if (i>0) { - StrPrint(buf,"::/Misc/Tour/Tour%X.AUT",i); + if (!LBts(&tour_put->display_flags,DISPLAYf_SHOW)) + WinZBufUpdate; + StrPrint(buf,"Tour%X.AUT",i); ExeFile(buf); } else break; } + Kill(tour_put); } "DocClear;WinMax;\n"; WinMgrSync(2); TourMenu; Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); -"Cd(\"HOME\");Dir;\n"; +"Cd(\"::/Home\");Dir;\n"; diff --git a/Misc/Tour/Tour1.AUT b/Misc/Tour/Tour1.AUT index efa4eda..e9c64d1 100644 --- a/Misc/Tour/Tour1.AUT +++ b/Misc/Tour/Tour1.AUT @@ -2,40 +2,27 @@ Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "\n"; -PopUpOk( -"After clicking $$GREEN$$[OKAY]$$FG$$, you will be at the\n" -"command line.\n" +TourPut( +"You are now at the command line.\n" "\n" -"The syntax is like $$GREEN$$C/C++$$FG$$ except you\n" -"don't need $$GREEN$$()$$FG$$ if there are no args.\n" +"The syntax is like $$GREEN$$C/C++$$FG$$ except you don't need $$GREEN$$()$$FG$$ " +"if there are no args.\n" "\n" "Type \"$$GREEN$$Dir;$$FG$$\" and press $$GREEN$$$$FG$$.\n\n" -"You must remember the semicolon.\n" -); - +"You must remember the semicolon.\n"); AFGetStr("Dir;\n"); -Sleep(1000); //Allow user time to see dir -'\n'; -PopUpOk( -"After clicking $$GREEN$$[OKAY]$$FG$$, you will be at the\n" -"command line.\n\n" +TourPut( "Press $$GREEN$$$$FG$$.\n\n" -"This will access your PersonalMenu.\n" -"You can customize it. It's like your\n" -"START menu and desktop.\n"); +"This will access your PersonalMenu. You can customize it. " +"It's like your START menu and desktop.\n"); AFGetChar(CH_CTRLM); -Sleep(1000); -PopUpOk( -"You can get to your PersonalMenu\n" -"by clicking on the word \"$$GREEN$$MENU$$FG$$\" in the\n" -"title bar.\n"); +TourPut( +"You can also get to your PersonalMenu by clicking on the word " +"\"$$GREEN$$MENU$$FG$$\" in the title bar.\n",TRUE); -PopUpOk( -"After clicking $$GREEN$$[OKAY]$$FG$$, you will be back at\n" -"the PersonalMenu.\n\n" -"Press $$GREEN$$$$FG$$ nine times.\n"); +TourPut("Press $$GREEN$$$$FG$$ nine times.\n"); //Puts the cursor at the top Msg(MSG_KEY_DOWN,0,SC_CURSOR_UP|SCF_CTRL); @@ -44,47 +31,37 @@ I64 i; for (i=0;i<9;i++) AFGetKey(SC_CURSOR_DOWN); -PopUpOk( +TourPut( "Keyboard commands are:\n\n" "$$GREEN$$$$FG$$\t\tLeft-action\n" "$$GREEN$$$$FG$$\t\tRight-action\n" "$$GREEN$$$$FG$$\t\tSave and exit\n" -"$$GREEN$$$$FG$$\tAbort\n" -); +"$$GREEN$$$$FG$$\tAbort and exit\n",TRUE); -PopUpOk( -"After clicking $$GREEN$$[OKAY]$$FG$$, the cursor will be\n" -"on top of a macro we wish to run.\n" +TourPut( +"The cursor is now on top of a macro we wish to run.\n" "\n" -"After clicking $$GREEN$$[OKAY]$$FG$$, press $$GREEN$$$$FG$$.\n"); +"Press $$GREEN$$$$FG$$.\n"); AFGetStr(" "); -Sleep(1000); -PopUpOk( -"The macro changed directories and did\n" -"a $$GREEN$$Dir;$$FG$$ command.\n\n" -"The $$RED$$RED$$FG$$ filenames listed are file\n" -"links. Left-clicking will edit/view them.\n" -"Right-clicking or pressing $$GREEN$$$$FG$$\n" -"when the cursor is on top will bring-up a\n" -"menu of options.\n\n" -"The $$LTBLUE$$BLUE$$FG$$ underline entries \"$$LTBLUE$$.$$FG$$\" and \"$$LTBLUE$$..$$FG$$\"\n" -"are macros and will change directories.\n"); +TourPut( +"The macro changed directories and did a $$GREEN$$Dir;$$FG$$ command. " +"The $$RED$$RED$$FG$$ filenames listed are file links. Left-clicking will " +"edit/view them. Right-clicking or pressing $$GREEN$$$$FG$$ when the " +"cursor is on top will bring-up a menu of options.\n\n" +"The $$LTBLUE$$BLUE$$FG$$ underline entries \"$$LTBLUE$$.$$FG$$\" and \"$$LTBLUE$$..$$FG$$\"" +"are macros and will change directories.\n",TRUE); -PopUpOk( -"Press $$GREEN$$$$FG$$ after clicking $$GREEN$$[OKAY]$$FG$$\n" -"to toggle plain text mode.\n\n" +TourPut( +"Press $$GREEN$$$$FG$$ to toggle to plain text mode.\n\n" "These are \"DolDoc\" commands."); AFGetChar(CH_CTRLT); -Sleep(1000); -PopUpOk( -"The DolDoc widgets are bracketed with\n" -"dollar sign characters.\n\n" +TourPut( +"The DolDoc widgets are bracketed with dollar sign characters.\n\n" "\"LK\" stands \"link\".\n" "\"MA\" stands for \"macro\".\n\n" -"Now, $$GREEN$$$$FG$$ to toggle back to\n" -"regular mode.\n"); +"Now, $$GREEN$$$$FG$$ to toggle back to regular mode.\n"); AFGetChar(CH_CTRLT); Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); -Sleep(1000); + diff --git a/Misc/Tour/Tour2.AUT b/Misc/Tour/Tour2.AUT index 25e58da..e68e5ce 100644 --- a/Misc/Tour/Tour2.AUT +++ b/Misc/Tour/Tour2.AUT @@ -2,23 +2,23 @@ Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "\n"; -PopUpOk( -"Now, we're going to demonstrate how to work\n" -"with programs. We'll change to the\n" +TourPut( +"Now, we're going to demonstrate how to work " +"with programs. We'll change to the " "$$GREEN$$/Demo/Games$$FG$$ directory.\n\n" -"Note, that directories are specified with\n" -"a forward slash, not a backslash.\n" -"Drives can be specified in a $$GREEN$$Cd()$$FG$$ command\n" +"Note that directories are specified with " +"a forward slash, not a backslash. " +"Drives can be specified in a $$GREEN$$Cd()$$FG$$ command " "and the boot drive is specified with \"$$GREEN$$::$$FG$$\".\n\n" "$$GREEN$$$$FG$$ to complete the command.\n"); AFPrint(25,"Cd(\"::/Demo/Games\");Dir;"); AFGetStr("\n"); -PopUpOk( -"Now, we're going to edit a file. Normally,\n" -"you'll probably left-click on a directory\n" -"listing to edit a file, but we're going to\n" +TourPut( +"Now, we're going to edit a file. Normally, " +"you'll probably left-click on a directory " +"listing to edit a file, but we're going to " "type it on the command line.\n\n" "$$GREEN$$$$FG$$ to complete the command.\n"); @@ -28,80 +28,72 @@ Msg(MSG_KEY_DOWN_UP,0,SC_CURSOR_UP|SCF_CTRL); Sleep(1000); Msg(MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN|SCF_CTRL); -PopUpOk( -"This is a first-person-shooter.\n" -"It quits when you press $$GREEN$$$$FG$$.\n\n" -"There is no \"$$GREEN$$main()$$FG$$\" function in TempleOS\n" -"programs. Any program statements outside\n" -"functions get executed when you $$GREEN$$#include$$FG$$\n" +TourPut( +"This is a first-person-shooter.\n\n" +"There is no \"$$GREEN$$main()$$FG$$\" function in TempleOS " +"programs. Any program statements outside " +"functions get executed when you $$GREEN$$#include$$FG$$ " "them at the command line.\n\n" -"The \"$$GREEN$$CastleFrankenstein;$$FG$$\" statement at the\n" -"bottom will run the program when we\n" -"$$GREEN$$#include$$FG$$ it.\n"); +"The \"$$GREEN$$CastleFrankenstein;$$FG$$\" statement at the " +"bottom will run the program when we " +"$$GREEN$$#include$$FG$$ it.\n",TRUE); -PopUpOk( -"$$GREEN$$$$FG$$ to abort the editor.\n" -); +TourPut("Press $$GREEN$$$$FG$$ to abort the editor.\n"); AFGetChar(CH_ESC,CH_SHIFT_ESC); -PopUpOk( -"Now, we'll run the CastleFrankenstein.CPP.Z\n" -"program. Press $$GREEN$$$$FG$$. Then, move around\n" -"with cursor keys and $$GREEN$$$$FG$$\n" -"when you are done.\n"); +TourPut( +"Now, run the CastleFrankenstein.CPP.Z program. Press $$GREEN$$$$FG$$.\n"); AFPrint(25,"#include \"CastleFrankenstein\";"); AFGetStr("\n"); +TourPut( +"Move around with cursor keys and press $$GREEN$$$$FG$$ when you " +"are done.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); -PopUpOk( -"The program is still in memory and we\n" -"can start it again by typing\n" +TourPut( +"The program is still in memory and we can start it again by typing " "\"$$GREEN$$CastleFrankenstein;$$FG$$\".\n\n" -"$$GREEN$$$$FG$$ at the command line to\n" -"run it again.\n"); +"Press $$GREEN$$$$FG$$ at the command line to run it again.\n"); AFPrint(25,"CastleFrankenstein;"); AFGetStr("\n"); +TourPut( +"Move around with cursor keys and press $$GREEN$$$$FG$$ when you " +"are done.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); -PopUpOk( -"$$GREEN$$$$FG$$\tExtended ASCII\n" -"$$GREEN$$$$FG$$\tBreak(interrupt) program\n" -"$$GREEN$$$$FG$$\tSpawn new user terminal window\n" -"$$GREEN$$$$FG$$\tMutes sound\n" -"$$GREEN$$$$FG$$\tSwitch tasks\n" -"$$GREEN$$$$FG$$\tKill task (window)\n" -); +TourPut( +"$$GREEN$$$$FG$$\tExtended ASCII.\n" +"$$GREEN$$$$FG$$\tBreak(interrupt) program.\n" +"$$GREEN$$$$FG$$\tSpawn new user terminal window.\n" +"$$GREEN$$$$FG$$\tMutes sound.\n" +"$$GREEN$$$$FG$$\tSwitch tasks.\n" +"$$GREEN$$$$FG$$\tKill task (window).\n",TRUE); AFPrint(50,"Ed(\"CastleFrankenstein.CPP.Z\");\n"); -PopUpOk( -"$$GREEN$$$$FG$$ in the editor to run the file being edited.\n" -); +TourPut("Press $$GREEN$$$$FG$$ in the editor to run the file being edited.\n"); AFGetKey(SC_F5); -Sleep(50); +Sleep(1000); CTask *task=sys_focus_task; -PopUpOk( -"$$GREEN$$$$FG$$ to abort the application.\n" -"Then, $$GREEN$$$$FG$$ to kill the task.\n" -); +TourPut( +"Press $$GREEN$$$$FG$$ to abort the application. " +"Then, press $$GREEN$$$$FG$$ to kill the task.\n"); WinToTop(task); while (TaskValidate(task)) Sleep(10); -PopUpOk( -"$$GREEN$$$$FG$$ to abort the editor.\n"); +TourPut("Press $$GREEN$$$$FG$$ to abort the editor.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); -PopUpOk( -"Explore the $$LK+PU,\"DemoIndex\",\"FI:::/Doc/DemoIndex.TXT\"$$. You'll find it\n" -"on your menu. It's arranged by difficulty.\n" -"Hit $$GREEN$$$$FG$$ on a demo index listing\n" -"and $$GREEN$$$$FG$$ to run from the editor.\n" -); +TourPut( +"Explore the $$RED$$$$TX+L+PU+UL,\"DemoIndex\",A=\"FI:::/Doc/DemoIndex.TXT\"$$$$FG$$. " +"You'll find it on your menu. It's arranged by difficulty. " +"Hit $$GREEN$$$$FG$$ on a demo index listing " +"and $$GREEN$$$$FG$$ to run from the editor.\n",TRUE); \ No newline at end of file diff --git a/Misc/Tour/Tour3.AUT b/Misc/Tour/Tour3.AUT index 6d18a28..75a704e 100644 --- a/Misc/Tour/Tour3.AUT +++ b/Misc/Tour/Tour3.AUT @@ -2,68 +2,57 @@ Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "\nCd(\"::/Demo/Games\");Dir;\n"; -PopUpOk( -"Now, we're going to add the\n" -"CastleFrankenstein.CPP.Z program\n" +TourPut( +"Now, we're going to add the CastleFrankenstein.CPP.Z program " "to your PersonalMenu.\n\n" -"Press $$GREEN$$$$FG$$\n" -"to get to your PersonalMenu.\n"); +"Press $$GREEN$$$$FG$$ to get to your PersonalMenu.\n"); AFGetChar(CH_CTRLM); Msg(MSG_KEY_DOWN,0,SC_CURSOR_UP|SCF_CTRL); -Sleep(1000); -PopUpOk( -"$$GREEN$$$$FG$$ to invoke the\n" -"text-widget resource editor.\n" -"\n" -"($$GREEN$$$$FG$$ invokes the\n" -"graphic resource editor.)\n" -); +TourPut( +"Press $$GREEN$$$$FG$$ to invoke the text-widget resource editor.\n\n" +"(Press $$GREEN$$$$FG$$ invokes the graphic resource editor.)\n"); AFGetChar(CH_CTRLL); -Sleep(100); -PopUpOk( -"$$GREEN$$$$FG$$ until you reach\n" -"\"Macro\".\n"); +Sleep(500); +WinToTop;//Kludge + +TourPut("$$GREEN$$$$FG$$ until you reach \"Macro\".\n"); I64 i; for (i=0;i<6;i++) AFGetKey(SC_CURSOR_DOWN); -PopUpOk( -"$$GREEN$$$$FG$$.\n"); +TourPut("Press $$GREEN$$$$FG$$.\n"); AFGetStr(" "); -Sleep(1000); -PopUpOk( -"Now, we'll fill-in the visible text\n" -"of the macro.\n"); +TourPut( +"Now, we'll fill-in the visible tag of the macro. Then, " +"we'll fill-in the macro text.\n",TRUE); AFPrint(,"Click Here"); Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN); -PopUpOk("Now, we'll fill-in the macro text.\n"); AFPrint(,"Cd(\"::/Demo/Games\");;#include \"CastleFrankenstein\";\\n"); -PopUpOk("$$GREEN$$$$FG$$ to exit the form.\n"); +TourPut("Press $$GREEN$$$$FG$$ to exit the form.\n"); AFGetChar(CH_ESC); -Sleep(1000); -PopUpOk( +TourPut( "Press $$GREEN$$$$FG$$ to insert a line feed.\n" -"($$GREEN$$$$FG$$ does a page break and $$GREEN$$$$FG$$\n" -"would execute the macro.)\n"); +"$$GREEN$$$$FG$$ does a page break.\n" +"$$GREEN$$$$FG$$ would execute the macro.\n"); AFGetKey(SC_ENTER|SCF_CTRL|SCF_SHIFT); -Sleep(1000); Msg(MSG_KEY_DOWN,0,SC_CURSOR_UP|SCF_CTRL); -PopUpOk( -"Press $$GREEN$$$$FG$$ to test it.\n"); +TourPut("Press $$GREEN$$$$FG$$ to test it.\n"); AFGetStr(" "); +TourPut( +"Move around with cursor keys and press $$GREEN$$$$FG$$ when you " +"are done.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); -PopUpOk( -"Now, we'll do a fancier macro that pops-up\n" -"a new window which dies when finished,\n" -"returning mem to the system.\n"); +TourPut( +"Now, we'll do a fancier macro that pops-up a new window which dies when " +"finished, returning mem to the system.\n",TRUE); Msg(MSG_KEY_DOWN,CH_CTRLM,0x43200000432); Msg(MSG_KEY_DOWN,0,SC_CURSOR_UP|SCF_CTRL); Msg(MSG_KEY_DOWN,CH_CTRLL,0x42600000426); @@ -74,38 +63,36 @@ Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN); AFPrint(,"Cd(\"::/Demo/Games\");;#include \"CastleFrankenstein\";\\n"); Msg(MSG_KEY_DOWN,0,SC_CURSOR_LEFT|SCF_CTRL); -PopUpOk( -"$$GREEN$$$$FG$$ until you reach\n" -"the \"Pop-Up\" check-box.\n"); +TourPut( +"Press $$GREEN$$$$FG$$ until you reach the \"Pop-Up\" check-box.\n"); for (i=0;i<2;i++) AFGetKey(SC_CURSOR_DOWN); -PopUpOk( -"$$GREEN$$$$FG$$ to check the box.\n"); +TourPut( +"Press $$GREEN$$$$FG$$ to check the box.\n"); AFGetStr(" "); -Sleep(500); -PopUpOk("$$GREEN$$$$FG$$ to exit the form.\n"); +TourPut("Press $$GREEN$$$$FG$$ to exit the form.\n"); AFGetChar(CH_ESC); -Sleep(500); -PopUpOk("$$GREEN$$$$FG$$ to insert a line feed.\n"); +TourPut("Press $$GREEN$$$$FG$$ to insert a line feed.\n"); AFGetKey(SC_ENTER|SCF_CTRL|SCF_SHIFT); -Sleep(500); Msg(MSG_KEY_DOWN,0,SC_CURSOR_UP|SCF_CTRL); -PopUpOk( -"$$GREEN$$$$FG$$ to test it.\n"); +TourPut( +"Press $$GREEN$$$$FG$$ to test it.\n"); AFGetStr(" "); -Sleep(3000); -PopUpOk( -"$$GREEN$$$$FG$$ to save your\n" -"PersonalMenu file, if you wish.\n" -"Your PersonalMenu is special and\n" -"does not save on $$GREEN$$$$FG$$.\n"); -if (Fs->parent_task->popup_task) { - '' CH_SHIFT_ESC; - Sleep(100); -} +Sleep(500); +WinToTop;//Kludge + +TourPut( +"Move around with cursor keys and press $$GREEN$$$$FG$$ when you " +"are done.\n"); +AFUntilChar(CH_ESC,CH_SHIFT_ESC); + +TourPut( +"$$GREEN$$$$FG$$ to save your PersonalMenu file, if you wish. " +"Your PersonalMenu is special and does not save on $$GREEN$$$$FG$$.\n",TRUE); + '' CH_SHIFT_ESC; //exit menu diff --git a/Misc/Tour/Tour4.AUT b/Misc/Tour/Tour4.AUT index 13355ec..622b3ae 100644 --- a/Misc/Tour/Tour4.AUT +++ b/Misc/Tour/Tour4.AUT @@ -7,27 +7,28 @@ Msg(MSG_KEY_DOWN,0,SC_CURSOR_UP|SCF_CTRL); Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN); "//"; -PopUpOk( -"Now, we'll add a link to a file.\n" -"using the $$GREEN$$$$FG$$ filename chooser.\n"); +TourPut( +"Now, we'll add a link to a file using the $$GREEN$$$$FG$$ filename chooser.\n", +TRUE); '' CH_CTRLL; -Sleep(1500); -'' CH_SPACE; -Sleep(1500); -'' CH_SPACE; -Sleep(1000); -Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN); Sleep(2000); +'' CH_SPACE; +Sleep(1500); +'' CH_SPACE; +Sleep(1500); +Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN); +Sleep(1500); -PopUpOk( -"Press $$GREEN$$$$FG$$. Pick any\n" -"file and press $$GREEN$$$$FG$$."); +TourPut( +"Press $$GREEN$$$$FG$$ for the file chooser. Then, " +"pick a file and press $$GREEN$$$$FG$$."); AFGetKey(SC_F4); -PopUpOk("Press $$GREEN$$$$FG$$.\n"); +Sleep(5000); +TourPut("Press $$GREEN$$$$FG$$ to exit the form.\n"); AFGetChar(CH_ESC); -PopUpOk("$$GREEN$$$$FG$$ to abort.\n"); +TourPut("Press $$GREEN$$$$FG$$ to abort.\n"); AFGetChar(CH_SHIFT_ESC); -PopUpOk("$$GREEN$$$$FG$$ to pick directories.\n"); +TourPut("Use $$GREEN$$$$FG$$ to pick directories.\n",TRUE); diff --git a/Misc/Tour/Tour5.AUT b/Misc/Tour/Tour5.AUT index 2308f37..f66da3c 100644 --- a/Misc/Tour/Tour5.AUT +++ b/Misc/Tour/Tour5.AUT @@ -1,64 +1,50 @@ -PopUp("WSInit(\"::/*;~*Bible.TXT*\");"); -WordStat(ON); +PopUp("ACInit(\"::/*;~*Bible.TXT*\");"); +AutoComplete(ON); Sleep(3500); //Puts the cursor at the bottom. Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "\nCd(\"::/Demo\");\n"; -PopUpOk( -"WordStat is an autocomplete feature\n" -"which will also jump to source code.\n" -"The function keys work with code, while\n" -"the num keys work with the dictionary.\n\n" -"We will now place some text on the command\n" -"line and jump to source code.\n"); +TourPut( +"AutoComplete is a feature which also lets you jump to source code of " +"symbols. The function keys jump to code, while the number keys jump to " +"dictionary definitions.\n\n" +"We will now place some text on the command line and jump to source code.\n", +TRUE); "MakeOS"; -Sleep(1000); - -PopUpOk( -"After clicking $$GREEN$$[OKAY]$$FG$$, look at\n" -"the $$GREEN$$MakeOSPrtBootInstall$$FG$$ entry\n" -"in the WordStat window. Notice it\n" -"is underlined. This means a source\n" -"code link is available.\n"); -Sleep(3000); - -PopUpOk( -"$$GREEN$$$$FG$$ to jump to source code.\n"); +TourPut( +"Look at the $$GREEN$$MakeOSDrvBootInstall$$FG$$ entry in the AutoComplete " +"window. Notice it is underlined. This means a source code link is " +"available.\n\n" +"Press $$GREEN$$$$FG$$ to jump to source code.\n"); AFGetKey(SC_F1|SCF_CTRL|SCF_SHIFT); Sleep(500); +WinToTop;//Kludge -PopUpOk( -"$$GREEN$$$$FG$$ to abort the source code.\n"); +TourPut("Press $$GREEN$$$$FG$$ to abort the source code.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); -Sleep(100); -sys_focus_task=Fs; -PopUpOk( -"Press $$GREEN$$$$FG$$ to autocomplete.\n"); +TourPut("Press $$GREEN$$$$FG$$ to autocomplete.\n"); AFGetKey(SC_F1|SCF_CTRL); Sleep(500); Msg(MSG_KEY_DOWN,'\n',SCF_CTRL|SCF_SHIFT); "\n"; -PopUpOk( -"Tip: You can restart the WordStat window if you\n" -"have closed it by pressing $$GREEN$$$$FG$$.\n"); +TourPut( +"Tip: You can restart the AutoComplete window if you have closed it by " +"pressing $$GREEN$$$$FG$$.\n",TRUE); -PopUpOk( -"You can also use the $$GREEN$$Man()$$FG$$ function\n" -"to jump to source code. (I use WordStat.)\n" -"The $$GREEN$$Man()$$FG$$ is good for short symbol names\n" -"or when inside the debugger.\n"); +TourPut( +"You can also use the $$GREEN$$Man()$$FG$$ function to jump to source code. " +"(I use AutoComplete.) The $$GREEN$$Man()$$FG$$ is good for short symbol " +"names or when inside the debugger.\n",TRUE); AFPrint(,"Man(\"U\");"); -Sleep(1000); +Sleep(1500); "\n"; -Sleep(2000); -PopUpOk( -"$$GREEN$$$$FG$$ to abort the source code.\n"); +TourPut("Press $$GREEN$$$$FG$$ to abort the source code.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); diff --git a/Misc/Tour/Tour6.AUT b/Misc/Tour/Tour6.AUT index 2daa8a1..2568a57 100644 --- a/Misc/Tour/Tour6.AUT +++ b/Misc/Tour/Tour6.AUT @@ -1,10 +1,9 @@ -PopUpOk( -"$$LK,\"F\",A=\"MN:F\"$$() is a handy function.\n" -"It is a wrapper around $$LK,\"Grep\",\"MN:Grep\"$$().\n" -"It searches for a sym.\n" -); +TourPut( +"$$RED$$$$TX+L+PU+UL,\"F\",A=\"MN:F\"$$$$FG$$() is a handy function. " +"It is a wrapper around $$RED$$$$TX+L+PU+UL,\"Find\",A=\"MN:Find\"$$$$FG$$(). " +"It searches for a sym.\n",TRUE); -PopUpOk("Press $$GREEN$$$$FG$$."); +TourPut("Press $$GREEN$$$$FG$$.\n"); //Puts the cursor at the bottom. Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); @@ -12,15 +11,15 @@ Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "F(\"RED\");"; AFGetStr("\n"); -Sleep(3000); +Sleep(2000); -PopUpOk("Notice the number of matches.\n"); +TourPut("Notice the number of matches.\n",TRUE); -PopUpOk( -"Try it with the $$GREEN$$+l$$FG$$ flag.\n" -"This limits to whole labels, not partials.\n"); +TourPut( +"Try it with the $$GREEN$$+l$$FG$$ flag. This limits to whole labels, not " +"partials.\n",TRUE); -PopUpOk("Press $$GREEN$$$$FG$$."); +TourPut("Press $$GREEN$$$$FG$$.\n"); //Puts the cursor at the bottom. Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); @@ -28,16 +27,15 @@ Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "F(\"RED\",\"+l\");"; AFGetStr("\n"); -Sleep(3000); +Sleep(2000); -PopUpOk("Notice the number of matches.\n"); +TourPut("Notice the number of matches.\n",TRUE); -PopUpOk( -"Try it with the $$GREEN$$+l-i$$FG$$ flag.\n" -"This does not ignore case and\n" -"limits to whole labels, not partials.\n"); +TourPut( +"Try it with the $$GREEN$$+l-i$$FG$$ flag. This does not ignore case and " +"limits to whole labels, not partials.\n",TRUE); -PopUpOk("Press $$GREEN$$$$FG$$."); +TourPut("Press $$GREEN$$$$FG$$.\n"); //Puts the cursor at the bottom. Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); @@ -45,30 +43,27 @@ Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "F(\"RED\",\"+l-i\");"; AFGetStr("\n"); -Sleep(3000); +Sleep(2000); -PopUpOk("Notice the number of matches.\n"); +TourPut("Notice the number of matches.\n",TRUE); -PopUpOk( -"The wrapper function is in your\n" -"$$RED$$HOME/Adam3dWrappers.CPP.Z$$FG$$ file.\n" -"There is a function $$LK,\"R\",\"MN:R\"$$() for\n" -"find and replace. Feel free to customize.\n"); +TourPut( +"The wrapper function is in your $$RED$$/Home/AdamWrappers.CPP.Z$$FG$$ file. " +"There is a function $$RED$$$$TX+L+PU+UL,\"R\",A=\"MN:R\"$$$$FG$$() for " +"find and replace. Feel free to customize.\n",TRUE); -PopUpOk("Press $$GREEN$$$$FG$$."); +TourPut("Press $$GREEN$$$$FG$$.\n"); //Puts the cursor at the bottom. Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "\n"; -"Ed(\"HOME/Adam3dWrappers.CPP.Z\");"; +"Ed(\"::/Home/AdamWrappers.CPP.Z\");"; AFGetStr("\n"); -Sleep(2000); -PopUpOk( -"$$GREEN$$$$FG$$ to abort the source code.\n"); +TourPut("Press $$GREEN$$$$FG$$ to abort the source code.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); -PopUpOk( +TourPut( "$$GREEN$$+lb$$FG$$ is whole label just before.\n" -"$$GREEN$$+la$$FG$$ is whole label just after.\n"); +"$$GREEN$$+la$$FG$$ is whole label just after.\n",TRUE); diff --git a/Misc/Tour/Tour7.AUT b/Misc/Tour/Tour7.AUT index bb82877..f8fddaf 100644 --- a/Misc/Tour/Tour7.AUT +++ b/Misc/Tour/Tour7.AUT @@ -1,28 +1,25 @@ "FF(\"/Kernel/*\");"; -PopUpOk("Let's list files in the\n" - "$$GREEN$$/Kernel$$FG$$ and sub directories.\n\n" - "TempleOS masks have one\n" - "base directory and multiple\n" - "filename masks.\n" - "Press $$GREEN$$$$FG$$."); +TourPut( +"Let's list files in the $$GREEN$$/Kernel$$FG$$ and sub directories.\n\n" +"TempleOS masks have one base directory and multiple filename masks.\n\n" +"Press $$GREEN$$$$FG$$.\n"); AFGetStr("\n"); "FF(\"/Kernel/*\",\"-r\");"; -PopUpOk("The recurse $$GREEN$$+r$$FG$$ flag\n" - "is usually set. Let's\n" - "turn it off.\n\n" - "Press $$GREEN$$$$FG$$."); +TourPut( +"The recurse $$GREEN$$+r$$FG$$ flag is usually set. Let's turn it off.\n\n" +"Press $$GREEN$$$$FG$$.\n"); AFGetStr("\n"); "FF(\"/Kernel/M*;*.HPP*\");"; -PopUpOk("Let's have two mask of\n" - "$$GREEN$$M*$$FG$$ plus $$GREEN$$*.HPP*$$FG$$\n\n" - "Press $$GREEN$$$$FG$$."); +TourPut( +"Let's have two mask of $$GREEN$$M*$$FG$$ plus $$GREEN$$*.HPP*$$FG$$\n\n" +"Press $$GREEN$$$$FG$$.\n"); AFGetStr("\n"); "FF(\"/Kernel/M*;*.HPP*;~Mem*\");"; -PopUpOk("Let's unselect $$GREEN$$Mem*$$FG$$.\n\n" - "Press $$GREEN$$$$FG$$."); +TourPut( +"Let's unselect $$GREEN$$Mem*$$FG$$.\n\n" +"Press $$GREEN$$$$FG$$.\n"); AFGetStr("\n"); -PopUpOk("There is no way to include\n" - "multiple base directories.\n"); +TourPut("There is no way to include multiple base directories.\n",TRUE); diff --git a/Misc/Tour/Tour8.AUT b/Misc/Tour/Tour8.AUT index f21eeb2..08121a7 100644 --- a/Misc/Tour/Tour8.AUT +++ b/Misc/Tour/Tour8.AUT @@ -1,39 +1,24 @@ "Ed(\"::/Misc/Bible.TXT.Z\");\n"; -Sleep(1000); - -PopUpOk( -"$$GREEN$$$$FG$$ to find.\n" -); - +TourPut("Press $$GREEN$$$$FG$$ to find.\n"); AFGetChar(CH_CTRLF); AFPrint(150,"new song"); -PopUpOk("Cursor down 8 times.\n"); +TourPut("Cursor down 8 times.\n"); I64 i; for (i=0;i<8;i++) AFGetKey(SC_CURSOR_DOWN); -PopUpOk( -"Press '$$GREEN$$2$$FG$$' to show\n" -"all lines within 2 of a match.\n"); +TourPut("Press '$$GREEN$$2$$FG$$' to show all lines within 2 of a match.\n"); AFGetStr("2"); -Sleep(1000); -PopUpOk("Press $$GREEN$$$$FG$$.\n"); +TourPut("Press $$GREEN$$$$FG$$ to exit the form.\n"); AFGetChar(CH_ESC); -Sleep(500); -PopUpOk( -"Look around and press $$GREEN$$$$FG$$\n" -"to turn off filter.\n"); +TourPut("Look around and press $$GREEN$$$$FG$$ to turn off filter.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); -Sleep(1000); -PopUpOk( -"You can combine filters to\n" -"effectively do AND searches.\n"); -Sleep(1000); +TourPut("You can combine filters to effectively do AND searches.\n",TRUE); '' CH_SHIFT_ESC; diff --git a/Misc/Tour/Tour9.AUT b/Misc/Tour/Tour9.AUT index a04fc33..611b7a9 100644 --- a/Misc/Tour/Tour9.AUT +++ b/Misc/Tour/Tour9.AUT @@ -1,51 +1,44 @@ -PopUpOk("Press $$GREEN$$$$FG$$."); +TourPut("Press $$GREEN$$$$FG$$."); "Ed(\"HI:Debugging\");"; AFGetStr("\n"); -PopUpOk( -"$$GREEN$$$$FG$$ to abort.\n"); +TourPut("Press $$GREEN$$$$FG$$ to abort.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); -PopUpOk( -"We will now use $LK,"Uf",A="MN:Uf"$() to\n" -"unassemble a function.\n" -"It takes the function name\n" -"as a string arg.\n\n" -"Press $$GREEN$$$$FG$$."); +TourPut( +"We will now use $$RED$$$$TX+L+PU+UL,\"Uf\",A=\"MN:Uf\"$$$$FG$$() to " +"unassemble a function. It takes the function name as a string arg.\n\n" +"Press $$GREEN$$$$FG$$.\n"); "WinMax;WinBorder;\nUf(\"CAlloc\");"; AFGetStr("\n"); -PopUpOk("Press $$GREEN$$$$FG$$ eight times.."); +TourPut("Press $$GREEN$$$$FG$$ eight times.."); I64 i; for (i=0;i<8;i++) AFGetKey(SC_CURSOR_UP); -PopUpOk( +TourPut( "Press $$GREEN$$$$FG$$.\n"); AFGetStr(" "); -PopUpOk( -"$$GREEN$$$$FG$$ when finished.\n"); +TourPut("Press $$GREEN$$$$FG$$ when finished.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); //Puts the cursor at the bottom. Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); -PopUpOk( -"We can unassemble a\n" -"numeric address with $LK,"U",A="MN:U"$().\n\n" -"Press $$GREEN$$$$FG$$."); +TourPut( +"We can unassemble a numeric address with " +"$$RED$$$$TX+L+PU+UL,\"U\",A=\"MN:U\"$$$$FG$$().\n\n" +"Press $$GREEN$$$$FG$$.\n"); "U(&CAlloc);"; AFGetStr("\n"); -Sleep(1000); -PopUpOk("The opcodes are slightly nonstandard."); +TourPut("The opcodes are slightly nonstandard.\n",TRUE); "Ed(\"::/Compiler/OpCodes.TXT.Z\");\n"; Msg(MSG_KEY_DOWN,CH_CTRLF,0x42100000421); "MOV"; Msg(MSG_KEY_DOWN,CH_ESC,0x100000001); -PopUpOk( -"$$GREEN$$$$FG$$ to abort.\n"); +TourPut("Press $$GREEN$$$$FG$$ to abort.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); - diff --git a/Misc/Tour/TourA.AUT b/Misc/Tour/TourA.AUT index 48084ba..7fb6a39 100644 --- a/Misc/Tour/TourA.AUT +++ b/Misc/Tour/TourA.AUT @@ -1,25 +1,21 @@ -PopUpOk( -"All text widgets work everywhere.\n" -"The $$GREEN$$Type()$$FG$$ command is like\n" -"the DOS command of the same name\n" -"or the UNIX, $$GREEN$$cat$$FG$$ command.\n" -"We will now send your menu document\n" -"to the command line. They use the same\n" -"document format and it is active!!.\n"); - -PopUpOk("Press $$GREEN$$$$FG$$."); +TourPut( +"All text widgets work everywhere. The $$GREEN$$Type()$$FG$$ command is like " +"the DOS command of the same name or the UNIX, $$GREEN$$cat$$FG$$ command. " +"We will, now, send your menu document to the command line. It uses the " +"same document format and the icons are even active!!\n\n" +"Press $$GREEN$$$$FG$$.\n"); //Puts the cursor at the bottom. Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "\n"; -"Type(\"HOME/PersonalMenu.TXT\");"; +"Type(\"::/Home/PersonalMenu.TXT\");"; AFGetStr("\n"); Sleep(1500); AFPrint(250,"Dir;\n"); Sleep(1500); -PopUpOk( -"$$GREEN$$Type()$$FG$$ can also be used on\n" -"$$GREEN$$.BMP$$FG$$ or $$GREEN$$.GRA$$FG$$ files!"); +TourPut( +"$$GREEN$$Type()$$FG$$ can also be used on $$GREEN$$.BMP$$FG$$ or $$GREEN$$.GRA$$FG$$ " +"files!",TRUE); diff --git a/Misc/Tour/TourB.AUT b/Misc/Tour/TourB.AUT index 9484111..c14a8aa 100644 --- a/Misc/Tour/TourB.AUT +++ b/Misc/Tour/TourB.AUT @@ -1,10 +1,10 @@ -PopUpOk( -"We will now run a test-suite\n" -"that automatically executes\n" -"most TempleOS demos. It takes\n" -"a few minutes, so kick-back.\n"); +TourPut( +"We will now run a test-suite that automatically executes most TempleOS " +"demos. It takes a few minutes, so kick-back.\n\n" +"Press $$GREEN$$$$FG$$ in a moment.\n",TRUE); -PopUpOk("Press $$GREEN$$$$FG$$."); +if (LBtr(&tour_put->display_flags,DISPLAYf_SHOW)) + WinZBufUpdate; "#include \"::/Misc/OSTestSuite\";"; AFGetStr("\n"); diff --git a/PersonalMenu.TXT b/PersonalMenu.TXT new file mode 100644 index 0000000..b1331bb Binary files /dev/null and b/PersonalMenu.TXT differ diff --git a/Accts/PersonalNotes.TXT b/PersonalNotes.TXT similarity index 53% rename from Accts/PersonalNotes.TXT rename to PersonalNotes.TXT index 00f3c84..72d53b1 100644 --- a/Accts/PersonalNotes.TXT +++ b/PersonalNotes.TXT @@ -1 +1,4 @@ Place your notes or TODO here. +$FG,2$$FG$ + + diff --git a/ReadMe.TXT b/ReadMe.TXT index 6bd6bf6..677869c 100644 --- a/ReadMe.TXT +++ b/ReadMe.TXT @@ -12,8 +12,9 @@ TempleOS may require you to enter I/O port addresses for the CD-ROM drive and the hard drive. In Windows, you can find I/O port info in the Accessories folder, System Tools, System Info, Hardware Resources, I/O ports. Look for and write down "IDE", "ATA" or "SATA" port numbers. -Then, boot the TempleOS CD and try all combinations. (Sorry, it's too -difficult for TempleOS to figure-out port numbers, automatically.) +In Linux, use "lspci -v". Then, boot the TempleOS CD and try all +combinations. (Sorry, it's too difficult for TempleOS to figure-out port +numbers, automatically.) The source code can also be found at the TempleOS web site, http://www.templeos.org but cannot be compiled outside TempleOS because diff --git a/Windows/ReadMe.TXT b/Windows/ReadMe.TXT deleted file mode 100644 index cdf92a3..0000000 --- a/Windows/ReadMe.TXT +++ /dev/null @@ -1,5 +0,0 @@ - TSZ.exe - -TSZ.exe is a command-line utility that will uncompress TempleOS -files. You do not have to install it to use TempleOS because -TempleOS has its own uncompression code. diff --git a/Windows/TSZSetUp.zip b/Windows/TSZSetUp.zip deleted file mode 100644 index 3aae89b..0000000 Binary files a/Windows/TSZSetUp.zip and /dev/null differ