<1؎м }Aܞ3u3u3?Aܞ333@Bܞ3ܞ3ܞ3cd`x333@CDEFGHIJKLMNO . ..  lost+found boot ... . .. grub . ..menu.lststage2# This is the amount grub waits before booting the default entry timeout= 30 # Tell which entry to boot by default. Note that this is origin zero # from the beginning of the file. default= 0 # Note that to GRUB, all hard disks are `hd' and all floppy disks are `fd'. # To Mach, SCSI disks are `sd' and IDE type disks are `hd'. Use # GRUB names in the `root' command and prefixing filenames. Use a # Mach name as the `root' arg for the kernel, and whenever running the Hurd. # These two entries are for SCSI disks # Entry 0: title= hurd (sd0a multi-user) root= hd(0,a) kernel= /boot/kernel root=sd0a module= /boot/serverboot # Entry 1: title= hurd (sd0a single-user) root= hd(0,a) kernel= /boot/kernel root=sd0a -s module= /boot/serverboot # These two entries are for RLL/IDE/ST-506/etc. disks # Entry 2: title= hurd (hd0a multi-user) root= hd(0,a) kernel= /boot/kernel root=hd0a module= /boot/serverboot # Entry 3: title= hurd (hd0a single-user) root= hd(0,a) kernel= /boot/kernel root=hd0a -s module= /boot/serverboot # Installation steps for GRUB hard disk boot blocks # Entry 4: title= Install grub from floppy onto hard disk install= (fd0)+1 (hd0) (hd0,a)/boot/grub/stage2 0x8000 p # Entry 5: title= Reinstall grub from hard disk to itself install= (hd0)/boot/grub/stage1 (hd0) (hd0,a)/boot/grub/stage2 0x8000 p p0.4/boot/grub/menu.lst1؎Ўffg fqt$ D$ fD$f fg- D$ fD$fá Sfg- gf; f"f ffffffЋ$ĉš$1;$ĉf fffffꈁ f"fꚁf1؎fUSQRV1ҋE1ۊ]11ۊ]C]9~HU ]}f]SfS1۾XPfs Nfuf^ZY[]USQRWVfU$fu2fl1F ftJw1۸frOf $ fr$f%fgf?ffff[^_ZY[]UPS\$ uj Xشf*[X]US\$ fftfff[]USQR@fftZY[]USQRWVD$ǃƋ\$ PAMSƸ frf=PAMSfuff| fffffvD$^_ZY[]Pdd$u݀|$t `Xd$ud$t`@ f f1 G?fg- +\$T$nUPS0f[X]USQR0fԈZY[]UPSRT$t$0fZ[X]UPSQL$1 ˹f^Y[X]UQRfsfBZY]USf+f[]US1gftfff[]'Bad or corrupt version of stage1/stage2Bad or corrupt data while decompressing fileBad or incompatible header on compressed fileUnrecognized commandMust load Multiboot kernel before modulesUnknown boot failureUnsupported Multiboot features requestedLoading below 1MB is not supportedInvalid or unsupported executable formatInvalid device requestedDevice string unrecognizableError while parsing numberFilesystem compatibility error, can't read whole fileInconsistent filesystem structureCannot mount selected partitionFile not foundBad file or directory typeBad filename (must be absolute pathname or blocklist)No such partitionPartition table invalid or corruptAttempt to access block outside partitionDisk geometry errorDisk write errorDisk read errorSelected disk doesn't existSelected item won't fit into memoryvUWVSj:<j.@j @$Xhd1ɐQSNtdУd\uաdt`E1ɋhE9s25dv{u{uC9w C 9vA\9rمu @gƒtZс҅t<u 4h dH=< = =0 H@@p8 xtgUT %s 6UBw4hÍ6UWVS}EE U xu}}duE@E-FGE1F ~W0E1Euٍ^9vKA9we[^_ÍvUWVSu EE}%t P6EE$0Ћ6PW }tFvPC;u/Pv PCuEEe[^_ GRUB version %s (%dK lower / %dK upper memory) U5@5<h hÍvUWVSMu]>tMPF-Cx{@N~Cj %S9uK븍6BS밍6e[^_UVSMEEHUJȻOƋEppHUJș֋]ssVDe[^ÍvUSM]j v%CCCC0Cp]]UVSMMAPAY9Y|0uFPuxu SPnEt#E+E9%Ë}Fȃ}tU2U : 1e[^_UUBvÍ6B ÍvUE tw Í61UVSuM ]19}<2tB9|v2ABt9|D9} 21e[^ÍvUMU AtB8t9t 1øÐUWVSM} 9t'ΉtCA8u9u9v{uۉv1e[^_Í6UEM =~,=< 9r@ 9s =%ÐUWVS}u ]SVtS;9s9w/K~,vGFKK~ڍvJ=%e[^_UVSu] SVt FK=%e[^MultibootelfkludgeFreeBSDNetBSDa.out Loading: [format=Linux-piggyback, setup=0x%x, size=0x%x] mem= Loading: [format=%s-%s-and-data, loadaddr=0x%x, text%s=0x%x, C, data=0x%x, bss=0x%x, symtab=0x%x, strtab=0x%x(bad), <0x%x:0x%x:0x%x>, entry=0x%x] vU8 WVSDžDžDž5C: h <ƃt=  6Dž96Шur)Ӄ ~i*u\**=ORu?t~2f# DžmDž@9gm4ELFЋ%=%!%!ƒ%thA= YtfQ,ftA*9r DžDž.AQ`A )Љ) I)DžY+A Q9r9v9w)9v =` DžDž sڍv> t6t.% v t Aui u+u"Džf%Dž76Džn%f9t DžDžŕ`= t'1=t#% = t yII =` DžDž̕ofUU =:"$9WQhҕK =<_Ph Pjh h f" f ?@Pjuh OKB B$;t; tC;u vCBt ~ Wh6G9r l=}  =WHLPx tD%8TX\`hDž* t Dž+W5`h5~W5`59``ust%`hR2hV5`N59t=u  `=5`N `Qhb6==Qg+9T`%`\ `Qqhm"q5`N49A`ATjP 4um`J `XPh{5`39%`6t7ha`TX\) 8`DžDžfy,ꋍQA*:BZzr 9~>9`}`)ىQSWhVW!tFSW29u89~;PHQ,@90=u?u =u#5h"16j Dž[^_Í6US`%`5/tj5`1Åu1nv 8PhLhDL`hأ`LDLD L]UHWVS} 1H 6Ѐ: tBxu:tg:-u^6< t boot Error, cannot boot unless kernel loaded. Press any key to continue...chainloaderpauseuppermemrootkernelmoduleinstallmakeactiveU0WVSDžDžDžu M xtHp@=dt 8@'}uY}=tB=XlDžuyDžj " ^6DžK;t6Au틅)PVSSh ,t hVh\hVh&t}>fЃn% taluL6cu#jx h{h|juCh+=Xt 1v6} hVQh85Vjx8t ŠCuVhsn5(t4hh|*=uf=}UuDžc=Dž6VhY=<tVh5&h@hC%87Vh5["=~ntP$u = tHx~nt>$%6HVheJ)Pu V)E u R5E6Vh Bmu)Fn5Vh=DžWj Ã;duDžSjÃSjPjhPhWS&WhP(=8Sw '[ Phjj=H  j;PPZ }!=uj@EPP3 f}uf}Uu|E/=u UU}6EuW4E<+t2t9ut9=uLP gS=u=Lu  =u!LV Ѓt 61e[^_Í6UWVS}  9% t )9 tύ9}v=tWuq=P;E=v9~ Y%)Ɖ=~8B9|  9 5uF) )9~@DuSQuPD)]]t ==tEE(LtWu  1e[^_Uuƒu1Í68/t  Lu  =uR 1US=H| =t =u,=v#hh jjet =\Tt1؋]Í6UVSu  D(_ dX9t8h50jSu F=te[^Í6U WVS} E=Hӡ!މu PE  @9r 0v!4H#Luƒ|V+]9~@DuSu dPD])]t =J=tEEe[^_ %s6UWVSh50jؙ=։E!щUU=xƋ `uE dPCu 1vhhؙ=xP迼 U tPjt3ff%f=uOt 0E8/u EU:/t=tff%f=@t 1vEEUt'EPֺu}/tEEEuڋUEE9w%j 訩=e 6HЋu! P]Sǃ|Zh C P 9r 0H!4H# LQj dPu UE1E=tH}/tBU:tPR& ~ى Phi議;CPu͹=t }/EEUe[^_UEÍvUS=H| =t=t= u+=v"hhjjFt f=8St1ۉ؋]Í6Uu  PjE} PÍ6UWVSu   (v  9sL= tPXe   v) 9}}= tP\;   ȉ9$tUPS$$)ƃ= tP`}   UP 5tn }ÀPU‰J!ЋM4t'  H! e[^_ÐU WVSu E  J!ЉEWƒ|c  +]9~@DuSu} PJD])]o=tEEe[^_ %svU8WVS6r15(Ë EЉ؉MI!hPƒ@ E}ȉ15(MQP.ƒ $ EH!ƉE܍hM܁QP讵 EtPYt6  ff%f=uRM9/u EE8/t  ⃺tff%f=@t 16MMEt'EP貳u}/tEM MuڋEE M9w3=} j i EM-EP$|%  EPRZu EM EHM!E̍AKM;CLMDsVuǃt,}/t&E8t~ډVh$莩KEЈD=t }/MMEve[^_UWVS=H| =t! ttt hhjj<f=  @Fuw=H|wf ftb= uYfvR ЉEU)Ӊؙƍɍ AMɍU9| 16,  05 fftۉ)ʉщ 6 )ȉ1 (~ 4 4e[^_UWVSM P}ZУ  Av 12vE vA 0u16 ljM4,9B9}O~C%, v,hhj, PF+,=(utE@9u 9 (1u~ u9 (~ e[^_ %sU@WVS}P u 1 6tPIt uG?/ttu 벍v}̊UȄt&EPu}/tE̋M̊ MȄuڋUMMč6j EPA t1=O=G UȋM̈+MЄЀ% E% 16D.P5D.tP=uF~ԋU.F1ۍ6D+P 3UĈtPuC~υuN3M=t9}/t3?tQW= ~أuhuW =t }/}̊UȈ]ۋE죰E6j ce[^_UVSUu ]19}ButBuA9|Ѝe[^UWVS]uE@PjM趜tjj jSV 9} |R1ۋEPj{>tF P贚CF>u~tFvj 藚CF~G9} }EE PjM*>tjj ge[^_ÐUWVS}WjhC1ۃ h4CH~h!v4;Vj軛9] |%hVjK衛hCˍvhԙ1ۃhęCH~h豙e[^_ÍvUWVS}u vWS;VW CJ~e[^_ Use the  and  keys for selecting which entry is highlighted. Press enter to boot the selected OS, 'e' to edit the commands before booting, or 'c' for a command-line. Press 'b' to boot, enter to edit the selected command in the boot sequence, 'c' for a command-line, 'o' to open a new line after ('O' for before) the selected line, 'd' to remove the selected line, or escape to go back to the main menu.The highlighted entry will be booted automatically in %d seconds. editing> Booting '%s' Booting command-list 6UWVSEE vEM} Kj jZh>ܞ } t+h)jVSju뿐X-h螞uuj j@jpEPv>=t}6E=X|G9Et==t6=X~Ejj谗5XhWjJ蘗 Xt&ƃ=X|2jjlhIXXWjJFHtuF}~jWOMjpW'v}~Muuj j,jpjPtuVUMD9E~G jWmGEjpWa)E 9E~Euuj jjpj6} t v mdtot OjWou GEOj]]Su'E Ou,E+EPEPu芦U BEE S}~MjCPuËE)PuSO+E)EMM9M|OM}tE 9E}Muuj jjpW2UUbo} t etCv t 211} tujEEPu vujEEPuE MMUBUvMAMGFuC} tU:uF} z苔u xtHhVh\h Mt3Cu  FUE)PEPR踤SuV认)Evc+ujY} t!jEEPuPhU hF}ujEEPu E uuƃEEXUXie[^_UWVSU1116jEPUUttE<\u ڍ6< t< tt< uE 1t } u벍6u$E<#u 뢍6< t< t돍vE< t9] ~Cwv؍e[^_titletimeoutfallbackdefaultvUWVS11DžDž h dDž hDžDžDž vhWvWjWh艡~! C6Dž Ff6 FuCvWhhX號Wh軠hXtWh薠PMv  C! BCuv6~ C  F V\S 誠 uj[6 P >[^_mQA0χl]=ʆkH ˅pH Possible commands are: "pause= ...", "uppermem= ", "root= ", "rootnoverify= ", "chainloader= ", "kernel= ...", "module= ...", "modulenounzip= ...", "makeactive", "boot", and "install= [d] [p] []"       #+3;CScscc !1Aa  0@` ??+ $\, pp# This is the amount grub waits before booting the default entry timeout= 30 # Tell which entry to boot by default. Note that this is origin zero # from the beginning of the file. default= 0 # Note that to GRUB, all hard disks are `hd' and all floppy disks are `fd'. # To Mach, SCSI disks are `sd' and IDE type disks are `hd'. Use # GRUB names in the `root' command and prefixing filenames. Use a # Mach name as the `root' arg for the kernel, and whenever running the Hurd. # These two entries are for SCSI disks # Entry 0: title= hurd (sd0a multi-user) root= (hd0,a) kernel= /boot/gnumach root=sd0a module= /boot/serverboot # Entry 1: title= hurd (sd0a single-user) root= (hd0,a) kernel= /boot/gnumach root=sd0a -s module= /boot/serverboot # These two entries are for RLL/IDE/ST-506/etc. disks # Entry 2: title= hurd (hd0a multi-user) root= (hd0,a) kernel= /boot/gnumach root=hd0a module= /boot/serverboot # Entry 3: title= hurd (hd0a single-user) root= (hd0,a) kernel= /boot/gnumach root=hd0a -s module= /boot/serverboot # Installation steps for GRUB hard disk boot blocks # Entry 4: title= Install grub from floppy onto hard disk install= (fd0)+1 (hd0) (hd0,a)/boot/grub/stage2 0x8000 p # Entry 5: title= Reinstall grub from hard disk to itself install= (hd0)/boot/grub/stage1 (hd0) (hd0,a)/boot/grub/stage2 0x8000 p )*.V9Vwj V FD$E8T1u8QhdVND$ 1u8 t(V9Vwj*V*FhdVGD$94[^_]Ð@PvPhdh~PÐ@PvPhdh~hdVС~qt!0D=Whehe$,SI~RhS,hT$RhhhTWheheS$~ \)QRS s$:theh~@jB9rhVT$RsjR QRRZuu jh hR = t jlBRvRhe [^_ÐSZP"jh{t‰p [Ð(VSt$4F`Phf\$S S С~<`~ЍF`9ލB[^(ÐS\$f=ZuA1~1҃t @~u h*fh~1[ÐjY‰Z9| fBfZdth]f뮐[Ðjh{1ɋT$9s f3 9rÐVSt$\$D$PhP uh}fD1[^ÐhSWEVjhfvPufCfCCX C(L$ K,L$K0L$ K4D$ T$‰C8C4C=32MExtendedDOS 16-bit <32MXENIX usrXENIX rootDOS 12-bit FATEmptyUsage: fdisk [-l] [-v] [-s /dev/hdxn] [/dev/hdx] Unable to open %s Unable to read %s Unable to seek on %s Unable to write %s Unable to allocate any more memory Fatal error Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatiblity flag d delete a partition l list known partition types m print this menu n add a new partition p print the partition table q quit without saving changes t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)Command action b move beginning of data in a partition c change number of cylinders d print the raw data in the partition table e list extended partitions h change number of heads m print this menu p print the partition table q quit without saving changes r return to main menu s change number of sectors v verify the partition table w write table to disk and exit%c%2x %-15.15sYou must set %sheadssectorscylinders and %s%s. You can do this from the extra functions menu. The number of cylinders for this disk is set to %d. This is larger than 1024, and may cause problems with: 1) software that runs at boot time (e.g., LILO) 2) booting and partitioning software form other OSs (e.g., DOS FDISK, OS/2 FDISK) Bad offset in primary extended partition Warning: deleting partitions after %d Warning: extra link pointer in partition table %d Warning: ignoring extra data in partition table %d You will not be able to write the partition table. Ignoring extra extended partition %d Warning: invalid flag %04x of partition table %d will be corrected by w(rite) Hex code (type L to list codes): %s ([%d]-%d): %s (%d-[%d]): %s (%d-[%d]-%d): %s (%d-%d): Using default value %d Value out of range. Partition numberWarning: partition %d has empty type cylindersectorChanging display/entry units to %ss WARNING: Partition %d is an extended partition DOS Compatibility flag is not set Partition %d is extended. Delete it Partition %d does not exist yet! You may not change a partition to be an extended partition UnknownChanged system type of partition %d to %x (%s) Partition %d has different physical/logical beginnings (non-Linux?): phys=(%d, %d, %d) logical=(%d, %d, %d) Partition %d has different physical/logical endings: Partition %i does not end on cylinder boundary: should be (%d, %d, %d) Disk %s: %d heads, %d sectors, %d cylinders Units = %ss of %d * 512 bytes Device%*s Boot Begin Start End Blocks Id System %*s%-2d %c%9d%9d%9d%9d%c %2x %s Disk %s: %d heads, %d sectors, %d cylinders Nr AF Hd Sec Cyl Hd Sec Cyl Start Size ID %2d %02x%4d%4d%5d%4d%4d%5d%8d%8d %02x Warning: partition %d contains sector 0 Partition %d: head %d greater than maximum %d Partition %d: sector %d greater than maximum %d Partitions %d: cylinder %d greater than maximum %d Partition %d: previous sectors %d disagrees with total %d Warning: bad start-of-data in partition %d Warning: partition %d overlaps partition %d. Warning: partition %d is empty Logical partition %d not entirely in partition %d Total allocated sectors %d greater than the maximum %d %d unallocated sectors Partition %d is already defined. Delete it before re-adding it. First %sSector %d is already allocated No free sectors available Last %s or +size or +sizeM or +sizeKThe maximum number of partitions has been created You must delete some partition and add an extended partition first l logical (5 or over)e extendedCommand action %s p primary partition (1-4) Invalid partition number for type `%c' The partition table has been altered! Calling ioctl() to re-read partition table. (Reboot to ensure the partition table has been updated.) Syncing disks. Re-read table failed with error %d: %s. Reboot your system to ensure the partition table is updated. WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information. 0x%03X: %02X Device: %s Partition %d has no data area New beginning of dataNumber of cylindersNumber of headsNumber of sectorsWarning: setting sector offset for DOS compatiblity Expert command (m for help): Cannot open %s fdisk v2.1 (>4GB) /dev/hdb/dev/hdc/dev/hdd/dev/sda/dev/sdb/dev/sdc/dev/sdd/dev/sde/dev/sdf/dev/sdg/dev/sdh%d Using %s as default device! Command (m for help): floppytype 9HP-FLHP-IBST506ESDISCSIold DECMSCPSMDunknownHFSADOSbootISO-9660HPFS4.4LFSMS-DOS4.2BSDEighth Edition4.1BSDSystem VVersion 7Version 6swapunusedCommand action d delete a BSD partition e edit drive data i install bootstrap l list known filesystem types m print this menu n add a new BSD partition p print BSD partition table q quit without saving changes r return to main menu s show complete disklabel t change a partition's filesystem id w write disklabel to disk x link BSD partition to non-BSD partitionPartition %s%d has invalid starting sector 0. Reading disklabel of %s%d at sector %d. There is no NetBSD partition on %s. BSD disklabel command (m for help): First %sLast %s or +size or +sizeM or +sizeK# %s%d: type: %s type: %d disk: %.*s label: %.*s flags: removable ecc badsect bytes/sector: %d sectors/track: %d tracks/cylinder: %d sectors/cylinder: %d cylinders: %d rpm: %d interleave: %d trackskew: %d cylinderskew: %d headswitch: %d # milliseconds track-to-track seek: %d # milliseconds drivedata: %d %d partitions: # size offset fstype [fsize bsize cpg] %c: %8d %8d %8.8s%8x %5d %5d %5.5s %5d %5d %5d %20.20s # (Cyl. %4d- %d) Writing disklabel to %s%d. %s%d contains no disklabel. Do you want to create a disklabel? (y/n) (%d): sectors/cylinderMust be <= sectors/track * tracks/cylinder (default). rpminterleavetrackskewcylinderskewheadswitchtrack-to-track seek ... %s /usr/ucb/mdecsdwdBootstrap: %sboot -> boot%s (%s): %s/%sboot%s/boot%sBootstrap overlaps with disk label! Bootstrap installed on %s%d. Partition (a-%c): The maximum number of partitions has been created This partition already exists. ioctl/dev/sdWarning: too many partitions (%d, maximum is %d). Syncing disks. L֡zMkM`MVMFM=M,M"MM M L@LQLRLcLdLeLuLLLL~LwLlLdL\LRLKLFL;L3L%L!L!________y_r_k_```______ _ _ _ _ ___}  . > N ^ n ~           . > N ^ n ~     LT  |L@GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#l) TT@19 LL@B KQV  TA\LLbLLjvfp|||lw|l~|l}m}m%mZ n#!/usr/bin/perl $rc = 0; if ($0 =~ /cat$/) { while (<>) { print }; } elsif ($0 =~ /rm$/) { if ($ARGV[0] eq '-f') { $force = 1; shift(@ARGV); } elsif ((substr($ARGV[0], 0, 1)) eq '-') { print STDERR "Only -f is supported\n"; exit(1); } foreach $file (@ARGV) { if ($force) { unlink($file); } else { unlink($file) || print STDERR "couldn't remove $file\n"; $rc = 1; } } } exit($rc); ELF 4`U4 (44RRRbppSpc/lib/ld-linux.so.1%?&,. )6$7<18 5:3!9*+2;    #"%-0=/4>(' H >X h "x ("& #/ 6;pcD M oTd!Z ldXx ~ <`dX " # ( C"d8 JH X ddh dx "b  P0   F   /b! 7 "? lEdSdZ &b j r z( 58 H X h *A x &" 8b  J > " l " QdAdd"glibc.so.5stpcpystrcpyioctlprintfstrerrorgetopt_long_DYNAMICgetgrgidgetenverrno__strtol_internal_IO_stdout_qsortmemcpy_IO_stderr_readlink__overflowmallocisattyoptarg_obstack_newchunkreaddir_lxstat___brk_addr_xstatfflush__environabort_init__libc_initstrrchr_obstack_beginenvironfprintfctime__fpu_controloptindstrncmpstrncpyreallocfnmatchtimeopendirstrcmpgetpwuidgetpwnam_finisprintfatexit_GLOBAL_OFFSET_TABLE_exitgetgrnam__setfpucwfputsclosedirvfprintffree_errno_etext_edata__bss_start_endd `dddd$d%d:bbbbbbbb b b bbbbbbccc ccccc c"$c#(c&,c'0c(4c)8c*F6!jD0ejde[^_]ÐUWVS]} j &ơeF5eS'tW'F Fe[^_]ÐU WVSuEdVÃu$VhJFdPj fq+Sjǃt)WtVjG PpE АSt VhJFdPjP f =et jVm=f!=et"=0euhdhMFDf} u=etM=0euD,g90gsjh gsHgu,gjhfP ,ghdW0fHf=etM=0euD,g90gsjh gHgu,gjhfP ,ghdhPFNf0et =etc=etuhdhMFfURhSF}W hdW0fHf=dt =et/d9 dwj hd dfe[^_]ÐUS]j#‰ fB f]]ÐUWVS} ftw jVPu tF[u=fu  .u=ft'G t <.u t1e[^_]ÐUVS195d~81ېdPdDDt PPF95dd ee[^]ÐU@WVSud9du!dPdP~"dddDDDH} u =f}?/t>u];0U҉ЍD$)ĉ}WVSX =etld5dVSj } =dtd5dVSj }==dt2d5dVSj } =dt}+ShJFdPjf1d dfD f%f=Z} u =0e  PS}ddDDPSÃ} t =0eu =euVSj } =dt} tm=0etdfEf%f=@uV=eu E]d d\DDDd=du#dd}ȉ|Ht Sd dfD f%f=uDLvd dfD f%f=@u>} t=euDL-ddDL DL=etddD @ddt '~= e  e~= e  e?B~= e e 1}Wád d@de[^_]ÐUWVSu} hSV })VhJFdPjfSFGDe[^_]ÐUWVSu u1r>/t[j/EPHǃtG+}}0҉]CE)PdSEPW_VSVe[^_]U WVS0}@E dIMdDLH} tPd<?/tM9uDDPWN0ЋMDPơdPMQVdDDPVVbd|Lu PJðM;EEM9 d~711ېd|Lt<4PEPEM9 dϋM de[^_]US]j/SytX;.uCt <.u {u1]]ÐUPe$%&0&P&%p&@etr4tOm&=`e&'=`e '@'=`e`'c'=`etb'[(=`etB(;'=`et"'PjPdPdP$]ÐUUE @4+B4]ÐUUE R4+P4Љ]ÐUUE @,+B,]ÐUUE R,+P,Љ]ÐUUE @$+B$]ÐUUE R$+P$Љ]ÐUUE @+B]ÐUUE R+PЉ]ÐUUE PPt]ÐUEU PPT]ÐUWVS}u j.Pj.Put15u PSu PPe[^_]ÐUWVSu} j.Pj.Put15u PSqu PP_e[^_]ÐUVS0e$ ))@))))19d1dPd9 dwj hd dPC9d; [ t d19d~Q1dPWd9 dwj hd dfPC9de[^]ÐUWVSEPUR RE @etrt*4E@4UR,E@$P PEP =gtE@Ne9 9}EPEPKE =et1URRjh]FVA0ɉщt=etR=etUR BEH Q ePhcFV0ЍtURREPhhFV0ɉщt=pet$URRhpFVy *E@PQhvFVM0Ѝt=guW=petURRhpFV "E@PQhvFV0ЍtUfJ ff tf`uDEf@fRf%Ph~FV#URRhFVf 0ۉщtMă=guMQhFV.щt =et"=0euhdhMFBfhd S')f=etM=0euDf9gsjhf\gufjhfP fUR=etM=0euDf9gsjhfgufjhfP fExLuOxDt_hdhFBfURDR=et.E@HP =et UR R[^_]ÐUWVSu=Pfu;=0fu2=@fu)0}H] 1[1Mtk=0ft;ƒ  }n |b"t[ tT\tK<]vA<^v=@ftu&E]uu])M 1u0}ЍPlj=Pft"wMAM]=0fƒ - tm tK  tP"t{\\F\\Fn\Fb\Fr\Ft\Ffz\F j\F"Z<]wGPhF]SFSVƃ$<^w=@fu?F]C]=Pft"F)M e[^_]ÐUVSuEPV;ÃhduPUftSe[^]ÐUS]=etCPjh]Fh =et+=et C @C P ePhcF4 PQ=et C P ]]ÐUS]%=@u:d9 dwj/hdj/df%=u2d9 dwj@hd"@df%=u2d9 dwj|hd|df%=u2d9 dwj=hd=df%=uB=eu9It4d9 dwj*hdT*df]]ÐUVSu1҃=et=et eT=Pftlg=0ftW< < }< ;<|7ڐ<"t < t$<\u뿐=Pfu<^v BAuet;fN %=u u$It=@t=t=t=uBЍe[^]ÐUWVSE1E9d~-1ېdREU9~EPF95dփEf}udؙljхtGؙE9}u1ɍE]dPMbdSFEEM95d~]SEPك뭐 d9 dwj hd  dE9}ge[^_]ÐU WVSE195d~(1ۡdP9M}MPF95dڃEf}EuE11195dEtX}u:d9 dwj hdY d1]S9P߃EdPEdPEPF95dpd9 dwj hd de[^_]ÐUWVS1EU9dE1ޡdPEÃU9d~t99f1d9 dwj hd5 d)dPU9d~cd9 dwj,hd,dd9 dwj hd dEPEU9d d9 dwj hdn de[^_]ÐUWVS]u 9=`fEؙ=`f9}~M d9 dwj hd dؙ=`fס`f)됐 d9 dwj hd  dC`e[^_]ÐUVSMu ]<.uzt*t BA:u9vz/t/ CA;ue[^]ÐUS]t%gPhFh`d Rh`d uhCRhKRh`diVWhURh`dUe[^_]ÐUWVS}] ubt&hdgPh_Rh`d EPVh`d tSPhdRh`dtd9xdwj h`d tdh`dUtWhe[^_]ÐUEU R@P ]ÐUWVSu f]WJFP%PFP؃8PFP؃PVWe[^_]ÐUE%=`ub]Ð= u c]=@u d]=u -]=u p]=u l]=t ?]øs]ÐUU fEtr-} BwB-@tBx]B-]ÐUE fUtxxt @S @stxxt@S@stx xt@ T]Ð@ t]ÐUWVSf]5Pgt f9t\vuӉURj fuURhiR]SS PFPgF5PgFe[^_]ÐUWVSuPgtS8uVRtz[u`gtS8uVR\t3[uVhj VOCu`gC`g1fGfPgCPg؍e[^_]ÐUWVSf]5pgt f9t\vuӉURj WfuURhiR]SS PFpgF5pgFe[^_]ÐUWVSupgtS8uVR4tz[ugtS8uVR t3[uVXj VCugCg1fGfpgCpg؍e[^_]ÐUS1ۃ}u jUÃuhlRjbP؋]]ÐUS]SuS]]ÐUSE] uSSPuS\]]ÐUW}W0PtP}]ÐSb=bt Ѓ;u[ÐÐDaDbzDdtDDjDgdDiZDkJDnADG.Dq&Dr!DsDwDADBCFCFCICLCNCQCRC C CTC CfCfversionhelptimetabsizesortformatrecursivequote-nameliteraldereferenceignorefile-typeclassifyignore-backupsalmost-allwidthsizereversehide-control-charsno-groupnumeric-uid-gidkilobytesinodefull-timedireddirectoryescapeallDDDDDDDsingle-columnverticalacrosshorizontalcommaslongverbose*EC!D EextensionnonepEiEeE_EXEstatusctimeuseaccessatime %d %s .//DIRED////SUBDIRED//POSIXLY_CORRECTCOLUMNSTABSIZEabcdfgiklmnpqrstuw:xABCDFGI:LNQRST:UX1invalid line width: %s*~.*~invalid tab size: %ssort typetime typeformat type%s : total %u %*lu %*u %s %3u %-8u %-8.8s %3u, %3u %8lu %s -> \%03oTry `%s --help' for more information. Usage: %s [OPTION]... [PATH]... -A, --almost-all do not list implied . and .. -a, --all do not hide entries starting with . -B, --ignore-backups do not list implied entries ending with ~ -b, --escape print octal escapes for nongraphic characters -C list entries by columns -c sort by change time; with -l: show ctime -D, --dired generate output well suited to Emacs' dired mode -d, --directory list directory entries instead of contents -F, --classify append a character for typing each entry -f do not sort, enable -aU, disable -lst --format=WORD across -x, commas -m, horizontal -x, long -l, single-column -1, verbose -l, vertical -C --full-time list both full date and full time -G, --no-group inhibit display of group information -g (ignored) -I, --ignore=PATTERN do not list implied entries matching shell PATTERN -i, --inode print index number of each file -k, --kilobytes use 1024 blocks, not 512 despite POSIXLY_CORRECT -L, --dereference list entries pointed to by symbolic links -l use a long listing format -m fill width with a comma separated list of entries -N, --literal do not quote entry names -n, --numeric-uid-gid list numeric UIDs and GIDs instead of names -p append a character for typing each entry -Q, --quote-name enclose entry names in double quotes -q, --hide-control-chars print ? instead of non graphic characters -R, --recursive list subdirectories recursively -r, --reverse reverse order while sorting -S sort by file size -s, --size print block size of each file --sort=WORD ctime -c, extension -X, none -U, size -S, status -c, time -t --time=WORD atime -u, access -u, use -u -T, --tabsize=COLS assume tab stops at each COLS instead of 8 -t sort by modification time; with -l: show mtime -U do not sort; list entries in directory order -u sort by last access time; with -l: show atime -w, --width=COLS assume screen width instead of current value -x list entries by lines instead of by columns -X sort alphabetically by entry extension -1 list one file per line --help display this help and exit --version output version information and exit Sort entries alphabetically if none of -cftuSUX nor --sort. %s: invalidambiguous %s `%s' %s: : %s%umemory exhaustedGNU fileutils 3.12}RpcN ^ n ~           . > N ^ n ~           . > N ^ n ~          0  Ap ' b`8GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#) 1pp'9 8B `K0 0 Q8 8 V  4\AAbAAjbRpbRwbR~bRpcpSdTTT     ELF 4!4 (44.D//lib/ld-linux.so.1%4 % ,$1'-+/*(. #)  0 2&3"! >" ("'#0"8 6D/M 0!S "[(0Xg0Xs( #~8 "H X C"h "x  d0 d ".  F P! .! "0X 81<1  "' / 7( @? "I O8 8VH "]/sX xh >x l " Q 0001libc.so.5stpcpystrcpygetgidprintfstrerrorgeteuidgetopt_long_DYNAMICerrnogetegid_IO_stdout__IO_stderr___overflowgetuidmallocisattyrmdirreaddir_lxstat___brk_addr_xstatfflush__environ_init__libc_initstrrchrbasenameenvironfprintf_IO_stdin___fpu_controloptindunlinkreallocopendir__uflowgetgroups_finiatexitaccess_GLOBAL_OFFSET_TABLE_exit__setfpucwclosedirvfprintffree_errno_etext_edata__bss_start_end(0 0 0081<1 0/ ///// /$/(/ ,/ 0/4/8/0ʉӋET9P1}AP1P@1PNj.t+ @1MĐEBu=@1U@1UM܋ M.EM ./V.@@PZ.JQURmƒu _tEԡ.@..ރE>9us }GEPMQEԍe[^_]ÐU1]ÐUS]t%1Phh0(1Phh SUS]j/SiڅtPЋ]]ÐUWVS}] u.t&h(01Phh0EPVh0 tS Phh0090wj h0 0h0tW(e[^_]ÐUWU0Ѓ~Ѐ8/uH9}]ÐUS1ۃ}u jÃuhj.P؋]]ÐUS]S{uS]]ÐUSE] uSSPuS\]]ÐUSh0j090wh001ۃytYuA: t9090wh00u‰؋]]ÐUWVSu}] =.u6.8f1f1f1f1t5f1f91u&f1f91uSWf=1u tqFIukfF f91uF9fFf91t%PtFF!9t 0 1e[^_]ÐU@WVSu} =.u6.!f1f1f1f1f1f91u#f1f91uWV@]SVj } = 0tuVWEP4e[^_]ÐUS]CPS]]ÐUWVS11ې@PVVS&ǃ9t|j8p V1e[^_]ÐUWVSf}u1<$11ҋ9}pf9 N ^ n ~           . > N ^ n ~     T  /T8GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#l) TT@19 TT8B KQV  \b j.p.w.~// 0        ELF4 4 (44PPPP.H./lib/ld-linux.so.1%) !&" % $#  '( (>8H(" X#)h65.>p/!Dx/XP/X\x#gnvd~(0d"P. "FP.! ",000"(` 88p.HX>(hl1x":Q?p/FTMh/Th/`0libc.so.5stpcpystrcpyprintfstrerrorgetopt_long_DYNAMICerrno_IO_stdout__IO_stderr___overflowmallocreaddir_lxstat___brk_addr_xstatfflush__environchmod_init__libc_initenvironfprintf__fpu_controloptindumaskreallocopendir_finiatexit_GLOBAL_OFFSET_TABLE_exit__setfpucwclosedirvfprintffree_errno_etext_edata__bss_start_endx// (0,000p/$|...... . . . ........... .!.".#5t.%x.%|.h%.h%.h%.h%.h %.h(%.h0%.h8p%.h@`%.hHP%.hP@%.hX0%.h` %.hh%.hp%.hx%.h%.h%.h%.h%.h%.h%.hYЃPSQ̀-̀(0D$P.,0Prh`@KP=[̀Sl.=l.t Ѓ;u[ÐÐUWVS} E10p0`0P0@000ujhhhWURxr$  @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @    @ @ @ @ @ @ @ @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @  @ @ @ @ @  @ @ @ @ @ @ @ @  @  @ @   @ @ @ @ @ @ @  @ @     0   t9th/jj @0`0p0{P0e`0Uj E=0t\.Ph<j=0t ju 50000U900|h@jjjjPÃuh/uAhRjj .P7 jS00P& E00009EЋURU@WVSu1]SVjK } =p/tu@fEf%f=ua}u 1]SVj } =p/tt/=P0uVhkp/PjU REPfEȀf9tQ=`0tjPV PVtI=P0uVhkp/Pjl#=`0t=p0ujPVr =@0tfEf%f=@uEPU RV lje[^_]ÐUWVS]Ep/E@PS6 Eu=p/t"=P0uShkRjhRjj 0҉߈щM@EP SVED/] ;tZ0щM}9}s?EPVl ƃSEPjE PV U+}};uVEPEe[^_]ÐU WVS}]fu EPPEtEP%PWhnEP%PWhe[^_]ÐUS]t%0Phh/ )0PPhh/SUWVS}] uT.t&hx/0Ph"h/ EPVh/w tSJPh'h//9/wj h/> /h/utWe[^_]ÐUEU R@P ]ÐUWVSu f]WJFP%PFP؃8PFP؃PVWe[^_]ÐUE%=`ub]Ð= u c]=@u d]=u -]=u p]=u l]=t ?]øs]ÐUU fEtr-} BwB-@tBx]B-]ÐUE fUtxxt @S @stxxt@S@stx xt@ T]Ð@ t]ÐUWVSuV^ǃ|Uj Eu MA=AfyfAEjQ%EPCEN1EF+EƉUC PVDpuEPlƒuE!EPOEP_1e[^_]ÐUWU0Ѓ~Ѐ8/uH9}]ÐUS1ۃ}u jÃuh,jX.P؋]]ÐUS]SuS]]ÐUSE] uSSPuS\]]ÐS`.=`.t Ѓ;u[ÐÐR cffv00versionhelpverbosequietsilentchangesrecursiveRcfvrwxXstugoa,+-=invalid mode%s too few argumentsvirtual memory exhausted%smode of %s changed to %04o (%s) mode of %s retained as %04o (%s) Try `%s --help' for more information. Usage: %s [OPTION]... MODE[,MODE]... FILE... or: %s [OPTION]... OCTAL_MODE FILE... -c, --changes like verbose but report only when a change is made -f, --silent, --quiet suppress most error messages -v, --verbose output a diagnostic for every file processed -R, --recursive change files and directories recursively --help display this help and exit --version output version information and exit Each MODE is one or more of the letters ugoa, one of the symbols +-= and one or more of the letters rwxXstugo. %s: : %smemory exhaustedGNU fileutils 3.12=..>N^n~.>N^n~  `( e p.P 0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#@) ((1e9   0B PPKQV\``bhhjP.Pp`.`wh.h~p.ph.p/p(p$      ELF 44 (44*0*/lib/ld-linux.so.1%. &+ ' $)"( %!* ,#- >(" #)(65*>8GP+!MH_X+Xk+XwX#hxd,"* "F*! " ,,W  *  &"!( 8(<*>8 CH JLX >Wh y^x lg "p QuP+|H+H+,libc.so.5stpcpystrcpyprintfstrerrorgetopt_long_DYNAMICgetgrgiderrno__strtol_internal_IO_stdout__IO_stderr___overflowmallocreaddir_lxstat___brk_addrfflush__environchown_init__libc_initenvironfprintf__fpu_controloptindreallocstrdupopendirgetpwnam_finisprintfatexit_GLOBAL_OFFSET_TABLE_exitgetgrnam__setfpucwstrchrclosedirvfprintffree_errno_etext_edata__bss_start_endX+ + , ,,P+)H*L*P*T*X*\*`* d* h* l*p*t*x*|******** *"*#*$*%*&*'*( 5@*%D*%H*h%L*h%P*h%T*h%X*h %\*h(%`*h0%d*h8p%h*h@`%l*hHP%p*hP@%t*hX0%x*h` %|*hh%*hp%*hx%*h%*h%*h%*h%*h%*h%*h%*hp%*h`%*hP%*h@%*h0YЃPSQ̀-̀,D$* ,Pbh KP[̀S8*=8*t Ѓ;u[ÐÐUWVS}] fEfE1,P,@,0, ,jhh|SWict0tփRtcft;vtFT ,밐@,P,떐0,뀐@,mj]=,t(*Phj=,t jG9,|hjjjhp,h`,EPEP,PtP,Phjj=`,u5`,)PEPEP,P ƃ,,9|VULWVS}fU fUfUfUE]SWj } =P+tt+=0,uWhP+Pjfufufuf]fuf]f9uuf9]tV=@,t jWPPW tJ=0,uWhP+PjE"=@,t=P,u jW= ,t%fEf%f=@uEPEPEPW EEe[^_]ÐUWVS]EfU fUfUfUEP+@PSEu=P+t#=0,uShPjhjj 0щMBURSVUD/] ;t\0Ћ}9}s?URVƃSEPtEPEPV E+EÀ;uVUREe[^_]ÐUE} tPhPh p,tP`,Ph]Ð`,Ph]ÐUS]t%,Phh+h ),PPhhp}SUWVS}] u*t&hX+,Phdh+EPVh+ tSPhih++9+wj h+. +h+UtWe[^_]ÐU WVSEPEE PEuEPuEPÃtz{ .uS t.u{ t։+EE0ҍ{ U)9U s+E 9U rE PEPƒt>+EƉUC PVpuEP,ƒuE!EPEP1e[^_]ÐUWU0Ѓ~Ѐ8/uH9}]ÐUS1ۃ}u jÃuhnj *P؋]]ÐUS]SKuS]]ÐUSE] uSSPquS\]]ÐUU:t< v 1]ÐB:u]ÐU$WVS]EUU10Ѓ$)ĉSWj:WfÃuj.WUÃtE?t}Et {tSU}u}*&URǃunURuE1t }utEjj jURyU ffGU f}yfG UfG P(u9G Ph]S 0Ѓ$)ĉS#0Ѓ$)ĉRV}}URuGURuE8jj jURyf@Uf}0}Ѓ$)ĉURV}ua}tURUu $*Ut9}u3VUu!UtP(U$*UEe[^_]ÐS,*=,*t Ѓ;u[ÐÐkrRjccf]fUvP,H,versionhelpverbosequietsilentchangesrecursiveRcfv%s too few arguments%s: %s%svirtual memory exhaustedowner of %s changed to owner of %s retained as %s.%s Try `%s --help' for more information. Usage: %s [OPTION]... OWNER[.[GROUP]] FILE... or: %s [OPTION]... .[GROUP] FILE... -c, --changes be verbose whenever change occurs -f, --silent, --quiet suppress most error messages -v, --verbose explain what is being done -R, --recursive change files and directories recursively --help display this help and exit --version output version information and exit Owner is unchanged if missing. Group is unchanged if missing, but changed to login group if implied by a period. A colon may replace the period. %s: : %smemory exhaustedvirtual memory exhaustedcan not omit both user and groupinvalid usercannot get the login group of a numeric UID%uinvalid groupGNU fileutils 3.12*.>N^n~  . > N ^ n ~     <  <*0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#T) <<19 0B KQV   \bNj*p,*,w4*4~<*<|*P+PHP     ELF4I4 (44jEjEpEpU}FV/lib/ld-linux.so.1CK@#H.2!";4:C0J7%B1 </?3&IF>9G8A=ED  $ )+ '*5-,6( H >X h " x ("' 8- d5 #> "F 6RV[We olW!r "zWXWX " # "( 8X8 H d ("8yHl"X"(h".x"7Q<WCD9JtWQtW]Xlibc.so.5stpcpystrcpygetgidprintfutime_xmknodstrerrorgeteuidgetopt_long_DYNAMIC__ctype_bgetenverrnogetegid_IO_stdout__IO_stderr_readlink__overflowgetuidmallocoptargreaddir_lxstat___brk_addr_xstatfflushftruncatelseek__environchownchmod_init__libc_initrenamestrrchrbasenamewriteenvironfprintf_IO_stdin_mkfifo__fpu_controloptindumaskreadstrncmpstrncpyunlinkreallocsymlinkopendir__uflowgetgroups_finisprintfatexitaccess_GLOBAL_OFFSET_TABLE__fxstatlinkexit__setfpucwopenstrchrclosedirmkdirclosevfprintffree_errno_etext_edata__bss_start_endW WW8XV?V@VAVBVCVDVE,5V% V%Vh%Vh%Vh%Vh% Vh %$Vh(%(Vh0%,Vh8p%0Vh@`%4VhHP%8VhP@%=Ut=Uthj;jtS@U=Uu X=xUt X) X*jFjd WUR UUPUWVSDžxDž0E9X|h;jyEH9X|h;j^UE T4]S4Pj } =Wt߅tC Wt(4Rh;Qj$fDžx;]S4Pj } =Wt߅u}u󥃽xlfEf%f=@ZDž(XE ,R6=U40щ,щRpƋ,Ph;4RVQQxP|R1Ƀ=Ut;Qh40щ QV $‰(,RÉ޿;1t FO)ȃu4Rƃk40щщR^Sh;4PVQQ (uDž0mjjxRV,P( 0+=Ut1|R40щ QVy 0 V@XEH9X0E+X~=Uth;j XE $0ɋ4щ 4| /8S$PjY } =Wt߅f@f%f=@$0щʃ)ԉ㋅$PSS!SƋ40щщ T)ԉVh;4PSQQ4jjxRS$P2h <j[^_]ÐUWVSu }f]DždDž`EPURXЃtURh;%=Utft f9]EPEPV)h =XUȉpl%=@u'=UuURhJ<jEPVXЃt%WwVh;tE9Eu8fEf9Eu.=UVURha<jj^9l%=@t3fEf%f=@uVh<j=Ut E9El%=u=|Uuv=UtmVjEPK t4fE%PVXPh<hW(VXPh<hWR=UfEf%f=@VÃuh<jj> 0Ѓ$)ĉdSdRSdRVWtVh =Džd=|UfEf%f=@uEjEP thhVptVh;IDž`9Vt#WtVh==Ut$l%=@tVURh; =xUuEf}v>ht5VhRmVh;WPl%=@UREPtURh>=U$EĉD$fEfD$ufEf%f=@t_fX#p PVtVhc=WPnV =UtVURh; SEPWVUR9=UtwU:/t5jh=V uj/FPtj/Vu*VUR(Vh;WPVh==Ut'VUReVh=WPl=t=tUt0=@t)=t"VURhHl%=u>fX#pPVVh=WP=`t= t=uKfpf#XfEf~~PPVjVh=WP~=uihWUR: }URh>WPE8VWjVh1>WPURhR>jjF=UEtE艅xtPV,t Vh;%EPfXfuE%PV t-Wu f=XuVh;=UutS=tUul%=t=@u1fX#pPVtGVh;r`t'EPVdtVh;@1Adt'VdRBtVhh>WPj T[^_]ÐULWVSU] 0щȃ$)ĉeREPe]]EP> É0щȃ$ )ĉSV1S[EEPVXЉƒ];/u C;/tj/SÃ$j tƉ+EFEFE0EPEPXЉƒ tBEEPEPƒu|}t3EPEPEP fEf%f=@urE/C;/FC;/t9fEf%f=@tRV3EPh~>WPEPh>jj> E1e[^_]ÐUHWVSU] 0Ѓ$)ĉRWy4;]C8EPVXЃtV=Ut`EEEEEPWYufEPEPWR t#Wu f=XuWh;>=Uu;tBfEf#X%PWt$Wh;WPj C8/[1e[^_]ÐUWVSEWE@PEP6 Eu=Wt"EPh;Rj h<jjr u>0щM} щEPg Ë}0щEPK Vh;EPWRR{Vh;E PSkR`RUEPEPEPSW U,Wqu>:EPYUډЍe[^_]U\WVSEEEEjMQE}&MQh;WPj0 7hhAM QuE }M Qh>]SMQj gEEtEfEf%f=uGSMQj tM0fEf%f=uE 9EvEE$)ĉMQWMQƃ }WtߋMQh;u1ۃ}tO>_?u tS{u Bt>9vjVMQ |lE1ۅbVWMQ{ |EED}tKjh>MQJ |MQMQ.} M Qh;WPjYEMQ} M Qh;WPj)EMQ}MQh;WPjEEe[^_]ÐUVSu] SVjc } =Wte[^]ÐUVSu] SVj# } =Wte[^]ÐU@VS]uVSj } =Wt|#hXEPEP1$Sh>WPje[^]ÐUEU PEPR]ÐUWVS]u PljPGw=Xe[^_]ÐUX@ P~ H]ÐUWVSfU fU=XG9G jWNjӋW։PGPwGPWfljw=XW U^w}~%^CPPPW+MUREPURW e[^_]UWVS]u fM13TUt!90uf9Hu@2@ uC C}C 0fH}xP 1e[^_]ÐUS]E t#PXPh>WuWP*tXPh>hW XPPh?wh\?mSUS]U t(K9Juff9Buu1]]ÐUWVS=UtvhDURPƃu1zURÃuV1QSVYVS=UuuUPURGPURe[^_]ÐUWVSE PVE10}ЍXEPƒt6 0щH9vSREPƒ 9~‰뾐EP…u1e[^_]ÐUWVS]u 0ЃP3ǃtVShDW1e[^_]ÐUWVSE1ۋuV} WPuQ>5WuDFt=M MDFtҍ\A‹}DGu9~uyt1ۉ؍e[^_]ÐUWVSu0҉щK} щPRǃt!VWrE P]Sc 1e[^_]ÐUS]j/SڅtPЋ]]ÐUWVSuj/VuD8/uH9w)xGPÃtWVS1e[^_]ÐUWVS}] uUt&hW~XPhDhWEPVhWg tSPhDhWW9Wwj hW WhWtWe[^_]ÐUWVSu ]1t.SVURK } =Wt)֐e[^_]ÐUS]t;uIhUS|U%PShEj]]ÐU WVSEP6EE PEuEPuEPÃtz{ .uS t.u{ t։+EE0ҍ{ U)9U s+E 9U rE PEPoƒt>+EƉUC PV4puEPƒuE!EPEP/1e[^_]ÐUWU0Ѓ~Ѐ8/uH9}]ÐUS1ۃ}u jeÃuh%EjUP؋]]ÐUS]S+uS]]ÐUSE] uSSP!uS\]]ÐUW}W0PtP}]ÐUShWDX9HXwh@XDX1ۃytYuA: t9DX9HXwh@XDXu‰؋]]ÐUWVSu}] =Uu6UfXfXBfXgfXt5fXf9Xu&fXf9XuSW(f=Xu tqFIukfF f9XuF9fFf9Xt%PtFF!9tW 1e[^_]ÐU@WVSu} =Uu6UfXfX+fXPfXfXf9Xu#fXf9XuWV@]SVj{ } =WtuVWEP4e[^_]ÐUWVS] EE0ҋ}щJ1;t[REPPU Uu3;0щH9t7}uuEF;u}uEe[^_]ÐUWVS}u ]XPh6EhW uh;EhCEhWVWhMEhWe[^_]ÐUS]CP8S2]]ÐUWVS11ې@PVVSǃ9t|jZ8p V1e[^_]ÐUWVSf}u1<$11ҋ9}pf9 %s ..when preserving paths, last argument must be a directorywhen copying multiple files, last argument must be a directory%s: omitting directory`%s' and `%s' are the same file%s: cannot overwrite directory with non-directory%s: overwrite `%s', overriding mode %04o? %s: overwrite `%s'? virtual memory exhaustedcannot backup `%s'cannot remove old link to `%s'%s: cannot copy cyclic symbolic linkcannot create directory `%s'./%s: can only make relative symbolic links in current directorycannot create link `%s'cannot create fifo `%s'cannot create special file `%s'cannot read symbolic link `%s'cannot create symbolic link `%s'%s: unknown file typecannot un-backup `%s'cannot make directory `%s'`%s' exists but is not a directorycannot create regular file `%s'%s%s: %s Try `%s --help' for more information. Usage: %s [OPTION]... SOURCE DEST or: %s [OPTION]... SOURCE... DIRECTORY -a, --archive same as -dpr -b, --backup make backup before removal -d, --no-dereference preserve links -f, --force remove existing destinations, never prompt -i, --interactive prompt before overwrite -l, --link link files instead of copying -p, --preserve preserve file attributes if possible -r copy recursively, non-directories as files -s, --symbolic-link make symbolic links instead of copying -u, --update copy only older or brand new files -v, --verbose explain what is being done -x, --one-file-system stay on this file system -P, --parents append source path to DIRECTORY -R, --recursive copy directories recursively -S, --suffix=SUFFIX override the usual backup suffix -V, --version-control=WORD override the usual version control --help display this help and exit --version output version information and exit The backup suffix is ~, unless set with SIMPLE_BACKUP_SUFFIX. The version control may be set with VERSION_CONTROL, values are: t, numbered make numbered backups nil, existing numbered if numbered backups exist, simple otherwise never, simple always make simple backups ~.~%s.~%d~.%s: : %snumberedtexistingnilsimpleneverversion control typememory exhausted%s: invalidambiguous %s `%s' GNU fileutils 3.12D EEDDDDWEVN ^ n ~           . > N ^ n ~         .>N^n~.>N^n~ 0  P9( b V < HGCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#@) ((1b9 < < HB   K0 0 Q8 8 `V)\P9P9bX9X9 jpUpEpUEwUE~VFVFWGmGhH     ELF0 4!4 (44.$DD//lib/ld-linux.so.1%, ) %!$' #& " ( *+ ("#"6.D/7o>/!D/XP@0X\#gn0u"|0d(". 8PHF.! X"00hx2"% ` 8%#.9>>I "R QW/^Te/l/xh1libc.so.5strcpyprintfstrerrorgetopt_long_DYNAMICgetenverrno_IO_stdout__IO_stderr___overflowmallocoptargstatfs___brk_addr_xstatfflush__environabort_init__libc_initenvironfprintf__fpu_controloptindstrstrsyncreallocsetmntentendmntentstrcmp_finiatexitgetmntent_GLOBAL_OFFSET_TABLE_exit__setfpucwvfprintffree_errno_etext_edata__bss_start_end/@0 0 000/'...... . . /// ///// /$/(/,/ 0/!4/#8/$N^n~    `4 } .t8GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#L) 441}9 tt8B KQV0 0 $\``bhhCj.p.w.~.pD/D/      ELF44 (44%%(( 00/lib/ld-linux.so.1CC9%@+)0.5(4<-&B! 3,7:/"A>8'?2;6=    #* 1$ ( 8 ("H 8X 6+04>h oEĺ!Kx ]ȺXi "o <v X " #  C"x  d| d "( "( 8 "H " X Fh  `v x 9 "(! ' "/X: l@ GػUܻ\ Tc "h &p x " I( 8  H 8X ph dx  W >  " l " Qĺ  libc.so.5strcpyprintfutimegetopt_long_DYNAMIC__ctype_bgetenverrno__strtol_internal_IO_stdout_fgetsmemcpy_IO_stderr_perror__overflowmallocisattyoptargreaddir_lxstat___brk_addr_xstatfflushlseek__environchownchmod_init__libc_initstrrchrbasenamecallocwriteenvironfprintf_IO_stdin_ctimestrcat__fpu_controloptindsignalreadstrncmpstrncpyunlinkmemsetopendirstrcmp_finiatexitstrcspn_GLOBAL_OFFSET_TABLE__fxstatexitfileno__setfpucwstrspnopenclosedirclosefree_errno_etext_edata__bss_start_endȺ  x|$ػ'ܻ(ĺ>|   Ĺȹ̹й Թ!ع#ܹ%&)*+,-./023 56789 :$;(<,=k5t%x%|h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%hp%hx%h%h%Ĺh%ȹh%̹h%йh%Թh%عhp%ܹh`%hP%h@%h0%h %h%h%h%h%h%h%h% h %h(%h0%h8p%h@`% hHP%$hP@%(hX0%,h` YЃPSQ̀-̀|D$(ػPR hP [̀Sl=lt Ѓ;u[ÐÐUh)hoqPh+h ]ÐUS<hhƔqPh̔h =<t Phؔh g ;u]]US,hhƔqPh̔h 0=,tPhؔh  ;u]]ÐUhhƔqPh̔h hܔhhh $hh hh h"h h(h ~]ÐUWVSE P/f‰q0H~t*uDh/E P]S2fy tE jj-% qth6j jjth6jjjth6jjh4qP tOjh7qP t6qp;tƿ?ulpjhEht0Hu jhhIE PEPkPσE?$``@0@P`p0phxjj jPWrlapQtE{jlp jk|||x|xwax0HuRh1lp jNqPhjh j?!Уj!|=|} p|=x} pxu+5ܻ=ht!=uqPhh  uu =pt~%xPqPhh jn =t=pu 8@zt;ܻ9U~5E Pܻܻ9UK=t=u~ jj[Pe[^_]ÐU=t=Ⱥ=ptPP,t[pot֕PtٕPqPhh qPh5h  j%LufPfutqffxqzqq=u =|u8hh,qPj t hR`Tqqtu\l=pt%P }PH=tPP]ÐhȺnPhcP8Ѓ =pt<=lqu3$q9t&P[ |v|u듐=t^=th_h ]Ð=pu.h pqP|u+)PX`h(h ]ÐUHWVS]޿du!lVlh,qSf4qff@uW=t.},qSHEPSn=huqPhf!ft)=uxhuqPhh \f 6qfvs=luj=tua=u0 fvsRHPhuqPhh `=@qtu=|t =tTq1҉q=lt?=u6=u-tqffxqzq;3hjhu u5qPhh xhu~ Y=ptP]|=t(PPPD=lthȺqVkS=pu==xut==u+=u"htqhuqPhh =xuu=xExu=tf0ҿuщH+uщH~ oRhuh h qPP8ЃuF=ptG=lqu>$q9t1P||u뤐P=luqPt[=u=lhtq==thh H=pth |uPpqh pqP|u+)Pa[ =u =luhtqhh  h(h =lu h,q`e[^_]ÐU@VSKtPRhVhtq>q uhtqP=1=u===huqPhhh SJSؿVt[u"Ct\=u=u$=uShuqPhh .=u 'xuhhtq1e[^_]ÐUWVS]=ttK=ltB9$qvjPE9$qw@jT9$qvjIPE9$qvjPffEf fElqEƿtƿ9$qvjOt,PhuqPhh i 8X9$qvEjOEU thuqPhUt4huqPh+h =tmEt9EPhuqPhlh =t.9$qvjINá9$qv jN á9$qv jM á9$qv jM Åt=|uq$q9sjyM$q9s  jYMU9$qvjMá9$qv jL Ã=tShuqPhh U9$qvjLá9$qv jYL Ã=tRShuqPhh 52$q9sjKKuЊU=xu=lt =t =~09$qvjKuwhtqVMƉ9$qv jYKCtturhN빐=ut Ut=jJt9$qvu=J6ƿuM=uDu.8XS$-Eƿ u8ƿu8zpƿu8P@=tt:=lt1=u(8`slq}o=u+huqPhh Y;=uhuqPh3h %=u e[^_]ÐUWVS}u =tH|L=t h_=hE8+=tPRhљ=uPRh hȺP+)PLh|utupq=lqu~jjWcpq tgpqjEPW tKME UE  ME UE  щ |uhqeP@=tRSıPh|uPpqPhpq u/|upq|У|uu5|upq|УhȺ|uPpq+)PJhtqhe[^_]ÐUSM] 1ҋC9Au ff9uBЋ]]ÐUDWVS0}ЍXUTU}u UD1uVRj- uVM QttUMTe[^_]ÐUWVS1E0}Ѝx=pt! h#HuD>uVUÃUuh2UHUxu~3CuVCZj/uVUËEUtCÃ;t*hHSURÃU9E}S;tC;uׅu MuBBu1j.uVƒuhJUGUzuJhRe[^_]ÐUSĺ]ShtqjS t$=ĺ$htq=А=pu:]Shtqt%htqShtqj }EPh,q/txhtqhuu2o=pt֕PhuqPhi!htqhuqPhh +=tffphtqqPhh = qtFhPt/hʚh h hjOpPUpDPtYu0yt+hh 4=ul`hhtqhtqo u1:qPhh htql]ÐUSU] C EC(EEPR5tUfCf%f=@tG=uqPhh R =u =u htq9]]ÐUS]=pt1qt(9C(t#C(=~htqhh  Shtq$fC%PhtqhtJ=uqPhh  =u =u htqzCPC PhtqhhuhutG=uqPhh  =u =u hu]]ÐUWVSEPSu.EPqPhh PƒZ ޿Htщ޿-t}0ҍrщ=WEPPt /SV]P =SEPqPh0h P[^_]ÐUS]=tS2ytPytPcSU=tqP!htqGje]ÐUVSEu 0fEfE5q(qy(qy(q(qƀy(q=(q@u==xut(qy(q=(q@u=(q?w5qy(q(qfqy(qUqy(q=(q@uN=(qfqy(q=(q@u#=(q?w5qy(q(qfqy(qUqy(q=(q@u<(qfqy(q=(q@u<jjH;VhEP EPPP(qfEy(q=(q@u6<(qƀy(q=(q@u<=xut>hu0=Ã(qy(q=(q@u;Cuԡ(q-(q?w/y(q(qfy(qOy(q=(q@u^;(qfy(q=(q@u3;(q?w5y(q(qfy(qUy(q=(q@u:(qfy(q=(q@u:(q?w3pqy(q(qfqqy(qSpqy(q=(q@u>:(qfqqy(q=(q@u:(q?w5rqy(q(qfsqy(qUrqy(q=(q@u9(qfsqy(q=(q@u9u91e[^]ÐUVSuE PVPà ttSV7pq؍e[^]ÐUWVS]u Cv hN;0hjhu|= =|=D u uOhhУtud=wW=w =t1ɐ1%Avߍe[^_]ÐUWV+)ЃuA uuv ƀf f9vܹuuv ƀf f9v=u"P PUNUutL9}t "R PNbP`PjFU +fPdPvjF)jPhPKjFP@1}}u09}uE] 9]e[^_]ÐU塐Ph@Ph4 h ̳f|uIpDI‰pȉ]ÐUWVSujEPGjE HP;jFP01ۃ9}# j̳DP C9|EHPh@uE HPh4fe[^_]ÐUWVSu `d8f8uhxhǡp  59w^9w<}t6jMQK $أjVMQ=9ue[^_]ÐUWVSEU 11qjjI=tc=uZ        ֡u@uhuhc=C;        Ѓ=t9u9    QSh:h dhL[9$qvj¡(q(q=(quKuhuf=uz1ۡ9$qvjD+C~ME UE  ME UE~=t}1ې9$qvjD+C~ME UE  ME UE  jhy9t h=95|ut h(=C9$q   сPK=ltC=uhuqPhݜh =uWKhuqPh h ޯ1e[^_]UWVSjDjURM] Du] 9]uM] 1M Dž|u Cv狍9sDž|u Kuꋍ9vM ㉝9s-L)|-9rӋT)} TDžDžMKt(u؋]Dž tM 9rDžDžDžىDž|DžDž9LI)Ӊ9s+㉝B9v\J+D9s/9v)9rһ㉝Ru)t |RBM]A|tb ֊щΉߋ+뉝x4ډ|9%* ֋M 9rcΉh9Uv#wΉ1+U]fSf||Ήߋ]fSf׃+㉝ 4ى|ˉ9rՋJ㉝t 1u㋝1)J#9uK9H1t t@p[^_]ÐUSEtXP@؃u1]]ÐUWVS M= (qMM M(MM M(MJ9$qv# E#jY% E9}wE#EM4rcNm)σ9sD9$qv Ej% E9r](#EV4wNm)σutȋDJt C;ue[^]ÐUS]j/StX؋]]ÐUS]j.Sٕt9u@H8.u_9u]]ÐUWVSuUEUR藔Eu1*0}P ËURSE] ;t9hmSyÃ;t!hmSÃ;tCE;uʃ}uUR1Ej@Pƃu hpU :2EM} h~o]}~3hmSՕÉCuM M}uEe[^_]ÐUEPhuqPhh WZ]ÐUUE =uPRhuqPhh =u ]ÐUqPhh  =ĺthuڒ$huhh 褓 褽]UqPhh 耓htq膒y]ÐUWVSMU uu 1v ( ME< ȉיпÉșÅ})V9Vwj-V -F,V9Vwj V Fؿ RQh̝V虒e[^_]ÐUSEP諑Ãu hp؋]]ÐUS] =Xu(Xh؝h /9]t ]]ÐU8WVS9$qvj‰%\`t:=uRhuqPhh 葑=u E؃~3jRhuqPh*h >4 $qME EEEEEEE=\tEhjhuB K}]5$q)19}B9|5$qE?w7huVMQ蜐EЃ uTE$qpq}t$q1u)Ӊ]̍ thjhu臐EEE̋MTЙ}̋M)ыEDEE EE  $qMA+MԉMhM9M~hEE̋MTЙ}̋M)ыEDEEԋM9 uE MHEܸMHEEEEȋM@ ‹MI ʋ]]!ӋEE}u5~ heS]]ME興y@Euu =\{]qM9|m~I=u$}~EPhyM QE|u t=lteRNM]N]uwN]Eq)}߁?~s@+U9~Ӆ~EySVPƌ ]}?~.=uMQhyE PM |u E޻q)EySVPh }E9E}fEMfMuEAMMME9E}v=u!}~MQhyE P9M |u1e[^_]ÐUWVS9$qv  j أG~9$qvjY~ h195|M`9$qvj<`F95}~ hԞa`1Ҿ9Y<`~;ӍS9$qvjUvUOF95}`e[^_]ÐUVS1ҋ5~ )`N ~ @y9F@)`HJuF95@}H=ywe[^]ÐUWVSEU q`P @HE`HE@9`}]P9$qv j أP``9@@ `)١PU!y~)}ސFx95`}JP9$qv  j9 أP``9| `)P!9w9Uu95tE(q(q=(qu)5`|u9t h$1e[^_]ÐUMf9~g)f 9$qvjM&Mu )ʉщ f ]ÐUSU)щR1؋]]ÐUfj]ÐUWVSfDUBv19UvM  fDEB9UwfE]DUܾ)։f|Uff;Bvf}t h+MM9UrBDUMfDUE)пfDUB9Us)ѸfDUBvMDM‹MtM9t}fWB9uu+E}E9uM } |TMDMЉE}9w.9f}Mf 32 bitstoo many leaves in Huffman treeinvalid compressed data--length errorBad table ]͏po,yo4#accddfhlLܐnאNѐqʐqrStTvV19Zb6rUKk:БbE`[VROLE`Oeztnooooh      @(@4 ,           #+3;CScscc !1Aa  0@` ?? 0w,aQ mjp5c飕d2yҗ+L |~-d jHqA}mQDžӃVlkdzbeO\lcc=  n;^iLA`rqgjm Zjz  ' }Dңhi]Wbgeq6lknv+ӉZzJgo߹ホCՎ`~ѡ8ROggW?K6H+ L J6`zA`Ugn1yiFafo%6hRw G "/&U;( Z+j\1е,[d&c윣ju m ?6grWJz+{8 Ғ |! ӆBhn[&wowGZpj;f\ eibkaElx TN³9a&g`MGiIwn>JjѮZf @;7SŞϲG0򽽊º0S$6к)WTg#.zfJah]+o*7 Z-0. > N ^ n ~           . > N ^ n ~           . > N ^ n ~           8 % ph ` HGCC: (GNU) 2.6.4 snapshot 950518GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.6.4 snapshot 950518.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment# ) 0188%9 ` ` HB   hK  Q  V\bmj((8 p``whh~pp004@     ELF44 (44   /lib/ld-linux.so.1"    !  ("#6'0!6XBXN#Y`@gDs("z 8F! H"HLXh20  x8>"Q $  ,Tlibc.so.5printfstrerrorgetopt_long_DYNAMICerrno_IO_stdout__IO_stderr___overflowmallocopterr___brk_addrfflush__environ_init__libc_initenvironfprintf__fpu_controloptindreallocgetcwd_finiatexit_GLOBAL_OFFSET_TABLE_exit__setfpucwvfprintffree_errno_etext_edata__bss_start_end@ D HL  ;5%%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%hpYЃPSQ̀-̀DD$HPh0 PPM[̀S=t Ѓ;u[ÐÐUS]t%PPh8 h(PPh_ hs  SUS]U PhPh RSth jjB Åuh Pj" Sh j5UWVS}] ut&hPPh hEPVh tS*Ph hz9wj h h%tWxe[^_]ÐUWVSE }@5L@}uHjh h] Pjt,htvt j׃URURh_ Oj@5Le[^_]ÐUVShSVu6="u) SVΐt V|1e[^]ÐUS1ۃ}u jÃuhh jP؋]]ÐUS]S{uS]]ÐUSE] uSSPquS\]]ÐS=t Ѓ;u[ÐÐTry `%s --help' for more information. Usage: %s [OPTION] --help display this help and exit --version output version information and exit pwdignoring non-option argumentscannot get current directory%s %s: : %sX hP vversionhelp+%s - %s memory exhaustedGNU sh-utils 1.12y .>N^n~  0  1 xH8GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#)  119 8B HHxKQVT\0 0 b8 8 Sj p w ~ H        ELF 4|O4 (44MQhMhM/lib/ld-linux.so.1%2#" !,/& (*-)1+'.  %0 $ x"("#(hM1M;M!AS"Y<`NXl"sz  X( kXNJ `8 XH F\NJ! X "`Nh &x   &" " I! "( C2 9 @ NA T &"\ 8cLy( 8 H >X yh "MAMMQlibc.so.5strcpyioctlprintfstrerror_DYNAMIC__ctype_berrno__strtol_internalfgetsmemcpy_IO_stderr_perrormallocgethostbyaddrsocket__strtoul_internal___brk_addr__environ_initgetnetbyaddr__libc_inith_errnoenvironfprintf__fpu_controlstrncmpstrncpysscanffopenmemsetfcloseinet_ntoaherrorstrcmpgethostbyname_finisprintfatexit_GLOBAL_OFFSET_TABLE_getnetbynameexit__setfpucwstrchrclose_errno_etext_edata__bss_start_endMN XN`NM-LLLLLL M M M MMMMM M$M(M,M0M4M8M-u@Fu J3Gu JMu}u'jJPMjjPPV4 u#VJP jP,uhG, ,BJ;:P$0 p3 Gum$R Rr RhJPkS@ RhJPB d3 GuM$R R RhJP@{3G uM$R R RhJPs@3G uM$R R2 RhJP+@ 3%GuM$R R RhJPf@Y3-G uM$R Rr RhJPkSf@36G uM$R R RhJP f@3@G uM$R R RhJPf@93KG uM$R RR RhJPK3f@3TG uM$R R RhJPf@y3^GuM$R R RhJPs@A3aGuM$R R2 RhJP+@3fGIhEhNhBEhNhbEhNhEhNx hEhNfhEhNWhEhNHhFhN9 hAFhN'hwFhNhFhN hFhN jjj jP<`$RhJP AMPPhmGhNDž(3GIhEhNEhBEhN6hbEhN'hEhN hEhNhEhNhEhNhFhN hAFhNhwFhNhFhNhFhN jpjj jP`$Rh"JP MPPhGhN6Dž(3G uM$R R RhJP @3G IPREPR,BЃ7 E`EdEhEl$RhJP[ }(MPiPhGhN Dž($R R RhJP}[@ RhJP }+MPPhEhNx1 ( 3GhEhN%hBEhNhbEhNhEhN hEhNhEhNhEhNhFhN hAFhNhwFhNhFhNhFhNz jPPR{EPR,BЃ E`EdEhEl$RhJP/  MP9PhGhNDž(W 3GhEhNhBEhNvhbEhNghEhNX hEhNFhEhN7hEhN(hFhN hAFhNhwFhNhFhNhFhN jPREPR,BЃkE`EdEhEl$RhJP  MPPhGhN9Dž( 3G i;hEhNhBEhNhbEhNhEhN hEhNhEhNhEhNhFhNz hAFhNhhwFhNYhFhNJhFhN; j$RhpJPA jjjP`$RhqJP ] MPPhGhNDž(0 3Hi;hEhNfhBEhNWhbEhNHhEhN9 hEhN'hEhNhEhN hFhN hAFhNhwFhNhFhNhFhN j$RhpJP |jjjPfh$RhqJP MPPhGhN1Dž(3Hy;hEhNhBEhNhbEhNhEhN hEhNhEhNhEhNhFhNz hAFhNhhwFhNYhFhNJhFhN; j$RhpJPA }Dž(jj jPJj$RhqJP OMPPhGhNDž("3H uM$R R RhJP{c@ 3(H PREPR,BЃE`EdEhEl$RhJP }(MPPhGhNyDž($R Ry RhJPrZ@34HhEhNhBEhNhbEhNhEhN hEhNhEhNhEhNhFhN hAFhNwhwFhNhhFhNYhFhNJ j Pj ƃhEhNhBEhNhbEhNhEhN hEhNhEhNhEhNhFhN hAFhNhwFhNhFhNzhFhNk jAPRfEPRFЃ}'R,BDž(E`EdEhEl$Rh$JP RMPPh7HhNDž(%PREPR,BЃR,BЃhEhN4hBEhN%hbEhNhEhN hEhNhEhNhEhNhFhN hAFhNhwFhNhFhNhFhN j_E`EdEhEl$RhJPm }(MP{PhJHhNDž($R R RhJP}`@A RhJP }+MPPhEhN1 (;JPi     ([^_]ÐUJ[HJbH KnH@K}HfJ]ÐUVSuf=Ju1J[HJbH KnH@K}HfJJ=Jt'VP)u ;u1e[^]ÐUMf=Ju1J[HJbH KnH@K}HfJJ=Jt9Ht :u1]ÐUWVSudN1PFhHSà Gv0dNƀbNdNe[^_]ÐUWVSUff=tfu9HNHNfHfNHNNLrdN1PFhHSà Gv0dNƀbNdNe[^_]UE]ÐUEfftfu;HNHNfHfNHNN]Ð]ÐUWVS] ffCEHuCuVƒtB ĉCPV@PuVǃt.GKG PRQs PV1\NMe[^_]ÐUWVSuM f9tMaM AEuSMu(f}}HHF#fHfjjjjhHV1"Kt9C[uEĉ11ۋMuFt%jjEPà t0jRǃt PVu8u4UP%P%PRhHV"jËM ACACA C KC0PCVPEK1CPV.1e[^_]ÐUEPl]UEPJ]ÐUUM ff=tfu9H$OH(OfHf,OH.O$O]ÐQRh$Ou$O]Ð1]ÐUUE PR]ÐUUB PB PB PBPBPBPBPhHhOO]ÐUUf:uDB PB PB PB PB PBPBPhHhODO]ÐHOHOfHfOHOO]ÐUKHKIKIL'I0L}FʡMDHt<w<w@FڡMDXtC><wC&<vM9C ȋ}G}E>:HFB1e[^_]ÐUUBPBPBPBPBPPhJhPP]ÐUUff=tfu<2JP6JPf:JfP}FʡMDHt<w<w@FڡMDXtC><wC&<vM9C ȋ}G}E>:HFB1e[^_]ÐUEPhpJh$Q$Q]ÐUUff=tfulJ?JA@A@hM~  . > N ^ n ~           . > N ^ n  ` AlL  L`8(GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#d) LL 1ll9 88(B ``K``QhhV  T7\AAbAAjJJDpLLwLL~LLhMhMMMMN     ELF@ 4 4 (44D HH/lib/ld-linux.so.1%,  &)!#%'$+"(   * "("#(H1;!AS"Y<`Xl"s(X8  8XHF< ! X"h@ x&""I"  &"(8/ER W >b( "hov}D libc.so.5strcpyioctlprintfstrerror_DYNAMIC__ctype_berrno__strtol_internalfgetsmemcpy_IO_stderr_perrorgethostbyaddrsocket___brk_addr__environ_initgetnetbyaddr__libc_inith_errnoenvironfprintfstrcat__fpu_controlsscanffopenmemsetfcloseherrorgethostbyname_finisprintfatexit_GLOBAL_OFFSET_TABLE_getnetbynameexit__setfpucwclose_errno_etext_edata__bss_start_end 8 @ '      $(,0 4!8#<$@%D&5%%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@% hX0%h` %hh%hp%hx% h%$h%(h%,h%0h%4h%8h%<hp%@h`%DhPYЃPSQ̀-̀8 D$@ PhPP][̀S=t Ѓ;u[ÐÐUVSE Mff@p1ې< t@<@~ PPA<@~ NACvȍe[^]ÐUWVS] ]ffCEu CuV?ƒtB ĉCPVPuVǃt.GMG PRQ PV1< e[^_]ÐUWVS}E Uf8ta@u)f}GffE11uGt&jjEPQà t1jPPƃt PWu5u1UP%P%PRhW1e[^_]ÐUEP\]U<WVShBh8hh uh bq0 WhW  PPWPPPPpPWPh0W0 zfDžfDž1ې< tD<@~P PA<@~ NACv̀PPWRƅ pfDžfDž1ۊ< tD<@~P PA<@~ NACvPPpPƅ 0fDžfDž1ې< tD<@~P PA<@~ NACvjPW9ƅƅ thOW6thQWthSWthUWthWW thYWPPPPWWpPWh[$W[^_]ÐUWVS]j{jP2 048jxjP Džu^hhhhh hhEhz hhhjпuDž,ֿu DžuZhhhhh hhEh hhj]P0WjPjEPEPW}W3tt 1fEtfE;03 tDPu]hhhhh hhEh hhj0jj jQf@fE3t}tZhh#hhh hhEh hhjPV PV[ Eԋ$E؋(E܋,EG3t3u]hhFhh7h h(hEh hhjEtZhhhhh hhEh hhjMPVEPV.HM$3uMM@jj jPE=hh 3uMM䀋jj jPPE=yhh3t3uj;hhWhhHh h9hEh* hhj{tZhhhhh hhEh hhj]}tZhhhhh huhEhf hhTjE;3M؅ȆĉEt!h h Bt)0Ph<hЅEt'hUhEPh P }uPPhhbUV/Vhh1[^_]ÐUSUtztWhhhhh hhEh hhj:P]SpPSy}SjPj Sp$t(x,|0Sh PW}(PePhh1]ÐUWVS] :-N^n~  .   4  (GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#L) 4419 (B KQV@ @ T\bjpw~tHHl6      ELF 4L4 (44WGWGXGXWHd*K[/lib/ld-linux.so.1%:& 2"347+0 !/.5$%1,-6  #'*8( 9 ) x " ("[![+ =[XI O\X[ "b "g #r "y  X\ d( "XW ` 8 FH 9XW! X "h lx \\ " &    &" W   "& I- 52( :8 AH J? PX hVh &"^x 8e\Z{ d  > " y " l " Q?[[libc.so.5ioctlprintf_DYNAMIC__ctype_b__strtol_internal_IO_stdout_qsort_IO_stderr_perrorputs__overflowgetuidmallocreaddir___brk_addr_xstatlseek__environ_init__libc_initcallocenvironfprintfctimestrcat__fpu_controlreadstrncmpstrncpyreallocsscanfstrdupindexfopenmemsettimeopendirstrcmpgetpwuid_finifgetcsprintfatexit_GLOBAL_OFFSET_TABLE__fxstatexit__setfpucwopenstrchrfputsclosedirclosefree_etext_edata__bss_start_end[[\X\\\hZlZpZtZxZ |Z Z Z Z ZZZZZZZZZZZZZZ Z!Z"Z#Z$Z%Z&Z'Z)Z*Z+Z-Z.Z/Z0Z1[2[3[4 [5{55`Z%dZ%hZh%lZh%pZh%tZh%xZh %|Zh(%Zh0%Zh8p%Zh@`%ZhHP%ZhP@%ZhX0%Zh` %Zhh%Zhp%Zhx%Zh%Zh%Zh%Zh%Zh%Zh%Zh%Zhp%Zh`%ZhP%Zh@%Zh0%Zh %Zh%Zh%Zh%Zh%Zh%Zh%Zh%Zh %Zh(%[h0%[h8p%[h@`% [hHPYЃPSQ̀-̀X\D$XW\\PBh?KP [̀SXZ=XZt Ѓ;u[ÐÐ(UWVSfAfD$(AD$*D$+j jP D$$D$ D$D$D$D$|$<l$(L$~K$p                                                   0 p  P `Pp@?-!jhA^S u0FP.uD$jhAS u7-rjWh Ah\A WjhDAWjhGA~WjhJA^W>W.WjhPAWjhNAU WWWW{=WvW[WKD$$AD$ -WWWW=W WW+umD$ӡ[DPtoL$SWP0Wjj jV4ƒWL$AL$[DBtGFDBu>,uGF>uWL$D$>t|$tD$GF>m|$<F=Wu)tWD$L$$Qn=Wt|$u D$(Pj*L$ QSL|$t1[^_](ÐhRAh\j W|$|WPD$PhTj tfT$ ft |Wtt>2t)|W4!%|W|W0ҡW<\WщL$|W)ȉƒ_ ÐWVS\$|$1=Wt:;(uj)SEtOCIj S0t:5;tِ[DP@u AF9u9|h[S)[^_ÐUWVS\$,|$0h[hAShA\$S>hASŃOUË5[95[w.ӡ[ DP@tQh[d"[ӡ[ DP@tوO[^_]ÐXUWVS1*Wt6P`Ãu&WPhAh\ijWufSVWPW%PWP%PuW  WPD$0'=W%PRD$L$AuhBh\jL$PqD$1tL$Fu=Wu%=Wth3jL$APL$Q|$puW\WP1L$9ql$L$WSUWСWvS0ЍDP =WtSUVUh BL$tQ؀;u P=WtP<Ph#BFL$9qB=Wt8L$Q[^_]XÐVS\$ t$=WuW@h (W9W~!WP(PC(W (4<T@TS-‹W (T :u TDD CW[^ÐT$D$R+PÐUWVSl$|$(TD Ph BD1ۃ9}VV|WH9}HG9u h$B*L$< th)Bh.BC9||W)P(D4D2P=WtP(D0P h#B1ۃ4D0H9L$QGP(D0P C(9\0[^_]ÐUWVS=Wth@4j$WP(P=1W9 D$(|$L:~E9L:t?19}9T$ˋ W1Ґ|$9\uƃ$@9|(|$D: Du#j@¡(TD,9Du"DPDPn¡(T (\T,DD$$EW919-W~+1ې(| uD$PjUs $E9-W[^_]ÐVSt$ \$SP3P<Ph3BVn[^à VSt$\$=Wt*Ph>BD$P< .PPhCBD$P 3PSPD$PP P+hP+dP@P<P8PPhJBV4[^ ÐVSt$ \$8PSPPP3PHPDP<P@Ph{BV8([^ÐUWVSt$|$ =Wt8PhBPhBVƃ 0D$ +lйdá\)؉D$TX=Wt\`…t Й1ہv L$D$ , D$1t$ōL$L$Q'¡\+D$D$|$Q~ RWR3L$D$PL$ D$ P L$$D$$P RU1RS<|$8L$8QhBV4[^_]VSt$ \$3PSP|PxPtPpP<P8PhBV8([^ÐWVS\$t$V,R3D$L$Q<Ph3BSVS0҉߈҉T$,D$,\ L$ Q)ЉD$l$ L$Q R=WtRhBSuËuhCSWà Ph CS7à t$ D$ L$  , L$ 1ƹ RVhCS[^_ÐWVS|$t$PWPPL$D$P+D$PRPPWtPtP3P<PhCW18[^_Ð VSt$,\$03PSPjPD$Po P0PPD$,PK PPPP<PPhKCV,[^ ÐS\$D$ uhmCS`؃[Ðu hsC搐+D$}1='v!d1PhyCS$ d1RPh~CS[ÐUWVS\$L$TXdǃ=Wt\`<1WQhCS[^_]ÐLVSjjhCƃ u hCh\Ijj$8SVXVjj jSS0jjhD]ƃ uhDIj"h+\$ SVVbh,hDS"jk\ [^LÐWST$ \$0Ѝ| O? uHu P<PhDRP|PxPtPpPPPPPPPPPlPPPhPdP`P\PXPTPPPPPPPPLPHPDP@P2PhDGPĜLt%L[_ÐǃL[_ÐL$D$RRRRRRPhWEQU$ÐT$~D$8u @9|ÐWVST$|$D$PRhlEh`\jjh`\ƃu[^_ÐD$HPWVà t;V؃[^_Ð[^_Ð\UWVSL$pL$(L$tL$$L$xL$ L$|L$$L$f$fL$1hxED$|$uh~E%jjj hPx ÃL$Q>‰\B < wڍB PhEh\oD$8 Ph\j |$(u fL$f9L$8uL$88hhES\ PYhhEh]\ P: NSh]CVS$t$9Lu%|$t2|#|O[-]u[-]U..} \ --sort:[-]key1,[-]key2,... --help gives you this message + /proc/%d/environrthe name `%s' is not a tty No processes available %s \_ | %5d %3s %s%-9x%-9.9s%3x %5d %5d %5d %3d %2d %4d %4d %-10.10s %s %3s %5d %5d %5d %5d %3s %5d %s %5d %5d %-8s %5d %2u.%u %2d.%d %4d %4d %2s %s%.6s %5d %5d %08x %08x %08x %08x %s %3s %6d %4d %4d %4d xx %5d %2d.%d %5d %3s %6d %6d %4d %4d %4d %4d %4d %4d %4d %3d %2d %5d %8x %8x %8x %s %s %s %3s xx%5lu%2lu.%02lu%3d:%02d /proc/uptimeError: /proc must be mounted Make sure that a directory /proc exists, then include the following line in your /etc/fstab file: /proc /proc proc defaults Then the next time you boot, ps should work. In the meantime, do: mount /proc /proc -t proc /proc/meminfops.c:/proc/meminfo%*s %*s %*s %*s %*s %*s %u%d %40c%c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u%d %d %d %d %d %d %d/proc/%s/%s/procopendir /proc/proc/%scmdlinestatstatm /proc/%uxmalloc: malloc(%d) failedxrealloc: realloc(%d) failed/etc/psdatabasePSDATA.96invalid psdatabase sys_ StuvPQRWpqrs0123456789abcdef ? conv%02ds%02ddevname.c: tty_to_dev() called with null argument %dco/dev/#%d%-.8sxcalloc: allocation error, size = %d %s-O%c , --sort:%-15.15s%sps: no such sort key -- %c. Possibilities are: ps: no such sort key -- %s. Possibilities are: @@k@.@??`??@@P $Id: devname.c,v 1.8 1994/07/27 06:35:20 cb Exp $&F7F Ccmdline4uuser4ccmd4Uuid5ppid`5Pppid5gpgrp6osessionP6ttty6Gtpgid6kutime@7Kstime7jcutime7Jcstime08ypriority8Tstart_time8fflags 9mmin_fltp9ncmin_flt9Mmaj_flt:Ncmaj_flt`:vvsize:rrss;ssizeP;Rresident;Sshare;terminator[~           . > N ^ n ~           . > N ^ n ~           `  ? l  \ZP (GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#) ll1  9 (B   PK` ` Qh h V  2\??b???jXWXGpLZLJwTZTJ~\Z\J[K[K&KBL     ELF0 44 (44d/lib/ld-linux.so.1%+$ %( "!&# '  ) * x("%7XC"IXU"\"ckXwd~ `F! "("\8rHX"h"x` &"8q16>AyH"N lW Q\Tcjvdlibc.so.5printf_DYNAMIC__ctype_b__strtol_internal_IO_stdout_fgets_IO_stderr_perrorgetuidreaddir___brk_addr_xstat__environstrncasecmp_init__libc_initstrrchrenvironfprintfkill__fpu_controlstrcasecmpreallocfopenfcloseopendirstrcmp_finisprintfatexitfputc_GLOBAL_OFFSET_TABLE_exit__setfpucwstrchrfputsclosedirfree_etext_edata__bss_start_endX \   !"#$% & 5%%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%hp%hx%h%h%h%h%h%h%h%hp%h`%hP% h@YЃPSQ̀-̀XD$\Pbzh` KP-[̀S=t Ѓ;u[ÐÐUWVSl$,T$0PYƉ5`D$$1t VO)ʉT$|$%D$D$D$D$0MT$0;-޿޿޿uD$7޿uMdaT$0ZSD$$|$ PT$ RV1[^_]Ð޿ u-D$|$j[^_]Ð޿#uM~D$|$uMD$0T$0S;D$$|$ }ES[^_]ÐCS D$$|$ iD$|$ZD$0MdT$0~;j-hh|1[^_]Ðh6S`Ph h[^_]Ð|$tD$ 1ÐD$$jj PSD$$8uT$ RQScŃ hT$RSƃuES`Ph&h,>|T$ RPS Ń ?}VD$0T$0U[^_]ÐS\$j/SڅtPЃ[ÐVSt$ jhCVe ut'VPu[^ÐC~θ[^ÐL$DPt:jj PQƒ$8uv ÐЃÐQJÐD$P`PhGhh,ÐD$PhnÐVSt$ t*VPZtuVj Vj C~˃ Vj [^ÐVSt$ u`PhrS`PhS[^ÐS\$T$ D$}Rh<1[ÐPR}2`PhhS/[Ð1[ÐUWVShD$,|$(uh1[^_]ÐfD$$11D$$lT$L$lL$D$T$(RX P DPtjj jS@D$ PhL$ Q9D$8 PT$Rje u$u fL$$f9L$8uhT$RƃhVhL$QVt;ujT$ RhL$ QhT$(ReƃVhL$Qà VET$RÃSP$Q: 9|$~#t$SUŃ9|L$ T$LD$BT$DpT$(RN[^_]ÐSD$j(P Ãu1[Ð1C؀;t(uA)uIt@8u[ÐS=t Ѓ;u[ÐÐKWINCHPROFVTALRMXFSZXCPUIOTTOUTTINTSTPSTOPCONTCHLDSTKFLTTERMALRMPIPEUSR2SEGVUSR1KILLFPEUNUSEDIOTTRAPILLQUITINTHUPzeropid-u-v-a-l%s: unknown signal %s -p-s%s: can't find process "%s" sig%s: unknown signal %s; valid signals: %s usage: %s [ -s signal | -p ] [ -a ] pid ... %s -l [ signal ] %d %s /procopendir /proc/proc/%d/cmdliner/proc/%d/statzsnhkill v2.0 ~.>N^n~   ` `0 { \(GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#H) 001{9 \\(B K``QhhV0 0 $ \``bhhjpw~xH     ELF 44 (44™™șȩ /lib/ld-linux.so.1C\Q=# Y1:/A<J?@IT3.)[F$HS4 K25P6CZWN*XGLRVDU>   &8(9+"%B;!0E,O7M-' ""("&8,d4#="E6QZ(c!i8{XXH~X"h"x#"8"d<d""ȩ "" "(F$8,H"2ȩ! :X"B@XMhlSxZho"uc|"T"&"("8&"H<XWh"x"I"5@"*Љ #&"+(828q8ĬNHdVX"[h`xJi>tz"y""""Qĉlibc.so.5strcpyioctlgetgidprintfutime_xmknodstrerrorgeteuidgetopt_long_DYNAMICgetgrgiderrno__strtol_internal_IO_stdout__IO_stderr_execlperrorreadlink__overflowgetuidmallocoptargrmdir_lxstat___brk_addr_xstatfflushlseek__environchownchmod_initpipe__libc_initstrrchrwriteenvironfprintf_IO_stdin_ctimestrcat__fpu_controloptindumaskferrorsetgidsignalreadstrncmpstrncpyunlinkreallocbcopyforksscanfstrncatstrdupsymlinkfopenmemsetfnmatchfclosetime__uflowstrcmpgetpwuiddupgetpwnam_finisprintfatexitfputc_GLOBAL_OFFSET_TABLE__fxstatlinkexitgetgrnam__setfpucw_exitopenstrchrsetuidmkdirclosevfprintffree_errno_etext_edata__bss_start_end8<@'*+WЬԬجܬ     $(,0!4"8#<$@&D(H)L,P-T.X/\0`1d2h3l4p5t6x7|89:;<=>?@ABCDFGHJKĭLȭM̭NЭOԭPحQܭRSTUV{5Ȭ%̬%Ьh%Ԭh%جh%ܬh%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%hp% hx%h%h%h%h% h%$h%(h%,hp%0h`%4hP%8h@%<h0%@h %Dh%Hh%Lh%Ph%Th%Xh%\h%`h %dh(%hh0%lh8p%ph@`%thHP%xhP@%|hX0%h` %hh%hp%hx%h%h%h%h%h%h%h%hp%h`%hP%h@%h0%h %ĭh%ȭh%̭h%Эh%ԭh%حh%ܭh%h %h(%h0%h8pYЃPSQ̀-̀<D$ȩP"hЉ GP[̀S=t Ѓ;u[ÐÐUWVS1ۃ=BhM QVMWǃ h؉jj` jhV ujhV{ ujhVK uvff=qtf=qu Q~8VNt+u*jM QVUC =wV=t+ܩh+‰(~Shjj[_M QMQ;IMA<jM QMQ7U =t +ܩh+D(=ujhMQ t =uBjhMQ u+~Shjj^M QMQtuAjhMQy u*~ShjjW^M QMQtuAMff=qtf=qu/~Shjj ^M QMQ:CjMQE@P'jM QEPS[^_]ÐUXWVSu} jFW]SSEFPF0PFPEPFPFPF PFPFPEPh)SEN %F$EN(%F,hZ.h]h`hcR<]w89wPh5)PhfZC]]ÐUWVS=p} ppCPZƋ=phEP h4PEu4PhZPjHj EPMQ t.9|CPVZƃEP-]GMQ?uMQ?u4PhZPjGH1ҋ pM9}B9U5=pe[^_]ÐUS]M Bw(ȅ}A$)Ⱥ)‰yB$jtu&$)Ⱥ)‰$:Bw8ȅ}%)Ⱥ)‰y%)‰ 1tPS>]]ÐUEP¡ЩЩ]ÐU WVS}WUW UW$UЩ1U9SuzU9S$urU9S(ujG8PChjACf u .fu fu ΠfuU}̉}EΉE}ʉ}EщE}Љ}EE}ԉ}EE|h8.u5h/u(Gh?/uhh8/th?.t̋hE0҉llщMw-hW.ƒtEPhE^U`+wI w@|twt*eOw#EPEPEPr7ƒ t Uw-}v'VWuVSVjj|Pnh }|PhBP=u|P}WhP‰U SV}WShP5=wEPEPEPEPZ7EPShW ƒ }|PhBPj<=ةEpE艅tpPEPEPhBPu%EPh\jjS<uSEPEPEP5ƒ t!fE%̀EU,EPEPEPEP;6ESVJE@PMh}WhP|WA‰Uԃ}=|PhB=Wj;hPUw@Bd~EPh~jj6;Fh:}SV,SVyEPShW0EPShW"|Phjj:=t|Phh! =hj.S*EEEEEEEEEEEEE EvSEP^,hShlp/hShl`/S'Sq)=thj ܩJЙ=ܩuhhQhǍh\[^_]ÐUWVS1u ~ZhPMQ à }MQhҍPj8t19}*B9|)jjMQ tMQhҍPj8[^_]ÐUS]&)=~hPShl. ܩ9|ҋ]]ÐUS]M Bw(ȅ}A$)Ⱥ)‰yB$nBw8ȅ}%)Ⱥ)‰y%2t+t&$)Ⱥ)‰$)‰1t PShl-]]ÐUS]S#@9Ct 1]]ÐUVSEpX H$1ԩt9ru 9Z$u9J(u@ue[^]ÐUEPd¡ԩԩ]ÐUWVSEPUP Ux$1ԩtiU9SuQU9S$uI9{(uDC U RCPt  ԩ؋P?뭐ދ띐e[^_]ÐU@WVS]=ԩtZ5ԩVuSVJ$}ESEPTԩԩue[^_]ÐULWVS]jjUUR\}jjC8Pbƃ}C8=uC8PEPVE U REPEPU RV-wEPEPEPEPc/EPU RV }C8PhBPj4=ةt3E؉EEUREP}EPhBPj4e[^_]ÐUWVS0ҋ=HʉӍC`hxQB CSpP4 HQtPt`/PjjhS$\LPxPh@'  |uhjj3 븐.uZt/uztEP|PdЃ}||;/uC;/t0򮋅`)PpPM S`t@P1tEPRj fEf%f=@ufEf%f=@u =u'E9EtPhjfEf%f=@u"tPnu"=tPttPh5f]ȉff =t|PtP ƃf}v%EPfUPfPtPzƃjj|Pà }|hjAtPuǃ }d=t$tP)hjAtPDǃ}3tPhPjJ1S\K`.KKKQmCt!duu%%F>u>uMQ8\+EXP"<SMQPZ<0~P@MQPۙe[^_]ÐUWVS}u ]xPh'hdEPShtVPh,h89w j h< hutWe[^_]ÐUEU R@P ]ÐUWVSu f]WJFP%PFP؃8PFP؃PVWe[^_]ÐUfEf%f=`ub]Ðf= u c]Ðf=@u d]Ðf=u -]Ðf=u p]Ðf=u l]Ðf=t ?]Ðs]ÐUU fEtr-} BwB-@tBx]B-]ÐUE fUtxxt @S @stxxt@S@stx xt@ T]Ð@ t]ÐUVSUpP}DPnǃpDe[^]ÐUWVSjj 0} KSU RUՔPp9t1Vj јUR`Vj 蠘1e[^_]ÐUDWVS}1]jSpPt ; tFC?~؃@u琐]}t; uC;u<wOCjj jPxujVpP u} u;FuAW[9AuCjj jP$W*e[^_]ÐUWVSu|<4Dž81pu|t88~ރ8u'<:t FB>@uF~@u7S4Q謔ڃ>:t FB>:uF4 FG>u84PѕZpP蹕B踖4j`PdPHPVhGSh[ha8jh>VhGShJhpדjh>VhGShJh}躓8jh>VhGShh蚓jh>ShJhNkjh>Sh[haT(jh>ShJhp:jh>ShJh}#(jh>Shh h jEP|tPpM Q|Ph]S臕S8Q 8Qz8E([^_]ÐUVSuhVtV/VGe[^]ÐUDWVS} EPh˜]SڔSURXt3URƃu-UR<19}.UU)PWUpP t9|܉e[^_]U@WVS}uVhǘ]S*SWujjj 蟒VU RP9t,Sj |WSj PWe[^_]ÐU@VSuE URPh̘]SwSVtVz e[^]ÐU@WVSE }=mtj=m@t#GPPh՘]SSURptURhݘURBtURƃz~(UVWpP. ~)?/KUR19}DT9|1e[^_]ÐUWVSuj/Vuߘ8/uH9w)xGP@ÃtWVS1e[^_]ÐUWVSf]50t f9t\vuӉUR(j fuURh]S1S PxF0F50Fe[^_]ÐUWVSu0tS8uVR蔐tz[u@tS8uVRlt3[uV舐j VCu@C@1fGf0C0؍e[^_]ÐUWVSf]5Pt f9t\vuӉURj fuURh]SS P(FPF5PFe[^_]ÐUWVSuPtS8uVRDtz[u`tS8uVRt3[uV訏j VCu`C`1fGfPCP؍e[^_]ÐUXWVS]fMfMfuEj2%E0}Ѓ$)ĉMQWEPWj4 1E%=uf}t$fttEE]E?/u C;/tj/S贎ÃEPWj訋 EPW袎}tWMQjj{f}t:ft3PEPW肋 tWhPj@E}t2$ML$e fEf%f=@/C;/C;/tE PWݍtWhP}tWMQjjf}t:ft3PEPW裊 tWhPjaEE t/E PW~tWhPj,EURufEf%f=@t2WhP WhjjMQ耊~f}t:ft3PEPWʉ tWhPjEE PW諉tWhPjYEMQEe[^_]ÐUSEPÃuh%jj ؋]]ÐUEU uR]Ðu P1]RPuh%jjEE]ÐUWU0Ѓ~Ѐ8/uH9}]ÐUWVSu1MMj:V#Ãuj.VÃC;u$F9u WesSrM+S|u=S7uxjj jS f@Mf>VMV虉ÃuHVu t jj jV茆M f|fCM ftbfC MfC PFu'j訆‹Mt#C PhR P@Mu 1e[^_]ÐUU:t< v 1]ÐB:u]ÐUW}W0PP}]ÐS=t Ѓ;u[ÐÐˉpremature end of archive070701070707070702warning: skipped %ld bytes of junk%6lo%6lo%6lo%6lo%6lo%6lo%6lo%11lo%6lo%11lo%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lxwarning: archive header has reverse byte-orderr/dev/ttywstandard input is closedTRAILER!!!%s rename %s -> %s not created: newer or same age version existscannot remove current %scannot link %s to %s%scannot swap halfwords of %s: odd number of halfwordscannot swap bytes of %s: odd number of bytes%s: checksum error (0x%x, should be 0x%x)%s: unknown file type1 block %d blocks %s %3u %-8u %-8u %-8.8s %-8.8s %3u, %3u %8lu %s -> \\\n\b\r\t\f\ \"\%03o070702070701%6s%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%s: truncating inode number%06lo%06lo%06lo%06lo%06lo%06lo%06lo%06lo%011lo%06lo%011lostandard output is closedblank line ignored%s%s: file name too long%s not dumped: not a regular file%s: symbolic link too long%s: unknown file type%s TRAILER!!!1 block %d blocks cannot read checksum for %sblank line ignored%s%s not created: newer or same age version existscannot remove current %s%s: unknown file type%s 1 block %d blocks %s linked to %scannot link %s to %sversionverboseunconditionalreset-access-timeswap-halfwordsswap-bytesswaprenamepreserve-modification-timepattern-filepass-throughownernumeric-uid-gidnonmatchingno-preserve-ownermessagemake-directorieslistlinkio-sizehelpformatforce-localfileextractdotdereferencecreateblock-sizeappendnullUsage: %s {-o|--create} [-0acvABLV] [-C bytes] [-H format] [-M message] [-O [[user@]host:]archive] [-F [[user@]host:]archive] [--file=[[user@]host:]archive] [--format=format] [--message=message] [--null] [--reset-access-time] [--verbose] [--dot] [--append] [--block-size=blocks] [--dereference] [--io-size=bytes] [--force-local] [--help] [--version] < name-list [> archive] %s {-i|--extract} [-bcdfmnrtsuvBSV] [-C bytes] [-E file] [-H format] [-M message] [-R [user][:.][group]] [-I [[user@]host:]archive] [-F [[user@]host:]archive] [--file=[[user@]host:]archive] [--make-directories] [--nonmatching] [--preserve-modification-time] [--numeric-uid-gid] [--rename] [--list] [--swap-bytes] [--swap] [--dot] [--unconditional] [--verbose] [--block-size=blocks] [--swap-halfwords] [--io-size=bytes] [--pattern-file=file] [--format=format] [--owner=[user][:.][group]] [--no-preserve-owner] [--message=message] [--force-local] [--help] [--version] [pattern...] [< archive] %s {-p|--pass-through} [-0adlmuvLV] [-R [user][:.][group]] [--null] [--reset-access-time] [--make-directories] [--link] [--preserve-modification-time] [--unconditional] [--verbose] [--dot] [--dereference] [--owner=[user][:.][group]] [--no-preserve-owner] [--help] [--version] destination-directory < name-list 0aAbBcC:dfE:F:H:iI:lLmM:noO:prR:sStuvVzinvalid block sizecrcCRCnewcNEWCodcODCbinBINustarUSTARtarTARhpodcHPODChpbinHPBINinvalid archive format `%s'; valid formats are: crc newc odc bin ustar tar (all-caps also recognized)%s: %sGNU cpio %s%serror closing archiveustar00TRAILER!!!invalid header: checksum errorwarning: skipped %ld bytes of junk/write errorread errorpremature end of filevirtual memory exhaustedcannot seek on outputr/dev/ttyw%s%s%d%sFound end of tape. Load next tape and press RETURN. Found end of tape. To continue, type device/file name when ready. To continue, type device/file name when ready. internal error: tape descriptor changed from %d to %d%s: : %sversion 2.3 /etc/rmt-lrsh/usr/ucb/rshremsh/usr/bin/remsh/usr/bin/rsh/usr/bsd/rshnsh/usr/bin/nshcannot execute remote shellO%s %d C R%d W%d L%ld %d I%d %d S.%ucannot make directory `%s'%s`%s' exists but is not a directoryvirtual memory exhaustedvirtual memory exhaustedcan not omit both user and groupinvalid groupinvalid usercannot get the login group of a numeric UID%u ُ0ҏAǏoLViFTHC~yh`MNB,20,RpEbsюSة1>.>N^n~.>N^n~.>N^n~.>N^n~  Љ, l  Ĭ@<  @GCC: (GNU) 2.6.4 snapshot 950518GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.6.4 snapshot 950518.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#) ll1, , 9   @B < < @KQV  v\ЉЉb؉؉jȩșpw~ĬĜ,(P     ELF 44 (44(/lib/ld-linux.so.1#    "! ("6'0!-("38X?FR0 \b8FnHu0! }X"h8x""  "8H> y0 "()(5libc.so.5printfgetopt_long_DYNAMICerrnofgets_IO_stderr_optarg___brk_addr__environ_init__libc_initrindexenvironfprintf__fpu_controloptindsethostnameindexfopenfcloseherrorgethostbyname_finigethostnameatexit_GLOBAL_OFFSET_TABLE_exit__setfpucwstrchr_errno_etext_edata__bss_start_end80TX\` d hlptx|{5L%P%Th%Xh%\h%`h%dh %hh(%lh0%ph8p%th@`%xhHP%|hP@%hX0%h` %hh%hp%hx%hYЃPSQ̀-̀D$0Ph `pKP][̀SD=Dt Ѓ;u[ÐÐUWVS] Ej/PXtj/PGP пuS}~=Rhh8h[h8hh8jd&EPhhhSuVǃjAEP ftp>F5# ?|dt;fst+hKv2utVÃuPejj.Pu/tVPh h8jdft;dt$st+@|ihPtxtVj@S ~j S>tx#t0HPSt0t t+Ph Ph h8 j9tVPPhh8mjPh( hK h h hhBh} hhhMhhh}h9s4Phh8j9E~v0HPRstD0t t+Ph Ph h8# jjEPh$ jS8=8t Ѓ;u[ÐÐhostname 1.5%s: you must be root to change the host name %s: name too long %s: can't find a FQDN for the host name `%s' %s Usage: %s [OPTION]... [hostname] -d, --domain display the DNS domain name -F, --file filename read the host name from file -f, --fqdn, --long display the long host name (FQDN) -s, --short display the short host name -h, --help display this help and exit -v, --version output version information and exit When the program is called without any arguments, it displays the current host name as set by the hostname command. If an argument is given, the program will set the value of the host name to the value specified. Unless you are using bind or NIS for host lookups you can change the FQDN (Fully Qualified Domain Name) and the DNS domain name (which is part of the FQDN) in the /etc/hosts file. dFfhfsvversionshortlonghelpfqdnfiledomaindnsdomainname%s: You can't change the DNS domain name with this command Unless you are using bind or NIS for host lookups you can change the DNS domain name (which is part of the FQDN) in the /etc/hosts file. dfF:hsvr%s: can't open `%s' Try `%s --help' for more information. .>N^n~   : H\,0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#) 01:9 ,,0B \\KQ V  t\  b  j00p88w@@~HHP00t06f     ELFP4n4 (449c9c@c@sX m}/lib/ld-linux.so.1CI@%, F&#5A02;B(4H7+)'=?*GD>:E8<C1  " - ./3$96!  " "!( d)}2}!88 JH cQ}X]X "dh "j~Xvx "}  C"X~ "\~ "@s  " F  9 "@s!  "`~X( ~~8 c!H "'X T.h "3x ; &C K "R Z "_ &"f "l Ws"y,(I8"H@X&hGxK &"8""(|W>"y"("8Q} K'}.}:libc.so.5strcpyioctlvsprintf_xmknod_DYNAMICerrno__strtol_internalusleep_IO_stdout_getpidfgets_IO_stderr_systemmallocisattyoptargselect___brk_addrfflush__environ_inituname__libc_initstrrchrcallocwriteenvironfprintf_IO_stdin_strcat__fpu_controloptindferrorflocksignalreadopenlogstrncmpstrncpyunlinkreallocforksscanffreadstrdupfopengetoptmemsetfclose__uflowsyslogtmpnamstrcmp_finisprintfatexitfwriteaccess_GLOBAL_OFFSET_TABLE_exitfileno__setfpucwopenstrchrsetsidclosefree_errno_etext_edata__bss_start_end} ~ X~\~`~~~ }D4|8|<|@|D|H|L| P| T| X|\|`|d|h|l|p|t|x|||||!|"|#|$|%|&|'|(|)|*|+|,|-|.|/|0|1|2|3|4|5|7|8|9|:|<|=|>|?|@|A}B}C?5,|%0|%4|h%8|h%<|h%@|h%D|h %H|h(%L|h0%P|h8p%T|h@`%X|hHP%\|hP@%`|hX0%d|h` %h|hh%l|hp%p|hx%t|h%x|h%||h%|h%|h%|h%|h%|hp%|h`%|hP%|h@%|h0%|h %|h%|h%|h%|h%|h%|h%|h%|h %|h(%|h0%|h8p%|h@`%|hHP%|hP@%|hX0%|h` %|hh%|hp%|hx%|h%|h%|h%}h%}hYЃPSQ̀-̀\~D$@s~PR:hK0KP [̀S$|=$|t Ѓ;u[ÐÐUDWVSh]Lh_LǃtWu]Wj V7 t)SEPhmLVuSURuWEPURtEe[^_]ÐUSf]j~tB~f]EPh!Rj_u j~Pá~P]]ÐUVSu=tsuAjhsLÃ|, E Ph0KSSPe[^]ÐUWVShLpsPEu hL&jMQ=PthLj19=~)4~Ft{~teFPWhLMQ1ۃF9X,~eT0)RT0(RD PRPWhLMQCF9X,*WhLWhLMQ G9=~QMQ0jMQEPMQe[^_]ÐUWVSu]E v)~CShd ~P u[CShd‹P tVhM3Shd‹P u 1Vh/Mj e[^_]ÐUWVSE@u)T~hDž`lRh dT~VR` ultlPjuVƒ u `Dž\5TsdlXdVtM`81ۋd9XPdT RMt.`9X~/tVdD Pƒu Cd9^d9Xd@pDžlXVhd hP uyd@ Vhd‹h6V uMd@$T0ҋTJRTVPƒ u Dž\\u dv@dw\t2dPuVhTMjhlPj!uVƒ ueXsdtVd@(8tdv@du܃dt'dPuVhTMjh8`u =PsEPhbMjhh[`MlmhjVT 1ۋ`9X~kl4`D`PM~MRhM40щT4tVHC`9XlPhMjhMj145PsdPuVhTMjhhRd([^_]ÐUSh]LdsP$Ãu#dsPhMjYjSS]]ÐUVSuPFtt0:19^~%D PC9^F$PVe[^]ÐUVS=HsHsBHsRp=Hsuv5LsFB>%)~~%F$@`UR)Ћ~EPSQUBPUBP URhNS 0Ѝ\FCPUR [^_]UWVSu} |stPVCt[uu#j :É3C|sC|sC{umj/VtVlsPhN VlsPhNEPth6N]SnWSgEPh8N>1t[^_]ÐUVSu|stSPVgt[ut8Ku3j/Vu @Ph?N]S8ShNNx[^]ÐUS]1ɋ\st-zuC9B uC9BuuRu؅u`s Ћ]]ÐUlWVSUR)Ѝ<~EEUUUUUUURhd URGƃ19]~!FPP'tC9]9]ujFPFSUPEP^N}tTNPheNjPURBEEEEURh?dP5(tEPURhNjjURhd P E}UDŽ19}JuPVEVhAE0E M15EPMQEDDFM9q,EP~1@1ۋEEԋU9X~%UT$RMLQCE9ZFM9q,1 EShƒ t!EPShNjt=}1ۍ EE쐐MQh=d$EPǃ t$=} uhC ~Dž0ҋM|ʃFE9p,811M9y,~;Ez4t& EPMQR4URhOO ׃FE9p,Ņt]h[hNMQhOjhh.EPh5OjHhhhe[^_]ÐU WVS] MI)ȍ~EHM2MQhYOjM0M} 1 IMz8t1|t$PMQB8PhqOtFM9q,1K|t3MD Ph>d$@P tMQ;PhzOj'FM9q,12MXKxMDPK}FM9q,1MP`FMuhhPMA1&hh!|e[^_]ÐUVS5~HstB;u;u{uShdV [ue[^]U@WVS=~HsuShdW| CtAwtjtK[C CHPC PhO C STRPhOVC PhOVy VhOj9 [Se[^_]ÐUS]xsh@%Su ShOj]]ÐUVSxsttZ19~~(~[)Dt jSqC9~ j19~~)~[)Dt jS)C9~shOj1ۃ9~~)~[)Dt S#C9~ߍe[^]ÐUhPjhsPpsP]ÐUWVShP-ƃ}hPjpj1ۿ~ff%Pƒ|#[)~DC~ą}(=}tSh?Pj ~uh^PT~PhpPj EPhd~P_ u}&t'hPhPj{1e[^_]ÐUWVS11hPE PMQƒ  $P((@)@)@)@)@)@)@)@)@)(@)@))(@) )@)@)(tsaVX~P-ds8X~P lsX~PhsX~Ppsu }9=~}!E PhPh~jMt jj! jjhQ "P~jPuh&Qj;}h2QjkhIQj\DsPhRQjJh&=lsuPXPthUQjj~j 1‰lsPhaQRjlsP7t(lsPhqQjj'hLhsPCÃu"hsPhMjx %cPhQSS1t jh@%j,uhQjh@%j uhQjh@%juhQjh@%juhQj~U1DžH H I+H<}HH9~ӐjjjEPj P}2=}u TҐhQjjDžHH9 ~HH<+H~ELjTP~PP u=} thQjPkT6t6D$tHHIL)LLdjQH@)djP‰PjPQ~LSEHL)LLLHIL)LLLQt2H@L)LLdHH9=~DUWVS}u |PhQSVW0ЍDPcShRj[^_]ÐUE ||P@=Lsuh RjP=Tsu h%Rj8]ÐUWVSؐ Ef}4}Xt=ؐ}4 ؐ} ؐ}4}u5ؐ^zu2y9ؐuj=    vwxyz{|}~4utvuf}f8ؐ=< 1}4}ut15ؐ|)^!u2y9ؐu4utv=uh6R= 4Euth|`^Xfjj@‰PRP jjD@xthR=PsthRPB@Ps@xthRPBP@BHPQ PB$:@xthRFB@B@JA @xuhSJYD B@@xthRPBPB(aLs@x,u h!SptpPS6t[ >h<h<0>@>P>`>p>>>>>>>>>?? ?0?@?P?`?p?????????@@@ @0@p@`@5|=v f V F6&  ha ha qha ahav Qhaf AhaV 1haF !ܐP5 ܐPE ܐ|PjPܐP_1+ܐK{zuBЄ |B{@Є9{wWܐ{S=ܐ}t{5{5{t&|?* t-ܐ{{JP'= |PHܐ{Ë5{=ܐ}{@Є{Ë5{=ܐ}haVe[^_]ÐUWVS{rܐKЄ@9{v hap{xu2{+ܐu={+=ܐ19} CFB9|{xuЄ{P )JS{5{+sK ȉC PCPCu h1bs5{{P )J~ ~ {xtX |B9BwR |P@%Є{@I |PRj{@PЄu |PXt h]b=ЄuCu |P.{@1ۉЄЄ{@{Є@D{@@ܐ؍e[^_]ÐUVS {5ܐ95{>ttUEEf>>~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[XUTSRQPONMLKJIHEDCB;8540+('   ## !!)8>!:?@>@?8@):~}{zyxwvusrqpnlkjihgfedcb_^]\[ZYXWVUTSRPONLKJIHGFEDCB=<;976543210/.-,+*('&% 1234567fatal flex scanner internal error--no action foundfatal flex scanner internal error--end of buffer missedfatal error - scanner input buffer overflowinput in flex scanner failedflex scanner push-back overflowunexpected last match in input()out of dynamic memory in yy_create_buffer()out of memory expanding start-condition stackstart-condition stack underflow%s KL>LSL@(#)yaccpar 1.8 (Berkeley) 01/20/90  &%'$ + "#! ),*       " #$%&)4H1K' !()*+,"#$%-/0126.E345789:;<=?>@AFBCDGHIJKLM&((((,,   , ",--,,           }   . > N ^ n ~           . > N ^ n ~         .>N^n~.>  K  ? (|0  @GCC: (GNU) 2.6.4 snapshot 950518GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.6.4 snapshot 950518.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#8)   1?9   @B 0 0 K  Q  `VPP<\KKbKKQj@s@cp|lw | l~(|(l}m}mDmzn$rPd t      K K 1| >K I| W$|dk   p | IDs |   Ds ds hs ls ps ts xs ~~~  `a !S -0k 7h Cq K Z|s f uw pY   @"  p. s$  ; { { { { | | %| 4S >tU DtY LZ T[ [X]0 b_0 ivЄD pE 0BY J  K %F -F 3J A K NI \pJ1 iJ v`s 0I/    "\s  "G@ ( d}H3 Ha }!K 8 H c$.}X:u CX "Jh "PܐW~Xctv kLs w0/  x "  C"X~Xt `O l  "u \~ "@s .T  0K  k&) `$    "& F2% @ H 9O "U@s! ] "e`~Xp( wPs | ~~P 8 cH "X Th "Xs x  &&1   " P  $ ") &"0 "6sZ < WC"I}U,\@K  g(In(p sPv$ |8"H@X&hGx | K &"8`KO Ts t$ Hs ""}(|[ | .2y 6 HT J@%4 W`Il fkr}y$` W>";Z sZ y"("ؐ8Qp._ crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END__crt0.Sdone__do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__cardmgr.cversionconfigpidfilemodpathstabfilebe_quietcaught_signalfn.58socketssocketget_tuplelookup_cardload_configfree_cardfree_configexecuteexecute_on_devmodule_listinstall_moduleremove_modulelookup_mtdbind_mtddo_insertdo_removeyacc_config.cyysccsidlex_config.cyy_current_bufferyy_c_buf_pyy_inityy_startyy_start_stack_ptryy_start_stack_depthyy_start_stackyy_acceptyy_ecyy_metayy_baseyy_defyy_nxtyy_chkyy_hold_charyy_last_accepting_stateyy_last_accepting_cposyy_n_charsyy_get_previous_stateyy_try_NUL_transyy_get_next_bufferyy_did_buffer_switch_on_eofyy_fatal_erroryy_flex_reallocyyunputinputyy_flex_allocyy_flex_freeyy_push_stateyy_pop_stateyy_top_statedefault_mtdyy_delete_bufferstrcpylookup_devioctlroot_mtdvsprintfyyrestart_xmknod_DYNAMICyy_load_buffer_stateyy_create_buffererrno_etext__strtol_internalusleepyyerrflag_IO_stdout_yysindexgetpidfgetsyytext_IO_stderr_yytableroot_deviceyyparsesystemmallocisattyoptargyydefredwrite_stabopen_devselectyyvspyyrindex___brk_addrfflush__environparse_configfile_inityywrapadjust_resourcesyysspuname__libc_inithandle_signalstrrchrcallocwriteenvironfprintf_IO_stdin_strcatyynerrsblank_cardyyout__fpu_controlyyvaloptindyyleng_startferroryyssflocksignalreadroot_funcopenlogstrncmpinit_socketsstrncpyunlink___crt_dummy__reallocforksscanffreadyylenstrdupfopen__bss_startgetoptlex_numbermemsetmainyygindexfclose__uflowsyslogtmpnamstrcmpyyin_finisprintfatexityydebuglex_stringroot_cardyydgotoroot_adjustfwriteaccess_edata_GLOBAL_OFFSET_TABLE__endbeepconfig_linenoyycheckyy_switch_to_buffercatch_signalyy_init_bufferexityylval_errnofree_resourcesfileno__setfpucwopenyylexyylhsstrchrsetsidyyvscloseyycharfreeyyerrorELFP4$4 (44$ /lib/ld-linux.so.1$!    #" (("8#H6' 00!68XBXNXcS_  iohF{x ! "j5c"%5  8%@  (8>0# *$1$=libc.so.5printfstrerrorgetopt_long_DYNAMICerrno_IO_stdout__IO_stderr_feof___brk_addr__environ_init__libc_initstrrchrenvironfprintf__fpu_controlfseekoptindswapoffferrorsetmntentendmntentstrcmpswapon_finiatexitgetmntent_GLOBAL_OFFSET_TABLE_exit__setfpucw_errno_etext_edata__bss_start_end8 0L P T X \  `  d h l p t x |      5D %H %L h%P h%T h%X h%\ h %` h(%d h0%h h8p%l h@`%p hHP%t hP@%x hX0%| h` % hh% hp% hx% h% hYЃPSQ̀-̀D$ Ph `` Pm[̀S< =< t Ѓ;u[ÐÐST$\$ PPP PRkSWVS\$= tSPh_  5p uSS"ƃ}%0PPSPhw h[^_ÐWVS\$t$1j/Pt"j/P@jh h VS-at$VtMktehtvt&TG뵐jh8> 됐h h jjhTT1ۅt;tdp uP3 ÃԐ>ujhP Ã>u[^_Ð u'h h ` %ÐjjP %Ð P-ÐWVS= uu 1[^_Ð P=Ãu, Piu5 Pt!8#ts t[^_ÐVSt$ u1[^ÐKÅtVCPsu[^ÐVSt$ u1[^ÐÅtVP$u[^S0 =0 t Ѓ;u[ÐÐversionverbosehelpallusage: %s [-hV] %s -a [-v] %s [-v] special ... %s on device %s swapon%s: %s: %s ahvV%s swapr/etc/fstabignore a h v V! (u)mount: version from util-linux-2.2 .>N^n~.>   B @ xH0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#) @1B9 HH0B xxKQ0VPP\  b  j  p0 0 w8 8 ~@ @ T  000ZELF 4D&4 (44C#C#H#H3p($(4/lib/ld-linux.so.1%4 ,$1'-"+/*. #( 0  &23%)! >(" #)65(4>4HoO4!U4Xa 5Xm #x x5( 8 d|5H dX "H3 h Fx 8 ! H3! "5X5 5 & $ "+ "3 ; @C` I &"Q 8X3n( "s8 xH >X lh "x Q4T44X6libc.so.5stpcpystrcpyprintfstrerrorgetopt_long_DYNAMIC__ctype_bgetenverrno_IO_stdout__IO_stderr___overflowmallocoptargreaddir_lxstat___brk_addr_xstatfflush__environ_init__libc_initrenamestrrchrbasenameenvironfprintf_IO_stdin___fpu_controloptindstrncmpstrncpyunlinksymlinkopendir__uflow_finisprintfatexit_GLOBAL_OFFSET_TABLE_linkexit__setfpucwclosedirvfprintffree_errno_etext_edata__bss_start_end44 5 x5|55554/3333333 3 3333333333 3!3"4#4$4& 4'4)4*4+4, 4-$4.53%3%3h%3h%3h%3h%3h %3h(%3h0%3h8p%3h@`%3hHP%3hP@%3hX0%3h` %3hh%3hp%3hx%3h%3h%3h%3h%4h%4h%4h% 4hp%4h`%4hP%4h@%4h0% 4h %$4hYЃPSQ̀-̀|5D$H35Prh`0KP=[̀S3=3t Ѓ;u[ÐÐULWVS1hÃtT3hËE T65( 06 66651jhhhM QEPƒMdBS tFzVbtRnftPitksvB06-6666L35 6x5T3x5j=P6t3Phj=@6t jM9 5uhjj$ j]tS P3=5t 5 ]K59uhE ]SE9"M ME t0҉҉U|/]SEPjƒ } =4tfEf%f=@}0҉Ѓ$)ĉMQSFS SrÉ0҉эT)ԉShVWRRWEPǃdME tV ƒu4hjjy !VM UR0׃559|م%PUWVSDž|=5uq]SEPjƒ } =4ttEPh=06u'fEf%f=@uEPh j]SE Pj(ƒ } =4tt4tE PhR|]SE Pjƒ } =4tӅt(4t+E PhR:fEf%f=@t5=L3fEf%f=E P ƒ}0щȃ$)ĉEPSS#SƋ} 0҉щxT)ԉVhE PSbRWRL] t+]SE Pjƒ } =4tjfEf%f=@uE PhHj=6t7E PT6Phgh 5yƒu01=6uE Phzj=P3E P ÃuhjjS 0҉߈щȃ$)ĉ|S|P4t3E PhR4tE PhR= 6tE PEPh E PEP5ЉƒE PEP=5tRh4Pj|t/E P|PƒtE Ph4Pjl[^_]ÐUS]t%T6Phh 5 )T6PPh6hSUWVS=P3tvh"URPƃu1zURÃuV1QSVYVS=P3uuT3PURGPURe[^_]ÐUWVSE PE10}ЍXEPƒt6 0щH9vSREPƒ 9~‰뾐EP…u1e[^_]ÐUWVS]u 0ЃPCǃtVSh"W1e[^_]ÐUWVSE1ۋuV} WPuQ>54uDFt=M MDFtҍ\A‹}DGu9~uyt1ۉ؍e[^_]ÐUWVSu0҉щK} щPbǃt!VWE P]S 1e[^_]ÐUS]j/SڅtPЋ]]ÐUWVSuj/VWu"8/uH9w)xGPÃtWVS?1e[^_]ÐUWVS}] uX3t&h4T6Ph"h 5EPVh 5w tSPh"h 545985wj h 5 45h 5tWe[^_]ÐUS]t;uIh\3Su|x3%PSh"j]]ÐU@WVS}1]SWj[ } =4tufEf%f=@ue[^_]UWU0Ѓ~Ѐ8/uH9}]ÐUSh 5595wh5s51ۃytYuA: t9595wh5,5u‰؋]]ÐUWVS] EE0ҋ}щJ1;t[REPPU` Uu3;0щH9t7}uuEF;u}uEe[^_]ÐUWVS}u ]T6Ph#h 5 uh#h#h 5VWh&#h 5ue[^_]ÐS3=3t Ѓ;u[ÐÐb~06onif]iVSM5E 65V0@6(P6versionhelpversion-controlverbosesymbolicsuffixinteractiveforceno-dereferencedirectorybackupSIMPLE_BACKUP_SUFFIXVERSION_CONTROLbdfinsvFS:V:%s missing file argument./when making multiple links, last argument must be a directory%s%s: hard link not allowed for directory%s: cannot overwrite directory%s: replace `%s'? %s: File existsvirtual memory exhaustedcannot backup `%s'cannot remove `%s'%s -> %s symbolic cannot %slink `%s' to `%s'cannot un-backup `%s'Try `%s --help' for more information. Usage: %s [OPTION]... SOURCE [DEST] or: %s [OPTION]... SOURCE... DIRECTORY -b, --backup make backups for removed files -d, -F, --directory hard link directories (super-user only) -f, --force remove existing destinations -n, --no-dereference with --force, remove destination that is a symlink to a directory -i, --interactive prompt whether to remove destinations -s, --symbolic make symbolic links, instead of hard links -v, --verbose print name of each file before linking -S, --suffix=SUFFIX override the usual backup suffix -V, --version-control=WORD override the usual version control --help display this help and exit --version output version information and exit The backup suffix is ~, unless set with SIMPLE_BACKUP_SUFFIX. The version control may be set with VERSION_CONTROL, values are: t, numbered make numbered backups nil, existing numbered if numbered backups exist, simple otherwise never, simple always make simple backups ~.~%s.~%d~.%s: : %snumberedtexistingnilsimpleneverversion control type%s: invalidambiguous %s `%s' GNU fileutils 3.12"""""""0#(4  . > N ^ n ~           . > N ^ n ~   `T  3THGCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#l) TT@19 TTHB KQV  \``bhhjH3H#Lp3#w3#~3#(4($4$$%     ELFP44 (44yyyh``/lib/ld-linux.so.1CN3/<H!8BL0G*2E#&J7?"KIA' 1$% .64 9C+, -:>@D5;( = FM) " " *& k2`;E WXc j /p #{ ( đH  h tp   W pP8HThLpa V8ԑ<$ؑ)=3=ܑC8QXo_daf<mp "vy("X"y ! K0hX38 `ȑX "x F$"*! 2 ":̑HБO TV "[ 2`8,gx&"o"u>"(" libcurses.so.1ioctlvsprintfprintw__waddbytes_DYNAMIC__ctype_b__strtol_internal_IO_stdout_endwinmvcur__overflowwstandendmalloc___brk_addrwerase__environnl_initwrefreshcbreaknonlnoechowaddchinitscrwmove_finimvprintwatexitwgetchstdscr_GLOBAL_OFFSET_TABLE_wclearCOLSwstandoutwclrtoeolLINESfreelibtermcap.so.2getenv_etextmemcpyBCwritePCfopen__bss_startfclose_edata_endexitUPstrchrlibm.so.5errnolibc.so.5__strtod_internal__isnan_IO_stderr___isinfsleepoptarg__ctype_toupperlseek__libc_initisinfenvironfprintf__fpu_controloptindsignalreadsyncgetoptsprintfisnan__setfpucwopen__ctype_tolowerclose_errnoh7:đȑ;̑AБB MK5ďȏ ̏ Џ ԏ ؏ ܏9<=*@CD E,F $.(,G048< @1D"HIL#PJT3XL\%T5%%h%h%h%h%h %ďh(%ȏh0%̏h8p%Џh@`%ԏhHP%؏hP@%܏hX0%h` %hh%hp%hx%h%h%h%h%h%h%h% hp%h`%hP%h@%h0% h %$h%(h%,h%0h%4h%8h%<h%@h %Dh(%Hh0%Lh8p%Ph@`%ThHP%XhP@%\hX0YЃPSQ̀-̀đD$̑PRhpaLP [̀S=t Ѓ;u[ÐÐS\$=tԒP=t0hbhhdhbhhUh@chhFSm UWVSl$ \$(1D$ԑPT$PT$PfEt_T$RT$RԑP t#j0HPSԑPT$RT$RԑPwD$ ԑPԑPà  t tVtKT$RT$RԑPԑPԑP-[^_] Ð~\MNE\$ST$RԑP tj ԑPSST$RԑP |$t)ԑPD$$9(9t$$~jDx@t[D$PT$RԑP tWԑP|$tԑPdD$]EFE/$9(wjh? $ԑP |$u[^_] Ð[^_] ÐS=؉tEjPԑP+1ۃ 9ؑ~j ԑPC9ؑ؉[ÐWS\$0щHD$ؑ+D$D$PPԑP …t,j0щL$ L$ D$ PSԑP$9(wjh$؉[_ÐTWSD$`Phc\$S0щL$L$ؑ+D$D$l$D$PPԑP …t,j0щL$L$D$PSԑPhcS0щL$L$ؑ+D$D$l$D$P@D$ D$ PԑPJ …t,j0щL$ L$ D$ PSԑPx$9(wjh$ԑPԑP ؒPj,$|PjjܑHPؑHPj% j[_TÐS\$jT$ QRԒR_J} hchSԒR =t hd[S\$jT$ QRԒRI} hchSԒR =t hd[à UWVS111ɡ9}81Ґ~!wC~FA9|΃=uE~C>1ɡ9ܒō}|$1D$D@=uu9ܒ| 9D~>~9Ē| 9D3~"9L$~;9|.|$9D;DDDD$A9X[^_] Ð1ɡ9ܒō}|$1D$|uD|=}9ܒ| 9DDc~9Ē| 9D3~49L$~9||$9D;~DDD$A9@[^_] ÐWVT$ 9~&RܒB9 ^_ÐUWVS\$l$$9~.@[ܒĒ9[ܒܒL$(LL$,LL$ L L$LL$L[^_]ÐUWVS\$[<ܒl>~*SR D@wD>DSH9}0D[@w[ܒܒS~[D[@ܒ[ܒH9}[D[ܒ[H[ܒDD DD~rt ~D[|w TBH9t}D[<w[ܒH~#ܒ1ɍ@T 9~JT 9|[^_]ÐUWVSl$(D$1ۋt$ ED$)@D$|$~s=tS}#hLfy[^_]ĸÐ1҃|$uR|$W|$$WjjPl|$~$W%|$t|$~ =|$|$W|$W|$$Wjh|$$W[^_]ĸÐܒHÐ0UWVS|$$fjPԒ} hfjD$BPSD$$PhԒPu<=u L$ =u L$ =u L$ =t=t =u hf&=̉D$l$<1ې+L$tW+519wP+HP19vP+PD$$PL$,Qt hf+u|$$D$|$m|$4<t$$PD$BPD$ \$<11Ҋt<u F~~ hgt$PЋL$HPRL$PL$ PL$,QD$0 t hg11t F~B ȉPD$BP=7 [^_]0ÐUWVS\$t$ F FC~~FFCVF)@C VT$--D$~ x |$=ˆS=Ǚ=ՈS=LjC|$D$$C--~~ x=ˆS=Ǚ=ֈS=LjC|$D$$C[^_]ÐUWVSl$D+C~19~6ܒ1wWPtC9҃=uhP?fDžU[^_]ÐUWVS|$t$ 1ɋ9}.9,tA9|9 t fUtD9I}D9A~VP1Ƀ9ܒvD$D$DH9t D$A9|9 N IL$ցܒƇƇܒ+F+ܒ@  ܒT$D$=~ hl$=T$D$C=ř=T$D$C=ňCl$D$$CT$n|$~ D$ h=ˆS=ř=ֈS=ňCl$D$$CfLJU[^_]ÐXUWVS1hg: PPԑP tjjFhJgԑPJjjPD$P {u D$ȑԑPjjԑP[^ÐSh]hV [^ÐUWVS|$l$11ۅuVh`hW@ .PhhhW- uhnhWFC~~hnhWhnhW[^_]ÐUWVS=ЉtD$D$ PPԑP tjj5hphԑPjjP\$tSD$$ |$0tIhhSFD$|$uUShh\$$SxSz[^_]İÐD$ԑPjjԑP&PhhT$Rj$$SWST$0RO1 95~H|$ݻܒ1~"PUBST$RWUT$(R F95ƃ|$t#=ЉuT$Rh[^_]İÐ [^_]İà UWVS\$4|$8Ou hhhhSǃuIShh\$SS[^_]ĤÐ1ԑPkjjԑP|PhgiW0hnhW%hiWhiW$hiW195~Dܒ|$t9|hWD$SWF95ąt,=Љu(W[^_]ĤÐ[[^_]ĤÃ$UWVSD$@1D$0D$,D$(D$$111D$ D$P T$ PT$|$<~h(hPT$X)@D$05=ϋD$=~ HD$ؙ=~ XD$AL$,D$$T$(ؙэYƉыT$0RUVSQT$0RT$3Ct-HSNPhsVg PPԑP@ tjjhsԑPVjPSjj jSrB=wD$qhs+PhsV PPԑP tjjh tԑPVjPSqjj jSB=wD$h'tPhsV' PPԑP tjj'h;tԑPEVjPS~cjj jS6B>wD$:hct*$9(wjh $k|$=DܒPL99ܒ~RVR@w R R5TvH9ܒJRH9~IB9}2D@wT"jRAPjjjWmD$[^_]ĤÐUWVS1D$<tFC~ؑعS$V<$|$ D$ D$l$\$l$ T$B )щ͡ԉÃ9~݋t$]9!jSԑPԑPC9~1>t0|$@P*PԑPEPShytGC~T$Rht\$,S# QPԑR ƅtjjhtԑP=Sj$Pǃ t$tfpt Љt$D$uL|$uf,xt{t$tt7Љt$\\$|$uht/[^_]ĴÐ|$u htސ$ ID$[^_]ĴÃUWVSl$$D$ ԉș= ȃt$)ƃ=ĉu6jVԑP1ۃ 9ؑ~j ԑPC9ؑDmܒ|3D@PPhtPVGL u8PVԑP t4jjhtԑPCQhtPVDmܒܒt|~9D|tpjjhtWܒt|~9Dt< |t0PVԑP/ tjjhtԑPtPVԑP jDm ܒ| tCL *}teu,e%ued0HPDm ܒ| tDL +}teu-e&uedSԑPwDmܒLu3PVԑP jjhi{u,PVԑP txjj hbK<tFPVԑP| tBjD0HPRԑPQhLiPVVTmT$D$+ܒC ȉuSu;D$ؙ|$Qh uPVuS<$|$T$ T$l$$Xl$P$E@t3|$T$ T$l$$Xl$ uP<$  u$h uPVW щT$ؙ|$P$Q $S<$|$D$ D$l$$Yl$Q$E@t7(u|$T$ T$l$$Xl$P$Q$D@u7TmD$ ܒș|$Q$E@thuHPVZ [^_]Ð=܉0= ؑQ$|$D$ $,$l$=|$D$ $,$l$=|$D$ $,$l$=|$D$ $,$l$=|$D$ $,$l$= |$D$ $,$ l$ܑB+  ܉ÐWVSؑ@P膽ƃ=؉tQ19ؑ~>SPԑP蚾ԑJB$R@P3 C9ؑġؑ0ԑP<=؉t=jPԑP= t#j0HPVԑPvh0uhAuV0ۉщL$L$ؑ+T$T$l$D$PRԑP t,jщL$ L$ T$ RVԑPRhKuV芽щL$(L$(ؑ+T$(T$(l$(D$(PT$,D$,PԑR. t,jщL$,L$,T$,RVԑP\RPRhZuVщL$IhctPhyhh>jgh0uhyhhj8̉0=ЍX19yЉtkЉt Љt[^_]Ð[[^_]ÐWVS\$L$T$t$|$ ̀}أ [^_Ð[^_ÐUWVSl$\$ t$$|$(=tP u*v" [^_]ÐWSU萬 [^_]Ðډ1ɉЉWT$RQPU&u.= &uzD$D$D$T$[^_]S=t Ѓ;u[ÐÐ[/dev/hdaBBTDOS secondaryDOS R/ODOS accessCP/MSyrinxBSDI swapBSDI fsBSD/386Amoeba BBTAmoebaLinuxLinux SwapLinux/MINIXOld MINIXPC/IXNovell Netware 386Novell Netware 286GNU HURDMicroportNovell?Venix 80286OS/2 Boot ManagerAIX bootableAIXOS/2 HPFSDOS 16-bit >=32MbExtendedDOS 16-bit < 32MbXENIX usrXENIX rootDOS 12-bit FATFree SpaceDisk has been changed. Reboot the system to ensure the partition table is correctly updated. WARNING: If you have created or modified any DOS 6.x partitions, please see the cfdisk manual page for additional information. FATAL ERROR: %sPress any key to exit fdiskCannot seek on disk driveCannot read disk driveCannot write disk drive!!!! Internal error creating logical drive with no extended partition !!!!Cannot create logical drive here -- would create two extended partitionsMenu item too long. Menu may look odd.[%*s%-*s]%*s%-*sMenu without direction. Defaulting horizontal.Illegal keyPress a key to continuecDon't create a partitionCancelCreate a new logical partitionLogicalCreate a new primary partitionPrimary!!! Internal error !!!%.2fSize (in MB): Add partition at end of free spaceEndAdd partition at beginning of free spaceBeginningNo room to create the extended partition{Gz4@Y@@@?Cannot open disk driveCannot read disk drive geometryBad primary partitionBad logical partitionWarning!! This may destroy data on your disk!Are you sure you want write the partition table to disk? (yes or no): Did not write partition table to diskPlease enter `yes' or `no'Writing partition table to disk...Wrote partition table to diskWrote partition table, but re-read table failed. Reboot to update table.%s0x%03X: %02X Enter filename or press RETURN to display on screen: wCannot open file '%s'Disk Drive: %s None Pri/Log Primary Logical%2d %-7.7s %7d%c%6d%cUnusable%.16s%.16s (%02X)Unknown%-21.21sBoot (%02X)Unknown (%02X)None (%02X)Partition Table for %s First Last # Type Sector Sector Offset Length Filesystem Type (ID) Flags -- ------- -------- -------- ------- -------- --------------------- --------- %2d 0x%02X %4d %4d %4d 0x%02X %4d %4d %4d %7d %7d ---Starting--- ----Ending---- Start Number # Flags Head Sect Cyl ID Head Sect Cyl Sector Sectors -- ----- ---- ---- ---- ---- ---- ---- ---- ------- ------- Don't print the tableJust print the partition tableTablePrint the table ordered by sectorsSectorsPrint the table using raw data formatRawHelp Screen for cfdisk 0.8d BETA (>2GB)This is cfdisk, a curses based disk partitioning programs, whichallows you to create, delete and modify partitions on your harddisk drive.Copyright (C) 1994 Kevin E. MartinCommand Meaning------- ------- b Toggle bootable flag of the current partition d Delete the current partition g Change cylinders, heads, sectors-per-track parameters WARNING: This option should only be used by people who know what they are doing. h Print this screen m Maximize disk usage of the current partition Note: This may make the partition incompatible with DOS, OS/2, ... n Create new partition from free space p Print partition table to the screen or to a file There are several different formats for the partition that you can choose from: r - Raw data (exactly what would be written to disk) s - Table ordered by sectors t - Table in raw format q Quit program without writing partition table t Change the filesystem type u Change units of the partition size display Rotates through Mb, sectors and cylinders W Write partition table to disk (must enter upper case W) Since this might destroy data on the disk, you must either confirm or deny the write by entering `yes' or `no'Up Arrow Move cursor to the previous partitionDown Arrow Move cursor to the next partitionCTRL-L Redraws the screen ? Print this screenNote: All of the commands can be entered with either upper or lowercase letters (except for Writes).EOHS!kdklVldbldllllmWmmmmn\nxnnn+oRoooo&pNpppqCqqqqqrd9r}rrSNHS!%s Done with changing geometryDoneChange sector geometryChange head geometryHeadsChange cylinder geometryCylinders%dEnter the number of cylinders: Illegal cylinders valueEnter the number of heads: Illegal heads valueEnter the number of sectors per track: Illegal sectors value%02X %-16.16s%02XEnter filesystem type: Cannot change FS Type to emptyCannot change FS Type to extended%s%dBootUnk(%02X), NCNCPri/Log%9d%9.2f*{Gz4@Y@?0.8d BETA (>2GB)cfdisk %sDisk Drive: %sHeads: %d Sectors per Track: %d Cylinders: %dNameFlagsPart TypeFS Type SectorsSize (MB) -->Write partition table to disk (this might destroy data)WriteChange units of the partition size display (MB, sect, cyl)UnitsChange the filesystem type (DOS, Linux, OS/2 and so on)TypeQuit program without writing partition tableQuitPrint partition table to the screen or to a filePrintCreate new partition from free spaceNewMaximize disk usage of the current partition (experts only)MaximizePrint help screenHelpChange disk geometry (experts only)GeometryDelete the current partitionDeleteToggle bootable flag of the current partitionBootablehnpquWbdhmpqtuWhpquWCannot make this partition bootableCannot delete an empty partitionCannot maximize this partitionThis partition is unusableThis partition is already in useCannot change the type of an empty partitionNo more partitionsIllegal commandCopyright (C) 1994 Kevin E. Martin %s: [-avz] [-c # cylinders] [-h # heads] [-s # sectors/track] [ -P opt ] device ac:h:s:vzP:%s: %s cfdisk %s /dev/sdaxaP-Fbbbbbbb{bwbjbXbLbDb:b1bb bbaaaaaaaaaaaaaaacd?epeeleyereYebBffefereYerkks{kXktRk3krekcsshsss{k{sdvsZsbwwdwwgwowhjwXwmOwwnwvpvvqvvt|vDvu>vvWuu`          . > N ^ n ~         .>N^n~.>H p  pa4  `  PGCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#L) 4419   PB   `Kp p Qx x VPPR\papabxaxa$jypw~``HPELF4H4 (44/lib/ld-linux.so.1    ("xX'X3( :kM, Y"` jp(F|8;! H"0 4 X,@  h8x>4 xx8 libc.so.5printf_DYNAMIC_IO_stdout__IO_stderr_optarg__strtoul_internal___brk_addrfflush__environ_init__libc_initiopermenvironfprintf__fpu_controloptindgetopt_finiatexit_GLOBAL_OFFSET_TABLE_exit__setfpucw_etext_edata__bss_start_endx( , 0 4   +5%%h%h%h%h%h %h(%h0%h8p%h@`%hHPYЃPSQ̀-̀, D$0 P:h@ pPm[̀S=t Ѓ;u[ÐÐUSfEfЉU҉UfMf ]] ؉fA1怈ˉȋ]]ÐU S]fEfЉU҉UfMf EU ЉfA؉怋]]ÐUVSUUu V]SC E%PVSe[^]ÐUWVS]} WuV %PWVGe[^_]ÐUWVS}Ex } u h et h T1EEjjPrjjhdjEPl؃tSEPh  ~we$ @@Pppp``Ex E EE ]u!EPj,EP E}>t h P}u} u h 7-}uj,jq<uEux  uMf怰7j@j:jjj*ڃtE ]j@j:j jjjGjj%=uSjj؃u? tE E EE+EE} th $ EPEPEPh1e[^_]ÐUfE fU1f%]ÐUfE fUfEf]ÐUVSu1ېPVf=~} uVh#lhxhjVjjVjVXÃ$jjVijVAftPjVMKhjV3jV f=u%#e[^]ÐUVS] uu h2hxjjVjjhSV$$u h ^-t hJ: VPhP,1e[^]ÐUWVS11E@1ېheU RURN tnttmtBPvt+I( jjjPE믐롐두끐u U94 }!U PhkhjtPh4WVu jURWVU ujjqS=t Ѓ;u[ÐÐprobe.c 1.13 1995/03/24 23:50:49 (David Hinds) i82365slIntel PCIC probe: ident(%d)=%#2.2xVLSI 82C146IBM Clone not found. Vadem VG-468Cirrus CL-PD672xCirrus CL-PD6710i82365 %s rev %d found, %d sockets at %#3.3lx: Databook TCIC-2 probe: tcic %d sockets at %#6lx t:vxmusage: %s [-t tcic_base] [-v] [-m] %sH .>N^n~  @ P  PT0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#) 1PP9 TT0B PKQV\@ @ bH H Jj pw~4xxx6ELF 4"4 (44!6T!T!/lib/ld-linux.so.1%</ 2!$49)50 .7-*;+1,6  8#"(%: '3 &   "" X* #3T!<!!B "I!XU `[P"b XiT"u d| "h  p ( F8 "h ! H "X lh X"x T " \  " <  " , I "# 5(@& / 5( &"=8 8D# OH qU kX ph >{` x " y " " " " !!!6libc.so.5strcpywritevvsprintfconnectstrerror_DYNAMICerrnogetpid_IO_stderr_sleepoptargsocket___brk_addr_xstatfflush__environ_init__libc_initwriteenvironfprintfctimestrcat__fpu_controlsignalreadopenlogcloselogstrncpyforkstrncatindexfopengetoptmemsetfclosetimesyslog_finisprintfatexitsetlogmaskfputc_GLOBAL_OFFSET_TABLE_exit__setfpucwvsyslogopenstrchrfputssetsidclosevfprintfstrpbrk_errno_etext_edata__bss_start_end! P" T" X"!7                 !!! ! !!!"!#!$ !%$!((!),!+0!-4!.8!0<F$ 0@1q^N>.D$PVS  [^ÐWVS|$t$1ۃ= Vhh! Phh!9 ;PPShh!C9~= tHh!h Phh!Mh`"h'h!9 = hjh`"h,WÃt\V))PWh`"O{`" < t< th`"jw hjh`"Q~= t]h!h/VhJh!p Ph[h![ h!hgh`"hoh!5VWh`"5 1  [^_ÐUWVS|$ 11hWT$$RD$ |$D$w$PPPPPPPPPPPP 5P"e Q-P"E| 1x !tW0HwPh0u!Vhh! [^_]ÐУt =| u<u#1VFvjD$jL$QD$|$~hjzhj nhjbhjV hPjGhp j;tLhU uF!PbPUh h![^_]Ðjjh( 2 =| rp6ucgd&̀| أ!}f!tjPP!Phsh!2;hhd&`&PSƃ }=!thjVhd&g11̀}أ!p6t7rOuJg111̀}أ!h+jL!`&PhPj) t P/hjj t Pwj8hl PƃtPh/ VVjqp6p6tnrugd&̀| أ!})!tPP!Phsh!rVEhhd&`&P }$=!_hjD$D$Phd&55L$T$D$ PRQ Ð UWVS$0 $4 D$-!Ѕ = | =6uj  P P u 5 \$(S,SfPVh: $@Sރ$,tF>u  tt$ tPVM>tF>u tPhE V >tF>u= t:F F\$,K<%u<mu6GU'D$L$AL$tCT$BT$uCGu$8 QD$0PV$80ȉ֍^   t5T$T$D$))É\$D$ J D$$jD$PjN VU P }U tLjhhL ǃ |2hY U^j>U.p))ÉPVWW [^_] ÐWD$T$ L$t  u = uBf6jh\ h6{  tjjj  = t@=6u706@Ph6 PE t 6_Ð P 6ÐT$ t ÐS = t Ѓ;u[ÐÐ[/var/run/klogd.pidKernel logging (sys_syslog) stopped.Kernel logging (proc) stopped.Kernel logging re-started after SIGSTOP.Kernel log daemon terminating.Cannot set console log level - disabling console output./proc/kmsgKernel logging (sys_syslog) started.klogd: Cannot open proc file system.Kernel logging (proc) started.Logging line: Line: %s Priority: %c Log buffer contains: %d characters. Line buffer contains: %d characters. Character #%d - %d:%c Line buffer contains an unterminated line: Count: %d %s No terminator - leftover: Characters: %d Index: %d Line: %s Error return from sys_sycall: %d - %s Cannot read proc file system.c:df:os1234567klogd: Invalid console logging level <%s> specified. wklogd: Cannot open output file %s - %s kernel%d syslog<%d>%.15s [%d] /dev/console /dev/log3 T!          . > N ^ n ~           . > N ^ n ~        p  4t   08(GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#) tt1449 (B 880Kp p Qx x pV  \bMjh h 8p  w  ~  T!T!!!!H8"     ELF4E4 (44AAAQ@5DDDT/lib/ld-linux.so.1CU0I="3$ R+)<J7E;(DL-#TA,/H1 SCKG&QBFM.N8:   '!256%49*@PO>?  @ # ("* "8DTATKT!Qc"j("pTX|8HC"X`8U]("b8yiH"p@WX"hQPU$P`p8UQ8Ujj jP@,S8UQK9LUt3=u= tj"19}SRC9| fhQh܄jAhdj.hdƒtBa;h@,j=t@,Rj=t@,Rjjj jjh)jh*jjQPfDŽ$ jlQP$$Vjjji‰Q|K0@PSR |+hQPZ|jQPf}@QPhb;\$,S:S=tTPQPhs;2 jjj D$ h;h;ƒuTh;fDŽ$8Bf$:DŽ$<jD$$PjjP}h;lj$<PP }h;BQ$S=t h;1h <h><QPKÃt-Ph@<SS[ƃ=tVhD<P `uht<Oj19}`C9|=t h<q$H1󫍔$(T$l$$TQ$(1Ґ$Ht$(Bv=$St Q$(=t|$Wh<jjjD$$Phiƒp}"=Tah<;O=tL$QRh<o Q$(D$tPD$nD$P$LPQP4ƃ ~$H=tVh=$(1$($H=tVh*=hjUhUV:Ã~VSUhd}=ThI=z=tVhW=T`<tBhp=D$(V0ҋ `߈҉T$D$PUhdOVn$L$,F=$S Q$(L$xD$hjUD$(P$8VjhUPÃ$=t!$,PPQPh=S~4D%D$PCPUV Pp=Th=j bh=hTj=uÐ UWVS$$$,=t,$(Wh==tUh>lD$`<=t h(>B`P\$S`P`0҉ЍD =v.hG>S$(W =t%Shj>=tVhx>V\$SS$,W90Ѓ9$(jVX$(|>7$(x|$xt9t$v L$|$?uD$0T$ЍpP0¡`uh>mH|$WR}=t`Ph>Vj|$W jCPS$,WD$$#D$$Xxu[^_] ÐUWVS$ $;uCt T$ CtL$9s? u  *THt^B@ ȈB CujUD$PV [^_]ÐUWVS$h>t$V0ЍDD$;$;uCtT$9sBt C uWhdD$PQ&;V[^_]ÐUWVSt$(l$0=tVL$0QUL$0Qh>0Ѝx~~ u~ u~ :u ~ :u~ th\Wdt!h\WD$t$tD$D$$%D$L$$L$=(Su\hhQff\=uVUhQP[^_]ÐD$`WL$D%L$f;u t4\W+S,S,S994PVPL$0QjL$QP8J8 =t(<QP\W+CPBPh><K Q9\WjUS<H<@ ǃ<8t jjS ǃ<jL$QPjAL$?\WEU`$p$$%%p%$&&='hL?=tE$PhN?!$P0PhS?t$pVhL?V50ЍX~jEhPjSVP9TEPfEThZ?4`t(=?ha?Y-=tE$PhN?1f}tm?C L?Cj$lPEP }xTEPP u@f}t9h]$SfEf}fES&=ufETE$P+ZtLEPf==t hL?Em?C$hPU/Dž8[^_]ĈÐjhDWXWVS4S=4Skhp?hr? D$|$ u'hr?]4S[^_XÐjjjkh&jh\WP$BPh|?|$xW*0HD$8(T$ Rjj8$(P>z$8tf$tɍ$8?t$hf9uS1$1$h|$j$<P$pPA t F~ƒQ?$Tf?f$Xj$(P$\Pd $hf9uL$T$l L$JB hDWuYjh$\P?à |7D$PSj u|$}j$pRS S2j|jL$ Q4S[^_XÐS\$jjS h)j[ÐVS\$ f;t$=t h? ?[^ÐjjCP{ƃ u:=tCPPPh? CP9[^Ðj.PÃtPCP&u[^ÐUWVSj\W0S0S9,S j hdh?j0S1Y`W1YtbQD$dW9\W|G=tT$RQQPh@jjWP@ v@@@Exh*jja [^_]ÐdT$hTu Rh(@D$P F9t#PhA:u FC>uPhAtF萐$$=u&D$,hR$)PhRL$,QŃT$(Rh AL$,QX Tu$T$$Rh(@L$(Q8 J9,tF>ujW$4D$P )σ ~$,D,&$,D)$F<,t< tD$ Cu$,f[^_]Ð(VS\$4=tShATDPt!jj jS[^(ÐS\$ SMڃ|$t  TDHt @WB:u\$8;tKsPD$ Pu(=tPhA[^(Ð;u[^(ÐS8S=8St Ѓ;u[ÐÐ/dev/log/etc/syslog.conf/var/run/syslog.pidWALLUSERSFORWCONSOLETTYFILEUNUSED*warningwarnpanicnoticenoneinfoerrorerremergdebugcritalertlocal7local6local5local4local3local2local1local0uucpusersyslogsecuritynewsmarkmaillprkerndaemoncronauthprivauthdf:m:p:cannot create %scannot create %s (%d) udpsyslog/udp: unknown service, suspending inetsetsockopt, suspending inetbind, suspending inetlistening on syslog UDP port syslog: Unknown protocol, suspending inet service.w%d Allocated parts table for %d file descriptors. Cannot allocate memory for message parts table.off & running.... readfds = %#x selectgot a message (%d, %#x) --------------------------------------------------new connect (%d) message from unixd socket #%d recvfrom unixUnix socket (%d) closed Printing partial messagemessage from inetd socket #%d, host: %s recvfrom inetusage: syslogd [-d] [-m markinterval] [-p path] [-f conffile] Message length: %d File descriptor: %d Including part from messages. Cannot glue message parts togetherPrevious: %s Next: %s Cannot allocate memory for message part.Saving partial msg: %s vmunix: logmsg: pri %o, flags %x, from %s, msg %s msg repeated %d times, %ld sec of %d last message repeated %d timesLogging to %s %s <%d>%ssendto (ignored) r/etc/utmp Message from syslogd@%s at %.24s ... LOGIN/dev/Malformed from address ???Host name for your address (%s) unknown -- MARK --flush %s: repeated %d times, %d sec. syslogd: %ssyslogd: %s: error %dsyslogd: %s: %s%s syslogd: exiting on signal %d exiting on signal %dinit cannot open %s *.ERR /dev/consoleX %2X %s: %s%s, syslogd: restartsyslogd: restarted cfline(%s) ,;, ;unknown priority name "%s" .; ,;.unknown facility name "%s"leading char in action: %c forwarding host: %s filename: %s write-all users: %s symbolic name: %s ==> %d 8:A:R:/dev/console<::~:v:q:k:f::::::::::::::T; K;PF;H?;:;6;01;,;';8; ;(; ;@;:::::::DT     .>N^n~.>N^n~.>N^n~.>N^n  0:P  HS h PGCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#h) PPP19 h h PB   K  Q  V(\0:0:b8:8:jQAp8S8Cw@S@C~HSHCDTDDTD$2D6 E     ELF 44 (44'HH(/lib/ld-linux.so.1%'  $  #"! % & ("#"6.H(7(!=(XI@)XU#`(g)n)z8dH"' X"h"xF'! "))"@ 8'>y""$Q)(047(>(J)libc.so.5strcpyprintfstrerrorgetopt_long_DYNAMICerrno_IO_stdout__IO_stderr___overflowmallocoptarg___brk_addr_xstatfflush__environchownchmod_init__libc_initenvironfprintf__fpu_controloptindumask_finiatexit_GLOBAL_OFFSET_TABLE_exit__setfpucwstrchrmkdirvfprintffree_errno_etext_edata__bss_start_end(@)) ) ))("''((( ( ( ((( ($(((,(0(4(8(<(@( D(!K5'%'%'h%'h%(h%(h%(h % (h(%(h0%(h8p%(h@`%(hHP% (hP@%$(hX0%((h` %,(hh%0(hp%4(hx%8(h%<(h%@(h%D(hYЃPSQ̀-̀)D$')Pb h@0@KP-[̀S'='t Ѓ;u[ÐÐUWVSE1U ))jhHhU RURtWmt2t:pu+)뷐)U띐j댐=)t'Ph_j(=)t jPU9)uhjjj-jЉƁU}jUR9Ãu URhjj>uhjj SVS =)t7jjhhURV)U P ǃKV)U PFt&)U Ph (Pj)U9)lWUS]t%)Ph'h@)x()PhNho SuUWVS}] u='t'1h()Phlh@)EPVh@)G tS:Phqh@)T)9X)wj h@). T)h@)EtWe[^_]ÐUdWVS]UUU UfUfUfUfUEjB%E0Ѓ$)ĉSVW]SVj } =(tEE%=uf}t)f}t!EtEEUUE>/uC;/tj/SÃ}WVj } =(tEPV}tVURjjf}tL=t'>+uMu"*MuMt fEff!fSfCCF ?$000000000000000000000000f%$f CAf%f C1KfIf Cf% f Cf%f Cf{uyfCf{uifC8f{uYfCK>=>+>->,x>uESMQ1e[^_]ÐUWVS}] fCt^f#KfCtff.C8tfffff f f#K*fKCt%=@t fIuᶊ<-t(<+t(<=u$fCff!f ff!Ƌ[9ƍe[^_]USEtXPs؃u]]ÐUU:u]Ð1LB<v:u ȉ]Ð]ÐS'='t Ѓ;u[ÐÐ[m))))versionhelpparentspathmodepm:%s too few argumentsinvalid mode `%s'virtual memory exhaustedcannot make directory `%s'Try `%s --help' for more information. Usage: %s [OPTION] DIRECTORY... -p, --parents no error if existing, make parent directories as needed -m, --mode=MODE set permission mode (as in chmod), not 0777 - umask --help display this help and exit --version output version information and exit %s: : %scannot create directory `%s'%s`%s' exists but is not a directoryGNU fileutils 3.12H(.>N^n~  @  O '8GCC: (GNU) 2.6.4 snapshot 950518GCC: (GNU) 2.6.3GCC: (GNU) 2.6.3GCC: (GNU) 2.6.3GCC: (GNU) 2.6.3GCC: (GNU) 2.6.3GCC: (GNU) 2.6.4 snapshot 950518.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#8)   p1O9 8B KQPV   \@@bHHj' p'w'~'\H(H(~     ELF 4-4 (44,2 , ,/lib/ld-linux.so.1%, &)!%($'#+"     * "("#! ,*,4";,!A,XM"T;[`a-h-o-{-) "pF)! (" -$-8THX"h,x*# &"8+27>B"G"M,T#[,b,n2libc.so.5ioctlprintfstrerror_DYNAMIC__ctype_bfchmoderrno_IO_stderr_system__opensleepoptargopterr___brk_addr__ctype_toupper__environchown_init__libc_initstrrchrenvironfprintf__fpu_controloptindsignalstrncpyunlinkgetoptstrcmpgetpwnam_finisprintfatexit_GLOBAL_OFFSET_TABLE_exit__setfpucwopenclose_errno_etext_edata__bss_start_end,,- - -- -$-,'+++++ + + ++++++++,,, ,!,#,$,%,&5+%+%+h%+h%+h%+h%+h %+h(%+h0%+h8p%+h@`%+hHP%+hP@%+hX0%+h` %+hh%+hp%,hx%,h%,h% ,h%,h%,h%,h%,hYЃPSQ̀-̀-D$) -Ph#P+ PM[̀S+=+t Ѓ;u[ÐÐUE=*tu 1]Ð} PhR$h\$h(-hhAh(-}F,t$=(*uPPh(-hg$h,]ÐPh$(ƒu'=(*Mh$h$h,4B PBPh(-T4*Z=4*h(-}2=(*],PPh(-h$84*1]U$WVS}ܾ2 =,*th%h3%W=)t()1h%Ptv~;uߺ| E% ЉEEPhT*P }J=(*u,PPhm%h,^,)뒐1}*=(*,PPh%jh2hT*PI }:=(*u,PNPhm%h,, 1}:=(*u,PPh&h,~,1e[^_]ÐUWVS]j/S)tQh)&SjjS}3=(*,PSPSh1&h,*=,*t&PShQ& *Džh2hT*P }0=(*u,PPhP%h,D,1}=(*Uhn&A22 h2h$T*PQ }2=(*u,PVPh%h,,1}*=(*h&)22= *2HJ}222222%2=*t 2 2} =,*tM Qh3%S=)t))1M QP!;u޺} 2% У21t)=(*M Qh&h,a=,*t"'Ph$2ω2"'<6t)<5tF.<7t<8t( 02=,*t$'Ph$$$'<1t<2t%2 2@=,*t&'Ph%&'-Nt'Et@^OtI%2d 2T22>=(*uh('h,,h2hT*P }4=(*u,PPhm%h,x,1|**=$*thPjQ[^_]ÐUEhP$U2EuERh#T*PI }1=(*u(,PNPEP*Ph%h,jj+j)UWVS]DžDž'Dž'E-h'U RS e*9$0000000000000000000000000000Pp0000-+**+**+**+**+ * *j+$*$*J-/+(*(* -+,*,*+0*0*hR'h,jrRuV't0=(*uRh'h,7u *C $-9t$hR'h,MjhU P]SC޿'1t FO)ȃ u*1Rj*j/SƃtF ދRVa} `2DžPh#T*P }4=(*u+,PPP*Ph%h,8jj1*PBЃ=0*uPh*PD }'=(*u,PIPh%h,Rh'tVh'Ph'hjhjthjhhj\ =*=*u;DžPhT*Pr @tj j<밐2u DžQh#T*P }4=(*u+,PPP*Ph%h,_jjtRj[^_]ÐU*'* (*(**( +?(,+W(l*o(L+v(l+(+(fd*]ÐUVSuf=d*um*'* (*(**( +?(,+W(l*o(L+v(l+(+(fd*8*=8*t+VPmu;u1e[^]ÐUMf=d*um*'* (*(**( +?(,+W(l*o(L+v(l+(+(fd*8*=8*t9Ht :u1]ÐUWVSu(11PFh(Sà Gv0(1ƀ&1(1e[^_]ÐUWVSUff=tfu9(h1(l1f(fp1(r1h1Lr(11PFh(Sà Gv0(1ƀ&1(1e[^_]US]EEPh#TSx }9,PPEPh(h,,؃1|ZEEPh&S }-,P*PEPh(h,,1| 1 ]]ÐUS]EEPh#TS }9,PPEPh(h,",؃1|ZEEPh&SL }-,PZPEPh(h,,1| 1 ]]ÐUS]EEPh#TS }9,PPEPh(h,R,؃1|ZEEPh&S| }-,PPEPh(h,,1| 1 ]]ÐUS]EEPh#TS }9,PPEPh(h,,؃1|ZEEPh&S }-,PPEPh(h,&,1| 1 ]]ÐUS]EEPh#TS8 }9,PFPEPh(h,,؃1|ZEEPh&S }-,PPEPh(h,V,1| 1 ]]ÐUWVSuU P+fUE>}Fʡ,DHt<w<w@Fڡ,DXtC><wC&<v,9C ȋ}G}E>:HFB1e[^_]ÐUUBPBPBPBPBPPh)h1f1]ÐUUff=tfu<5)19)1f=)f1?)11]ÐBPBPBPBPBPBPh)h11]ÐUhF)h,F]ÐUWVSuU +fUE>}Fʡ,DHt<w<w@Fڡ,DXtC><wC&<v,9C ȋ}G}E>:HFB1e[^_]ÐUEPhs)h(2(2]ÐUUff=tfuN^n~ p #4 s +hHGCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#L) 441s9 hhHB KppQxxV  \##b##j))p++w++~++h , ,,,H,R-     ELF424 ( #-#--=,YЃPSQ̀-̀8?D$=tr5t+.BPMQBЃBЉ؃Ku?uFMQ}U]ÐUWVS} uD-H-H--D-tL~/~ }=VWURD-Ѓ H-VWURЃ VWURЃ H-sBVWURЃ VWURCЃ VWURCЃ VWURC Ѓ H-re[^_]US]M Ù} أT@[]ÐUS]M Ù} أT@[]ÐUS]-̀8?9tT@ 1]]ÐUS]̀]]ÐUfUfur}fEf%fEf%?fUf fEm]ÐUVSEP@?Љ%t)S@?މe[^]ÐU@h0‰\AtZ@@PjR\A@@TA`A@]Ð1]ÐUWVSMQǃu1=E+`Ay @9@@U+`Ay @9~ 吐[PƃuEP@?1[PjV\A@@PRV \AM+`Ay @D E+`Ay @@@ D5\AMQ@E+`Ay @XAe[^_]ÐU WVS]=@u wKFu @MtlMQ}?tGB]+`Ay \AD@LM%Dh6Ek$A}}}@MO@E}9U\Ë}}E~\~.EEMMM}O@xЉEE䋃@}MO@xBЉEE䋃@}MO@xB9UЉEE䋃@}MO@xBEE䋃@}MO@xBEE䋃@}MO@xBEE䋃@}MO@x9UQ]+`Ay \AD@4JTT]m TA]5\Aڍ}9<\9]^[4=XAt^9XAuTj@?ЉC `A9u6M)Ή PDt\AX[4ME PE+`Ay \AD@5\AڍM9 'C `AE5\A[E}9<~a߉}M +M }D>DD>DD>@D>@M TALLE1\ \A[D4@DDD4@DTAD\A[}|Ee[^_]ÐUWVS}}+=`Ay x\A4p5TA9~vt9*\Avt~9|\Avt\Av9uDB\A D  vDD t |D @|\A9Du@D@DD@|\AU~i4;95XAu^j@?ЉF `A9u@)XA P@?Ћ\AMD @D DD @D D| =TAxG `A \ADE}EH \A9D<$A $Aھ9u~1t~~FF9u~9uCtCB\ADG `AP\A|t1MY 9tH\ADe] \AD% \AD@@K@;tXe[^_]ÐUUt2D?t#9Pu@PuR]UM9}5P@=P@t!9 uA44:u!]ÐUU:| P@B4P@]UEP+P @0t9P}PuЉ]ÐUE HP,PH,H P$P H$P P]ÐUEHP,PH,H P$P H$PP]ÐUS]C9Cs!C8jSЃuCCt C(C CC C9CsCCCCCC#1]]ÐUS]Ct SC$P1C$C,C(]]ÐUUE J8PRЉ]ÐU WVS}WƋO+O )MG,+G$9EdȃdPEu},ڋ]]G,RPS )W G)PRSUUG MQPRZ $t G$P8MO$EEEG,`+EE}6PG,PEG$P_ UW$)O G)PQ!}~UW$G MQPR MO$O(W+W G0t )Pu1e[^_]ÐUS]CtSt8C9CwCtSAC9Cv9{0tSTt{$t SC8S@Ћ]]ÐUS]CtS=tHC9CwCt'SC9CvCF{0tSt{$t SDC8S@@Ћ]]ÐUWVS]u }{tu CP]s{ }t# e[^_]ÐUS]{u&uC8S@ЃujCLPCKPS}]]ÐU]ÐUS]C8S@Ѓt CC]]ÐUWVS] }}u 1}w+w9usu~"}GVSPt wz 1k}WN|PЃt&}} CBNCBICBI|$CBCBCB}ߋ}W)u}t$PC}WtM&E+Ee[^_]USUM EZ8PQRC Ћ]]ÐUWVS}}] }w+w9usu~}GVPSP wy 1k}WN|PЃt&}} BCNBCIBCI|$BCBCBC}ߋ}W)u}t}W3E+Ee[^_]ÐUUB9BuB9Bu 1]Ð]ÐUWVS]u }C8S@$Ѓuetu jCLPCKP#j7PVSpCCCCCC 1e[^_]ÐUSUM EZ8PQRC8Ћ]]ÐUS]hƒt&jPRS]]ÐUEU @@ @ @@@@@@4@$@(@,@0f@H]ÐU1]ÐUS]{tuCPC CC0t@u{$tC$P`C$S]]ÐU]ÐUUM B9B s8Hu J]ËB8QR@Љ]ÐUUB9B rB8jR@Љ]ÐJB]ÐUEfU fBfPH1]ÐUVS] u9vrщ)Ѓt#}}J: tKJ: tEJ: t?EBz tBz t Bz u)H': u)H 9wEe[^]ÐUUfzHu]ÐB+BPBPBHHP*]ÐUVS1P@t)C9CsC8jSЃu[4uډe[^]ÐUSP@tCt C8jSЃ[4u]]ÐUSP@tuC8jjS@ Ѓ [4u]]ÐU(]ÐUVSu] ^CtSCtS+SS+S VC0s0e[^]ÐUEP0:t9u]Ë:u]ÐUUE R+PЉ]ÐUUzu]ÐB@tH+HBH+H ȋR)‰Љ]ÐUVS]u 9^t@~|CtSS CuSSVS1e[^]UEx0t@0x$tP]ÐUUM B9B sJt R9t ]ÐUWVS}G9G $tGu W$u-ht@G$G,G(WjG9G r\w+w 6MQEu X])G ]VPS G PqMO _MOGG(O} tW9E tM Ge[^_]ÐU]ÐU]ÐU]ÐU1]ÐUWVS]Uߋu v؃)‰؍e[^_]ÐUWVS]Uߋu )9r'v؃)‰:׃v))ONON؍e[^_]ÐUEPu1]ÐUSU8?-̀8?9tT@ )Ћ]]ÐUWVSu]E v' Љ Љڃ)Ӊe[^_]ÐUS]CD $SC<]]ÐUWVS]{<}{S*SC8S@,ЉjjjSkC CCCCCS $Ch+libext2fs.so.2ioctl_DYNAMICerrnomalloc___brk_addr__environ_initwritereadext2_llseekmemset_finiatexit_GLOBAL_OFFSET_TABLE_com_erropenclosefreelibe2p.so.2_etext_IO_stdout_fprintf__bss_start_edata_endlibcom_err.so.2_IO_stderr_fflushstrcat__divdi3libc.so.5optarg__udivmoddi4__strtoul_internalalarm__libc_initenviron__fpu_controloptindsignalfopengetoptfclosefsyncexitsetbuf__setfpucw_errnop++ ,$,(,#,,$h+-`*d*h*l*p* t*!x*|**%* * *&*'* *(* *)****+*,***5X*%\*%`*h%d*h%h*h%l*h%p*h %t*h(%x*h0%|*h8p%*h@`%*hHP%*hP@%*hX0%*h` %*hh%*hp%*hx%*h%*h%*h%*h%*h%*h%*h%*hpYЃPSQ̀-̀$,D$(*(,Przh{P-[̀SP*=P*t Ѓ;u[ÐÐU,*Phh+ jU WVS}jEÉVSUR&EU9]u9uthh+R,*Rk EPU REPà }1ۍWtSh$h+1Íe[^_]ÐUh jyj2 @*t/P<*PhQh+@h[h+1h+]ÐUS]=0*thoh+} t'Szuhh+P,*Pl jj SO]]UWVSu EPCǃu"hj ,*P(j1jMQU=0*t&hh+RVMQhh+>M <*5@*=8*hh+ jh9v)RMQSWMQ<*‰<*9u*uR<*hMQ <*9r@*jL=8*thh+ah+WNe[^_]ÐU WVSEEE U%UEUREu'hj ,*RjjEP=0*th.h+EUUU𐐐EPUT*REP8* 0* tEPhZh+^ U @*E<*=8*jwjESQURBӋ5<*EEU9Mu9]tVhsh+R,*RwUREPUR <* <*9M w@*jn8* 0*thh+|jEPV8* 0*thh+LE @*U<*=8*jjESQUR2Ӌ5<*EEU9Mu9]tVhsh+R,*RgUREPUR 9Mwu}Mt<*PhUR <* <*9M U@*j,8* 0*thh+:jEPE}e[^_]ÐUWVS]} EEjhp+jh+t t,*hWS <!$0 ,EjjPREE8u }9 ,Phj,*Pj ,M 8*0*4*[K9,,~B,,E,,9,,~$,,ujjVPEE8t0,,Phj,*Pj,,,,9!jjVPÃ19]w)MQShj,*PZjc1=4*tPMQnEu+MQhh+P,*P j}tZutFhMQpƃu4MQhh+P,*Pjp+=4*t"SVMQMQMQ SVMQMQMQMQp+tVe[^_]ÐU$WVSE}}} }]u}}(EUډUMمtIM}}}}}U܉ډUمtIM]ujVSuu1Ӄ}tډUمtIMM]ȉڍe[^_]U,WVS]u EE܋UUԉ߉u}9vu܉EE/}u1u܉E܉1u܉EӉu܉E׃}j}EUM MJM9]v+EE}"} UԀUub9]r9}wE+}]EE}}]MEEA +UUMeԋE܉ EԋMe܉މM ËM؉uԉEe܉ƉU9wu9vMM+uMԉME}t,)]؉؋MM} E]EUUPMMEEEUe[^_]ÐSD*=D*t Ѓ;u[ÐÐ;badblocksUsage: %s [-b block_size] [-o output_file] [-svw] device blocks_count [start_count] during seekWeird value (%ld) in do_test: probably bugs %9ld/%9ldFlushing buffers during fsyncwhile allocating buffersChecking for bad blocks in read-only mode From block %lu to %lu Checking for bad blocks (read-only test): %lu done Checking for bad blocks in read-write mode Writing pattern 0x%08x: during seek on block %dReading and comparing: %ld done b:o:svwbad block size - %sbad blocks count - %sbad blocks range: %lu-%luwhile trying to open %s-w*.>N^n~  . > N ^   <  T*8GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment#T) <<19 8B KQVp p 4 \bij(*(pD*DwL*L~T*Tl*h+hhZ/ . ..0pcmcia7 syslog.conf8 sysconfig0 ./ ..1 ftl2memory3network4pcmem5serial6 config.in#!/bin/sh # # ftl.sample 1.2 1995/05/25 04:27:58 (David Hinds) # # Initialize or shutdown an FTL memory device # # The first argument should be either 'start' or 'stop'. The second # argument is the base name for the device. When starting a device, # there should be two additional arguments, the major and minor device # numbers. # # This script creates one block device file, which maps the first # common memory region. usage() { echo "usage: ftl [action] [device name] [major] [minor]" exit 1 } if [ $# -lt 2 ] ; then usage ; fi action=$1 name=$2 case "${action:?}" in 'start') if [ $# -ne 4 ] ; then usage ; fi major=$3 minor=$4 rm -f /dev/${name}* mknod /dev/${name} b $major $minor ;; 'stop') fuser -k /dev/${name}* rm -f /dev/${name}* ;; esac #!/bin/sh # # memory.sample 1.2 1995/05/30 15:48:37 (David Hinds) # # Initialize or shutdown a PCMCIA memory device # # The first argument should be either 'start' or 'stop'. The second # argument is the base name for the device. When starting a device, # there should be two additional arguments, the major and minor device # numbers. # # This script creates character and block device files for one common # memory region and one attribute memory region: # # /dev/{name}c0c - common memory region 0, character device # /dev/{name}c0b - common memory region 0, block device # /dev/{name}a0c - attribute memory region 0, character device # /dev/{name}a0b - attribute memory region 0, block device # # Also, it creates two shorthand links: # # /dev/{name}c -> /dev/{name}c0c # /dev/{name}b -> /dev/{name}c0b usage() { echo "usage: memory [action] [device name] [major] [minor]" exit 1 } if [ $# -lt 2 ] ; then usage ; fi action=$1 name=$2 case "${action:?}" in 'start') if [ $# -ne 4 ] ; then usage ; fi major=$3 minor=$4 rm -f /dev/${name}* mknod /dev/${name}c0c c $major $minor mknod /dev/${name}c0b b $major $minor mknod /dev/${name}a0c c $major `expr $minor + 4` mknod /dev/${name}a0b b $major `expr $minor + 4` ln -s /dev/${name}c0c /dev/${name}c ln -s /dev/${name}c0b /dev/${name}b ;; 'stop') fuser -k /dev/${name}* rm -f /dev/${name}* ;; esac #! /bin/sh # # network.sample $Revision: 1.1 $ $Date: 1995/05/25 04:30:06 $ (David Hinds) # # Initialize or shutdown a PCMCIA ethernet adapter # # This script should be invoked with two arguments. The first is the # action to be taken, either "start", "stop", or "restart". The # second is the network interface name. action=$1 device=$2 case "${action:?}" in 'start') # The network gets configured by the install script # /etc/sysconfig/network-scripts/ifup-eth0 ;; 'stop') # /etc/sysconfig/network-scripts/ifdown-eth0 ;; 'restart') # /sbin/ifconfig ${device:?} down up ;; esac #!/bin/sh # # pcmem.sample $Revision: 1.1 $ $Date: 1995/05/25 04:30:06 $ (David Hinds) # # Initialize or shutdown a PCMCIA memory device # # The first argument should be either 'start' or 'stop'. The second # argument is the base name for the device. When starting a device, # there should be two additional arguments, the major and minor device # numbers. # # Three devices will be created: # # /dev/{name}a - character device, attribute memory # /dev/{name}b - block device, common memory # /dev/{name}c - character device, common memory action=$1 name=$2 case "${action:?}" in 'start') major=$3 minor=$4 rm -f /dev/${name:?}a /dev/${name:?}b /dev/${name:?}c mknod /dev/${name:?}c c ${major:?} ${minor:?} mknod /dev/${name:?}a c ${major:?} `expr ${minor:?} + 1` mknod /dev/${name:?}b b ${major:?} ${minor:?} ;; 'stop') fuser -k /dev/${name:?}a /dev/${name:?}b /dev/${name:?}c rm -f /dev/${name:?}a /dev/${name:?}b /dev/${name:?}c ;; esac #!/bin/sh # # serial.sample 1.2 1995/05/25 04:27:58 (David Hinds) # # Initialize or shutdown a PCMCIA serial device # # The first argument should be either 'start' or 'stop'. The second # argument is the base name for the device. # action=$1 name=$2 case "${action:?}" in 'start') rm -f /dev/modem ln -s /dev/$2 /dev/modem ;; 'stop') fuser -k /dev/$2 /dev/modem rm -f /dev/modem ;; esac # # config.sample 1.3 1995/06/01 06:26:45 (David Hinds) # # System resources available for PCMCIA devices # include port 0x2e0-0x3ff, memory 0xd0000-0xdffff # # Resources we should not use, even if they appear to be available # # First built-in serial port exclude irq 4, port 0x3f8-0x3ff # Second built-in serial port #exclude irq 3, port 0x2f8-0x2ff # First built-in parallel port exclude irq 7, port 0x378-0x37f # # Device driver definitions # device "3c589_cs" module "3c589_cs" # opts "if_port=3" start "/etc/pcmcia/network start %d%" stop "/etc/pcmcia/network stop %d%" device "de650_cs" module "net/8390", "de650_cs" start "/etc/pcmcia/network start %d%" stop "/etc/pcmcia/network stop %d%" device "ibmcc_cs" module "net/8390", "ibmcc_cs" # opts "mem_speed=600" start "/etc/pcmcia/network start %d%" stop "/etc/pcmcia/network stop %d%" device "nmclan_cs" module "nmclan_cs" start "/etc/pcmcia/network start %d%" stop "/etc/pcmcia/network stop %d%" device "pcmem_cs" module "pcmem_cs" start "/etc/pcmcia/pcmem start %d% %m% %n%" stop "/etc/pcmcia/pcmem stop %d%" device "memory_cs" module "memory_cs" start "/etc/pcmcia/memory start %d% %m% %n%" stop "/etc/pcmcia/memory stop %d%" device "ftl_cs" module "ftl_cs" start "/etc/pcmcia/ftl start %d% %m% %n%" stop "/etc/pcmcia/ftl stop %d%" device "serial_cs" module "serial_cs" start "/etc/pcmcia/serial start %d%" stop "/etc/pcmcia/serial stop %d%" device "qlogic_cs" module "qlogic_cs" device "toaster_cs" module "toaster_cs" device "wavjamr_cs" module "wavjamr_cs" # # PCMCIA ethernet card definitions # card "3Com 3c589 LAN Adapter" version "3Com Corporation", "3C589", "*", "*" bind "3c589_cs" card "Accton EN2212 EtherCard" version "ACCTON", "EN2212", "ETHERNET", "*" bind "de650_cs" card "Accton UE2212 Ethernet Card" version "PCMCIA", "UE2212", "ETHERNET", "*" bind "de650_cs" card "D-Link DE-650 Ethernet Card" version "D-Link", "DE-650" bind "de650_cs" card "EP-210 Ethernet Card" version "Ethernet PCMCIA adapter", "EP-210", "", "" bind "de650_cs" card "GVC NIC-2000P Ethernet Card" version "GVC", "NIC-2000p", "*", "*" bind "de650_cs" card "IBM Credit Card Ethernet Adapter" version "IBM Corp.", "Ethernet", "*", "*" bind "ibmcc_cs" card "National Semiconductor InfoMover 4100" version "National Semiconductor", "InfoMover 4100", "*", "*" bind "ibmcc_cs" card "Katron PE-520 Ethernet Card" version "KCI", "PE520 PCMCIA Ethernet Adapter", "*" bind "de650_cs" card "Linksys Ethernet Card" tuple 0x40, 0x0009, "E-CARD PC Ethernet Card" bind "de650_cs" card "Linksys Ethernet Card" version "LINKSYS", "E-CARD", "*", "*" bind "de650_cs" card "Linksys Ethernet Card" version "E-CARD", "E-CARD", "*", "*" bind "de650_cs" card "Maxtech PCN2000 Ethernet" version "MAXTECH", "PCN2000", "ETHERNET", "*" bind "de650_cs" card "New Media Ethernet Adapter" version "New Media Corporation", "Ethernet", "*" bind "nmclan_cs" card "NE2000 Compatible Ethernet Card" version "NE2000 Compatible", "PCMCIA", "Ethernet Card", "*" bind "de650_cs" card "PreMax PE-200 Ethernet Card" version "PMX ", "PE-200", "*", "*" bind "de650_cs" card "RPTI EP400 Ethernet Card" version "RPTI LTD.", "EP400", "*", "*" bind "de650_cs" card "Socket EA LAN Adapter" version "Socket Communications Inc", "Socket EA PCMCIA LAN Adapter Revision D", "*" bind "de650_cs" card "Socket EA LAN Adapter" version "Socket Communications Inc", "Socket EA PCMCIA LAN Adapter Revision E", "*" bind "de650_cs" # # PCMCIA modem and serial card definitions # card "Serial or Modem Card" function serial_port bind "serial_cs" card "Cirrus Logic 14.4K Fax Modem" version "CIRRUS LOGIC", "FAX MODEM", "*", "*" bind "serial_cs" card "Intel-compatible Modem" version "Intel", "MODEM 2400+", "*", "*" bind "serial_cs" card "Macronix Fax/Modem" version "MACRONIX", "FAX/MODEM" bind "serial_cs" card "Megahertz PCMCIA Modem" version "MEGAHERTZ", "*", "*", "PCMCIA MODEM" bind "serial_cs" card "Toshiba T144PF Modem" version "TOSHIBA", "T144PF", "*", "PCMCIA MODEM" bind "serial_cs" card "Xircom CreditCard Ethernet+Modem II" version "Xircom", "CreditCard Ethernet+Modem II", "*", "*" bind "serial_cs" # # Memory cards # card "Anonymous Memory Card" anonymous bind "pcmem_cs" card "Memory Card" function memory_card bind "memory_cs", "ftl_cs" card "Intel Series 2 4MB Flash Card" version "intel", "SERIES2-04 ", "*", "*" bind "memory_cs", "ftl_cs" region "Generic or SRAM" default mtd "sram_mtd" region "Intel Series 2 Flash" jedec 0x89 0xa2 mtd "iflash2_mtd" region "Intel Series 2+ Flash" jedec 0x89 0xa0 mtd "iflash2+_mtd" # # PCMCIA SCSI card definitions # card "Adaptec APA-1460 SlimSCSI" version "Adaptec, Inc.", "APA-1460 SCSI Host Adapter", "*" bind "toaster_cs" card "New Media Bus Toaster SCSI" version "New Media", "SCSI", "Bus Toaster" bind "toaster_cs" card "Qlogic FastSCSI" version "QLOGIC CORPORATION", "pc05" bind "qlogic_cs" card "Qlogic FastSCSI" version "QLOGIC CORPORATION", "pc05 rev 1.10" bind "qlogic_cs" # # Miscellaneous card definitions # #card "Canon FDCard" # version "Canon Electronics INC.", "FDCard Ver. 1.00" card "New Media .WAVjammer" version "New Media Corporation", ".WAVjammer" bind "wavjamr_cs" *.* /dev/tty3 8 ./ ..9pcmcia-scripts9 .8 ..:config; ...< . ..= lib binX11R6 X11 X386rhs= .< ..>libncurses.so.1?terminfoFlibext2fs.so.2.0G libe2p.so.2.1Hlibcom_err.so.2.0I libe2p.so.2J X11K perlklibext2fs.so.2llibcom_err.so.2mlibtcl7.4.so.1n rhstk4.0tk7.4 libtk4.0.so.1tcl7.4libtermcap.so.2.0.0libtermcap.so.2libcurses.so.1.0.0libcurses.so.1pythonperl5$libncurses.so.1.9.2c? .= ..@ cBl@ .? ..A con132x43Acon80x25Aconsole %!con132x43+@ ",=?CJLSW[chmrw| "%'*-/bgms~con132x43 %i%p1%dG[%i%p1%d;%p2%dH [?25l[?25h(B)U(B)0[3~[[A[21~[[B[[C[[D[[E[17~[18~[19~[20~[1~[6~[5~[%p1%dP[%p1%dM[%p1%d@8%i%p1%dd7 MH lmkjutvwqxn+o~s_`afg~ ,+.-hi0[4~[23~[24~[%p1%{30}%+%dm[%p1%{40}%+%dmB .? ..ClinuxD linux-monoE linux-nic%!ulinux|linux consoleP@ )+/68?CGKOUZ_dinsy!$'),"(,5EU_io [%i%p1%d;%p2%dH [?25l[?25h[@[3~[[A[21~[[B[[C[[D[[E[17~[18~[19~[20~[1~[2~[6~[5~ [%p1%dP[%p1%dM[%p1%d@[%p1%dL87 M[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;11%;mH `afghjklmno~p8qrs_tuvwxyz{|}~.-,+0[4~[23~[24~[25~[26~[28~[29~[31~[32~[33~[34~[%d;%dR[?6c[%p1%{30}%+%dm[%p1%{40}%+%dm[3%p1%dm[4%p1%dm#%!Klinux-mono|Linux console, no colorP )+/68?CGKOUZ_dinsy!$'),"(,5?E [%i%p1%d;%p2%dH [?25l[?25h[@[3~[[A[21~[[B[[C[[D[[E[17~[18~[19~[20~[1~[2~[6~[5~ [%p1%dP[%p1%dM[%p1%d@[%p1%dL87 M[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;11%;mH `afghjklmno~p8qrs_tuvwxyz{|}~.-,+0[4~[23~[24~[25~[26~[28~[29~[31~[32~[33~[34~[%d;%dR[?6c[3%p1%dmA%!hlinux-nic|linux with ich/ich1 suppressed for non-curses programsP@ )+/68?CGKOUZ_dinsy (8HR\b [%i%p1%d;%p2%dH [?25l[?25h[3~[[A[21~[[B[[C[[D[[E[17~[18~[19~[20~[1~[2~[6~[5~ [%p1%dP[%p1%dM[%p1%dL87 M[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;11%;mH `afghjklmno~p8qrs_tuvwxyz{|}~.-,+0[4~[23~[24~[25~[26~[28~[29~[31~[32~[33~[34~[%d;%dR[?6c[%p1%{30}%+%dm[%p1%{40}%+%dm[3%p1%dm[4%p1%dmELF@4̓4 (##8<hhu6$-a'Y +CEL=42.0,7MJGics5}#&[xB9b{D\oUKPN" Z1>:e|AqltjT_!<Qh3fyzm^(FkO~ SInH` p*;g/8)%@vwWdrX R? ]Vh L @& ,H HQ? b /G u! p" 0# #B $ $O %o &p%G =%3 X& o6 Xu 0Z + xj , .E "P.E @.< Z.< t| \ 8 9 Py 0| <T PC = = '> =D? [l pPB \ `Dc Cc g G c #H :?EKQJ ckPP spP }P P P. QU `QU QU  RU RU #RU <@S, ZpS, zS, S, T, 0T, `T  pT  0T  LT  hT T T T T T U U  U 0U 4@U) HpU' \U spV? V" V `$ a c dH ,`jv :j* GNl Zq oq rA  t 0x$ `x$ xL  8  % 1 ; B ԃI P \ _DYNAMIC_GLOBAL_OFFSET_TABLE__init_finiinitialize_ext2_error_table_et_listext2fs_new_inodeext2fs_warn_bitmapext2fs_new_blockext2fs_get_free_blocksbadblocks_list_createmallocmemsetfreebadblocks_list_freebadblocks_list_addreallocbadblocks_list_testbadblocks_list_iterate_beginbadblocks_list_iteratebadblocks_list_iterate_endext2fs_update_bb_inodeext2fs_block_iterateext2fs_read_inodetimeext2fs_write_inodeext2fs_allocate_inode_bitmapext2fs_write_bitmapsstrcpyext2fs_allocate_block_bitmapext2fs_fudge_inode_bitmap_endext2fs_fudge_block_bitmap_endext2fs_clear_inode_bitmapext2fs_clear_block_bitmapcom_errext2fs_get_blocksext2fs_check_descext2fs_flushext2fs_swap_superext2fs_swap_group_descext2fs_closeext2fs_freeext2fs_compare_block_bitmapext2fs_compare_inode_bitmapext2fs_read_dir_blockmemcpyext2fs_write_dir_blockext2fs_new_dir_blockext2fs_expand_dirext2fs_check_directoryext2fs_free_block_bitmapext2fs_free_inode_bitmapstrncmpstrncpyext2fs_dir_iteratestrcatext2fs_get_pathnameext2_llseekread__divdi3ext2fs_get_device_sizeopenerrnoioctlcloseext2fs_initializesprintfset_bitclear_bittest_bitext2fs_swab16ext2fs_swab32ext2fs_mark_block_bitmapext2fs_unmark_block_bitmapext2fs_test_block_bitmapext2fs_mark_inode_bitmapext2fs_unmark_inode_bitmapext2fs_test_inode_bitmapext2fs_fast_mark_block_bitmapext2fs_fast_unmark_block_bitmapext2fs_fast_test_block_bitmapext2fs_fast_mark_inode_bitmapext2fs_fast_unmark_inode_bitmapext2fs_fast_test_inode_bitmapext2fs_get_block_bitmap_startext2fs_get_inode_bitmap_startext2fs_get_block_bitmap_endext2fs_get_inode_bitmap_endext2fs_mark_super_dirtyext2fs_mark_changedext2fs_test_changedext2fs_mark_validext2fs_unmark_validext2fs_test_validext2fs_mark_ib_dirtyext2fs_mark_bb_dirtyext2fs_test_ib_dirtyext2fs_test_bb_dirtyext2fs_group_of_blkext2fs_group_of_inoext2fs_open_inode_scanext2fs_close_inode_scanext2fs_set_inode_callbackext2fs_get_next_inodesetmntentgetmntentstrcmpendmntentext2fs_check_if_mountedext2fs_linkext2fs_unlinklseekllseekext2fs_mkdirext2fs_lookupext2fs_nameistrchrext2fs_openext2fs_read_bb_inodeext2fs_read_bb_FILEfeoffgetssscanfext2fs_write_inode_bitmapext2fs_write_block_bitmapext2fs_read_inode_bitmapext2fs_read_block_bitmapext2fs_read_bitmapsunix_io_managerwrite___brk_addr__environatexit_etext_edata__bss_start_endlibext2fs.so.2ĝȝ̝Нԝ؝ܝ  $(,048<@DHLPTX\`dhlptx|ܞ8X?`dP\TX\F`<d@h$l|ptzxD|(.y *p84&/;}5 6ğȟ̟:Пԟ؟{ܟi0l qk'Cs nE3 -$j(2,#04>8u<7@DHAL;h hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hVS[pxtЃ>u[^ÐS[[ÐUS[txu"thx]]ÐUWVS[n}1E8+t +uUz,u*+} tu NMIM1q(ƋMIq(@E wE u䐋WU9r9w s%GPVh5+E +MGE}tFUR92s 9uuOM9r9w sGPVh5+/1+UGuE01 e[^_]ÐUWVS[.~M}u 9+t +u,y0u%++U21muApG9r9w s(GPVh2+Mn1 M)‹GtFA9psp9u ue[^_]UWVS[a}} }~`uMA9pr5G9r9w sGPVh2+1 )‹Gt1FEE9|e[^_]ÐUWVS[|U}u :+t +u,z0u%++qM11ZuBp}uM M}uEMQVWRUUuFB9psp9uuָe[^_]ÐUWVS[|} j4ƃtQj4jVI+ ~uF VPF tU21V e[^_]ÐUVS[Â{u>+uF t P?F V/e[^]ÐUWVS[1{u} >+t+g1V9} N 9+t+>j,t%+p@1 e[^_]ÐUVMu 9+uA8+uQ9P 1@ Au]ÐUS[ÃyEt8+u @P<]]ÐUWVS[;y}?+t +}0u++EEEE j(‰Uu ?}PjR}GPi‰Uu }GPjRE}XWPjjj}WBƃ$E} XW} Wƃo\PEP`tA}W0\B9r9J sBPQh0+ 뽐)ȋR몐EPO}O"}XW} WrƃXWĊPjjj}WXƋEPEt`XWj}Wƃ usjpphlujQl}G} EЉ|}GdXWj}Wƃ EPkEPbL[^_]ÐU WVS[^v}uE Eu 1WM9J9J}}SV 9V|:B F PFPFuF VM F FW0M Mr9r9J sRUREPh1+[E)RO"M O+Q1q ƋW$ufD2 OA OE e[^_]ÐUWVS[.u}EE}|,uVPx…u huF&EP9P~epU@G0EH9r9P s'uvVRh2+m1҃ )ʋE@҅u=EPjjW ƒtuVWJE@PjuVRIMщƒtEPW0Mru9r9J sBPQh0++ERO"MʋG+PЋw1v W$EfL GH Ou e[^_]ÐUWVS[qs}?+t+G0} PFtfU RPFF+FxW_FtWjPU21FP?V9 e[^_]ÐUVUu M: +t +"9rs 7+tB r 1u]ÐUVUu M:+t +"9rs 6+tB r 1u]ÐUS[ãpUt: +uB+B@PjBP]]ÐUS[cpUt:+uB+B@PjBP]]ÐUS[#pMU EtPRPQjZRPQjH]]ÐUWVS[oEEM AuA$PjMQM PAЉEM1M M B9pv9pvM A8+M<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]RJMM APjVRMAЋM AtMM HM@@t?M y19u~2% %  щF9uыM yAtQ19uM A$PAPWPA EuFM A9uOMD19u~3?tM A$PAPWPA EuFM A9u΋Mt|M @@t:y19u~0% %  щF9uыM PJMM APjMPRMAЋM AtMM At#MuM A$PjMQM PA EEe[^_]ÐUWVS[NmEEM AuA$PjMQM PAЉEM1MM B9pv9pvM A9+MRJMM APjVRMAЋM AtMM HM@@t?M y19u~2% %  щF9uыM yAtA19u~gM QW> EuF9uC E819u~&?tM QW EuF9uۋMt}M @@t;y19u~1% %  щF9uыM PJMM APjMPRMAЋM AtMM At#MuM A$PjMQM PA EEe[^_]ÐUWVS[jEEM AuA$PjMQM PAЉEM1MM B9pv9pvM A:+MRJMM A PjVRMAЋM AtMM HM@@t?M y 19u~2% %  щF9uыM y AtA19u~gM QW^ EuF9uC E819u~&?tM QW EuF9uۋMt}M @@t;y 19u~1% %  щF9uыM PJMM A PjMPRMAЋM AtMM At#MuM A$PjMQM PA EEe[^_]ÐUWVS[ËhU:+t +EPU RUR tUU؋UU܋UUEUU}u+UB@PEu cUUEUBEBE1}|uEt*UREPWURU FE ~}uUt!EPEP uS}uUt!EPEP u$}uUtEPEP tLPU RUR uP1DDF~PU RUR u}u EP}1tE썥 [^_]ÐUWVE@EpM9+t+EPEMQ(1uE1M9yE@ EI$MEUEME9r9r +iMELM9r9r +IEMDE9r EE9r+#փE GM9yy1e^_]ÐU,WVS[^eEM9+t+uF@:Ej‹FP0F@E hEFMA PEuFF PjMQ }uFMQ01uv$uUM9AvQ׋uuREUE@U܃ E u9FwMIMuv$uMAPhPBЋuFPMQhjPBЉE VrMAPRFЋuF`:F@t}FMQKuF@EEM9N}t&uFPMQhuVPBЉEu{}1M9A v5uVJWj@EԋEEPRAЉEuD~E9F w΋uF@ EEM9NwuF+t+(Ft VuV/1e[^]ÐUWVu>+u } ?+t+uvu} 9wu1uV 9W u&+E~}u vuu}t;+Y)9wEuu}}uu vuU쐐+E}҉+Eu9uA9Ms1e^_]ÐUWVu> +u } ? +t +uvu} 9wu1uV 9W u&+E~}u vuu}t<+Y)9wEuu}}uu vuU쐐+E}҉+Eu9uA9Ms1e^_]ÐUWVS[q`}M uGPVjQPBЅusG@tk9sb% %  щfFfFfFfv%빐륐1e[^_]ÐUWVS[þ_uEMA@APcEEu }GPVMQ }}My}9}skufFfv %EE% E% EE ‰fFfFM9Mru}GPMQj} WPBЉƃ}t MQe[^_]ÐUWVS[Þ^u}E t|1tEPj|PVƒ}~*EPjjVdƒuiJFP‰UuG FPjR< EPEPVƒ tWMQEM V0EEJM9r9B s$RUREPh0+'E+ERN"UN+Q1q V$EfL NI N?ue[^_]ÐUWVS[\u>+t +Fu +U RVDžxDž|xPTPjjU RVs|u\xu.+L}WU RV u)VUF} EWU RV u1l[^_]ÐUVS[[utq>+uiVt BR@ ЃF t PFt PF$t PxF0t PF,t PVOe[^]ÐUVS[R[utB> +u:FtPFFtPFVe[^]ÐUVS[ZutB>+u:FtPFFtP~FVne[^]ÐUWVS[qZu}f~ujPFP uG9u]F@P‰WuG :FPFPRVG1e[^_]ÐU(WVS[þY} 9}uCjt‹EtJ}uRu6V1t}}6j'‹Eu 1yuuEEEEPVEPjWuV UtEPuVEHPWuVEP}uuE01uu؅t6}0ҋ}щMʉUR"0}ЃPǃu YUzt RW%PWUtRPWu>EP1ɃUt RMM܉ȍe[^_]ÐUWVS[ÑW}U:+t+OUBP,ƃu *9} u1URVj WU RURdVe[^_]UVS[WujUM RQV|"jURVN~ 1e[^]ÐUDWVS[îVUjRE܃} URh`uV |7V)U } Eיu`URj}WY |*WU } E1EEEEuuԋuV }ԉ}̋}؉}Ћű}u}Љuԉ}ƐŰMUMjjQRщQR}WUMA UMtỦMUԉM؋UԋM؃9M|u9UrjjuVVű}Ѓuĉ}ȋu QRuu }1e[^_]ÐU`WVS[þTu}t ExuhNEu ]hjUR}+E GWjURvu։ƃ0ɋuщMQEH fURQhE}G }<hjEPUfB8SfB:}zE@B UJu }ȋUJ}fO6fuEfH6UfJ+uF$PF$Ve[^]ÐUEU Mt8+uP,H0]ÐU8WVS[^HE8+t+u~~V,t"F0PvVEPpV҉ƒXEx@HpV$@TUuV FPJuR(1uN~ tEp p EP+P Pu~ y׋E@pNNjuFFPJv$VWE@ PRIMщƒt $+uv$Ep(uvF@t8E@(PuF(EP6u 8}EP( @(EHpuFpuFE 01e[^_]ÐUWVS[ÎF}u ?+t +>G90s,+*G9tXEt P ǃGPu GǃNO1q(ƉUAEE1uEUuG$t9t,WJPjVRAЉEtELG@t$URMQN%E} 1e[^_]ÐU$WVS[Eu E8+t +UBu+}97s,+~E@9tXt QjǃURRAu "}ǃNE@Eȋ}1w(ƉU܋OEE1uU܋}$uL7M9t5E@HRj}WPIMщEUB@t)}WEP'Eu URJWjEPRIMщuUJ1 ȍe[^_]ÐUWVS[Cu} >+t +MF98s ,+fuf>u f~fuf~u V% %  ы}OV% %  щOV % %  щO V% %  щOV% %  щOfvffw} fwf}fw} W% %  ыuNW % %  щN E}u T(% %  ыuL(G}vċ} Wd% %  щNdWh% %  щNhWl% %  щNlWp% %  щNpGtFtGuFufvff~ve^_]ÐUWVS[Á?U !P#Pzǃu WrƃtPUR譽uWPtWU v-u9j#PW} 8uU  P肾1e[^_]ÐUS[Ó>UE PR]]ÐUWVS[^>}uEF $EUU fOfME EE9E}":ufRE9E|ffWE?tXwfWƒ $EEE9|kf $fGUU %fBf+ufr:G9E'FFfGFPPGP#FEe[^_]ÐUWVS[N=U}u:+t +uBu +e}t0HE EuEEEPPjjM QRgu 1}u)+e[^_]ÐUWVS[á<}utG9FuPGPRu Ft9t1Fe[^_]ÐUWVS[.<U}u:+t +uBu +e}t0HE EuEEEPTPjjM QRGu 1}u)+e[^_]ÐUWVS[Á;uU MEuwPRVDqt' GPQRV菹Ɖ׃u"u :&u e[^_]ÐUWVS[û:uU|Džt>+t +u%|PjhAM QVܹǃxPjjVǃtPM Q|PVYǃ}hjMlQffEAfEfEV} UxEfEj;EEEFEtPxPVǃlP|QV藸ǃ E 9|t=lQPV!ǃ fElPM QVOǃ }tqpPj0ҋ}҉HPMQE PVηǃu L@j|QEPM QV訷ǃV0xdJh9r9B s"RhRdPh0+? d+hRN"V,|dBh9r9J s'RhRdQh3+ d+hRNxF+PЋN1q V$hfL |JЋN1q(V$hfLV$fDFH NINttRoX[^_]ÐUWVS[n7}?+t+U RW莶ƃuU UUU}uGPEu SUUUUUUEEPTPjjU RWֳƃ}u EP袶uEe[^_]ÐUWVS[Þ6uu1EE}}GPu P}WM芵uF Mt"Eu}9w}W4u>uGt0}GPRuFPQ}WuF MЃMtEu}fGыuvu9fv G9~}G&+C9Mw}t uFP} PuVò}Gu}u 1 e[^_]ÐUWVS[A5}EGV9u+RGPP覲uVF  1e[^_]ÐUWVS[4uM}E>+t+uWEPjWǫƒ W} tU1ttQVƒuFxDž|xPdPjjjW萪…u| Ѝh[^_]ÐUWVS[[-}?+t +M9uj QHuM Qϩ|M QhVu tf|P/PV ~W|9Bw9Bw}tPWMу떐PMPy 1p[^_]ÐUWVS[n,UB,@E:+t+UBu+}UB@(EBPƨEu$ +UBPhUR1 KURURURG UJqURjUR$DPQFЃuUUGU9zwUB $BUR#1e[^_]ÐU(WVS[+E@0puE8+t+[uFu+>}%E@p uE@PsEu! +uvVhEPè1 EPuVEP uvN9u:E@E؋Pu+V1v t EBuvu9|EHquEPjuV$URQuv։ƒ=EEGu9~ZE@ $ߋuFEPy1e[^_]ÐU WVS[~)EEUBH M@(E:+t +UB<0z ЃOPE}tWUB0t PMA P2PUR茧E0PMQURȦƃHMA0@E} tWUB,t PɥMA PFPUR/E,PMQUR軦ƃMA,@EUR)EUM9Q1}t>MIMQUMQEPUB$8PMQUBЉƃuvMM}t?URUJMUREPMA$D8PURMAЉƃu!UU EUM9Qb1f+!+}tMA0PAUB0} tMA,P"UB,}t MQe[^_]ÐUS['EjjPs]]ÐUS[&EjjPC]]ÐUS[ó&U:+u%z0%Pz,%PR+]]ÐUVS[b&u>+t+>~0tF t V覣u~,tFt Vmu1e[^]ÐUVu% %  щV% %  щNV% %  щNV % %  щN V% %  щNV% %  щNV% %  щNV% %  щNV % %  щN V$% %  щN$V(% %  щN(V,% %  щN,V0% %  щN0fF4fF6fF8fF:fF<V@% %  щN@VD% %  щNDVH% %  щNHVL% %  щNLfFPfFRu]ÐUVu% %  щV% %  щNV% %  щNfF fFfFu]ÐUWVS[n"}u=+Dj\ƃu j\jV~+jEF0}P豞FtWURPݝUVXF FFjjRU+F PfUB Bz u 91U tPURߠUB| U21: 8t V}tUB t PURe[^_]ÐUWVS[ }E?+t +vwX>+t+bFPo} EF t P`GXt PPGt P@W7Ee[^_]ÐUWVS[A E} 8+t+bpX>+t+G9x t2x F PǟW豜F u F1e[^_]ÐU0WVS[ÞEE8+t+URXU:+t+v}u*U E9PuH E@ PQU}} E EUB EE 1҉Ɖ׋UR ЙE܉UEEUUUEEjuuURR蒜Ɖ׃9uu9}t 2EPURE@PE U9t}E'+=}u U EP@ E܋UREPURҚ1GE+EPjUURc EHtVUREPUREPU REPщƉe[^_]ÐU,WVS[þEE8+t+hURXU:+t+>}u E@ ,UB}}EEUB EE 1҉Ɖ׋UR ЙEUEEUUUEEjuuURRšƉ׃9uu9}t  oEPURE@P贙E U9t(+8}u"U E9Pu@ EUREPUR1-EptQUREPUREPU REP։ȍe[^_]ÐUE8+t+]Ð@X8+u1]Ð+]ÐVS[pxtЃ>u[^ÐS[Ö6[[Illegal or malformed device nameInode bitmaps are not the sameBlock bitmaps are not the sameIllegal triply indirect block foundIllegal doubly indirect block foundIllegal indirect block foundAttempt to fudge end of inode bitmap past the real endAttempt to fudge end of block bitmap past the real endIllegal inode number passed to ext2fs_test_inode_bitmapIllegal inode number passed to ext2fs_unmark_inode_bitmapIllegal inode number passed to ext2fs_mark_inode_bitmapIllegal block number passed to ext2fs_test_block_bitmapIllegal block number passed to ext2fs_unmark_block_bitmapIllegal block number passed to ext2fs_mark_block_bitmapNot enough space to build proposed filesystemInternal error in ext2fs_expand_dirIllegal block numberIllegal inode numberBLOCK bitmap not loadedInode bitmap not loadedNo free space in the directoryAttempt to write block from filesystem resulted in short writeAttempt to read block from filesystem resulted in short readEXT2 directory corruptedFilesystem has unexpected block sizeCan't read next inodeCan't read an inode tableCan't write an inode tableCan't read an block bitmapCan't write an block bitmapCan't read an inode bitmapCan't write an inode bitmapCorrupt group descriptor: bad block for inode tableCorrupt group descriptor: bad block for inode bitmapCorrupt group descriptor: bad block for block bitmapCan't write group descriptorsCan't read group descriptorsAttempt to write to filesystem opened read-onlyCan't write superblockCan't read superblockCan't seek to superblockFilesystem revision too highBad magic number in super-blockWrong magic number --- RESERVED_9Wrong magic number --- RESERVED_8Wrong magic number --- RESERVED_7Wrong magic number --- RESERVED_6Wrong magic number --- RESERVED_5Wrong magic number --- RESERVED_4Wrong magic number --- RESERVED_3Wrong magic number --- RESERVED_2Wrong magic number --- RESERVED_1Wrong magic number for inode_bitmap structureWrong magic number for block_bitmap structureWrong magic number for io_manager structureWrong magic number for unix io_channel structureWrong magic number for io_channel structureWrong magic number for inode_scan structureWrong magic number for badblocks_iterate structureWrong magic number for badblocks_list structureWrong magic number for ext2_filsys structureEXT2FS Library version 0.5c#%u for %s#%u../....???block bitmap for %sinode bitmap for %sr/etc/mtab/%ublock bitmap for %sinode bitmap for %sUnix I/O Manager ތ{O#ƋjH&|Z8̉hJuY># ·x9Նn6ąRkG( +>+|P~0؞h^n~.>N^n~.>N^n~.>N^n~.a @ p  p LHhGCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.hash.dynsym.dynstr.rel.data.rel.got.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment<! )p p p 1 8 ; 0D HHM@@SHHX@@d^d lr<<yDDLLhh@0< ܧ         1@ > I< WH @ d@ zDp I <        !  0#  & (% *  +  / % p/ -p/w ?1[ RP4[ e 8 r 9 | =  >  @ Ȟ @  PC  D D E"  0H 0H[  J $ PP - U 5@]t F̞ SО ex _ _  ` `  bh  c Ԟ  d  g h_ j\  l  l  p pN  q + r 8un E Py N | X؞` l|s vP~    0I T  @S, U T  ,P 5c CLRH n`T  p"  \ U QU <T rA = &q ;hDJpS, jԃq= T S, p%G PP 8 0| 0x$ +0T BIUT ij* vPC $O P. RU .< J 6 @U +q ?.< YbhT | U Cc 9 T, H pT  P.E 1pU' E? \$ ot t T ! Xu `x$ S,  c 0U 5 %o R , o v  l  + #B   dH   G  PB " ) Py ; xL O  U V" o w @U)  `jv a RU pP l `Dc 0Z 0#  V 5 > K P Y 8 i RU  \  L   0T, ? &  pV? + xj @ `QU [ `$ s x  g %3 /G QU .E T   crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__ext2_err.ctextetlinkalloc.ccheck_blocks_freebadblocks.cbb_inode.cclear_bad_block_procset_bad_block_procbitmaps.cbitops.cblock.cblock_iterate_indblock_iterate_dindblock_iterate_tindcheck_desc.cclosefs.ccmp_bitmaps.cdirblock.cexpanddir.clast_blk.102expand_dir_procfreefs.cget_pathname.cget_pathname_procext2fs_get_pathname_intgetsize.cvalid_offsetinitialize.cinline.cinode.cinocpy_with_swapinode_bufferinode_buffer_sizeinode_buffer_blockismounted.ccheck_mntentlink.clink_procunlink_procllseek.cdo_compat.4mkdir.cnamei.cprocess_dir_blocklookup_procnewdir.copenfs.cread_bb.cmark_bad_blockread_bb_file.crw_bitmaps.cread_bitmapsswapfs.cunix_io.cstruct_unix_managerunix_openunix_closeunix_set_blksizeunix_read_blkunix_write_blkunix_flushext2fs_get_inode_bitmap_endext2fs_fast_mark_block_bitmapext2fs_mark_bb_dirtystrcpyext2fs_get_block_bitmap_endtest_bitext2fs_unlink__divdi3ioctlinitialize_ext2_error_tableext2fs_get_block_bitmap_startext2fs_get_free_blocksext2fs_get_blocksext2fs_mark_ib_dirtyext2fs_mark_block_bitmapext2fs_closeext2fs_write_inode_bitmapext2fs_compare_inode_bitmapext2fs_read_bb_inode_DYNAMICerrnoext2fs_fast_unmark_block_bitmap_etextext2fs_compare_block_bitmapext2fs_test_validext2fs_fast_mark_inode_bitmapbadblocks_list_iteratefgetsset_bitext2fs_check_descext2fs_swap_group_descmemcpyext2fs_read_inode_bitmapfeofext2fs_mark_validmalloc___brk_addrext2fs_unmark_validext2fs_nameiext2fs_freelseekbadblocks_list_testext2fs_swab32__environext2fs_test_inode_bitmapext2fs_clear_block_bitmapext2fs_initializeext2fs_block_iterate_initext2fs_open_inode_scanext2fs_read_bb_FILEext2fs_clear_inode_bitmap_et_listwriteext2fs_mark_changedstrcatext2fs_test_ib_dirtyext2fs_free_inode_bitmapext2fs_flushext2fs_fast_unmark_inode_bitmapext2fs_get_device_sizeext2fs_get_inode_bitmap_startext2fs_fudge_block_bitmap_endext2fs_group_of_inoext2fs_write_dir_blockbadblocks_list_addreadext2fs_write_block_bitmapstrncmpext2fs_test_changedext2fs_new_blockstrncpyext2fs_read_inodeext2fs_read_block_bitmapext2fs_fast_test_block_bitmapreallocext2_llseekext2fs_test_bb_dirtybadblocks_list_iterate_beginext2fs_allocate_block_bitmapsscanfsetmntentext2fs_new_dir_blockendmntentext2fs_allocate_inode_bitmapbadblocks_list_free__bss_startmemsetext2fs_mkdirtimellseekext2fs_get_pathnameext2fs_expand_dirstrcmpext2fs_swap_superext2fs_read_bitmaps_finiext2fs_set_inode_callbacksprintfext2fs_group_of_blkatexitext2fs_lookupext2fs_linkext2fs_unmark_inode_bitmapclear_bitext2fs_openext2fs_free_block_bitmapext2fs_write_inodebadblocks_list_createext2fs_get_next_inodeext2fs_read_dir_blockext2fs_swab16unix_io_managerext2fs_mark_inode_bitmapgetmntentext2fs_check_directory_edata_GLOBAL_OFFSET_TABLE_com_err_endext2fs_fast_test_inode_bitmapext2fs_new_inodeext2fs_update_bb_inodeext2fs_close_inode_scanext2fs_write_bitmapsext2fs_unmark_block_bitmapext2fs_check_if_mountedopenstrchrext2fs_dir_iteratebadblocks_list_iterate_endext2fs_warn_bitmapext2fs_test_block_bitmapext2fs_fudge_inode_bitmap_endext2fs_mark_super_dirtyclosefreeELF4 4 (88#((#%%   " !$#  # # &` ,_ 6;AG _ Q_ ]_ i@ ) rp ) }    @_ 0   z ) ) ".8?TF`$M`$Y`$_DYNAMIC_GLOBAL_OFFSET_TABLE__init_finifgetflagsopenioctlclosefsetflagsfgetversionfsetversiongetflagsgetversioniterate_on_diropendirreaddirclosedirprintfgetpwuidgetgrgidlist_super_IO_stdout_print_fs_stateprint_fs_errorsctimefprintfprint_flagssetflagssetversion___brk_addr__environatexit_etext_edata__bss_start_endlibe2p.so.28#<#@#D#H#L#P#X#\#`#d#h#l#p############## ####{ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhVS[pxtЃ>u[^ÐS[[ÐUWVS[ýE} jPXƃt&WhfVVje[^_]ÐUWVS[]EjPƃt)E Phf@VBV e[^_]ÐUWVS[E} jPƃt&WhvVVe[^_]ÐUWVS[ÝEjP;ƃt)E Phv@VVJe[^_]ÐUS[?UE PhfR6]]ÐUS[UE PhvR]]ÐUWVS[UR;u]Rƃt+CURRURU ҃ ĐR 1[^_]ÐUVS[.uVP6V uPPP e[^]ÐUVS[uVPV uPPPe[^]ÐUWVS[j}G8PPo>PcG:PDPXVFZP:Gu[^ÐS[RHL[%u (user unknown) (user %s) (group unknown) (group %s) Filesystem magic number: 0x%04X Filesystem state: Errors behavior: Inode count: %u Block count: %u Reserved block count: %u Free blocks: %u Free inodes: %u First block: %u Block size: %u Fragment size: %u Blocks per group: %u Fragments per group: %u Inodes per group: %u Last mount time: %sLast write time: %sMount count: %u Maximum mount count: %d Last checked: %sCheck interval: %u Next check after: %sReserved blocks uid: Reserved blocks gid: ContinueRemount read-onlyPanicUnknown (continue) @daiScusNo_Dump, Append_Only, Immutable, Synchronous_Updates, Compressed_File, Undelete, Secure_Deletion, - clean not clean with errors#.>N^n^  ` j #pGCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.hash.dynsym.dynstr.rel.data.rel.got.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment0! P)j1 p ; D pMSX^``dhhl8#8@rx#xy##P#`$``n|pC         1|# >0 Ix# W#  d z# I8# x#          @   p     P  P X  X  0      %8#  1X#  < @ A  L  Y_f  up ) #T)  _ @_ `$  z ) $-` 3:_ F_ R@ ) [`$b#x`$}  _ 0  crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__fgetflags.cfsetflags.cfgetversion.cfsetversion.cgetflags.cgetversion.ciod.cls.cprint_userprint_grouppe.cpf.cflags_arrayshort_flagslong_flagsps.csetflags.csetversion.cioctlprintfiterate_on_dirgetversion_DYNAMICgetgrgid_etextsetflags_IO_stdout_readdir___brk_addr__environ_initfsetflagsfprintfctimeprint_fs_state__bss_startopendirprint_flagssetversiongetpwuid_finiatexitfsetversionfgetversiongetflags_edata_GLOBAL_OFFSET_TABLE__endlist_superopenfgetflagsclosedirprint_fs_errorscloseELF4 4 (i i  d d  d  &  , 5o CLpg ]do u| P 6 D 0  )   $_DYNAMIC_GLOBAL_OFFSET_TABLE__init_fini_et_listerror_messagestrerrorerror_table_namestrcatinit_error_tablemalloc_IO_stderr_fputsvfprintf__overflowfflushcom_err_hookcom_err_vacom_errset_com_err_hookreset_com_err_hook___brk_addr__environatexit_etext_edata__bss_start_endlibcom_err.so.2T \`PX$(, 048< @DH LK hhhhh h($h0(h8p,h@`0hHP4hP@VS[QpxtЃ>u[^ÐS["[ÐUWVS[ EuMu'VMEMtME8Et-E@E9Hu9p~}?}uԍEfftQQ}WPW~UUtE}?uc~dƉ0UBUE}u ~ Ɖ0UBUΉ0UBȍe[^_]ÐUWVS[Ú}MEM?t MBEN}e[^_]ÐUWVS[-u} t;}t5t1j…t-JJrz MJ881 e[^_]ÐUWVS[ýUu }t#<PR<PP t,<PVP<PPtMQW<P <P9Pwj P( @<P9Pwj P @<Pe[^_]ÐUWVS[ý}u UE@PRVWЍe[^_]ÐUWVS[}}u M@:u8EPQVW~e[^_]ÐUS[/E@ u8ȋ]]US[@ 8ȋ]]ÐVS[pxtЃ>u[^ÐS[âDH[Unknown code ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_: Pd.>N^n~)  $T 9 X`0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.hash.dynsym.dynstr.rel.data.rel.got.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment! TT)$$91 `` ; hh(D XMSX^ d Ul r y  Ldd  $ lX d0 $       @  @  1  >p  I W  d z I     p @    P P  ) d $0;Bo S_f 0 wP 6  o pg     D crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__error_message.cbufferet_name.cchar_setbufinit_et.ccom_err.cdefault_com_err_procstrerrorreset_com_err_hook_DYNAMIC_etext_IO_stderr___overflowmallocinit_error_table___brk_addrfflushset_com_err_hook__environ_initcom_err_va_et_listerror_messagestrcaterror_table_namecom_err_hook__bss_start_finiatexit_edata_GLOBAL_OFFSET_TABLE_com_err_endfputsvfprintfK .= ..LtextinstMdialogNflush.plOinstallP miscQmount_rhRxinstS netT nfs_mountUprobe_cdVfdiskWpcmciaX swapYdispatchZfstab[makefs\ bootstrap]series^ ftp_clock`keyboardakernelbmodemc lilodxinstallemousefusersgmediahrpmheadifloppyjbootdisk# -*-perl-*- sub finish { &rhs_infobox("Finishing", < Completing final installation steps... > EOM , 60); # write /etc/fstab &finish_fstab; # write cd device to /etc/fstab &finish_cd; # set up cd device &finish_cd; # append swap partitions to /etc/fstab &finish_swap; # write net config files &finish_net; # write clock config file &finish_clock; # write keytable &finish_keyboard; # make mouse link &finish_mouse; # write config for /etc/sysconfig/pcmcia &finish_pcmcia; } 1; # Functions that handle calling dialog(1) -*-perl-*- # Return values are 1 for success and 0 for failure (or cancel) # Resultant text (if any) is in dialog_result # Unfortunately, the gauge requires use of /bin/sh to get going. # I didn't bother to make the others shell-free, although it # would be simple to do. # Note that dialog generally returns 0 for success, so I invert the # sense of the return code for more readable boolean expressions. $scr_lines = 24; require "flush.pl"; sub rhs_clear { return system("dialog --clear"); } sub rhs_textbox { local ( $title, $file, $width, $height ) = @_; system("dialog --title \"$title\" --textbox $file $height $width"); return 1; } sub rhs_msgbox { local ( $title, $message, $width ) = @_; local ( $tmp, $height, $message_len ); $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = 4 + $message_len; $tmp = system("dialog --title \"$title\" --msgbox \"$message\" $height $width"); if ($tmp) { return 0; } else { return 1; } } sub rhs_infobox { local ( $title, $message, $width ) = @_; local ( $tmp, $height, $message_len ); $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = 2 + $message_len; return system("dialog --title \"$title\" --infobox \"$message\" $height $width"); } sub rhs_yesno { local ( $title, $message, $width ) = @_; local ( $tmp, $height, $message_len ); $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = 4 + $message_len; $tmp = system("dialog --title \"$title\" --yesno \"$message\" $height $width"); # Dumb: dialog returns 0 for "yes" and 1 for "no" if (! $tmp) { return 1; } else { return 0; } } sub rhs_gauge { local ( $title, $message, $width, $percent ) = @_; local ( $tmp, $height, $message_len ); $gauge_width = $width; $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = 5 + $message_len; open(GAUGE, "|dialog --title \"$title\" --gauge \"$message\" $height $width $percent"); } sub rhs_update_gauge { local ( $percent ) = @_; &printflush(GAUGE, "$percent\n"); } sub rhs_update_gauge_and_message { local ( $message, $percent ) = @_; $message = &rhs_wordwrap($message, $gauge_width); $message =~ s/\n/\\n/g; &printflush(GAUGE, "XXX\n$percent\n$message\nXXX\n"); } sub rhs_stop_gauge { close GAUGE; } sub rhs_inputbox { local ( $title, $message, $width, $instr ) = @_; local ( $tmp, $height, $message_len, $result); $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = 7 + $message_len; $result = &return_output(0, "dialog --title \"$title\" --inputbox \"$message\" $height $width \"$instr\""); while (($dialog_result =~ /\"/) || ($dialog_result =~ /\'/) || ($dialog_result =~ /\`/) || ($dialog_result =~ /\|/) || ($dialog_result =~ /\;/) || ($dialog_result =~ /\&/) || ($dialog_result =~ /\>/) || ($dialog_result =~ /\ Please do not enter text with of the following characters: > \' \\" \\` \| \; \& \> \< \* > EOM , 50); $result = &return_output(0, "dialog --title \"$title\" --inputbox \"$message\" $height $width \"$instr\""); $_ = $result; } return $result; } sub rhs_menu { local ( $title, $message, $width, $numitems ) = @_; local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); shift; shift; shift; shift; @list = (); for ($i = 0; $i < $numitems; $i++) { $ent = shift; $list[@list] = "\"$ent\""; $ent = shift; $list[@list] = "\"$ent\""; } $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = $message_len + 6 + $numitems; if ($height <= $scr_lines) { $menuheight = $numitems; } else { $height = $scr_lines; $menuheight = $scr_lines - $message_len - 6; } return &return_output(0, "dialog --title \"$title\" --menu \"$message\" $height $width $menuheight @list"); } sub rhs_menul { local ( $title, $message, $width, $numitems ) = @_; local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); shift; shift; shift; shift; @list = (); for ($i = 0; $i < $numitems; $i++) { $ent = shift; $list[@list] = "\"$ent\""; $list[@list] = "\"\""; } $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = $message_len + 6 + $numitems; if ($height <= $scr_lines) { $menuheight = $numitems; } else { $height = $scr_lines; $menuheight = $scr_lines - $message_len - 6; } return &return_output(0, "dialog --title \"$title\" --menu \"$message\" $height $width $menuheight @list"); } sub rhs_menua { local ( $title, $message, $width, %items ) = @_; local ( $tmp, $ent, $height, $menuheight, @list, $message_len ); @list = (); foreach $ent (sort keys (%items)) { $list[@list] = "\"$ent\""; $list[@list] = "\"$items{$ent}\""; } $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $numitems = keys(%items); $height = $message_len + 6 + $numitems; if ($height <= $scr_lines) { $menuheight = $numitems; } else { $height = $scr_lines; $menuheight = $scr_lines - $message_len - 6; } return &return_output(0, "dialog --title \"$title\" --menu \"$message\" $height $width $menuheight @list"); } sub rhs_checklist { local ( $title, $message, $width, $numitems ) = @_; local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); shift; shift; shift; shift; @list = (); for ($i = 0; $i < $numitems; $i++) { $ent = shift; $list[@list] = "\"$ent\""; $ent = shift; $list[@list] = "\"$ent\""; $ent = shift; if ($ent) { $list[@list] = "ON"; } else { $list[@list] = "OFF"; } } $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = $message_len + 6 + $numitems; if ($height <= $scr_lines) { $menuheight = $numitems; } else { $height = $scr_lines; $menuheight = $scr_lines - $message_len - 6; } return &return_output("list", "dialog --title \"$title\" --separate-output --checklist \"$message\" $height $width $menuheight @list"); } sub rhs_checklistl { local ( $title, $message, $width, $numitems ) = @_; local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); shift; shift; shift; shift; @list = (); for ($i = 0; $i < $numitems; $i++) { $ent = shift; $list[@list] = "\"$ent\""; $list[@list] = "\"\""; $list[@list] = "OFF"; } $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = $message_len + 6 + $numitems; if ($height <= $scr_lines) { $menuheight = $numitems; } else { $height = $scr_lines; $menuheight = $scr_lines - $message_len - 6; } return &return_output("list", "dialog --title \"$title\" --separate-output --checklist \"$message\" $height $width $menuheight @list"); } sub rhs_checklista { local ( $title, $message, $width, %items ) = @_; local ( $tmp, $ent, $height, $menuheight, @list, $message_len ); shift; shift; shift; shift; @list = (); foreach $ent (sort keys (%items)) { $list[@list] = "\"$ent\""; $list[@list] = "\"$items{$ent}\""; $list[@list] = "OFF"; } $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $numitems = keys(%items); $height = $message_len + 6 + $numitems; if ($height <= $scr_lines) { $menuheight = $numitems; } else { $height = $scr_lines; $menuheight = $scr_lines - $message_len - 6; } return &return_output("list", "dialog --title \"$title\" --separate-output --checklist \"$message\" $height $width $menuheight @list"); } sub rhs_radiolist { local ( $title, $message, $width, $numitems ) = @_; local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); shift; shift; shift; shift; @list = (); for ($i = 0; $i < $numitems; $i++) { $ent = shift; $list[@list] = "\"$ent\""; $ent = shift; $list[@list] = "\"$ent\""; $ent = shift; if ($ent) { $list[@list] = "ON"; } else { $list[@list] = "OFF"; } } $message = &rhs_wordwrap($message, $width); $message_len = split(/^/, $message); $tmp = $message; if (chop($tmp) eq "\n") { $message_len++; } $height = $message_len + 6 + $numitems; if ($height <= $scr_lines) { $menuheight = $numitems; } else { $height = $scr_lines; $menuheight = $scr_lines - $message_len - 6; } return &return_output(0 , "dialog --title \"$title\" --radiolist \"$message\" $height $width $menuheight @list"); } sub return_output { local ( $listp, $command ) = @_; local ( $res ); open(SAVESTDERR, ">&STDERR"); open(STDERR, ">/tmp/dialogout"); $res = system($command); close(STDERR); open(STDERR, ">&SAVESTDERR"); open(IN, "/tmp/dialogout"); if ($listp) { @dialog_result = (); while () { chop; $dialog_result[@dialog_result] = $_; } } else { $dialog_result = ; } close(IN); unlink("/tmp/dialogout"); # Again, dialog returns results backwards if (! $res) { return 1; } else { return 0; } } sub rhs_wordwrap { local ( $intext, $width ) = @_; local ( $outtext, $i, $j, @lines, $wrap, @words, $pos, $pad ); $outtext = ""; $pad = 3; # leave 3 spaces around each line $pos = $pad; # current insert position $wrap = 0; # 1 if we have been auto wraping $insert_nl = 0; # 1 if we just did an absolute # and we should preface any new text # with a new line @lines = split(/\n/, $intext); for ($i = 0; $i <= $#lines; $i++) { if ($lines[$i] =~ /^>/) { $outtext .= "\n" if ($insert_nl); $outtext .= "\n" if ($wrap); $lines[$i] =~ /^>(.*)$/; $outtext .= $1; $insert_nl = 1; $wrap = 0; $pos = $pad; } else { $wrap = 1; @words = split(/\s+/,$lines[$i]); for ($j = 0; $j <= $#words; $j++) { if ($insert_nl) { $outtext .= "\n"; $insert_nl = 0; } if ((length($words[$j]) + $pos) > $width - $pad) { $outtext .= "\n"; $pos = $pad; } $outtext .= $words[$j] . " "; $pos += length($words[$j]) + 1; } } } return $outtext; } ############ 1; ;# Usage: &flush(FILEHANDLE) ;# flushes the named filehandle ;# Usage: &printflush(FILEHANDLE, "prompt: ") ;# prints arguments and flushes filehandle sub flush { local($old) = select(shift); $| = 1; print ""; $| = 0; select($old); } sub printflush { local($old) = select(shift); $| = 1; print @_; $| = 0; select($old); } 1; #!/usr/bin/perl # dialog requires a shell, unfortunately. But I guess we # wanted to have a shell anyway. # Copyright (C) 1995 Red Hat Software, Inc. require "dialog"; require "mount_rh"; require "probe_cd"; require "misc"; require "net"; require "nfs_mount"; require "xinst"; require "pcmcia"; require "fdisk"; require "swap"; require "mouse"; require "dispatch"; require "xinstall"; require "media"; require "bootdisk"; # *** $rh_testing = 0; # *** $express_install = 1; $fsmount = "/mnt"; #$rh_mounted = 1; #$rh_available = 1; #$rh_mountpath = "/mnt/rhscd"; $* = 1; # The boot disk is on /bootdisk # The 2nd rootdisk is on /ramdisk # The CD instimage is on /image $ENV{'PATH'} = "/bin:/usr/bin:/usr/bin/X11:/usr/X11/bin:/sbin:/usr/sbin"; $ENV{'PATH'} .= ":/mnt/bin:/mnt/usr/bin:/mnt/sbin:/mnt/usr/sbin"; # Set $scr_lines here if we need to # This is used by the perl interface to dialog $scr_lines = 24; &rhs_msgbox ( "Red Hat Linux 2.1", < Red Hat Software has worked very hard to bring you the highest quality Linux system and the easiest and most flexible installation procedure. > If you managed to get this far with all your hardware detected, the hard part is done! > This script will walk you through each step of the installation. > PLEASE BE SURE YOU HAVE READ AND UNDERSTOOD THE INSTALLATION GUIDE IN THE MANUAL BEFORE YOU PROCEED. It is probably a good idea to have the manual available for reference too. > Copyright (C) 1995 Red Hat Software, Inc. EOM , 74); &mount_bootdisk(); if (! $rh_testing) { $ret = &pcmcia_init; } #$express_install = &rhs_yesno("Red Hat Linux", #< #The Express Install provides the simplest installation by #taking you through each installation step in order. #> #Do you want to do an Express Install? #> #EOM #, 70); $express_install = 1; $installsource = ""; $installtype = ""; while ($installtype eq "") { if (&rhs_menu("Installation Type", < Red Hat supports a number of different sources for installation. You may use NFS, a cdrom, ftp, floppy disks, a hard drive partition. > Which do you prefer? > EOM , 70, 5, "cdrom", "Red Hat CDROM", "nfs", "NFS server", "hard drive", "local hard drive", "ftp", "FTP server", "floppy", "floppy disks", )) { $installsource = $dialog_result; if ($installsource eq "cdrom" || $installsource eq "nfs") { # Find out if they want to do a X based install or a text mode one if (&rhs_menu("Installation Type", < Red Hat supports two types of CD (or NFS) based installation interfaces. One is a X based graphical interface which is more powerful and much easier to use. However, some people have difficulty getting X set up, so we provide a simpler text only installation procedure as an alternative. > Which would you prefer? > EOM , 70, 2, "X", "Graphical Installation", "text", "Text based install" )) { $installtype = $dialog_result; } else { $installsource = ""; } } else { $installtype = "text"; } } } &install_dispatcher; if (! $rh_testing) { &umount_bootdisk(); &rhs_msgbox ( "Installation Complete", < When you hit enter your computer will be rebooted. > Be sure to remove the boot floppy from your floppy drive! > EOM , 70); } exit 0; # Misc routines # Variable $no_invoke controls whether or not commands are executed # Vaiable $show_invoke, if true, causes invoke to display the command # to be run before running it. $no_invoke = 0; $show_invoke = 0; $hold_on_error = 1; sub cmp_reverse { $b cmp $a } sub member { local ( $element, @list ) = @_; local ( $tmp ); foreach $tmp (@list) { if ($tmp eq $element) { return 1; } } return 0; } sub abs { local ($i) = @_; $i = -$i if ($i < 0); return $i; } sub invoke { local ($command) = @_; local ( $ret ); if ($show_invoke || $rh_testing) { &rhs_msgbox("invoke", $command, 75); } if ($rh_testing) { return 0; } $ret = 0; if (! $no_invoke) { $ret = system($command) / 256; } if ($ret && $hold_on_error) { print "\nError. Press enter for more info\n"; ; print "The following command:\n\n"; print "$command\n"; print "\nexited with code $ret\n"; print "\nPress enter to continue.\n"; ; } return $ret; } sub rhs_error { print "\nAn error of some kind occurred.\n"; print "Press enter to continue: "; ; } sub invoke_no_output { local ( $command ) = @_; local ( $ret ); if ($show_invoke) { &rhs_msgbox("invoke", $command, 75); } open(SAVEERR, ">&STDERR"); open(SAVEOUT, ">&STDOUT"); open(STDERR, ">/dev/null"); open(STDOUT, ">/dev/null"); $ret = system($command) unless ($no_invoke); open(STDERR, ">&SAVEERR"); open(STDOUT, ">&SAVEOUT"); return $ret; } sub asciitime { local ( $tval ) = @_; local ( $secs, $mins, $hours ); $hours = $tval / 3600; $tval %= 3600; $mins = $tval / 60; $secs = $tval % 60; return sprintf("%02d:%02d:%02d", $hours, $mins, $secs); } ###################### 1; # Mounts RHS stuff, either from CD or over NFS -*-perl-*- # Only mount_rhs() and unmount_rhs() are interactive # Entry point: mount_rhs() # unmounts rhs stuff if it is mounted (ask first) # ask NFS or CD # NFS: if net not configed, config it # ask for details and try mount # CD: probe # if fails, try again ## ## Variables ## # $rh_mountpath is point at which to mount the device # $rpppath is the path from $rh_mountpath to the rpp directory, # which is used to verify that this is indeed RHS stuff $rh_mountpath = "/image"; $rpppath = "rpps"; # This is, "CD", "NFS" $rh_mounttype = ""; $rh_mountdevice = ""; $rh_mountdevicetype = ""; ## ## Functions ## sub mount_rhs { local ($try_again, $ret); if ($rh_available) { # we're probably testing stuff return 1; } ## Now get to the real stuff if (! &rhs_menu("Base Install", < From where are you mounting the Red Hat distribution? > EOM , 70, 2, "CD", "CD-ROM Installation", "NFS", "Network Installation" )) { return 0; } $rh_mounttype = $dialog_result; if ($rh_mounttype eq "NFS") { $ret = &nfs_mount; } elsif ($rh_mounttype eq "CD") { $ret = &probe_rhs_cdrom; } else { # NOTREACHED !! # Bad install style if we get here print "mount_rhs(): Bad install style $rh_mounttype\n"; exit 1; } if (! $ret) { &rhs_msgbox("Error", < Without access to the Red Hat Linux files the install can not continue! Sorry. > EOM , 50); return 0; } return 1; } sub unmount_rhs { if (! $rh_mounted) { &rhs_msgbox("Error", < The Red Hat stuff does not appear to be mounted. > EOM , 60); return 1; } if (&__umount_rhs != 0) { &rhs_msgbox("Error", < There was an error unmounting the Red Hat stuff. Perhaps it was not really mounted. > EOM , 60); return 0; } if (! $express_install) { &rhs_msgbox("Success", < Red Hat stuff unmounted successfully. > EOM , 60); } return 1; } sub verify_rhs_files { return -d "$rh_mountpath/RedHat"; } sub finish_cd { if ($rh_mounttype eq "CD") { open(FD, ">>$fsmount/etc/fstab"); print FD </etc/X11/XF86Config"); while () { print OUT; } close IN; close OUT; } else { $force_config = 1; $ret = &configure_mouse; $ret = &select_x_server; $force_config = 0; $first_config = 0; &invoke("/usr/rhs/install/Xconfigurator $xserver $mousetype"); } } &rhs_msgbox ( "X Install", < X is about to start. If it succeeds you will have a few seconds to press a button on the screen. If you do not see the button, X has most likely been misconfigured, and a timeout will occur, bringing you back to text mode for further instructions. > This could take as long as two minutes on a slow network or using a slow CDROM drive. Please be patient. > EOM , 70); &invoke('/usr/X11/bin/startx'); if (! (-f "/tmp/xworked")) { &rhs_menu("X Error", < X seems to have failed to configure and/or run properly. > What do you want to do? > EOM , 70, 3, "Retry", "Just try X again", "Reconfigure", "Reconfigure X and try again", "text", "Fall back to text based install"); if ($dialog_result eq "text") { return 0; } if ($dialog_result eq "Retry") { $config_again = 0; } else { $config_again = 1; } } else { # X worked open(FD, "/etc/X11/XF86Config"); $fsmount = "/mnt"; open(OFD, ">$fsmount/etc/X11/XF86Config"); while () { print OFD $_; } close(FD); close(OFD); unlink("$fsmount/etc/X"); unlink("$fsmount/etc/X11/X"); symlink("../../usr/X11R6/bin/XF86_$xserver", "$fsmount/etc/X11/X"); unlink("$fsmount/usr/X11R6/bin/X"); symlink("../../../etc/X11/X", "$fsmount/usr/X11R6/bin/X"); &finish_mouse; &finish_pcmcia; &finish_cd; } } while (! (-f "/tmp/xworked")); return 1; } 1; ## Takes care of configuring the network -*-perl-*- $net_up = 0; $interface = "internal"; $hostname = ""; $domainname = ""; $fqdn = ""; $ipaddr = ""; $network = ""; $netmask = ""; $broadcast = ""; $gateway = ""; @nslist = (); $config_net_first_time = 1; $net_configed = 0; sub make_net_up { while (! $net_up) { if (! &config_net) { return 0; } &_uninit_net; &_init_net; } return 1; } sub reconfig_net_up { if ($net_up) { &_uninit_net; } return &make_net_up; } sub bring_net_up { local ( $ret ); if ($net_up) { if (! &rhs_yesno("Notice", < Networking appears to be active already. > Bring it down and then back up? > EOM , 60)) { return 1; } &_uninit_net; } if (! $net_configed) { &rhs_msgbox("Error", < Networking is not yet configured. > EOM , 60); return 0; } $ret = &_init_net; if ($net_up) { &rhs_msgbox("Notice", < The network has been initialized. > EOM , 40); } else { &rhs_msgbox("Error", < The network has NOT been initialized. > EOM , 40); } return $ret; } sub bring_net_down { local ( $ret ); $ret = &_uninit_net; if ($net_up) { &rhs_msgbox("Error", < The network was NOT brought down. > EOM , 40); } else { &rhs_msgbox("Notice", < Networking has been brought down. > EOM , 40); } return $ret; } # This sub is used for the auto install sub configure_network { &mount_bootdisk(); if ( -f "/bootdisk/defaults/network" ) { require "/bootdisk/defaults/network"; $config_net_first_time = 0; } if ($net_configed) { if (&rhs_yesno("Choose", < Networking has already been configured (probably for an NFS install). Do you wish to use this configuration for your installed Linux system? > EOM , 70)) { return 1; } } if ($config_net_first_time && !($installsource eq "ftp" || $installsource eq "nfs")) { if (! &rhs_yesno("Choose", < Do you want to configure networking for your installed Linux system? > EOM , 70)) { $net_configed = 0; if (! &rhs_inputbox ( "Hostname", < Please enter a hostname for this machine (Example: torgo.redhat.com) > EOM , 70, $tmp)) { return 0; } $fqdn = $dialog_result; return 1; } } return &reconfig_net_up; print "Reached end of configure_network() !!\n"; exit 1; } sub config_net { local ( $msg, $i, $first_time ); if ($net_up) { if (! &rhs_yesno("Notice", < Networking appears to be up. If you continue and change any network parameters, you should bring networking down and back up again. > Continue? > EOM , 60)) { return 1; } } while (1) { if ($config_net_first_time) { $config_net_first_time = 0; next if (! &config_net_sequence); } # Are these parameters correct? $msg = <You have entered the following parameters: >Interface: $interface >Hostname: $hostname >Domain name: $domainname >IP address: $ipaddr >Network address: $network >Network mask: $netmask >Broadcast address: $broadcast >Gateway: $gateway EOM ; if (@nslist == 0) { $msg .= <Nameserver: none EOM ; } else { for ($i = 0; $i < @nslist; $i++) { $msg .= <Nameserver: $nslist[$i] EOM ; } } $msg .= < Is this correct? EOM ; if (&rhs_yesno("Net Config", $msg, 50)) { $net_configed = 1; return 1; } if (! &rhs_menu("Choose", < What do you wish to do? > EOM , 60, 3, "Sequence", "Configure network information in sequence", "Individual", "Configure individual network parameters", "Cancel", "Cancel all network configuration")) { return 0; } if ($dialog_result eq "Sequence") { next if (! &config_net_sequence); } elsif ($dialog_result eq "Individual") { next if (! &config_net_individual); } elsif ($dialog_result eq "Cancel") { # Cancel $net_configed = 0; return 0; } } } sub config_net_sequence { return 0 if (! &net_interface); return 0 if (! &net_hostname); return 0 if (! &net_domainname); return 0 if (! &net_fqdn); return 0 if (! &net_ipaddr); return 0 if (! &net_network); return 0 if (! &net_netmask); return 0 if (! &net_broadcast); return 0 if (! &net_gateway); return 0 if (! &net_nameservers); return 1; } sub config_net_individual { local ( $ret, $i, $ns ); while (1) { $ns = $nslist[0]; for ($i = 1; $i < @nslist; $i++) { $ns .= ", $nslist[$i]"; } $ns = sprintf("%.25s", $ns); $ret = &rhs_menu ( "Network Configuration", </etc/resolv.conf"); $string = &gen_resolv_conf; print FD $string; close FD; # We write this stuff so the X install can get at it open (FD, ">/tmp/resolv.conf"); print FD $string; close FD; open (FD, ">/tmp/network"); $string = &gen_network; print FD $string; close FD; open(FD, ">/tmp/ifcfg-$iface"); $string = &gen_ifcfg_eth; print FD $string; close FD; open(FD, ">/tmp/HOSTNAME"); $string = &gen_HOSTNAME; print FD $string; close FD; open(FD, ">/tmp/hosts"); $string = &gen_hosts; print FD $string; close FD; open(FD, ">/tmp/networks"); $string = &gen_networks; print FD $string; close FD; # Done writing temp stuff &invoke("hostname $fqdn"); $ret = &invoke("ifconfig $iface $ipaddr netmask $netmask broadcast $broadcast"); $ret = &invoke("route add -net $network netmask $netmask") unless ($ret != 0); $ret = &invoke("route add default gw $gateway metric 1") if (($gateway ne "none") && ($ret == 0)); if ($ret != 0) { $net_up = 0; &rhs_msgbox ( "Error", < An error occurred while setting up the network. Please check to see that it is configured properly. > EOM , 70); return 0; } $net_up = 1; return 1; } ########## Individual Network config dialogs #################### sub net_interface { if ($express_install) { # just assume internal # I dont even know if it will work with an "external" $dialog_result = "internal"; } else { if (! &rhs_menu ( "Network Configuration", < What is the fully qualified domain name (FQDN) of this computer? (Example: torgo.redhat.com) > EOM , 70, $tmp)) { return 0; } $fqdn = $dialog_result; return 1; } sub net_ipaddr { if (! &rhs_inputbox ( "Network Configuration", < What is the IP address of this computer? (Example: 199.183.24.2) > EOM , 70, $ipaddr)) { return 0; } if ($dialog_result =~ /^(.*)\.(.*)\.(.*)\.(.*)$/) { if ($1 > 223) { if (! &rhs_yesno ( "Network Configuration", < You have indicated a reserved network address. Please confirm this choice. > EOM , 70 )) { return 0; } } } $ipaddr = $dialog_result; return 1; } sub net_network { local ( $tmp ); if ($ipaddr =~ /^(.*)\.(.*)\.(.*)\.(.*)$/) { $tmp = $ipaddr; $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/$1.0.0.0/ if ($1 <= 26); $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/$1.$2.0.0/ if ($1 > 26 && $1 <= 128); $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/$1.$2.$3.0/ if ($1 > 128); } $tmp = $network if ($network ne ""); if (! &rhs_inputbox ( "Network Configuration", < What is the network address of this computer? (Example: 199.183.24.0) > EOM , 70, $tmp)) { return 0; } $network = $dialog_result; return 1; } sub net_netmask { local ( $tmp ); if ($ipaddr =~ /^(.*)\.(.*)\.(.*)\.(.*)$/) { $tmp = $ipaddr; $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/255.0.0.0/ if ($1 <= 26); $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/255.255.0.0/ if ($1 > 26 && $1 <= 128); $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/255.255.255.0/ if ($1 > 128); } $tmp = $netmask if ($netmask ne ""); if (! &rhs_inputbox ( "Network Configuration", < What is the netmask used by this computer? (Example: 255.255.255.0) > EOM , 70, $tmp)) { return 0; } $netmask = $dialog_result; return 1; } sub net_broadcast { local ( $tmp ); if ($ipaddr =~ /^(.*)\.(.*)\.(.*)\.(.*)$/) { $tmp = $ipaddr; $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/$1.255.255.255/ if ($1 <= 26); $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/$1.$2.255.255/ if ($1 > 26 && $1 <= 128); $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/$1.$2.$3.255/ if ($1 > 128); } $tmp = $broadcast if ($broadcast ne ""); if (! &rhs_inputbox ( "Network Configuration", < What is the broadcast address used by this computer? (Example: 199.183.24.255) > EOM , 70, $tmp)) { return 0; } $broadcast = $dialog_result; return 1; } sub net_gateway { local ( $tmp ); if (! &rhs_yesno ( "Network Configuration", < Does this computer use a gateway? > EOM , 70 )) { $gateway = "none"; return 1; } if ($ipaddr =~ /^(.*)\.(.*)\.(.*)\.(.*)$/) { $tmp = $ipaddr; $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/$1./ if ($1 <= 26); $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/$1.$2./ if ($1 > 26 && $1 <= 128); $tmp =~ s/^(.*)\.(.*)\.(.*)\.(.*)$/$1.$2.$3./ if ($1 > 128); } $tmp = $gateway if ($gateway ne "" && $gateway ne "none"); if (! &rhs_inputbox ( "Network Configuration", < What is the IP address of the gateway used by this computer? > EOM , 70, $tmp)) { return 0; } $gateway = $dialog_result; return 1; } sub net_nameservers { @nslist = (); if (! &rhs_yesno ( "Network Configuration", < Does this computer use a nameserver? > EOM , 70)) { return 0; } do { if (! &rhs_inputbox ( "Network Configuration", < What is the IP address of the nameserver? > EOM , 70, "")) { return 0; } $nslist[@nslist] = $dialog_result; } while (&rhs_yesno ( "Network Configuration", < Does this computer use another nameserver? > EOM , 70)); return 1; } sub gen_network { local ( $res ); $res = "NETWORKING=yes\n"; $res .= "HOSTNAME=$fqdn\n"; return $res; } sub gen_ifcfg_eth { return <>>Device type: ethernet #>>>Variable declarations: DEVICE=$iface IPADDR=$ipaddr NETMASK=$netmask NETWORK=$network BROADCAST=$broadcast GATEWAY=$gateway ONBOOT=yes #>>>End variable declarations EOM ; } sub gen_HOSTNAME { return "$fqdn\n"; } sub gen_hosts { local ( $res ); if ($net_configed == 1) { $res = sprintf("%-18s %-25s\n", "127.0.0.1", "localhost"); $res .= sprintf("%-18s %-25s %s\n", $ipaddr, $fqdn, $hostname); } else { $res = sprintf("%-18s %-25s %s\n", "127.0.0.1", "localhost", $fqdn); } return $res; } sub gen_resolv_conf { local ( $res, $tmp, $domain_bit, $i ); $res = "domain $domainname\n"; # There needs to be a "search" line in here $res .= "search"; $tmp = $domainname; for (;;) { last if (! ($tmp =~ /\./)); $domain_bit = $tmp; $res .= " $domain_bit"; $tmp =~ s/^\w*\.//; last if ($tmp eq $domain_bit); } $res .= "\n"; for ($i = 0; $i < @nslist; $i++) { $res .= "nameserver $nslist[$i]\n"; } return $res; } sub gen_networks { local ( $res ); $res = "loopback 127.0.0.0\n"; if ($net_configed == 1) { $res .= "localnet $network\n"; } return $res; } sub finish_net { local ( $tmp, $domain_bit, $i, $string ); # Indicate networking - we always have a loopback device open(FD, ">$fsmount/etc/sysconfig/network"); $string = &gen_network; print FD $string; close FD; # Configure ethernet device if ($net_configed != 0) { open(FD, ">$fsmount/etc/sysconfig/network-scripts/ifcfg-$iface"); $string = &gen_ifcfg_eth; print FD $string; close FD; } # /etc/HOSTNAME open(FD, ">$fsmount/etc/HOSTNAME"); $string = &gen_HOSTNAME; print FD $string; close FD; # /etc/hosts open(FD, ">$fsmount/etc/hosts"); $string = &gen_hosts; print FD $string; close FD; # /etc/networks open(FD, ">$fsmount/etc/networks"); $string = &gen_networks; print FD $string; close FD; # /etc/resolv.conf open (FD, ">$fsmount/etc/resolv.conf"); $string = &gen_resolv_conf; print FD $string; close FD; return 1; } sub config_hostname { if ($net_configed) { if (! $express_install) { &rhs_msgbox("Notice", < You have already configured your hostname to be $fqdn (during network configuration). This will be used unless you re-configure networking. > EOM , 60); } return 1; } if (! &rhs_inputbox("Hostname", < Please enter the hostname that you wish to use for your machine. > EOM , 60, "")) { return 0; } $hostname = $dialog_result; $fqdn = $dialog_result; &invoke("hostname $fqdn"); return 1; } sub net_reset { &_uninit_net; $net_configed = 0; } ########################## 1; # Handles configuraing NFS and setting stuff so -*-perl-*- # __mount_rhs mount the proper NFS volume $nfsserver = ""; $nfsdir = ""; sub nfs_mount { local ( $dont_try ); if (! $net_up) { &make_net_up; if (! $net_up) { &rhs_msgbox("Error", < The network must be properly configured for an NFS install to work. > EOM , 60); return 0; } } if (! &_nfs_config) { return 0; } $dont_try = 0; while (1) { if (! $dont_try) { if (&_nfs_mount_and_verify) { return 1; } } $dont_try = 0; if (! &rhs_menu("Choose", < What would you like to try? > EOM , 60, 4, "TCP/IP", "Reconfigure networking", "NFS", "Reconfigure NFS", "Mount", "Just try the mount again", "Quit", "Give up")) { return 0; } else { # Do choice if ($dialog_result eq "TCP/IP") { &reconfig_net_up; if (! $net_up) { &rhs_msgbox("Error", < The network must be properly configured for an NFS install to work. > EOM , 50); $dont_try = 1; } } elsif ($dialog_result eq "NFS") { if (! &_nfs_config) { $dont_try = 1; } } elsif ($dialog_result eq "Mount") { # Do nothing } elsif ($dialog_result eq "Quit") { return 0; } else { print "Bad dialog_result: $dialog_result\n"; exit 1; } } } } sub _nfs_mount_and_verify { $rhsmountdevice = "$nfsserver:$nfsdir"; $rhsmountdevicetype = "nfs"; $hold_on_error = 0; $ret = &invoke("mount -t nfs -o ro $rhsmountdevice $rh_mountpath"); $hold_on_error = 1; if ($ret == 0) { if (&verify_rhs_files) { if (! $express_install) { &rhs_msgbox("Success", < The NFS volume was mounted successfully and the Red Hat files were found. > EOM , 50); } return 1; } else { &rhs_msgbox("Error", < The NFS volume was mounted, but the Red Hat files were not found. > EOM , 50); &__umount_rhs; &invoke("umount $rh_mountpath"); return 0; } } &rhs_msgbox("Error", < I was not able to mount the NFS volume $rhsmountdevice. If this looks correct, you might want to check the server and see that it is properly exported. > If you used a hostname for the NFS server you might try using an IP address, in case the name is not resolving properly. > EOM , 60); return 0; } sub _nfs_config { if (! &rhs_inputbox("NFS", < Enter the host name (or IP address) of your NFS server. > EOM , 50, $nfsserver)) { return 0; } $nfsserver = $dialog_result; if (! &rhs_inputbox("NFS", < Enter the path to the directory you wish to mount from the NFS server. > EOM , 50, $nfsdir)) { return 0; } $nfsdir = $dialog_result; return 1; } ################ 1; # CD-ROM Probing Routines -*-perl-*- ## ## Variables ## # $rh_mountpath is point at which to mount the device # with the RHS stuff on it. # $rpppath is the path from $rhspath to the rpp directory, # which is used to verify that this is indeed RHS stuff # $rh_mountdevice is the device to use in the mount call # $rh_mountdevicetype is the filesystem type to use in the mount call $cddev = ""; $cddevenglish = ""; @cdroms = ( "mcd", "Mitsumi", "scd0", "1st SCSI", "scd1", "2nd SCSI", "cdu535", "Sony CDU-535", "sonycd", "Sony CDU-31A", "hda", "First drive on primary IDE interface", "hdb", "Second drive on primary IDE interface", "hdc", "First drive on secondary IDE interface", "hdd", "Second drive on secondary IDE interface", "sbpcd0", "1st SoundBlaster PRO (or Panasonic?)", "sbpcd1", "2nd SoundBlaster PRO (or Panasonic?)", "sbpcd2", "3rd SoundBlaster PRO (or Panasonic?)", "sbpcd3", "4th SoundBlaster PRO (or Panasonic?)", "aztcd", "Aztech CD-268" ); ## ## Functions ## ## attempt_cd_mount will set $cddev, $cddevenglish ## sub attempt_cd_mount { local ($mode, $arg1, $arg2) = @_; local ($cdi, $ret); if ($mode eq "probe") { print "Probing for Red Hat CD-ROM...\n"; $cdi = 0; while ($cdi < @cdroms - 1) { $cddev = "/dev/$cdroms[$cdi]"; $cddevenglish = $cdroms[$cdi + 1]; print "\nTrying $cddev...\n"; $hold_on_error = 0; print "Invoking mount w/ path $rh_mountpath\n"; $ret = &invoke("mount -t iso9660 -o ro $cddev $rh_mountpath"); print "mount returned $ret\n"; $hold_on_error = 1; if ($ret == 0) { # We mounted it - is it our CD ? $ret = &verify_rhs_files; if ($ret == 1) { print "Success!\n"; $rh_mountdevice = $cddev; $rh_mountdevicetype = "iso9660"; return 1; } print "No Red Hat stuff here.\n"; &invoke_no_output("umount $rh_mountpath"); } print "Failed\n"; $cdi += 2; } print "Total failure. Hit Enter to continue."; ; return 0; } elsif ($mode eq "device") { # Try to mount $arg1 $hold_on_error = 0; $ret = &invoke("mount -t $arg2 -o ro $arg1 $rh_mountpath"); $hold_on_error = 1; if ($ret == 0) { # We mounted it - is it our CD ? $ret = &verify_rhs_files; if ($ret == 1) { $cddev = $arg1; $cddevenglish = $arg1; $rh_mountdevice = $cddev; $rh_mountdevicetype = $arg2; return 1; } print "No Red Hat stuff here.\n"; &invoke_no_output("umount $rh_mountpath"); } ; return 0; } return -1; } sub get_device { local ($device, $type); while (!$device || !$type) { $device = ""; $type = ""; if (! &rhs_inputbox ("Device name", < Please enter the full device name (including /dev/). > EOM , 70, "/dev/")) { next; } $device = $dialog_result; if (! &rhs_inputbox ("Filesystem Type", < Please enter the filesystem type (iso9660, minix, ext2, msdos, hpfs, etc) > EOM , 70, "")) { next; } $type = $dialog_result; } return ($device, $type); } sub mount_partition { local ($device, $type, $success); ($device, $type) = &get_device; $success = 0; while (1) { $success = &attempt_cd_mount ("device", $device, $type); if ($success == 1) { # if respond OK return 1 if (&rhs_yesno ( "Success", < Is this correct? EOM , 50)) { return 1; } } $again = 1; REPEAT: while ($again) { $ret = &rhs_menu ("Error", < >Red Hat file not found! >What should I do now? > EOM , 60, 2, "Again", "Try again", "Quit", "Give up"); next REPEAT if (! $ret); if ($dialog_result eq "Quit") { return 0; } elsif ($dialog_result eq "Again") { ($device, $type) = &get_device; } else { next REPEAT; } $again = 0; } } } sub probe_rhs_cdrom { local ($ret, $success, $mode, $again, $arg1, $arg2, $arg3); $success = 0; while (1) { $success = &attempt_cd_mount ("probe"); if ($success == 1) { # if respond OK return 1 if (&rhs_yesno ( "Success", < Is this correct? EOM , 50)) { return 1; } } $again = 1; REPEAT: while ($again) { $ret = &rhs_menu ("Error", < >Red Hat CD-ROM not found! >What should I do now? > EOM , 60, 2, "Probe", "Probe again", "Quit", "Give up"); next REPEAT if (! $ret); if ($dialog_result eq "Quit") { return 0; } elsif ($dialog_result ne "Probe") { next REPEAT; } $again = 0; } } } ################### 1; # Handles partitioning disks sub partition_disks { local ( $ret ); if (! &rhs_yesno ( "Disk Partitions", < Do you need to partition your disks? > EOM , 70)) { return 1; } if (! &rhs_yesno ( "Disk Partitions", < If you will be using OS/2 on your system in addition to Linux, you must use the OS/2 partitioning software. OS/2 will not recognize partitions created by the Linux partitioning software. > If you have not done this, choose the Reboot option, partition your drives with the OS/2 software, and restart the Red Hat installation. > Continue? > EOM , 70)) { return 0; } &rhs_msgbox ( "Disk Partitions", < Each partition used for the Linux filesystem must be set as type 83. Each partition used for a Linux swap partition must be set as type 82. > EOM , 70); &_partition_disks; } sub _partition_disks { local ( $ret, $snarf, $disklist, $diskinfolist, $msg, $ent ); $ret = &rhs_infobox ( "Disk Partitioning", < Discovering what hard drives are attached to the system... > EOM , 70); @disklist = (); @diskinfolist = (); open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "fdisk -l |") || &newdie("Can't call fdisk!"); while () { if (/^Disk (.*):(.*)$/) { $disklist[@disklist] = $1; $diskinfolist[@diskinfolist] = "$1:$2"; } } close PROC; open(STDERR, ">&SAVEERR"); $msg = < EOM ; foreach $ent (@diskinfolist) { $msg .= ">" . $ent . "\n"; } while (1) { if (! &rhs_menu("Disk Partitioning", $msg, 70, 3, "fdisk", "Partition a disk with fdisk (command line)", "cfdisk", "Partition a disk with cfdisk (full screen)", "done", "Done with partitioning")) { last; } last if ($dialog_result eq "done"); &partition_disk ("fdisk", @disklist) if ($dialog_result eq "fdisk"); &partition_disk ("cfdisk", @disklist) if ($dialog_result eq "cfdisk"); } &rhs_menu("Disk Partitioning", < If fdisk (or cfdisk) complained about not being able to reload the partition tables, you should reboot now. > After rebooting skip the partitioning step and continue with the rest of the installation. > EOM , 70, 2, "Reboot", "Reboot now", "Continue", "Continue the install process"); exit(0) if ($dialog_result eq "Reboot"); return 1; } sub partition_disk { local ( $fdisk, @disklist ) = @_; local ( $ret ); if (! &rhs_menul ( "Disk Partitioning", < Which disk do you want to partition? > EOM , 50, scalar(@disklist), @disklist)) { return 1; } if ($fdisk eq "fdisk") { &invoke("fdisk $dialog_result"); } else { &invoke("cfdisk $dialog_result"); } print "\nHit enter to continue"; ; } ############ 1; # -*-perl-*- # stuff to handle pcmcia devices $pcic = ""; $pcmcia_opts = ""; $pcmcia_3c589 = ""; sub pcmcia_init { &rhs_infobox("PCMCIA", < Probing for PCMCIA devices. > EOM , 70); # This is just to look good... sleep(1); $pcic = ""; open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "probe|") || &newdie("PCMCIA probe failed!"); while () { /Intel PCIC probe/ && (/not found/ || ($pcic = "i82365")); /Databook TCIC-2 probe/ && (/not found/ || ($pcic = "tcic")); } close PROC; open(STDERR, ">&SAVEERR"); if ($pcic eq "") { return 0; } if (!rhs_yesno("PCMCIA", < You appear to have $pcic PCMCIA support. > Is this true? > EOM , 70)) { $pcic = ""; return 0; } &mount_bootdisk(); if (&rhs_yesno("3COM 3c589", < If you have a 3COM 3c589 PCMCIA Ethernet card, are you using 10base2 (also known as BNC, or thin net, or coax)? > (If you are not using a 3c589, just press enter) > EOM , 70)) { $pcmcia_3c589 = " module \"3c589_cs\" opts \"if_port=3\""; } else { $pcmcia_3c589 = " module \"3c589_cs\" # opts \"if_port=3\""; } open(FD, "/etc/pcmcia/config.in"); open(OF, ">/etc/pcmcia/config"); while () { # if (/^PCIC=/) { # $_ = "PCIC=$pcic\n"; # } if (/module \"3c589_cs/) { $_ = "$pcmcia_3c589\n"; } print OF; } close FD; close OF; $pcmcia_opts = ""; &rhs_infobox("PCMCIA", < Loading PCMCIA core module. > EOM , 70); &invoke("insmod /lib/modules/current/pcmcia/pcmcia_core.o"); &rhs_infobox("PCMCIA", < Loading PCMCIA $pcic module. > EOM , 70); &invoke("insmod /lib/modules/current/pcmcia/$pcic.o $pcmcia_opts"); &rhs_infobox("PCMCIA", < Loading PCMCIA ds module. > EOM , 70); &invoke("insmod /lib/modules/current/pcmcia/ds.o"); &rhs_infobox("PCMCIA", < Running PCMCIA card manager. > EOM , 70); &invoke("cardmgr"); return 0; } sub finish_pcmcia { local ( $ans ); if (! -f "$fsmount/etc/sysconfig/pcmcia") { return 1; } if ($pcic) { $ans = "yes"; } else { $ans = "no"; } open(FD, ">$fsmount/etc/sysconfig/pcmcia"); print FD <$fsmount/etc/sysconfig/pcmcia-scripts/config.new"); while () { if (/module \"3c589_cs/) { $_ = $pcmcia_3c589; } print FD; } close IFD; close FD; unlink("$fsmount/etc/sysconfig/pcmcia-scripts/config"); link("$fsmount/etc/sysconfig/pcmcia-scripts/config.new", "$fsmount/etc/sysconfig/pcmcia-scripts/config"); unlink("$fsmount/etc/sysconfig/pcmcia-scripts/config.new"); return 1; } ####### 1; ### -*-perl-*- # This is a new 2 stage swap module # select_swap, init_swap @swappars = (); sub select_swap { local ( $found, @swapinfolist, $msg, $ent, $par, $blk ); local ( $p, $r ); &rhs_infobox ("Swap Space", < Looking for swap partitions... > EOM , 50); @swapinfolist = (); $found = 0; open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "fdisk -l |") || die "Can't call fdisk!"; while () { if (/^(.{10}).{5}(.{31}).*Linux swap$/) { $p = $1; $r = $2; $p =~ s/\s$//; if (! &member($p, @swappars)) { $swapinfolist[@swapinfolist] = "$p $r"; } $found = 1; } } close PROC; open(STDERR, ">&SAVEERR"); if (! $found) { &rhs_msgbox("Notice", < No swap partitions were found. > If this is an error, back up and reconstruct your partitions. Swap partitions must be designated as type 82. > EOM , 60); return 0; } if (@swapinfolist == 0) { &rhs_msgbox("Notice", < All swap partitions are active. > EOM , 45); return 1; } foreach $ent (@swapinfolist) { $ent =~ /^(.{10}).{22}(.{8})/; $par = $1; $blk = $2; $par =~ s/\s$//; if (&rhs_yesno("Add Swap", < This appears to be a swap partition: > > Device Begin Start End Blocks >$ent > Do you want to use this as a swap partition? > EOM , 52)) { $swappars[@swappars] = $par; $swapparsblk{$par} = $blk; } } return 1; } sub init_swap { local ($ent, $ret); open(FD, ">/tmp/swap"); foreach $ent (@swappars) { print FD "$ent\n"; &rhs_infobox ("Format Swap", < Formatting and initializing $ent as swapspace. > This may take a minute. > EOM , 70); $ret = &invoke("mkswap -c $ent $swapparsblk{$ent}"); $ret += &invoke("swapon $ent > /dev/null") unless ($ret); if ($ret) { &rhs_msgbox ("Format Swap", < An error occurred while setting up $ent as swapspace. > EOM , 50); } } close FD; return 1; } sub swap_off { local ( $ent, @result ); @result = (); if (@swappars == 0) { &rhs_msgbox("Error", < No swap partitions are active. > EOM , 60); return 1; } foreach $ent (@swappars) { if (&rhs_yesno("Swap Off", < Turn off swapping on device $ent ? > EOM , 60)) { &invoke("swapoff $ent"); } else { push(@result, $ent); } } @swappars = @result; return 1; } sub finish_swap { local ( $ent ); open(FD, ">>$fsmount/etc/fstab"); print FD < Please pick an installation step. > Choosing Next each time will walk you through the installation. This is highly recommended unless you know what you are doing. > EOM , 75, 37, "Next", "Next step ($install_step[$step_index])", "Express", "Continue with Express Install", "Skip+Express", "Skip this step and continue Express Install", "Skip", "Skip this step and continue in order", "Shell", "Start a shell", "Reboot", "Reboot the machine", "-----------", "--------------------------------------", "Select Media", "Find the Red Hat Packages", "Unmount RHS", "Unmount the Red Hat CD (or NFS)", "Partition", "Partition your hard drives", "Select Swap", "Select swap partitions", "Init Swap", "Format and activate swap partitions", "Swap Off", "Deactivate your swap partitions", "Select FS", "Select your Linux partitions", "Make FS", "Format your Linux partitions", "X Install", "Start X Based Installation", "Fstab", "Set up your Linux filesystem", "Mount FS", "Mount your Linux filesystem", "Unmount FS", "Unmount your Linux filesystem", "Conf Net", "Configure networking", "Net Up", "Turn networking on", "Net Down", "Turn networking off", "Bootstrap", "Install the bootstrap system", "Select Series", "Select series to install", "Install Series", "Install selected series", "Configure Modem", "Set up your modem device", "Configure Mouse", "Set up your mouse device", "Configure Keyboard", "Choose your keyboard map", "Configure Clock", "Set up clock and timezone", "Configure LILO", "Configure and install LILO", "Select X Server", "Select an X server", "Configure X", "Configure your X server", "Add Users", "Add users (other than root)", "Root Password", "Set the root password", "Install Kernel", "Install Kernel from Boot Floppy", "Finish", "Write config data, etc", "All Done", "You are finished")) { next; } $r = $dialog_result; } if ($r eq "Express") { $express_install = 1; $r = "Next"; } if ($r eq "Skip") { $step_index++; } if ($r eq "Skip+Express") { $step_index++; $express_install = 1; $r = "Next"; } if ($r eq "Next") { $step = 1; $r = $install_step[$step_index]; $step_index++; } else { $step = 0; } if ($r eq "No-op") { $express_install = 0; $step = 0; $step_index--; } if ($r eq "Reboot") { return 1; } elsif ($r eq "Shell") { &do_shell; } elsif ($r eq "Select Media") { $ret = &select_media; } elsif ($r eq "Unmount RHS") { $ret = &unmount_rhs; } elsif ($r eq "Partition") { $ret = &partition_disks } elsif ($r eq "Init Swap") { $ret = &init_swap; } elsif ($r eq "Select Swap") { $ret = &select_swap; } elsif ($r eq "Swap Off") { $ret = &swap_off; } elsif ($r eq "Configure LILO") { $ret = &install_lilo; } elsif ($r eq "Make FS") { $ret = &format_disks; } elsif ($r eq "Select FS") { $ret = &select_format_disks; } elsif ($r eq "Erase FS") { $ret = &erase_filesystems } elsif ($r eq "Mount FS") { $ret = &mount_filesystems } elsif ($r eq "Unmount FS") { $ret = &unmount_filesystems; } elsif ($r eq "Fstab") { $ret = &init_filesystems; } elsif ($r eq "X Install") { # The X install can drop out to a text based install $ret = &xinstall; if (! $ret) { $ret = 1; # This should be the Select FS step $step_index = 5; @install_step = @text_step; $installtype = "text"; # Make sure we have everything require "textinst"; require "makefs"; require "fstab"; require "bootstrap"; require "keyboard"; require "clock"; require "kernel"; require "lilo"; require "modem"; require "series"; require "users"; } } elsif ($r eq "Bootstrap") { $ret = &install_bootstrap; } elsif ($r eq "Select Series") { $ret = &series_select; } elsif ($r eq "Install Series") { $ret = &series_install; } elsif ($r eq "Install Kernel") { $ret = &install_kernel; } elsif ($r eq "Conf Net") { $ret = &config_net; } elsif ($r eq "Configure Net") { $ret = &configure_network; } elsif ($r eq "Configure Modem") { $ret = &configure_modem; } elsif ($r eq "Configure Mouse") { $ret = &configure_mouse; } elsif ($r eq "Configure Keyboard") { $ret = &configure_keyboard; } elsif ($r eq "Configure Clock") { $ret = &configure_clock; } elsif ($r eq "Add Users") { $ret = &add_users; } elsif ($r eq "Root Password") { $ret = &root_password; } elsif ($r eq "Select X Server") { $ret = &select_x_server; } elsif ($r eq "Install X Server") { $ret = &install_x; } elsif ($r eq "Configure X") { $ret = &config_x; } elsif ($r eq "Net Up") { $ret = &bring_net_up; } elsif ($r eq "Net Down") { $ret = &bring_net_down; } elsif ($r eq "Erase") { $ret = &erase_filesystems; } elsif ($r eq "Hack") { $ret = &hack_state; } elsif ($r eq "Finish") { $ret = &finish; } elsif ($r eq "All Done") { $ret = &all_done; if ($ret) { return 1; } $express_install = 0; } elsif ($r eq "No-op") { $ret = 1; } if ($step) { if (! $ret) { # stop express install if ($express_install) { $express_install = 0; &rhs_msgbox("Error", < Some sort of error occured, so we have dropped you out of the Express Install. You can rejoin the Express Install by selecting Express from the menu. > EOM , 65); } $step_index--; } } } } sub do_shell { &rhs_msgbox("Shell", < There is a shell running on VC2. Press Alt-F2 to switch to VC2. You can press Alt-F1 to get back to the install program. > EOM , 65); } sub all_done { return &rhs_yesno("Installation Completed", < Your installation is finished. > You may reboot now, or select reboot from the main menu. > Reboot now? > EOM , 65); } ## 1; ## -*-perl-*- # Routines to set up the filesystem hierarchy # This is where we mount the new Linux filesystem $fsmount = "/mnt"; # %fsformat{device} is used to determine file system types # if a device is not listed there, we ask the user for the type %fs_pars = (); %fs_types = (); %fs_sizes = (); %fs_mountpoints = (); # Indicates that the installation filesystem is mounted $fs_mounted = 0; $root_dev = ""; sub fstab_reset { %fs_pars = (); %fs_types = (); %fs_sizes = (); %fs_mountpoints = (); %fsformat = (); $root_dev = ""; } sub mountpoint_sort { $fs_mountpoints{$a} cmp $fs_mountpoints{$b}; } sub init_filesystems { local ( %fsinfolist, $dev, $size ); local ( $p, $r ); if ($fs_mounted) { if (! &rhs_menu("Warning", < The installation filesystems are already mounted. DO NOT make changes to the filesystem mountpoints unless you first unmount the filesystems and erase them. > What do you want to do? > EOM , 70, 3, "Unmount the filesystems", "", "Unmount and erase the filesystems", "", "Forget it -- do not change the filesystems", "")) { return 1; } if ($dialog_result eq "Forget it -- do not change the filesystems") { return 1; } elsif ($dialog_result eq "Unmount the filesystems") { return 0 if (! &unmount_filesystems); } elsif ($dialog_result eq "Unmount and erase the filesystems") { return 0 if (! &unmount_filesystems); return 0 if (! &erase_filesystems); } } ## Find all disk partitions &rhs_infobox ("Filesystems", < Looking for Linux partitions... > EOM , 60); %fsinfolist = (); open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "fdisk -l |") || &newdie("Can't call fdisk!"); while () { if (/^(.{10}).{5}(.{31}).*Linux native$/) { $p = $1; $r = $2; $p =~ s/\s$//; $fsinfolist{$p} = "$r"; } } close PROC; open(STDERR, ">&SAVEERR"); if (keys(%fsinfolist) == 0) { &rhs_msgbox ( "Filesystems", < You don\'t appear to have any Linux partitions on your system. You must create at least one before continuing. > EOM , 60); return 0; } ## Select paritions and mount points ## First the special case where there is only one partition if (keys(%fsinfolist) == 1) { ($dev) = keys(%fsinfolist); $fsinfolist{$dev} =~ /^.*(.{9})$/; $size = $1; chop($size); $root_dev = $dev; $fs_pars{$dev} = $dev; $fs_types{$dev} = $fstype; $fs_sizes{$dev} = $size; $fs_mountpoints{$dev} = "/"; return 1; } SELNEWPAR: while(1) { $msg = < Device Type Blocks Location EOM ; foreach $ent (sort mountpoint_sort (keys(%fs_mountpoints))) { $msg .= sprintf(">%-9s %5s%7s %s\n", $ent, $fs_types{$ent}, $fs_sizes{$ent}, $fs_mountpoints{$ent}); } $msg .= ">"; if (! &rhs_menu("Filesystems", $msg, 60, 4, "Add", "Add a new partition", "Remove", "Remove a partition", "Edit", "Change the location of a partition", "Done", "Continue with install")) { %fs_pars = (); %fs_types = (); %fs_sizes = (); %fs_mountpoints = (); return 0; } if ($dialog_result eq "Add") { &fs_add_filesystem(%fsinfolist); } elsif ($dialog_result eq "Remove") { &fs_remove_filesystem; } elsif ($dialog_result eq "Edit") { &fs_edit_filesystem; } elsif ($dialog_result eq "Done") { if (&fs_verify_fstab) { return 1; } } } # while(1) # should never get here } sub fs_verify_fstab { local ( $ent, $oent ); ## Check for duplicate mount points foreach $ent (values (%fs_mountpoints)) { if ($ent eq $oent) { &rhs_msgbox("Error", < The following mount point is used twice! Only one partition can be mounted at any one mount point. > $ent > EOM , 60); return 0; } $oent = $ent; } ## Check for a "/" filesystem $root_dev = ""; foreach $ent (keys (%fs_mountpoints)) { if ($fs_mountpoints{$ent} eq "/") { $root_dev = $ent; last; } } if ( $root_dev eq "" ) { &rhs_msgbox("Error", < You have not specified a root parition! > You must have a single parition mounted at \"/\". > EOM , 60); return 0; } return 1; } sub fs_remove_filesystem { local ( %fstmp, $ent, $dev ); $fstmp = (); foreach $ent (sort mountpoint_sort (keys(%fs_mountpoints))) { $fstmp{$ent} = sprintf("%5s%7s %-12.12s\n", $fs_types{$ent}, $fs_sizes{$ent}, $fs_mountpoints{$ent}); } if (! &rhs_menua("Filesystems", < Which partition do you want to remove? > EOM , 45, %fstmp)) { return 0; } $dev = $dialog_result; delete $fs_pars{$dev}; delete $fs_sizes{$dev}; delete $fs_types{$dev}; delete $fs_mountpoints{$dev}; return 1; } sub fs_edit_filesystem { local ( %fstmp, $ent, $dev ); $fstmp = (); foreach $ent (sort mountpoint_sort (keys(%fs_mountpoints))) { $fstmp{$ent} = sprintf("%5s%7s %-12.12s\n", $fs_types{$ent}, $fs_sizes{$ent}, $fs_mountpoints{$ent}); } if (! &rhs_menua("Filesystems", < Which partition do you want to edit? > EOM , 45, %fstmp)) { return 0; } $dev = $dialog_result; if (! &rhs_inputbox("Filesystems", < Where do you want to mount $dev? > EOM , 70, $fs_mountpoints{$dev})) { return 0; } $fs_mountpoints{$dev} = $dialog_result; return 1; } sub fs_add_filesystem { local ( %fsinfolist ) = @_; local ( %fstmp, $ent, $entb, $dev, $size ); %fstmp = (); ADDNEWPARB: foreach $ent (sort keys (%fsinfolist)) { foreach $entb (sort keys (%fs_pars)) { next ADDNEWPARB if ($ent eq $entb); } $fstmp{$ent} = $fsinfolist{$ent}; } if (! &rhs_menua("Filesystems", < Which partition do you want to add? > > Device Begin Start End Blocks EOM , 54, %fstmp)) { return 0; } $dev = $dialog_result; $fstmp{$dev} =~ /^.*(.{9})$/; $size = $1; chop($size); return &fs_add($dev, $size); } sub fs_add { local ( $dev, $size ) = @_; local ( $mountpoint ); if (! &rhs_inputbox("Filesystems", < Where do you want to mount $dev? > EOM , 70, "")) { return 0; } $mountpoint = $dialog_result; if ($fsformat{$dev}) { $type = $fsformat{$dev}; } else { if (! &rhs_menu("Filesystems", < What type of filesystem is on this partition? > EOM , 50, 3, "ext2", "Second Extended FS", "minix", "Minix FS", "msdos", "MS-DOS FS")) { return 0; } $type = $dialog_result; } $fs_pars{$dev} = $dev; $fs_types{$dev} = $type; $fs_sizes{$dev} = $size; $fs_mountpoints{$dev} = $mountpoint; return 1; } sub mount_filesystems { local ( $ent, $ret ); if ($fs_mounted) { &rhs_msgbox("Notice", < Your Linux filesystem is already mounted. > EOM , 60); return 1; } $ret = 0; foreach $ent (sort mountpoint_sort (keys(%fs_mountpoints))) { if ($fs_mountpoints{$ent} ne "/") { &invoke("mkdir -p $fsmount$fs_mountpoints{$ent}"); } $ret += &invoke("mount -t $fs_types{$ent} $ent $fsmount$fs_mountpoints{$ent}"); } if ($ret) { &rhs_msgbox("Error", < An error occurred while mounting the filesystem. > You need to repeat the Fstab step and reorganize your filesystem. You should then Unmount your filesystem, and Mount it again. > EOM , 60); $fs_mounted = 0; return 0; } else { if (! $express_install) { &rhs_msgbox("Success", < Your Linux filesystem was mounted successfully. > EOM , 60); } $fs_mounted = 1; return 1; } } sub unmount_filesystems { local ( $ent ); if (! $fs_mounted) { if (! &rhs_yesno("Notice", < Your Linux filesystem does not appear to be mounted. > Go ahead and unmount it anyway? > EOM , 60)) { return 1; } } foreach $ent (reverse sort mountpoint_sort (keys(%fs_mountpoints))) { &invoke("umount $ent"); } $fs_mounted = 0; return 1; } sub erase_filesystems { &rhs_msgbox("Notice", < Erasing filesystems is not supported at this time. To get the same effect, unmount, re-format, and remount your filesystem. > EOM , 60); return 0; } sub finish_fstab { local ( $ent ); open(FD, ">$fsmount/etc/fstab"); print FD < Your filesystems are already mounted (and thus, they are most likely formatted). If you still wish to format them, unmount them first. > EOM , 60); return 0; } &rhs_infobox ( "Filesystems", < Looking for Linux partitions... > EOM , 60); %fsinfolist = (); open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "fdisk -l |") || &newdie("Can't call fdisk!"); while () { if (/^(.{10}).{5}(.{31}).*Linux native$/) { $p = $1; $r = $2; $p =~ s/\s$//; $fsinfolist{$p} = "$r"; } } close PROC; open(STDERR, ">&SAVEERR"); if (keys(%fsinfolist) == 0) { &rhs_msgbox ( "Filesystems", < You do not appear to have any Linux partitions on your system. You must create at least one before continuing. > EOM , 60); return 0; } do { @selected_devices = (); %fsformat = (); %fs_menu = %fsinfolist; foreach $dev (keys %fs_menu) { $fs_menu{$dev} = sprintf("%7s %s", $fsformat{$dev}, $fs_menu{$dev}); } if (! &rhs_checklista("Filesystems", < Use the spacebar to select all partitions to format. Then select OK. > > Device Type Begin Start End Blocks EOM , 65, %fs_menu)) { return 0; } if (! scalar(@dialog_result)) { next; } @selected_devices = sort @dialog_result; foreach $dev (@selected_devices) { $fsformat{$dev} = $fstype; } if ($express_install) { $dialog_result = "No"; } else { if (! &rhs_menu("Filesystems", < Check for bad blocks on the hard drive during formatting? > EOM , 50, 2, "Yes", "Check for bad blocks", "No", "Do not check for bad blocks")) { next; } } if ($dialog_result eq "Yes") { $badblock_check = "-c"; } else { $badblock_check = ""; } $msg = < Are you absolutely certain that you want to format? > EOM ; foreach $dev (@selected_devices) { $msg .= <$dev EOM ; } $msg .= < All data on these partitions will be lost! > EOM ; } while (! &rhs_yesno("Filesystems", $msg, 70)); return 1; } sub format_disks { local ( $dev, $devsize, %fsinfolist, $msg, $res, $retval ); $retval = 1; %fsinfolist = (); open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "fdisk -l |") || &newdie("Can't call fdisk!"); while () { if (/^(.{10}).{5}(.{31}).*Linux native$/) { $p = $1; $r = $2; $p =~ s/\s$//; $fsinfolist{$p} = "$r"; } } close PROC; open(STDERR, ">&SAVEERR"); if (keys(%fsinfolist) == 0) { &rhs_msgbox ( "Filesystems", < Your Linux partitions have disappeared. > You must create at least one before continuing. > EOM , 60); return 0; } foreach $dev (@selected_devices) { $fsinfolist{$dev} =~ /^.*(.{9})$/; $devsize = $1; chop($devsize); $msg = < Formatting $dev with $fstype filesystem. > EOM ; if ($badblock_check eq "-c") { $msg .= < EOM ; } &rhs_infobox("Formatting Filesystems", $msg, 65); if ($express_install) { $res = &invoke_no_output("mke2fs $badblock_check $dev"); } else { $res = &invoke("mke2fs $badblock_check $dev"); } if ($res) { $retval = 0; &rhs_msgbox("Error", < An error occurred while formatting $dev. > EOM , 60); delete $fsformat{$dev}; } } return $retval; } ############# 1; ## -*-perl-*- # install the bootstrap system # Path from $rhspath to the bootstrap tar file $fsstnd_cpio = "RedHat/base/fsstnd.cgz"; $skel_cpio = "RedHat/base/skeleton.cgz"; $bootstrap_file_count = 143; sub install_bootstrap { local ( $ret, $tmp ); if (! $fs_mounted) { &rhs_msgbox("Error", < Your installation filesystem must be mounted before you can initialize it. > EOM , 60); return 0; } # cd to the installation filesystem chdir($fsmount); &rhs_infobox("Filesystem Initialization", < Setting up initial filesystem structure. > EOM , 70); if ($installsource eq "ftp") { if (! $ftp_configured) { $ret = 1; &rhs_msgbox("FTP Failed", < FTP is not configured. You will have to configure it before continuing. > EOM , 60); } else { if (&get_ftp_file($fsstnd_cpio, "fsstnd.cpio.gz")) { open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/tty3"); $ret = &invoke("gunzip -dc fsstnd.cpio.gz | cpio --extract"); open(STDERR, ">&SAVEERR"); unlink("fsstnd.cpio.gz"); if (&get_ftp_file($skel_cpio, "skel.cpio.gz")) { open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/tty3"); $ret += &invoke("gunzip -dc skel.cpio.gz | cpio --extract"); open(STDERR, ">&SAVEERR"); unlink("skel.cpio.gz"); } else { $ret = 1; } } else { $ret = 1; } if ($ret != 0) { &rhs_msgbox("FTP Failed", < FTP failed! > Error returned: $ftp_error > EOM , 60); } } } elsif ($installsource eq "floppy") { mkdir("/mnt/tmp", 0755); &floppy_copy_file("fsstnd.cgz", "/mnt/tmp", *nogauge); &floppy_copy_file("skeleton.cgz", "/mnt/tmp", *nogauge); open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/tty3"); $ret = &invoke("gunzip -dc /mnt/tmp/fsstnd.cgz | cpio --extract"); $ret += &invoke("gunzip -dc /mnt/tmp/skeleton.cgz | cpio --extract"); open(STDERR, ">&SAVEERR"); unlink("/mnt/tmp/fsstnd.cgz"); unlink("/mnt/tmp/skeleton.cgz"); } else { open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/tty3"); $ret = &invoke("gunzip -dc $rh_mountpath/$fsstnd_cpio | cpio --extract"); $ret += &invoke("gunzip -dc $rh_mountpath/$skel_cpio | cpio --extract"); open(STDERR, ">&SAVEERR"); } chdir("/"); if ($ret != 0) { &rhs_msgbox("Filesystem Initialization", < The initial archive was not extracted properly. The archive was probably not found, or the filesystem is corrupted. Make sure the Red Hat CD (or NFS volume) is mounted. > EOM , 60); return 0; } if (! $express_install) { &rhs_msgbox("Bootstrap Install", < The bootstrap installation is complete. > EOM , 70); } return 1; } ####################### 1; # -*-perl-*- $xinstalled = 0; sub load_series { local ( $series_version, $series_file, $series_name ); if ($installsource eq "ftp") { $series_file = $ftp_series_file; } elsif ($installsource eq "floppy") { $series_file = "/tmp/series"; } else { $series_file = "/image/RedHat/base/series"; } open(S, $series_file); $series_version = ; chop($series_version); $series_name = ""; @series_names = (); $series_count = 0; while () { chop; ( $first, $rest ) = split; next if ($first eq ""); next if ($first =~ /^\#/); next if ($first =~ /@/); if ($first eq "end") { $series_package_count{$series_name} = $count; $series_name = ""; next; } if (! $series_name) { ($default, $series_name) = $_ =~ /^([01])\s*(.*)/; $series_names[$series_count] = $series_name; $series_count++; $count = 0; } else { $series_packages{"$series_name:$count"} = $first; $count++; } } close(S); } sub series_select { local (@s); if (! $series_loaded) { &load_series; $series_loaded = 1; } @series_to_install = ("Base"); @s = (); foreach (@series_names) { if ($_ ne "Base") { push (@s, $_); } } if (! &rhs_checklistl("Select Series", < Select each series that you want to install. The Base series is not shown, but is always installed. > EOM , 78, scalar(@s), @s)) { return 0; } foreach (@dialog_result) { push (@series_to_install, $_); if ($_ =~ /.*X Windows.*/) { $xinstalled = 1; } } if ($xinstalled) { &select_x_server; $xserver_rpm = "XFree86-$xserver"; } return 1; } sub series_install { local ( $rpms, @rpms, @avail_list, @files ); local ( $file, $count, $total, $nogauge, $failed_packages ); local ( $msg, $omsg, $res, %doshack, $filename, %already_installed ); local ( $error ); &get_rpms_list(*rpms) || return 0; $total = scalar(@rpms); $failed_packages = ""; $nogauge = 1; foreach $rpm (@rpms) { $count++; $filename = $rpm; $filename =~ s|.*\/||; $already_installed{$filename} && next; $already_installed{$filename} = 1; undef($removefile); if ($installsource eq "floppy") { $msg = ">\n" . "> Reading : $filename\n" . "> Package Number: $count of $total\n" . ">\n"; if ($nogauge) { &rhs_gauge("Package Installation", $msg, 70, 0); $nogauge = 0; } else { &rhs_update_gauge_and_message($msg, 0); } &floppy_copy_file($filename, "/mnt/tmp", *nogauge); $nogauge = 1; $removefile = "/mnt/tmp/$filename"; } # print "getting ready to rpm -i $rpm <>\n"; # ; open (INST, "rpm -i --percent --force --root /mnt $rpm 2>&1 |"); if ($installsource eq "ftp") { $msg = ">\n" . "> Downloading : $filename\n" . "> Package Number: $count of $total\n" . ">\n"; } else { $msg = ">\n" . "> Installing : $filename\n" . "> Package Number: $count of $total\n" . ">\n"; } if ($nogauge) { &rhs_gauge("Package Installation", $msg, 70, 0); $nogauge = 0; } else { &rhs_update_gauge_and_message($msg, 0); } while () { if (/.*failed.*/) { $failed_packages .= " " . $file; &rhs_stop_gauge; $nogauge = 1; if ($installsource eq "ftp") { $error = "FTP"; } else { $error = "Package install"; } &rhs_infobox("$error Failed", ">\n" . "> $error of $filename failed.\n" . ">\n", , 60); sleep(3); } if (/^%%/) { # Update (and create if necessary) the gauge $omsg = $msg; $_ =~ m|%% (.*)|; $percent = int($1); $percent = 0 if (! $percent); if ($percent > 99) { $msg = ">\n". "> Recording : $filename\n" . "> Package Number: $count of $total\n" . ">\n"; } else { $msg = ">\n". "> Installing : $filename\n" . "> Package Number: $count of $total\n" . ">\n"; } if ($nogauge) { &rhs_gauge("Package Installation", $msg, 70, $percent); $nogauge = 0; } else { if ($msg ne $omsg) { &rhs_update_gauge_and_message($msg, $percent); } else { &rhs_update_gauge($percent); } } } } close(INST); $removefile && unlink($removefile); } if ($failed_packages) { if ($installsource eq "ftp") { $error = ", probably due to FTP failure."; } else { $error = "."; } &rhs_msgbox("Failed Packages", < The following packages failed to install$error You may wish to install these packages after completing the installation. > $failed_packages > EOM , 70); } # &rhs_msgbox("Package Installation", #< #Package Installation is complete. #> #EOM # , 70); return 1; } sub generate_rpms_to_install { local ( @avail ) = @_; local ( @series_rpms ); local ( $rpm, @rpms_to_install ); # First generate a uniq list of package names foreach (@series_to_install) { foreach $x (0 .. $series_package_count{$_}) { if (! &member($series_packages{"$_:$x"}, @series_rpms)) { push(@series_rpms, $series_packages{"$_:$x"}); } } } if ($xinstalled) { push(@series_rpms, $xserver_rpm); } foreach $rpm (@avail) { $rpm =~ /(.*)-.*-.*\..*\.rpm/; $name = $1; if (&member($name, @series_rpms)) { push(@rpms_to_install, $rpm); } } return @rpms_to_install; } sub get_rpms_list { local (*rpms) = @_; local (@files, @avail_list, %doshack, @rpms_to_install, @tmprpms); ($installsource eq "nfs" || $installsource eq "cdrom") && do { opendir(D, "/image/RedHat/RPMS"); @files = readdir(D); closedir(D); @avail_list = grep(m|.*\.rpm|, @files); @rpms_to_install = &generate_rpms_to_install(@avail_list); @rpms = sort(grep(s|^|/image/RedHat/RPMS/|, @rpms_to_install)); } ; ($installsource eq "hard drive") && do { require "rpmhead"; &get_name_file_dict(*doshack) || return 0; @avail_list = keys(%doshack); @rpms_to_install = &generate_rpms_to_install(@avail_list); foreach (@rpms_to_install) { push(@tmprpms, $doshack{$_}); } @rpms = sort(grep(s|^|/image/RedHat/RPMS/|, @tmprpms)); }; ($installsource eq "ftp") && do { &ftp_get_file_list(*files) || return 0; # Generate the list of rpms @avail_list = grep(m|.*\.rpm|, @files); @rpms_to_install = &generate_rpms_to_install(@avail_list); @rpms = sort(grep(s|^|ftp://$ftp_site$ftp_dir/RedHat/RPMS/|, @rpms_to_install)); } ; ($installsource eq "floppy") && do { @avail_list = &floppy_get_rpm_list(); @rpms_to_install = &generate_rpms_to_install(@avail_list); @rpms = &floppy_sort_rpms(@rpms); @rpms = grep(s|^|/mnt/tmp/|, @rpms_to_install); }; return 1; } ######### 1; # -*-perl-*- $ftp_site = ""; $ftp_dir = ""; $ftp_configured = 0; $ftp_series_file = "/tmp/series"; @ftp_spec = (); sub ftp_init { require "/usr/lib/rhs/rpm/rpmftp.pl"; if (! $net_up) { &make_net_up; if (! $net_up) { &rhs_msgbox("Error", < The network must be properly configured for an FTP install to work. > EOM , 60); return 0; } } $ftp_configured = 0; if (! &configure_ftp) { return 0; } while (! &test_ftp) { if (! &rhs_menu("FTP Configuration", < FTP initialization failed. > The following error was returned: > $ftp_error > EOM , 60, 2, "Configure", "Reconfigure FTP", "Give Up", "Just forget it")) { return 0; } if ($dialog_result eq "Give Up") { return 0; } &configure_ftp; } $ftp_configured = 1; return 1; } sub test_ftp { &rhs_infobox("FTP Configuration", < Testing ftp://$ftp_site$ftp_dir > EOM , 60); if (! &get_ftp_file("RedHat/base/series", $ftp_series_file)) { return 0; } return 1; } sub get_ftp_file { local ( $remote, $local ) = @_; return &ftp_file("ftp://$ftp_site$ftp_dir/$remote", $local); } sub get_ftp_dir { local ( $dir ) = @_; local ( @result ); @result = &ftp_dir("ftp://$ftp_site$ftp_dir/$dir"); return @result; } sub configure_ftp { if (! &rhs_menu("FTP Configuration", < Enter the FTP host name. > EOM , 60, $ftp_site)) { return 0; } $ftp_site = $dialog_result; if (! &rhs_inputbox ( "FTP Configuration", < Enter the path to the Red Hat files on $ftp_site. > EOM , 60, $ftp_dir)) { return 0; } $ftp_dir = $dialog_result; if ($ftp_dir =~ m|^[^/]|) { $ftp_dir = "/" . $ftp_dir; } # if (&rhs_yesno("FTP Configuration", #< #If you are behind a firewall, you may need to log in as #something other than anonymous, and give a real password. #> #Do you need to do this? #> #EOM # , 60)) { # if (! &rhs_inputbox ( "FTP Configuration", #< #Enter the login name for your FTP server #> #EOM # , 60, $rpm_ftp_login)) { # return 0; # } # $rpm_ftp_login = $dialog_result; # if (! &rhs_inputbox ( "FTP Configuration", #< #Enter the password for your FTP server #> #THIS PASSWORD WILL SHOW IN THE SCREEN IN CLEAR TEXT! #> #EOM # , 60, $rpm_ftp_password)) { # return 0; # } # $rpm_ftp_password = $dialog_result; # } } return 1; } sub ftp_get_file_list { local (*files) = @_; if (! $ftp_configured) { &rhs_msgbox("FTP Install", "\nFTP is not configured!\nYou will" . "have to configure it and return to this stage.\n\n", , 70); return 0; } &rhs_infobox("FTP Install", < Getting list of packages from FTP site. > EOM , 60); @files = &get_ftp_dir("RedHat/RPMS"); if ($ftp_error) { &rhs_msgbox("FTP Install", < FTP failed! > Error returned: $ftp_error > EOM , 70); return 0; } return 1; } ########### 1; # config clock and timezone -*-perl-*- $clockmode = ""; $timezone = ""; $zoneinfodir = "/usr/lib/zoneinfo"; sub configure_clock { local ( @zones ); if (! &rhs_menu("Clock Configuration", < Is your system clock set to local time or GMT? > EOM , 50, 2, "Local Time", "", "GMT/UTC", "")) { return 0; } if ($dialog_result eq "Local Time") { $clockmode = "local"; } else { $clockmode = "GMT"; } chdir("$fsmount$zoneinfodir"); @zones = (); open(FIND, "find . -type f -print |"); @zones = ; close(FIND); @zones = reverse sort grep(s/\.\///, grep(chop, @zones)); chdir("/"); if (! &rhs_menul("Time Zone", < Pick a time zone. > EOM , 50, scalar(@zones), @zones)) { return 0; } $timezone = $dialog_result; unlink("$fsmount/etc/localtime"); symlink("..$zoneinfodir/$dialog_result", "$fsmount/etc/localtime"); return 1; } sub finish_clock { open(FD, ">$fsmount/etc/sysconfig/clock"); print FD "CLOCKMODE=\"$clockmode\"\n"; close FD; return 1; } ############################## 1; # keyboard config -*-perl-*- $keyboard = ""; $keytablesloc = "/usr/lib/kbd/keytables"; sub configure_keyboard { local ( @maps ); opendir(DIR, "$fsmount$keytablesloc"); @maps = reverse sort grep(/\.map$/, readdir(DIR)); closedir(DIR); if (@maps == 0) { &rhs_msgbox("Error", < No keytables found in $fsmount$keytablesloc ! > Are you sure you have installed the base system? > EOM , 60); return 0; } if (! &rhs_menul("Keyboard Configuration", < Select a keymap. > EOM , 50, scalar(@maps), @maps)) { return 0; } $keyboard = $dialog_result; return 1; } # This is used to select and load a keyboard mapping for # the install procedure sub finish_keyboard { open(FD, ">$fsmount/etc/sysconfig/keyboard"); print FD "KEYTABLE=\"$keytablesloc/$keyboard\"\n"; close FD; return 1; } #################### 1; # kernel selection and installation -*-perl-*- $kernel_root = "images"; $kernel_version_file = "version.idx"; $kernel_index_file = "image.idx"; $kernel_version_text = ""; $kernel_version_dir = ""; $kernel_version = ""; sub install_kernel { local ( $kernel ); $res = 0; # Now we always copy the kernel from the boot floppy &mount_bootdisk(); # the boot floppy should already be mounted &rhs_infobox("Installing Kernel", < Copying kernel from boot floppy. > EOM , 60); $res += &invoke("cp -f /bootdisk/vmlinuz $fsmount/vmlinuz"); $res += &invoke("rdev $fsmount/vmlinuz $root_dev"); # Standard video mode $res += &invoke("rdev -v $fsmount/vmlinuz -1"); # Mount / read-only $res += &invoke("rdev -R $fsmount/vmlinuz 1"); # No ramdisk $res += &invoke("rdev -r $fsmount/vmlinuz 0"); if ($res) { &rhs_msgbox("Error", < The kernel was NOT installed properly. > Are you sure the BOOT floppy is inserted? > EOM , 60); return 0; } else { # if ($dev_series_selected) { # &install_kernel_sources; # } return 1; } &umount_bootdisk(); } sub select_kernel_version { local ( @version_text, %version_text_to_dir ); local ( $dir, $version, $text ); local ( $max_version_index ); @version_text = (); %version_text_to_dir = (); $max_version_index = ""; open(FD, "$rhspath/$kernel_root/$kernel_version_file"); while () { chop; ($dir, $version, $text) = split(/\s+/, $_, 3); if ((! $max_version_index) || ($version_text_to_dir{$max_version_index} < $dir)) { $max_version_index = $text; } $version_text_to_dir{$text} = $dir; $version_text_to_version{$text} = $version; $version_text[@version_text] = $text; } close(FD); if ($express_install) { $dialog_result = $max_version_index; } else { if (! &rhs_menul("Kernel Version", < Please select a kernel version. > EOM , 70, scalar(@version_text), @version_text)) { return 0; } } $kernel_version_text = $dialog_result; $kernel_version_dir = $version_text_to_dir{$dialog_result}; $kernel_version = $version_text_to_version{$dialog_result}; return 1; } sub install_kernel_sources { local ( $rpp, $rhsmountpath_save ); if (! $express_install) { if (! &rhs_yesno("Notice", < You have installed a kernel from your boot floppy. If this is your own custom kernel, and is a different version than is available on the Red Hat CD, you will not be able to install the kernel sources at this time. > Do you wish to install kernel sources (you will have to choose a version)? > EOM , 50)) { return 0; } } # select kernel version if (! &select_kernel_version) { return 0; } &rhs_infobox("Installing Kernel Sources", < Installing sources for Linux kernel version $kernel_version. > This may take a minute or two... > EOM , 60); # install kernel # Move the RHS stuff filesystem to a place under the # installation filesystem $rhsmountpath_save = $rhsmountpath; &_remount_rhs ("$fsmount/$install_rhs_mount_point"); $rpp = "linux-$kernel_version-src.rpp"; # &invoke("cp -f $rhspath/$rpppath/$rpp $fsmount/tmp"); if ($pid = fork) { waitpid($pid, 0); } else { chdir $fsmount; chroot $fsmount; &invoke("rpp-install /$install_rhs_mount_point/$rpppath/$rpp"); exit(0); } # unlink("$fsmount/tmp/$rpp"); # make symlink chdir("$fsmount/etc"); symlink("../usr/src/kernel/linux-$kernel_version", "linux-source"); chdir("/"); &_remount_rhs($rhsmountpath_save); return 1; } ########################## 1; # config modem -*-perl-*- sub configure_modem { local ( $dev ); if (!&rhs_menu("Modem Configuration", < Select the device (serial port) to which your modem is connected. > If you have no modem, select . > (This configuration step simply makes a link from /dev/modem to your actual modem device.) > EOM , 60, 5, "", "No Modem", "/dev/cua0", "COM1: under MS-DOS", "/dev/cua1", "COM2: under MS-DOS", "/dev/cua2", "COM3: under MS-DOS", "/dev/cua3", "COM4: under MS-DOS")) { return 0; } return 1 if $dialog_result eq ""; $dev = $dialog_result; $dev =~ s/.*\///; unlink("$fsmount/dev/modem"); symlink($dev, "$fsmount/dev/modem"); return 1; } ######################## 1; # set up lilo -*-perl-*- $liloconf = ""; $append_text = ""; sub install_lilo { local ( $boot ); if (! -e "$fsmount/vmlinuz") { &rhs_msgbox("Error", < No kernel is installed! > LILO can not be configured without a kernel. > EOM , 60); return 0; } if (! &rhs_yesno("LILO", < LILO is a Boot Manager which allows you to start Red Hat Linux directly from your hard drive. It will also let you boot other operating systems on other partitions. > If you do not install LILO, you will have to use your boot diskette or some other boot loader to start the Network Desktop. > Do you want to install LILO? > EOM , 60)) { return 1; } $_ = $root_dev; if (/\/dev\/hd.*/) { $p1 = "/dev/hda"; $p2 = "/dev/sda"; $t1 = "IDE"; $t2 = "SCSI"; } else { $p2 = "/dev/hda"; $p1 = "/dev/sda"; $t2 = "IDE"; $t1 = "SCSI"; } if (! &rhs_menu("LILO Installation", < Where do you want to install LILO? > EOM , 70, 5, $p1, "On the MBR of $p1. (The first $t1 hard disk)", $p2, "On the MBR of $p2. (The first $t2 hard disk)", "/dev/fd0", "On a floppy in /dev/fd0. (Drive A:)", $root_dev, "On the superblock of your root Linux partition", "other", "On some other partition")) { return 1; } $boot = $dialog_result; if ($boot eq "other") { if (! &rhs_inputbox("LILO Installation", < Where do you want to put LILO? > EOM , 50, "/dev/")) { return 1; } $boot = $dialog_result; } $liloconf = <$fsmount/etc/lilo.conf"); print FD $liloconf; close(FD); if (! $express_install) { &rhs_textbox("Review /etc/lilo.conf", "$fsmount/etc/lilo.conf", 78, 22); if (! &rhs_yesno("Notice", < If you think that the lilo.conf file you just reviewed is incorrect, cancel the LILO configuration, start a shell, fix $fsmount/etc/lilo.conf, and run lilo -r $fsmount. > Continue with LILO configuration? > EOM , 60)) { return 0; } } &rhs_infobox("LILO", < Installing LILO... > EOM , 50); if (&invoke("lilo -r $fsmount")) { &rhs_msgbox("Error", < Something went wrong running LILO. Try configuring LILO again. > EOM , 60); return 0; } else { return 1; } } sub do_append_stuff { if (&rhs_yesno("LILO Configuration", < If you needed to specify hardware parameters on the LILO command line to boot the install disk, you will need to add some information to your lilo configuration. > Do you need to specify hardware parameters? > EOM , 60)) { if (&rhs_inputbox("LILO Configuration", < Enter the parameter below (ex: hd=64,32,202). This will be added as an append line to your LILO configuration. > EOM , 70, $append_text)) { $append_text = $dialog_result; } } $liloconf .= < Do you want to indicate another operating system as an option for LILO to start? > EOM , 60)) { if (! &rhs_menu("LILO Configuration", < Which operating system do you wish to add? > EOM , 60, 4, "Linux", "Another Linux partition", "DOS", "A DOS partition", "OS/2", "An OS/2 partition", "Other", "An operating system not listed here")) { next; } if ($dialog_result eq "Linux") { %tmpparlist = (); open(SAVEERR, ">&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "fdisk -l |"); while () { if (/^(.{10}).{5}(.{31}).*Linux native$/) { $p = $1; $r = $2; $p =~ s/\s$//; $tmpparlist{$p} = "$r"; } } close PROC; open(STDERR, ">&SAVEERR"); if (! &rhs_menua("LILO Configuration", < Which Linux partition? > > Device Begin Start End Blocks EOM , 54, %tmpparlist)) { next; } $dev = $dialog_result; $label = &lilo_getlabel; next if ($label eq ""); $liloconf .= <&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "fdisk -l |"); while () { if (/^(.{10}).{5}(.{31}).*DOS.*$/) { $p = $1; $r = $2; $p =~ s/\s$//; $tmpparlist{$p} = "$r"; } } close PROC; open(STDERR, ">&SAVEERR"); if (! &rhs_menua("LILO Configuration", < Which DOS partition? > > Device Begin Start End Blocks EOM , 54, %tmpparlist)) { next; } $dev = $dialog_result; $label = &lilo_getlabel; next if ($label eq ""); $table = substr($dev, 0, 8); $liloconf .= <&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "fdisk -l |"); while () { if (/^(.{10}).{5}(.{31}).*DOS.*$/) { $p = $1; $r = $2; $p =~ s/\s$//; $tmpparlist{$p} = "$r"; } if (/^(.{10}).{5}(.{31}).*HPFS.*$/) { $p = $1; $r = $2; $p =~ s/\s$//; $tmpparlist{$p} = "$r"; } } close PROC; open(STDERR, ">&SAVEERR"); if (! &rhs_menua("LILO Configuration", < Which OS/2 partition? > > Device Begin Start End Blocks EOM , 54, %tmpparlist)) { next; } $dev = $dialog_result; $label = &lilo_getlabel; next if ($label eq ""); $table = substr($dev, 0, 8); $liloconf .= <&STDERR"); open(STDERR, ">/dev/null"); open(PROC, "fdisk -l |"); while () { if (/^(\/dev\/.{5}).{5}(.{31}).*$/) { $p = $1; $r = $2; $p =~ s/\s$//; $tmpparlist{$p} = "$p"; } } close PROC; open(STDERR, ">&SAVEERR"); if (! &rhs_menua("LILO Configuration", < Which is your main Linux parition? > > Device Begin Start End Blocks EOM , 54, %tmpparlist)) { next; } $dev = $dialog_result; $label = &lilo_getlabel; next if ($label eq ""); $table = substr($dev, 0, 8); $liloconf .= < Enter a single word as a name for this system. A LILO: prompt appears when you start your computer; this is the name that you will type to start this operating system. > EOM , 60, "")) { return ""; } return $dialog_result; } ########################## 1; # Select and install an X server -*-perl-*- $xserver = ""; sub x_reset { $xserver = ""; $chipset = ""; } sub config_x { local ( $ret ); $ret = 1; if ($xinstalled) { if (-f "/bootdisk/defaults/XF86Config") { open(FD, "$fsmount/etc/X11/XF86Config"); while () { print OFD $_; } close(FD); close(OFD); unlink("$fsmount/etc/X11/X"); symlink("../../usr/X11R6/bin/XF86_$xserver", "$fsmount/etc/X11/X"); unlink("$fsmount/usr/X11R6/bin/X"); symlink("../../../etc/X11/X", "$fsmount/usr/X11R6/bin/X"); $ret = 1; } else { if ($installsource eq "ftp" || $installsource eq "floppy") { unlink("/ramdisk/usr/X11R6"); symlink("$fsmount/usr/X11R6", "/ramdisk/usr/X11R6"); } if (&invoke("Xconfigurator $xserver $mousetype $fsmount")) { $ret = 0; } else { $ret = 1; } unlink("$fsmount/etc/X"); } unlink("$fsmount/etc/X11/X"); symlink("../../usr/X11R6/bin/XF86_$xserver", "$fsmount/etc/X11/X"); unlink("$fsmount/usr/X11R6/bin/X"); symlink("../../../etc/X11/X", "$fsmount/usr/X11R6/bin/X"); } return $ret; } sub select_x_server { if ((! $force_config) && (-f "/bootdisk/defaults/xsetup")) { require "/bootdisk/defaults/xsetup"; return 1; } &rhs_menu("X Configuration", < Which type of video card you you have? > EOM , 60, 11, "VGA16", "Generic VGA", "SVGA", "Generic SVGA", "Mach8", "ATI Mach8 chipset", "Mach32", "ATI Mach32 chipset", "Mach64", "ATI Mach64 chipset", "8514", "IBM 8514/A chipset", "S3", "S3 chipset", "AGX", "AGX/XGA", "P9000", "Weitek Power 9000", "W32", "ET4000/W32[i,p]", "Mono", "Monochrome card"); $xserver = $dialog_result; return 1; } ################################ 1; # mouse configuration -*-perl-*- $mousetype = ""; $mouseport = ""; sub configure_mouse { if ((! $force_config) && (-f "/bootdisk/defaults/xsetup")) { require "/bootdisk/defaults/xsetup"; if (defined $mouseport) { unlink("/dev/mouse"); symlink($mouseport, "/dev/mouse"); return 1; } } if (! &rhs_menu("Mouse Configuration", < Which type of mouse do you have? > EOM , 70, 11, "microsoft-serial", "Microsoft compatible serial mouse", "mousesystems-serial", "Mouse Systems serial mouse", "mouseman-serial", "Logitech MouseMan", "logitech-serial", "Logitech serial mouse", "logitech-bus", "Logitech bus mouse", "microsoft-bus", "Microsoft bus mouse", "ps2-bus", "C&T 82C710 or PS/2 style (aux port)", "mmseries-serial", "mmseries (?) serial mouse", "mmhittab-serial", "Hitachi (?) serial (??) mouse", "ati-bus", "ATI XL bus mouse", "", "No Mouse" )) { return 0; } $mousetype = $dialog_result; $mouseport = ""; if ($mousetype eq "") { return 1; } elsif ($mousetype eq "logitech-bus") { $mouseport = "logibm"; } elsif ($mousetype eq "ati-bus") { $mouseport = "atibm"; } elsif ($mousetype eq "microsoft-bus") { $mouseport = "inportbm"; } elsif ($mousetype eq "ps2-bus") { $mouseport = "psaux"; } if ($mouseport eq "") { if (! &rhs_menu("Mouse Configuration", < Which device (serial port) is your mouse connected to? > EOM , 60, 4, "/dev/ttyS0", "COM1: under MS-DOS", "/dev/ttyS1", "COM2: under MS-DOS", "/dev/ttyS3", "COM3: under MS-DOS", "/dev/ttyS4", "COM4: under MS-DOS")) { return 0; } $mouseport = $dialog_result; $mouseport =~ s/.*\///; } # unlink("$fsmount/dev/mouse"); # symlink($mouseport, "$fsmount/dev/mouse"); open(FD, ">/tmp/mousetype"); print FD "$mousetype\n"; close(FD); unlink("/dev/mouse"); symlink($mouseport, "/dev/mouse"); return 1; } sub finish_mouse { unlink("$fsmount/dev/mouse"); symlink($mouseport, "$fsmount/dev/mouse"); } ######################## 1; # add users -*-perl-*- sub root_password { local ( $pid ); &rhs_msgbox("Root Password", < You will now enter a password for the root user (super-user). If you forget this password, you must re-install the system! > EOM , 60); if (! $rh_testing) { system("cp -f $fsmount/etc/passwd /etc"); symlink("$fsmount/etc/npasswd.conf", "/etc/npasswd.conf"); # clear the screen - it looks better that way" print ""; system("passwd"); system("cp -f /etc/passwd $fsmount/etc"); } # if ($pid = fork) { # waitpid($pid, 0); # } else { # chroot $fsmount; # system("passwd"); # exit 0; # } return 1; } sub add_users { local ( $prompt, $username, $pid, $command ); $prompt = < Do you want to create a user account? > EOM ; while (1) { if (! &rhs_yesno("Create User", $prompt, 50)) { return 1; } $prompt = < Do you want to create another user account? > EOM ; if (! &rhs_inputbox("User Name", < Enter a name for the user account, up to 8 characters. > EOM , 60, "")) { return 1; } $username = $dialog_result; if (&rhs_yesno("Home Directory", < If your home directories will be mounted via NFS, you can skip this step. Otherwise, create a home directory. > Do you want to create a home directory for $username? > EOM , 60)) { $command = "adduser $username"; } else { $command = "adduser $username NOHOME"; } &rhs_infobox("Create User", < Creating user account... > EOM , 60); if ($pid = fork) { waitpid($pid, 0); } else { if (! $rh_testing) { chroot $fsmount; open(SAVEOUT, ">&STDOUT"); open(SAVEERR, ">&STDERR"); open(STDOUT, ">/dev/null"); open(STDERR, ">/dev/null"); system($command); open(STDOUT, ">&SAVEOUT"); open(STDERR, ">&SAVEERR"); } exit 0; } } } ########################### 1; # -*-perl-*- sub select_media { if ($installsource eq "ftp") { require "ftp"; return &ftp_init; } elsif ($installsource eq "cdrom") { return &probe_rhs_cdrom; } elsif ($installsource eq "nfs") { return &nfs_mount; } elsif ($installsource eq "floppy") { require "floppy"; return &floppy_init; } elsif ($installsource eq "hard drive") { return &mount_partition; } } 1; sub get_name_file_dict { local (*dict) = @_; local (@files, $n); local ($m1, $m2, $m3, $m4, $major, $minor, $type, $cpu, $name, $specoff, $speclen, $archiveoffset, $header, $c); opendir(D, "/image/RedHat/RPMS"); @files = readdir(D); closedir(D); &rhs_infobox("Scanning packages", "\nScanning your hard drive for available packages\n\n", , 60); foreach $n (@files) { open(FD, "/dev/tmp"); $floppy_header_length = 4 * 4; $floppy_size = (1440*1024); $floppy_amount = $floppy_size - $floppy_header_length; sub floppy_disk_prompt { local ($filevar, $diskname, $realmagic, $realsig) = @_; local ($gotit, $diskmagic, $disksig, $allmagic, $seriesnum, $disknum); local ($version, $timestamp); if ($current_floppy eq $diskname) { open($filevar, " Now please remove the floppy from the first drive and insert $diskname into /dev/fd0 (DOS drive A:). > Press when ready. > EOM , 70); $gotit = 0; while (! $gotit) { open($filevar, " The isn't any disk in /dev/fd0 (DOS drive A:), or the disk you're using is bad. > Press to try again. > EOM , 70); next; } ; (8 == read($filevar, $allmagic, 8)) || do { &rhs_msgbox ( "Bad Floppy", < I can't read anything from that disk! > Press to try again. > EOM , 70); next; } ; ($diskmagic, $disksig) = unpack("NN", $allmagic); if ($diskmagic != $realmagic) { &rhs_msgbox ( "Bad Floppy", < That's not a Red Hat floppy! > Press to try again. > EOM , 70); next; } ; if ($disksig != $realsig) { if ($disksig == 0xFFFFFFFF) { &rhs_msgbox ( "Wrong Floppy", < You inserted the main Red Hat disk. Please insert $diskname. > Press to try again. > EOM , 70); next; } $seriesnum = $disksig >> 16; $disknum = $disksig & 0xFFFF; if ($floppy_series_names[$seriesnum]) { &rhs_msgbox ( "Wrong Floppy", < You inserted the wrong Red Hat floppy. You inserted disk $disknum from series $floppy_series_names[$seriesnum]. Insert $diskname instead. > Press to try again. > EOM , 70); next; } else { &rhs_msgbox ( "Wrong Floppy", < You inserted the wrong Red Hat floppy. Insert $diskname instead. > Press to try again. > EOM , 70); next; } } if ($realsig != 0xFFFFFFFF) { (8 == read($filevar, $allmagic, 8)) || do { &rhs_msgbox ( "Bad Floppy", < I can't read from that disk! > Press to try again. > EOM , 70); next; } ; ($version, $timestamp) = unpack("NN", $allmagic); if ($timestamp != $floppy_timestamp) { &rhs_msgbox ( "Wrong Floppy", < That floppy is from a different Red Hat release then the first floppy. > Press to try again. > EOM , 70); next; } } $gotit = 1; } seek(FLDEVICE, 0, 0); # just like we never touched it $current_floppy = $diskname; return 0; } sub floppy_read_header { local ($series_file_name) = @_; local ($header, $magic, $version, $series_table_length, $series_table_off); local ($file_table, $series_table, $file_table_offset, $file_table_length); local ($series_file, $series_file_length, $series_file_offset); local ($hlen, $strlen, $moremagic); $hlen = 10 * 4; &floppy_disk_prompt(FLDEVICE, "the main floppy", 0x3245eadc, 0xFFFFFFFF); ($hlen == read(FLDEVICE, $header, $hlen)) || die "cannot read header from /dev/fd0"; ($magic, $moremagic, $version, $floppy_timestamp, $series_table_length, $series_table_offset, $file_table_length, $file_table_offset, $series_file_length, $series_file_offset) = unpack("NNNNNNNNNN", $header); ($magic == 0x3245eadc) || die "bad header magic on /dev/fd0"; ($moremagic == 0xFFFFFFFF) || die "bad extra magic on /dev/fd0"; ($version == 1) || die "I can only read version 1 floppies"; ($series_table_length == read(FLDEVICE, $series_table, $series_table_length)) || die "cannot read series table from /dev/fd0"; ($file_table_length == read(FLDEVICE, $file_table, $file_table_length)) || die "cannot read file table from /dev/fd0"; ($series_file_length == read(FLDEVICE, $series_file, $series_file_length)) || die "cannot read series file from /dev/fd0"; close(FLDEVICE); open(F, ">$series_file_name") || die "cannot create $series_file_name"; print F $series_file; close(F); # put together the series array undef(@floppy_series_names); while ($series_table) { $strlen = unpack("N", $series_table); push(@floppy_series_names, substr($series_table, 4, $strlen)); $series_table = substr($series_table, 4 + $strlen); } # a filename has to be enough to give us the series and offset the file # is located at undef(@floppy_file_list); while ($file_table) { $strlen = unpack("N", $file_table); $filename = substr($file_table, 4, $strlen); $file_table = substr($file_table, 4 + $strlen); ($file_size, $file_series_num, $file_offset) = unpack("NNN", $file_table); $file_table = substr($file_table, 12); $floppy_file_info{"${filename}:size"} = $file_size; $floppy_file_info{"${filename}:series_num"} = $file_series_num; $floppy_file_info{"${filename}:offset"} = $file_offset; push(@floppy_file_list, $filename); } return 1; } sub floppy_copy_file { local ($filename, $dir, *newfloppy) = @_; local ($disknum, $size); $floppy_file_info{"${filename}:size"} || do { print STDERR "I can't find file $filename!\n\n"; return 0; } ; $seriesnum = $floppy_file_info{"${filename}:series_num"}; $disknum = int(($floppy_file_info{"${filename}:offset"} / $floppy_amount )); $size = $floppy_file_info{"${filename}:size"}; $offset = $floppy_file_info{"${filename}:offset"} - ($disknum * $floppy_amount) + $floppy_header_length; $disknum++; print LOG "file is $filename\n"; print LOG "series num is $seriesnum\n"; print LOG "disk num is $disknum\n"; print LOG "size is $size\n"; print LOG "absolute offset: ", $floppy_file_info{"${filename}:offset"}, "\n"; print LOG "offset: ", $offset, "\n"; open(OUTFILE, ">$dir/$filename") || do { close(FLDEVICE); print STDERR "Error creating $dir/$filename.\n"; ; return 0; } ; while ($size) { &floppy_disk_prompt(FLDEVICE, "$floppy_series_names[$seriesnum] disk $disknum", 0x3245eadc, $seriesnum << 16 | $disknum); print LOG "reading starts at offset $offset in disk $disknum\n"; seek(FLDEVICE, $offset, 0); if ($size <= ($floppy_size - $offset)) { &floppy_copychunk(FLDEVICE, OUTFILE, $size); $size = 0; } else { print LOG "reading $floppy_size - $offset (", $floppy_size - $offset, ") bytes\n"; &floppy_copychunk(FLDEVICE, OUTFILE, $floppy_size - $offset); $size -= $floppy_size - $offset; close(FLDEVICE); $disknum++; $offset = $floppy_header_length; } } close(FLDEVICE); close(OUTFILE); #for ($i = 0; $i < 10; $i++) { print "\n"; } #print "done copying $filename\n"; #; } sub floppy_get_rpm_list { local (@l); for $n (@floppy_file_list) { if ($n =~ /\.rpm$/) { push(@l, $n); } } return @l; } sub floppy_rpm_compare { if ($floppy_file_info{"${a}:series_num"} < $floppy_file_info{"${b}:series_num"}) { return -1 } if ($floppy_file_info{"${a}:series_num"} > $floppy_file_info{"${b}:series_num"}) { return 1 } if ($floppy_file_info{"${a}:offset"} < $floppy_file_info{"${b}:offset"}) { return -1 } return 1; } sub floppy_sort_rpms { return (sort floppy_rpm_compare @_); } sub floppy_init { &umount_bootdisk(); &floppy_read_header("/tmp/series") || return 0; return 1; } sub floppy_copychunk { local ($from, $to, $size) = @_; local ($buffer); print LOG "reading $size bytes\n"; if ($size != read($from, $buffer, $size)) { print STDERR "read failed :-(\n"; ; } # print LOG "read ", length($buffer), " bytes successfully\n"; print $to $buffer || (print STDERR "write failed:-(\n", , 1); } 1; $bootdisk_mounted = 0; sub mount_bootdisk { if ($bootdisk_mounted) { return; } &rhs_msgbox ( "Boot Floppy", ">\n" . "Now please floppy from your first drive and insert the boot\n" . "floppy. During the installation, the kernel will be\n" . "copied from the boot floppy to your hard drive.\n" . ">\n" . "Please insert your BOOT disk (not the ROOT disk) in /dev/fd0 (DOS drive A:).\n" . ">\n", 70); if ($rh_testing) { $bootdisk_mounted = 1; return 1; } &invoke("mount -o ro /dev/fd0 /bootdisk"); while (! -f "/bootdisk/vmlinuz") { &invoke_no_output("umount /bootdisk"); &rhs_msgbox ( "Boot Floppy", < That was not the boot floppy disk! > Be sure you are inserting the BOOT FLOPPY DISK in /dev/fd0 (DOS drive A:). > EOM , 70); &invoke("mount /dev/fd0 /bootdisk"); } $bootdisk_mounted = 1; } sub umount_bootdisk { if ($bootdisk_mounted) { &invoke("umount /bootdisk"); } $bootdisk_mounted = 0; } 1; n .= ..orpmo .n ..pbuild.plq dbmisc.plr dbrecord.pls header.plthelp.plu install.plv message.plwmisc.plxopts.plypack.plzquery.pl{ rpmgetopts.pl|spec.pl} uninstall.pl~ verify.pl rpmftp.plrun.pl readopts.pl# RPM Package Management System -*-perl-*- # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -*-perl-*- require "spec.pl"; require "pack.pl"; sub do_build { local ( $mode, *args ) = @_; local ( $lsecs, $failed, $specfile, $pname, $script ); local ( %spec, %pspec, %spec_source, %spec_patch ); local ( $user, $system, $cuser, $csystem, $lsecs, $secs ); local ( $hrs, $mins, $specext ); local ( @files, $f, $i ); $lsecs = 0; $failed = 0; $specext = $rpm{'specext'}; $specext =~ s/\./\\./; foreach $specfile (@args) { if ($rpm{"rebuild"}) { # $specfile is not a spec file, it is a source rpm &verbose("installing $specfile"); $specfile = &installsourcepackage($specfile); $specfile = "$rpm{'specdir'}/$specfile"; } $specfile =~ s|/$||; if (! -f $specfile) { # We will look in the SPEC dir if (-f "$rpm{'specdir'}/$specfile") { $specfile = "$rpm{'specdir'}/$specfile"; } elsif (-f "$rpm{'specdir'}/$specfile$specext") { $specfile = "$rpm{'specdir'}/$specfile$specext"; } else { opendir(D, $rpm{'specdir'}); @files = readdir(D); closedir(D); foreach $f (@files) { if ($f =~ /$specfile-.*$specext/) { $specfile = "$rpm{'specdir'}/$f"; last; } } } } if (! -f $specfile) { &error("Couldn't find specfile: $specfile"); } if (! ($specfile =~ m|.*$specext|)) { &error("Specfile must have $rpm{'specext'} extension: $specfile"); } # Reset rpm{"root"} each time if ($rpm{"rootspec"}) { $rpm{"root"} = $rpm{"rootspec"}; } else { undef $rpm{"root"}; } # Parse spec file and build &normal("Parsing spec file"); $failed |= &parse_spec_file($specfile, *spec, *pspec, *spec_source, *spec_patch, 1); last if ($failed); $pname = "$spec{'name'}-$spec{'version'}-$spec{'release'}"; if ($mode & ($DO_PREP | $DO_BUILD | $DO_INSTALL)) { $script = &tempname(); &debug("Writing build script: $script"); &write_build_script($script, $mode, *spec, *pspec, *spec_source, *spec_patch); if (! $rpm{"test"}) { &normal("Building $pname"); &debug("Executing build script: $script"); $failed |= system($script); last if ($failed); } } # Can be used for testing rpm # &pack_info(*spec, *pspec); # File list check if ($mode & $DO_LIST_CHECK) { &normal("Doing list check"); $failed |= &list_check(*spec, *pspec); last if ($failed); } # Binary package if ($mode & $DO_BINARY) { $script = &tempname(); if ($rpm{'root'}) { &normal("Binary packaging (root = $rpm{'root'})"); } else { &normal("Binary packaging"); } &write_pack_bin_script($script, *spec, *pspec); if (! $rpm{"test"}) { &debug("Executing binary pack script: $script"); $failed |= system($script); last if ($failed); } } # Source package if ($mode & $DO_SOURCE) { $script = &tempname(); &normal("Source packaging"); &write_pack_src_script($script, $specfile, *spec, *spec_source, *spec_patch); if (! $rpm{"test"}) { &debug("Executing source pack script: $script"); $failed |= system($script); last if ($failed); } } # Clean stage if ($pspec{"clean"} && ($mode & $DO_CLEAN)) { $script = &tempname(); open(OF, ">$script"); print OF "#!/bin/sh -e\n"; print OF "# Clean script generated by rpm $rpm{'version'} on $date\n"; print OF "# package name: $spec{'name'}\n"; print OF "# version: $spec{'version'}\n"; print OF "# release: $spec{'release'}\n"; if (&isverbose) { print OF "\nset -x\n\n"; } else { printf OF "exec > /dev/null\n"; } if (! &isquiet) { print OF "echo \"\tclean stage...\" >&2\n"; } print OF "cd $rpm{'builddir'}\n"; print OF $pspec{"clean"}; print OF "exit 0\n"; close(OF); chmod 0755, $script; if (! $rpm{"test"}) { &debug("Executing clean script: $script"); $failed |= system($script); last if ($failed); } } # Rebuild cleanups if ($rpm{"rebuild"}) { # Need to remove the spec file, sources, patches and icons # spec file &verbose("removing $specfile"); unlink($specfile); # source and patch files foreach $tmp (values %spec_source, values %spec_patch) { $tmp =~ s/.*\/(.*)/$1/; &verbose("removing $rpm{'sourcedir'}/$tmp"); unlink("$rpm{'sourcedir'}/$tmp"); } foreach $i (0 .. $spec{"subpackageC"} - 1) { if ($spec{"subpackage:$i:icon"}) { $tmp = $spec{"subpackage:$i:icon"}; &verbose("removing $rpm{'sourcedir'}/$tmp"); unlink("$rpm{'sourcedir'}/$tmp"); } } } ($user,$system,$cuser,$csystem) = times; $secs = $user + $system + $cuser + $csystem - $lsecs; $lsecs = $secs; $hrs = int($secs / 3600); $mins = int($secs / 60) - ($hrs * 60); $secs %= 60; &normal(sprintf("Time to build $pname: %02d:%02d:%02d", $hrs, $mins, $secs)); } ($user,$system,$cuser,$csystem) = times; $secs = $user + $system + $cuser + $csystem; $hrs = int($secs / 3600); $mins = int($secs / 60) - ($hrs * 60); $secs %= 60; &normal(sprintf("\nTotal build time: %02d:%02d:%02d", $hrs, $mins, $secs)); if ($failed) { &error("Build failed!"); } } # Expand %setup macro # -n name ........... Set the name of the build directory (BUILDDIR) to # name. This is used by --clean. The default is # $NAME-$VERSION. Other possibilities include $NAME, # ${NAME}${VERSION}, or whatever else the main tar # file uses. # -c ................ Create and cd to the named directory before # doing the untar. # -b # .............. Untar Source# _before_ cd'ing into the directory. # This doesn't make sense with -c. # -a # .............. Untar Source# _after_ cd'ing into the directory. # -T ................ The default action is to untar "Source" (i.e., # Source0), either before the cd (without -c), or # after the cd (with -c). This flag inhibits this # default action and will require a "-b 0" or "-a 0" # to get the main source file untar'ed. NOTE: # unless -D is specified the build directory will # still be REMOVED. # -D ................ Do _not_ delete the directory before unpacking. # This is only useful if there are more than one # %setup command and this is _not_ the first of those # command. Of course, multiple %setup commands should # be very, very uncommon. sub setup_macro { local ( *spec_source, $_ ) = @_; local ( $res ) = ""; local ( $bd ) = $rpm{"builddir"}; &debug("ENTERING: setup_macro()"); $res .= "\n### Setup macro: $_\n"; # chop; $lopt_a = $lopt_b = $lopt_c = ""; $lopt_n = $spec_buildsubdir; $lopt_D = $lopt_T = ""; @_ = split; shift; &rpm_getopts("n:cb:a:TD", @_); $spec_buildsubdir = $lopt_n; # CD to the build directory $res .= "cd $bd\n"; # Delete any sources left over from a previous build if (! $lopt_D) { $res .= "rm -rf $spec_buildsubdir\n"; } # If necessary, create and CD into the proper directory if ($lopt_c) { $res .= "mkdir -p $spec_buildsubdir\n"; $res .= "cd $spec_buildsubdir\n"; } # Do the default action if ((! $lopt_c) && (! $lopt_T)) { $res .= &do_untar($spec_source{"0"}); } # Do any before action if ($lopt_b ne "") { $res .= &do_untar($spec_source{$lopt_b}); } # cd into the build subdirectory if (!$lopt_c) { $res .= "cd $spec_buildsubdir\n"; } if ($lopt_c && (! $lopt_T)) { $res .= &do_untar($spec_source{"0"}); } # Do any after action if ($lopt_a ne "") { $res .= &do_untar($spec_source{$lopt_a}); } # Clean up permissions and owners $res .= "cd $bd/$spec_buildsubdir\n"; if (`id -u` eq "0\n") { $res .= "chown -R root.root .\n"; } $res .= "chmod -R a+rX,g-w,o-w .\n"; $res .= "### end %setup macro\n"; &debug("EXITING: setup_macro()"); return $res; } # Expand %patch macro # # ................. Apply Patch# as a patch. # -p # .............. Specifies the number of directories to strip for the # patch(1) command. This is usually 0 (the default) # or 1, but could be larger for brain-dead diff files. # -P ................ The default action is to apply "Patch" (i.e., # Patch0). This flag inhibits this default action and # will require a "0" to get the main source file # untar'ed. This option would be useful for a second # %patch macro that required a different "-p #" from # the first macro. # -b name ........... Pass -b name to patch # # We also handle "%patchX" which is shorthand for "%patch X -P" sub patch_macro { local ( *spec_patch, $_ ) = @_; local ( $patch_num, $strip, @rest, $p ); local ( $res ) = ""; &debug("ENTERING: patch_macro()"); $res .= "\n### Patch macro: $_\n"; # chop; s/%patch([0-9]+)/%patch $1 -P/; $res .= "### Expanded to: $_\n"; $patch_num = $strip = 0; $lopt_p = $lopt_b = $lopt_P = ""; @_ = split; shift; @rest = &rpm_getopts("p:b:P", @_); $strip = $lopt_p if ($lopt_p ne ""); if (! $lopt_P) { $res .= &do_patch($spec_patch{"0"}, $strip, $lopt_b); } foreach $p (@rest) { $res .= &do_patch($spec_patch{$p}, $strip, $lopt_b); } $res .= "### end %patch macro\n"; &debug("EXITING: patch_macro()"); return $res; } sub write_build_script { local ( $f, $mode, *spec, *pspec, *spec_source, *spec_patch ) = @_; local ( $date ) = `date`; &debug("ENTERING: write_build_script()"); $arch = &getarchname(); open (OF, ">$f"); # The -e causes the shell to immediately exit on error print OF "#!/bin/sh -e\n"; print OF "# Build script generated by rpm $rpm{'version'} on $date\n"; print OF "# package name: $spec{'name'}\n"; print OF "# version: $spec{'version'}\n"; print OF "# release: $spec{'release'}\n"; foreach $i (sort by_number keys %spec_source) { print OF "# source $i: $spec_source{$i}\n"; } foreach $i (sort by_number keys %spec_patch) { print OF "# patch $i: $spec_patch{$i}\n"; } print OF "\n# rpm options specified: $rpm{'options'}\n"; if (&isverbose) { print OF "\nset -x\n\n"; } else { printf OF "exec > /dev/null\n"; } # set some environment variables print OF "RPM_SOURCE_DIR=$rpm{'sourcedir'}\n"; print OF "RPM_BUILD_DIR=$rpm{'builddir'}\n"; print OF "RPM_DOC_DIR=$rpm{'docdir'}\n"; print OF "RPM_OPT_FLAGS=\'$optflags{$arch}\'\n"; if ($mode & $DO_PREP) { print OF "################### %prep section\n\n"; if (! &isquiet) { print OF "echo \"\tprep...\" >&2\n"; } print OF $pspec{"prep"}; } if ($mode & $DO_BUILD) { print OF "################### %build section\n\n"; if (! &isquiet) { print OF "echo \"\tbuild...\" >&2\n"; } print OF "cd $rpm{'builddir'}/$spec_buildsubdir\n"; print OF $pspec{"build"}; } if ($mode & $DO_INSTALL) { print OF "################### %install section\n\n"; if (! &isquiet) { print OF "echo \"\tinstall...\" >&2\n"; } print OF "cd $rpm{'builddir'}/$spec_buildsubdir\n"; print OF $pspec{"install"};  } if ($rpm{"clean"}) { print OF "\n################# Clean up\n"; if (! &isquiet) { print OF "echo \"\tclean...\" >&2\n"; } print OF "cd $rpm{'builddir'}\n"; print OF "rm -rf $spec_buildsubdir\n\n"; } print OF "\n################# Normal exit\n"; print OF "exit 0;\n"; close OF; chmod 0755, $f; &debug("EXITING: patch_macro()"); } sub do_untar { local ( $tarfile ) = @_; local ( $sfd ) = $rpm{"sourcedir"}; local ( $taropts ); &debug("ENTERING: do_untar($tarfile)"); if (! -f "$sfd/$tarfile") { &error("missing source file: $tarfile"); } if (&isverbose) { $taropts = "-xvvf"; } else { $taropts = "-xf"; } if (&is_compressed("$sfd/$tarfile")) { &debug("EXITING: do_untar()"); return "gzip -dc $sfd/$tarfile | tar $taropts - if [ \$? -ne 0 ]; then exit $? fi\n"; } else { &debug("EXITING: do_untar()"); return "tar $taropts $sfd/$tarfile\n"; } } sub do_patch { local ( $patchfile, $strip, $dashb ) = @_; local ( $sfd ) = $rpm{"sourcedir"}; &debug("ENTERING: do_patch()"); if ($dashb ne "") { $dashb = "-b $dashb"; } if (! -f "$sfd/$patchfile") { &error("missing patch file: $patchfile"); } if (&is_compressed("$sfd/$patchfile")) { &debug("EXITING: do_patch()"); return "gzip -dc $sfd/$patchfile | patch -p$strip -s $dashb if [ \$? -ne 0 ]; then exit $? fi\n"; } else { &debug("EXITING: do_patch()"); return "patch -p$strip $dashb -s < $sfd/$patchfile\n"; } } 1; # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -*-perl-*- use GDBM_File; use Fcntl; sub opendatabase { local ($mode) = @_; if (! -d "$rpm{root}/$rpm{libdir}") { mkdir("$rpm{root}/$rpm{libdir}", 0755); } if ($mode eq "rw") { $mode = 0102; } else { $mode = 0; } &debug("opening db mode $mode"); tie(%Packages, GDBM_File, "$rpm{root}/$rpm{libdir}/packages", $mode, 0644) || &error("Could not open $rpm{root}/$rpm{libdir}/packages"); tie(%PathIndex, GDBM_File, "$rpm{root}/$rpm{libdir}/pathidx", $mode, 0644) || &error("Could not open $rpm{root}/$rpm{libdir}/pathidx"); tie(%NameIndex, GDBM_File, "$rpm{root}/$rpm{libdir}/nameidx", $mode, 0644) || &error("Could not open $rpm{root}/$rpm{libdir}/nameidx"); tie(%IconIndex, GDBM_File, "$rpm{root}/$rpm{libdir}/iconidx", $mode, 0644) || &error("Could not open $rpm{root}/$rpm{libdir}/iconidx"); tie(%GroupIndex, GDBM_File, "$rpm{root}/$rpm{libdir}/groupindex", $mode, 0644) || &error("Could not open $rpm{root}/$rpm{libdir}/groupindex"); tie(%PostIndex, GDBM_File, "$rpm{root}/$rpm{libdir}/postidx", $mode, 0644) || &error("Could not open $rpm{root}/$rpm{libdir}/postidx"); if ($mode eq "rw") { $Packages{"--version--"} = 1; } } sub closedatabase { untie(%Packages); untie(%PathIndex); untie(%NameIndex); untie(%IconIndex); untie(%GroupIndex); untie(%PostIndex); } sub getmatches { local ($label) = @_; local (@finallist, $firstrm, $secondrm, $version, $release, $orig); local ($packages, $package, $oname, $oversion, $orelease, $num); $orig = $label; &debug("looking for packages that match $label"); # try to look this up, if we can't, then erase the rightmost element # and try again. When we're done, look at the removed elements and # try to use them as release/version restrictions &debug("looking for package(s) named $label"); if (!defined $NameIndex{$label}) { ($label, $firstrm) = $label =~ /^(.*)-(.*)$/; &debug("looking for package(s) named $label"); if (!defined $NameIndex{$label}) { ($label, $secondrm) = $label =~ /^(.*)-(.*)$/; &debug("looking for package(s) named $label"); if (!defined $NameIndex{$label}) { &error("package $orig is not installed"); return @finallist; } else { $release = $firstrm; $version = $secondrm; } } else { $version = $firstrm; } } @packages = split(" ", $NameIndex{$label}); &debug("before narrowing list is: $packages"); $num = 0; foreach $package (@packages) { if (defined $version) { ($oname, $oversion, $orelease) = $package =~ /(.*):(.*):(.*)/; if ($version eq $oversion) { if (!defined($release) || $release eq $orelease) { $finallist[$num++] = $package; } } } else { $finallist[$num++] = $package; } } debug("patches matching search pattern: @finallist"); return @finallist; } # this is a workhorse of both installation and uninstallation # it compares the database to the spec record passed and returns # a array of all of the files that are shared between this spec # and other packages in the database (is $shared) or the files # that conflict between this spec and the other packages (if ! $shared) sub findshared { local($shared, $doingupgrade, *configlist, *spec) = @_; local($name, $subname, $i, $path, $info, $packagespecstr, $info); local($oname, $oversion, $orelease, $ofilenum, $filenum); local(%pkgconflicts, %ospec, $version, $release, $olabel); local(%conflicts, $label); # unnecessary shorthand $name = $spec{"name"}; $subname = $spec{"subpackage:0:name"}; if ($subname) { $name = "$name-$subname"; } $label = "$name:$spec{version}:$spec{release}"; # walk through the files one by one looking for conflicts for ( $i = 0; $i < $spec{"subpackage:0:fileC"}; $i++ ) { $path = $spec{"subpackage:0:file:$i:path"}; $whereinstalled = $PathIndex{$path}; if (!defined($whereinstalled)) { next }; debug("installed list for $path: $whereinstalled"); # this file already exists somewhere else $info = $spec{"subpackage:0:file:$i:info"}; foreach $package (split(" ", $whereinstalled)) { ($oname, $oversion, $orelease, $ofilenum) = ($package =~ /(.*):(.*):(.*):(.*)/); $lookup = "$oname:$oversion:$orelease"; # rather then check the package for conflicts right now # (which we could do), remember that this file could cause # a conflict with this package. We'll then check this whole # package for conflicts at once. Why? Becuase doing strtorec() # for large packages takes a noticeable amount of time. This # way it'll be called far fewer times if (defined $pkgconflicts{$lookup}) { $pkgconflicts{$lookup} = "$pkgconflicts{$lookup} $i:$ofilenum"; } else { $pkgconflicts{$lookup} = "$i:$ofilenum"; } } } foreach $package (keys(%pkgconflicts)) { debug("$package contains shared (possibly conflicting) files"); $packagespecstr = $Packages{$package}; if (!defined $packagespecstr) { &error("RPM database is corrupt. Use --rebuild to ", "reconstruct it ($package not found)"); } %ospec = strtorec($packagespecstr, "all"); foreach $fileinfo (split(" ", $pkgconflicts{$package})) { ($filenum, $ofilenum) = ($fileinfo =~ /(.*):(.*)/); next unless ($ospec{"subpackage:0:file:$ofilenum:state"} eq "normal"); if (&is_config($ospec{"subpackage:0:file:$filenum:info"})) { &debug("storing info for config file ", $spec{"subpackage:0:file:$filenum:path"}); $configlist{$spec{"subpackage:0:file:$filenum:path"}} = $ospec{"subpackage:0:file:$ofilenum:info"}; } next if $label eq $package; $specs_same = specs_same( $spec{"subpackage:0:file:$filenum:info"}, $ospec{"subpackage:0:file:$ofilenum:info"}); if ($specs_same == $shared) { $olabel = "$oname-$oversion-$orelease"; if (!$shared) { if (!$doingupgrade || ($oname ne $name)) { warning($spec{"subpackage:0:file:$filenum:path"}, " conflicts with file from ", "$olabel"); } } if (defined $conflicts{$package}) { $conflicts{$package} = "$conflicts{$package} $fileinfo"; } else { $conflicts{$package} = $fileinfo; } } } } return %conflicts; } sub getmultmatches { foreach (@_) { push(@an, &getmatches($_)); } return @an; } sub whence { local (@paths) = @_; local ($path, $oldpath, $str, %spec); local ($package, $version, $release, $subnum, $filenum, @list); foreach $path (@paths) { $oldpath = $path = "$ENV{PWD}/$path" unless $path =~ m%^/%; do { $oldpath = $path; $path =~ s%//%/%g; $path =~ s%[^/]+/\.\./%%g; $path =~ s%/\./%/%g; } until ($oldpath eq $path); if (defined $PathIndex{$path}) { foreach $package (split(" ", $PathIndex{$path})) { ($name, $version, $release, $filenum) = $package =~ /(.*):(.*):(.*):(.*)/; push(@list, "$name:$version:$release"); } } else { warning("$path not found in any package"); } } return @list; } 1; # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # note that this handles speci's with multiple subpackages, although those # are no longer allowed ${SUBPACKAGE} = "subpackage"; @recfields = ("name", "version", "release", "${SUBPACKAGE}C"); ${FILES} = "file"; @subpackagefields = ("name", "preamble", "insttime", "${FILES}C"); @filefields = ("path", "state", "info"); sub rectostr { local(%rec) = @_; local($count, $i, $a, $field, $j, $string); $count = 0; foreach $field (@recfields) { $a[$count++] = $rec{$field}; } for ($i = 0; $i < $rec{"${SUBPACKAGE}C"}; $i++) { foreach $field (@subpackagefields) { $a[$count++] = $rec{"${SUBPACKAGE}:$i:$field"}; } for ($j = 0; $j < $rec{"${SUBPACKAGE}:$i:${FILES}C"}; $j++) { foreach $field (@filefields) { $a[$count++] = $rec{"${SUBPACKAGE}:$i:${FILES}:$j:$field"}; } } } $string = join("\1", @a); return $string; } sub strtorec { local($string, $howmuch) = @_; local($count, %r, $i, $j, $field, @a); @a = split("\1", $string); $count = 0; foreach $field (@recfields) { $r{$field} = $a[$count++]; } if ($howmuch eq "header") { return %r } for ($i = 0; $i < $r{"${SUBPACKAGE}C"}; $i++) { foreach $field (@subpackagefields) { $r{"${SUBPACKAGE}:$i:$field"} = $a[$count++]; } if ($howmuch eq "all") { for ($j = 0; $j < $r{"${SUBPACKAGE}:$i:${FILES}C"}; $j++) { foreach $field (@filefields) { $r{"${SUBPACKAGE}:$i:${FILES}:$j:$field"} = $a[$count++]; } } } } return %r; } sub erasesubpackage { local (*spec, $num) = @_; local ($field, $i); &debug("erasing subpackage $num from spec"); foreach $field (@subpackagefields) { delete $tospec{"${SUBPACKAGE}:$fromnum:$field"}; } for ($i = 0; $i < $fromspec{"${SUBPACKAGE}:$fromnum:${FILES}C"}; $i++) { foreach $field (@filefields) { delete $tospec{"${SUBPACKAGE}:$fromnum:${FILES}:$i:$field"}; } } return %spec; } sub copysubpackage { local (*tospec, $tonum, *fromspec, $fromnum) = @_; local ($i, $field); &debug("doing copy to $tonum from $fromnum"); foreach $field (@subpackagefields) { $tospec{"${SUBPACKAGE}:$tonum:$field"} = $fromspec{"${SUBPACKAGE}:$fromnum:$field"}; } for ($i = 0; $i < $fromspec{"${SUBPACKAGE}:$fromnum:${FILES}C"}; $i++) { foreach $field (@filefields) { $tospec{"${SUBPACKAGE}:$tonum:${FILES}:$i:$field"} = $fromspec{"${SUBPACKAGE}:$fromnum:${FILES}:$i:$field"}; } } return %tospec; } # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. sub package_type { local ($packagepath) = @_; debug("opening $packagepath"); open(BF, "<$packagepath") || error("Can't open $packagepath"); sysread(BF, $header, 88); $readbytes = 88; ($m1, $m2, $m3, $m4, $major, $minor, $type, $cpu, $name, $specoff, $speclen, $archiveoffset) = unpack("CCCC CC n n a66 N N N", $header); if (($m1, $m2, $m3, $m4) != (0xed, 0xab, 0xee, 0xdb)) { error("Bad magic number for $packagepath"); } if ($type == 0) { return "bin"; } elsif ($type == 1) { return "src"; } return 0; } sub readheader { local ($returnfd, $packagepath, *aheader, *spec, *pspec) = @_; local (@array, $header, $magic, $archiveoffset, $line); local ($m1, $m2, $m3, $m4, $major, $minor, $type, $cpu, $name, $speclen); local ($readbytes, $returnval, $tmp, $rest, $size, $os, $icon_len); local ($group_len); debug("opening $packagepath"); open(BF, "<$packagepath") || error("Can't open $packagepath"); sysread(BF, $header, 88); $readbytes = 88; ($m1, $m2, $m3, $m4, $major, $minor, $type, $cpu, $name, $specoff, $speclen, $archiveoffset) = unpack("CCCC CC n n a66 N N N", $header); if (($m1, $m2, $m3, $m4) != (0xed, 0xab, 0xee, 0xdb)) { error("Bad magic number for $packagepath"); } if ($major > 1) { error("Package $packagepath is a version $major RPM package. This version of rpm can only handle version 1 RPM packages. Check ftp.redhat.com for information on obtaining a newer version of rpm."); } if ($minor > 0) { # this is version 1.1, which has a group line, and maybe # even an icon -- the icon would be a good thing to have &debug("reading version 1.1 header and icon"); sysread(BF, $rest, 16); $readbytes += 16; ($size, $os, $group_len, $icon_len) = unpack("N N N N", $rest); if ($icon_len) { sysread(BF, $line, $group_len); sysread(BF, $aheader{icon}, $icon_len); $readbytes += $group_len; $readbytes += $icon_len; } } &debug("reading ($specoff - $readbytes) to get to spec"); sysread(BF, $line, $specoff - $readbytes); $readbytes += $specoff - $readbytes; &debug("reading $speclen bytes of spec"); sysread(BF, $line, $speclen); $readbytes += $speclen; @array = split("\n", $line); if ($type == 0) { $aheader{type} = "bin"; } elsif ($type == 1) { $aheader{type} = "src"; } else { error("Package $packagepath is of an unknown type"); } if ($cpu == 1) { $aheader{arch} = "i386"; } elsif ($cpu == 2) { $aheader{arch} = "axp"; } elsif ($cpu && $aheader{type} == "bin") { error("Package $packagepath was compiled for an unknown architecture"); } $aheader{archiveoffset} = $archiveoffset; $aheader{name} = $name; &parse_spec_array(*array, *spec, *pspec, *spec_source, *spec_patch, 0); if ($returnfd) { &debug("skipping to ", $archiveoffset - $readbytes, " to get to data"); sysread(BF, $tmp, $archiveoffset - $readbytes); $returnval = BF; } else { close(BF); $returnval = ""; } return $returnval; } 1; # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -*-perl-*- sub usage { print "rpm version $rpm{'version'} $rpm{copyright} usage: rpm {--help} rpm {--version} rpm {--install -i} [-v] [--hash -h] [--percent] [--force] [--test] [--search] file1.rpm file2.rpm ... filen.rpm rpm {--upgrage -U} [-v] [--hash -h] [--percent] [--force] [--test] [--search] file1.rpm file2.rpm ... fileN.rpm rpm {--query -q} [-afFpP] [-i] [-l] [-s] [-d] [-c] [-v] [targets] rpm {--verify -V -y] [-afFpP] [targets] rpm {--uninstall -u] package1 package2 ... packageN rpm {-b}[plciba] [-v] [--short-circuit] [--clean] [--keep-temps] [--test] [--time-check ] specfile rpm {--rebuild} [-v] source1.rpm source2.rpm ... sourceN.rpm rpm {--where} package1 package2 ... packageN " } sub help { print "rpm version $rpm{'version'} $rpm{copyright} Usage: --help - print this message --version - print the version of rpm being used -q - query mode Package specification options: -a - query all packages -f + - query package owning -F - like -f, but read file names from stdin -p + - query (uninstalled) package -P - like -f, but read package names from stdin Information selection options: -i - display package information -l - display package file list -s - show file states (implies -l) -d - list only documentation files (implies -l) -c - list only configuration files (implies -l) -V -y --verify - verify a package installation same package specification options as -q --install -i - install package -v - be a little verbose -h --hash - print hash marks as package installs (good with -v) --percent - print percentages as package installs --force - install despite potential conflicts --test - don't install, but tell if it would work or not --search - search the paths listed in /etc/rpmrc for rpms --upgrade -U - upgrade package (same options as --install) --uninstall -u - uninstall package -b - build package, where is one of: p - prep (unpack sources and apply patches) l - list check (do some cursory checks on %files) c - compile (prep and compile) i - install (prep, compile, install) b - binary package (prep, compile, install, package) a - bin/src package (prep, compile, install, package) --short-circuit - skip straight to specified stage (only for c,i) --clean - remove build tree when done --keep-temps - do not delete scripts (or any temp files) in /tmp --test - do not execute any stages, implies --keep-temps in /tmp - useful for testing --time-check - set the time check to S seconds (0 disables it) --where + - search paths listed in /etc/rpmrc for rpms matching --rebuild - install source package, build binary package, and remove spec file, sources, patches, and icons.\n"; } 1; # RPM Package Management System -*-perl-*- # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -*-perl-*- require "flush.pl"; require "dbrecord.pl"; require "dbmisc.pl"; require "header.pl"; require "misc.pl"; require "spec.pl"; require "run.pl"; sub installbinarypackage { local ($force, $test, $marker, $upgrade, $packagepath) = @_; local ($filename, $lines, $name, %spec, %pspec, %ospec); local ($spec_patch, $i, $pid1, $pid2, $pid); local ($path, $item, @a, $str, $sub, $label, @list, $size); local ($targhash, $hashes, %header, $instmd5, $newmd5, @infofile); local (%configlist, @configssaved); local (@elements, $element, $bpath, $packagefile); $packagefile = &readheader("yes", $packagepath, *header, *spec, *pspec); if ($aheader{arch} != &getarchname()) { &error("The package was built for ", $aheader{arch}, ", not ", &getarchname(), "\n"); } # a binary package only has one subpackage - I'll assume it's zero die "Too many subpackages!" if ($spec{"subpackageC"} != 1); if ($spec{"subpackage:0:name"}) { $name = "$spec{name}-" . $spec{"subpackage:0:name"} . ":$spec{version}:$spec{release}"; $label = "$spec{name}-" . $spec{"subpackage:0:name"} . "-$spec{version}-$spec{release}"; } else { $name = "$spec{name}:$spec{version}:$spec{release}"; $label = "$spec{name}-$spec{version}-$spec{release}"; } &debug("looking for shared/conflicting files"); %conflicts = &findshared(0, $upgrade, *configlist, *spec); if (!$force && !$upgrade && keys(%conflicts)) { return 1; } # check if this package has already been installed $str = $Packages{$name}; if (defined $str) { # it's already here! &debug("package $name is already installed"); %ospec = &strtorec($str, "all"); &debug("checking for orphans"); # Check for orphans @list = &spec_diff(*ospec, 0, *spec, 0); if (@list) { $message = "Installing $label would create the following " . "orphans:\n"; foreach $num (@list) { $path = $ospec{"subpackage:0:file:$num:path"}; $message = "$message\t$path\n"; } if ($force) { $message = "$message\nGood god Jim! I'm a package system, " . "not a parent killer. There are some things that " . "I just won't do!"; } &warning($message); return } &debug("none found"); if (!$force) { &warning("Package $label is already installed"); return 1; } } &debug("checking config files"); # handle the config files # while we're at it, fix a cpio problem. It creates new directories # (directories that aren't specifically listed in the filelist) as # mode 0700, which is bad. Get a list of directories that it'll need # to create and then create them ourself with mode 0755, which is a much # more reasonable default for ($i = 0; $i < $spec{"subpackage:0:fileC"}; $i++) { $path = $spec{"subpackage:0:file:$i:path"}; &debug("looking for subirs in $path"); @elements = split("/", $path); shift(@elements); pop(@elements); $bpath = ""; foreach $element (@elements) { $bpath = $bpath . "/" . $element; if (!(-d $rpm{'root'} . $bpath)) { &debug("Creating directory ", $rpm{'root'} . $bpath, "as 0755"); if (mkdir($rpm{'root'} . $bpath, 0755) == 0) { &error("mkdir ", $rpm{'root'} . $bpath, " failed"); } } } if (&is_config($spec{"subpackage:0:file:$i:info"})) { $path = $rpm{'root'} . $path; &debug("looking at config file |", $path, "|"); if (!(-f $path)) { &debug("no version is currently installed"); next; } @infofile = split(" ", $spec{"subpackage:0:file:$i:info"}); $newmd5 = $infofile[2]; &debug("new md5 is $newmd5"); $instmd5 = &md5($path); if (!defined $configlist{$path}) { if ($instmd5 eq $newmd5) { &debug("disk md5 == new md5 -- overwriting"); next; } else { &debug("no version is in db -- saving to .orig"); &warning("$path saved as $path.orig"); if (! $test) { rename($path, "$path.orig"); } } next; } @infofile = split(" ", $configlist{$path}); $dbmd5 = $infofile[2]; if ($instmd5 eq $dbmd5) { &debug("disk md5 == original md5 -- overwriting"); } elsif ($dbmd5 eq $newmd5) { &debug("original md5 == new md5 -- leaving file"); if (! $test) { rename($path, "$path.rpmsaved"); } push(@configssaved, $path); } else { &debug("version on disk has been hand modified -- saving"); &warning("$path saved as $path.orig"); if (! $test) { rename($path, "$path.orig"); } } } } if ($test) { normal("Installation of $label would succeed"); close($packagefile); return 0; } $spec{"subpackage:0:insttime"} = time(); if (&isverbose && $marker eq "hash") { printf("%-28s", "$label"); flush(STDOUT); # this flush is completely unnecessary } else { &verbose("Installing $label"); } # find the total size of the package so that percentage's will work for ($i = 0; $i < $spec{"subpackage:0:fileC"}; $i++) { $spec{"subpackage:0:file:$i:state"} = "normal"; @f = split(" ", $spec{"subpackage:0:file:$i:info"}); $size += $f[0]; $amount{$spec{"subpackage:0:file:$i:path"}} = $f[0]; } &debug("total size: $size"); if (&run_prepost(*pspec, "pre")) { return 1 } # do the cpio and install it (should it be verbose? How can I tell?) if ($marker eq percent) { print("%f $name\n"); } pipe(CIN, COUT); flush(STDERR); flush(STDOUT); $pid1 = fork(); if (! $pid1) { # this is the gunzip task close(CIN); close(STDIN); open(STDIN, "<&$packagefile"); close($packagefile); # note that read() uses fread(), and hence does buffering #debug("skipping to $header{archiveoffset}"); #sysread(STDIN, $tmp, $header{archiveoffset}); close(STDOUT); open(STDOUT, ">&COUT"); exec("/bin/gzip -d"); exit(1); } close(COUT); close($packagefile); pipe(IN, OUT); $pid2 = fork(); if (! $pid2) { # this is the cpio task close(IN); chdir($rpm{'root'}) if ($rpm{'root'}); chdir("/") unless ($rpm{'root'}); close(STDERR); open(STDERR, ">&OUT"); close(STDIN); open(STDIN, "<&CIN"); if ($marker) { exec("/bin/cpio -ivumd"); } else { exec("/bin/cpio -iumd"); } exit(1); } close(CIN); close(OUT); $running = 0; $hashes = 0; if ($marker) { while () { chop; if ($amount{"/$_"}) { $running += $amount{"/$_"}; $percent = ($running / $size) * 100; if ($marker eq "percent") { print("%% ", $percent, "\n"); } elsif ($marker eq "hash") { $targhash = int($percent / 2); if ($targhash > $hashes) { print "#" x ($targhash - $hashes); $hashes = $targhash; } } flush(STDOUT); } } } wait(); $rc1 = $?; wait(); $rc2 = $?; # remove the speci file that just got created in /tmp unlink($filename); if ($rc1 || $rc2) { error("gunzip < $packagepath | cpio -ivumd failed"); } print "\n" if ($marker eq "hash"); debug("cpio finished"); close(IN); # Whew -- both ends of both pipes have been closed, so we can continue # clean up config files &debug("config files saved: @configssaved"); while (defined ($item = pop(@configssaved))) { &debug("restoring $item"); rename("$item.rpmsaved", $item); } if (&run_prepost(*pspec, "post")) { return 1 } &instupdatedatabase(*spec, *conflicts, *header); if ($upgrade) { require "uninstall.pl"; $idxname = "$spec{name}"; if ($spec{"subpackage:0:name"}) { $idxname = $idxname . "-" . $spec{"subpackage:0:name"}; } $list = $NameIndex{$idxname}; &debug("\$NameIndex{$idxname} = ", $list); foreach $package (split(" ", $list)) { if ($package ne $name) { &debug("doing uninstall of $package"); &uninstallpackage(1, $test, 1, $package); } } } return 0; } sub instupdatedatabase { local (*spec, *conflicts, *header) = @_; local ($name, $package, $i, %fullspec, $nameline); local ($inlist, $item, $titem, $thelist, $idxname); local ($ostr, %ospec, $fileinfo, $filenum, $ofilenum); if ($spec{"subpackage:0:name"}) { $name = "$spec{name}" . "-" . $spec{"subpackage:0:name"} . ":$spec{version}:$spec{release}"; $idxname = "$spec{name}-" . $spec{"subpackage:0:name"}; } else { $name = "$spec{name}:$spec{version}:$spec{release}"; $idxname = "$spec{name}"; } if (defined $Packages{$name}) { # we're reinstalling it &debug("package $name has already been installed - I'll redo it"); &debug("removing old package's db entry"); delete($Packages{$name}); } debug("setting \$Packages{$name}"); $Packages{$name} = &rectostr(%spec); if (defined $spec{"subpackage:0:group"}) { debug("setting \$GroupIndex{$idxname} to ", $spec{"subpackage:0:group"}); $GroupIndex{$idxname} = $spec{"subpackage:0:group"}; &debug("checking for pre uninstall"); if (defined $pspec{"preun:0"}) { $PostIndex{"$name:pre"} = $pspec{"preun:0"}; &debug("pre uninstall saved in \$PostIndex\{\"${name}:pre\"}"); } &debug("checking for post uninstall"); if (defined $pspec{"postun:0"}) { $PostIndex{"$name:post"} = $pspec{"postun:0"}; &debug("post uninstall saved in \$PostIndex\"${name}:post\"}"); } else { &debug("no post uninstall found"); } } if (defined $header{icon}) { debug("setting \$IconIndex{$name}"); $IconIndex{$name} = $header{icon}; } # now update the NameIndex in case it needs some work $nameline = $NameIndex{$idxname}; if (defined $nameline) { debug("Packages named ", $name, " already exist"); # other packages (perhaps this very one!) exist with this name # if we're not in the list, add us. Otherwise, leave it alone $inlist = 0; foreach $package (split(" ", $nameline)) { if ($package eq $name) { $inlist = 1; last; } } if (!$inlist) { $NameIndex{$idxname} = "$nameline $name"; } } else { # first package w/ this name $NameIndex{$idxname} = $name; &debug("setting \$NameIndex{$idxname} = $name"); } # Now go through the paths list. We *don't* look for conflicts here # We had a list of conflicts passed to us -- we'll mark replaced # files using that. We just need to insure that the package name and # numbers are in the list somewhere. They could be there already (if # we're just replacing something), but just in case... $sub = $spec{"subpackage:0:name"}; for ( $i = 0; $i < $spec{"subpackage:0:fileC"}; $i++ ) { $path = $spec{"subpackage:0:file:$i:path"}; $paths = $PathIndex{$path}; $item = "$name:$i"; $thelist = $item; if (defined($paths)) { $inlist = 0; foreach $titem (split(" ", $paths)) { if ($titem ne $item) { $thelist = "$thelist $titem"; } } } $PathIndex{$path} = $thelist; &debug("set \$PathIndex{$path} = $thelist"); } # The only thing left to do is deal with conflicts. The %conflicts # array tells us what's been replaced though, so that should be # easy foreach $package (keys(%conflicts)) { $ostr = $Packages{$package}; if (!defined $ostr) { &error("RPM database is corrupt. Use --rebuild to ", "reconstruct it"); } %ospec = strtorec($ostr, "all"); foreach $fileinfo (split(" ", $conflicts{$package})) { ($filenum, $ofilenum) = ($fileinfo =~ /(.*):(.*)/); $ospec{"subpackage:0:file:$ofilenum:state"} = "replaced"; debug("set replaced file in $package"); } $Packages{$package} = &rectostr(%ospec); } "#$%&} sub wherepackage { local ( $pkg, *res) = @_; local ( @files, $p, $path ); @res = (); # First just check if it is a file or an ftp URL if ((-f $pkg) || ($pkg =~ m|^ftp://|)) { push(@res, $pkg); return; } foreach $path (@rpmsearchpath) { if ($path =~ m|^ftp://|) { require "rpmftp.pl"; # Check the ftp site &verbose("Searching: $path"); @files = &ftp_dir($path); if ($ftp_error ne "") { &warning("FTP failed: $path"); &warning("FTP failed: $ftp_error"); next; } } else { # Get directory list opendir(D, $path); @files = readdir(D); closedir(D); } if ($rpm{'where'}) { # collect all matches @files = grep(m|.*$pkg.*|, @files); foreach $p (@files) { push(@res, "$path/$p"); } } else { # exact matches only foreach $p (@files) { if ($p eq $pkg) { push(@res, "$path/$pkg"); return; } } } } } sub installpackages { local($force, $test, $marker, $upgrade, @list) = @_; local ( $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks ) ; local (@where); local ($ftped, $local_filename) = 0; if (! -x "/bin/gzip") { &error("/bin/gzip not found"); } elsif (! -x "/bin/cpio") { &error("/bin/cpio not found"); } if (! $rpm{'where'}) { &opendatabase("rw"); } foreach $package (@list) { $ftped = 0; if ($rpm{'where'}) { &wherepackage($package, *where); foreach (@where) { &normal("$_"); } next; } if ($rpm{'search'}) { &wherepackage($package, *where); if (length(@where) == 0) { &error("No matches"); } ($package) = @where; } if ($package =~ m|^ftp://|) { require "rpmftp.pl"; $local_filename = &tempname(); $local_filename .= "-ftpinstall.bin.rpm"; if ($rpm{'root'}) { $local_filename = $rpm{'root'} . $local_filename; } &verbose("Retrieving: $package"); if (! &ftp_file($package, $local_filename)) { warning("FTP $package failed: $ftp_error"); next; } $package = $local_filename; $ftped = 1; } if (&package_type($package) eq "bin") { warning("$package not installed") if &installbinarypackage($force, $test, $marker, $upgrade, $package); } elsif (&package_type($package) eq "src") { &installsourcepackage($package, $force); } else { &error("$package is not a valid rpm package"); } if ($ftped) { unlink($package); } } &closedatabase; } sub installsourcepackage { local($packagepath, $force) = @_; local ($pid1, $pid2, $rc1, $rc2, $specfile); local (%header, %spec, %pspec); local ($m1, $m2, $m3, $m4, $hasheader, $specext); &debug("installing source package $packagepath in $rpm{sourcedir}"); &checkdir($rpm{sourcedir}, $force); &checkdir($rpm{specdir}, $force); # hack to determine if it's a old gzipped cpio archive or something # better open(FILE, "<$packagepath"); read(FILE, $header, 4); close($FILE); ($m1, $m2, $m3, $m4) = unpack("CCCC", $header); if (($m1, $m2, $m3, $m4) == (0xed, 0xab, 0xee, 0xdb)) { &debug("new format"); $hasheader = 1; } else { &debug("old format \$m1 = 0x", hex($m1)); } if ($hasheader) { &readheader("", $packagepath, *header, *spec, *pspec); &verbose("$header{name}"); } pipe(CIN, COUT); $pid1 = fork(); if (! $pid1) { # this is the gunzip task close(CIN); close(STDOUT); open(STDOUT, ">&COUT"); close(STDIN); open(STDIN, $packagepath); # note that read() uses fread(), and hence does buffering sysread(STDIN, $tmp, $header{archiveoffset}) if $hasheader; exec("/bin/gzip -d"); exit(1); } close(COUT); pipe(IN, OUT); $pid2 = fork(); if (! $pid2) { # this is the cpio task &debug("chdir($rpm{sourcedir})"); chdir($rpm{"sourcedir"}); close(IN); close(STDERR); open(STDERR, ">&OUT"); close(STDIN); open(STDIN, "<&CIN"); exec("/bin/cpio -ivumd"); exit(1); } close(CIN); close(OUT); $specext = $rpm{'specext'}; $specext =~ s/\./\\./; while () { chop; /$specext$/ && ($specfile = $_) && &debug("spec file name: $specfile"); verbose($_); } wait(); $rc1 = $?; wait(); $rc2 = $?; if ($rc1 || $rc2) { error("gunzip < $packagepath | cpio -ivumd failed"); } debug("cpio finished"); debug("moving $rpm{sourcedir}/$specfile to $rpm{specdir}"); if (!rename("$rpm{sourcedir}/$specfile", "$rpm{specdir}/$specfile")) { open(IFILE, "<$rpm{sourcedir}/$specfile"); open(OFILE, ">$rpm{specdir}/$specfile") || error("couldn't write $rpm{specdir}/$specfile"); while () { print OFILE; } close(IFILE); close(OFILE); unlink("$rpm{sourcedir}/$specfile"); } return $specfile; } # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -*-perl-*- # misc messaging functions sub incmessagelevel { $rpm{"messagelevel"}++; } sub setmessagelevel { local($newlevel) = @_; $rpm{"messagelevel"} = $newlevel; } sub mess { local($level, @rest) = @_; print(@rest, "\n") if $rpm{"messagelevel"} >= $level; } sub debug { local(@rest) = @_; &mess(3, "D: ", @rest); } sub verbose { local(@rest) = @_; &mess(2, @rest); } sub normal { local(@rest) = @_; &mess(1, @rest); } sub setmessagequiet { &setmessagelevel(0); } sub setmessageverbose { &setmessagelevel(2); } sub setmessagedebug { &setmessagelevel(3); } sub isquiet { return ($rpm{"messagelevel"} == 0); } sub isverbose { return ($rpm{"messagelevel"} >= 2); } sub isdebug { return ($rpm{"messagelevel"} >= 3); } sub warning { print STDERR ("warning: ", @_, "\n") if $rpm{"messagelevel"} >= $level; #&normal("warning: ", @_ ); } sub error { if (! $rpm{"keeptemps"}) { &remove_temps; } die ("error: ", @_, "\n"); } 1; # RPM Package Management System -*-perl-*- # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # return 1 if $path looks like a doc file sub is_doc { local ( $path ) = @_; local ( $i ); foreach $i (split(':', $rpm{"DOCPATH"})) { return 1 if ($path =~ /^$i\//); } return 0; } sub specs_same { local ( $first, $second ) = @_; local ( @a, @b ); @a = split(/[ \t\n]+/, $first); @b = split(/[ \t\n]+/, $second); foreach $i (0, 2..9) { return 0 if ($a[$i] ne $b[$i]); } return 1; } sub spec_diff { local ( *speca, $suba, *specb, $subb ) = @_; local ( $i, %indexa, %indexb, @result ); for ($i = 0; $i++; $i < $specb{"subpackage:$subb:fileC"} - 1) { $indexb{$specb{"subpackage:$subb:file:$i:path"}} = $i; } @result = (); for ($i = 0; $i++; $i < $specb{"subpackage:$suba:fileC"} - 1) { if (! $indexb{$speca{"subpackage:$suba:file:$i:path"}}) { push(@result, $i); } } return @result; } # returns: size mtime md5sum mode uid gid isconf isdoc rdev symlink # This should not be used! sub stat_info { &error("stat_info() is deprecated!"); } sub is_config { local ( $_ ) = @_; local ( @i ); @i = split(" ", $_); return $i[6]; } sub is_realdoc { local ( $_ ) = @_; local ( @i ); @i = split(" ", $_); return $i[7]; } sub is_directory { local ( $_ ) = @_; local ( @i ); @i = split; return (oct($i[3]) & 0170000) == 0040000; } # returns: size mtime md5sum mode uid gid isconf isdoc rdev symlink # same as stat_info() but takes a precomputed assoc array of md5sums sub stat_info_array { local ( $path, $isconf, $isdoc, *md5sum_array ) = @_; local ( $md5, $link, $res ); if ($rpm{'root'}) { $path = $rpm{'root'} . $path; } local ( $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks ) = lstat($path); if (! $mode) { return "missing"; } $md5 = 0; $link = "X"; if (-l $path) { $link = readlink($path); } else { if (-f $path) { if (! ($md5 = $md5sum_array{$path})) { $md5 = &md5($path); } } } $res = sprintf ("%d %d %s %o %d %d %d %d %x %s", $size, $mtime, $md5, $mode, $uid, $gid, $isconf, $isdoc, $rdev, $link); return $res; } sub md5sum_array { local ( *list, *result, $fail ) = @_; local ( $args, $a, $f, $md5, $path ); &debug("ENTERING: md5sum_array()"); # Build the arg array undef($args); undef($result); foreach $path (@list) { $a = $path; if ($rpm{'root'}) { $a = $rpm{'root'} . $a; } if (! -e $a) { if ($fail) { &error("file $a does not exist"); } else { next; } }; if (-f $a) { $args .= "$a "; } } if (! $args) { return; } # Call md5sum open(MD5, "md5sum $args |"); while () { chop; # &debug("$_"); ($md5, $f) = split; $result{$f} = $md5; } close MD5; &debug("EXITING: md5sum_array()"); } sub by_number { return -1 if ($a < $b); return 0 if ($a == $b); return 1 if ($a > $b); } $PACK_MAGIC = pack("CC", 0037, 0036); # packed files $GZIP_MAGIC = pack("CC", 0037, 0213); # gzip files, 1F 8B $OLD_GZIP_MAGIC = pack("CC", 0037, 0236); # gzip 0.5 = freeze 1.x $LZH_MAGIC = pack("CC", 0037, 0240); # SCO LZH Compress files $COMPRESS_MAGIC = pack("CC", 0037, 0235); # compress-ed files $PKZIP_MAGIC = pack("CCCC", 0120, 0113, 0003, 0004); # pkzip files sub is_compressed { local ( $filename ) = @_; local ( $magic ); &debug("ENTERING: is_compressed()"); open(FD, $filename); read(FD, $magic, 4); close FD; &debug("EXITING: is_compressed()"); return 1 if (substr($magic, 0, 2) eq $PACK_MAGIC); return 1 if (substr($magic, 0, 2) eq $GZIP_MAGIC); return 1 if (substr($magic, 0, 2) eq $OLD_GZIP_MAGIC); return 1 if (substr($magic, 0, 2) eq $LZH_MAGIC); return 1 if (substr($magic, 0, 2) eq $COMPRESS_MAGIC); return 1 if (substr($magic, 0, 4) eq $PKZIP_MAGIC); return 0; } $_tmpname_counter = 0; @tempname_array = (); sub tempname { $_tmpname_counter++; push(@tempname_array, "/tmp/rpm-$$-$_tmpname_counter"); return "/tmp/rpm-$$-$_tmpname_counter"; } sub remove_temps { local ( $arg ); &debug("ENTERING: remove_temps()"); # Some of these can be directories, so we can't just do unlink() $arg = join(' ', @tempname_array); system("rm -rf $arg"); &debug("EXITING: remove_temps()"); } sub rpmglob { local ( $_ ) = @_; local ( @res ) = (); if (/\*/) { @res = glob($_); } elsif (/\?/) { @res = glob($_); } else { @res = ($_); } if (@res == ()) { return ($_); } else { return @res; } } sub md5 { local($filename) = @_; &debug("computing md5 checksum of $filename"); pipe(READ, WRITE); if (!fork()) { close(READ); &debug("child execing /usr/bin/md5sum $filename"); open(STDOUT, ">&WRITE"); close(STDERR); open(STDERR, ">&STDOUT"); exec "md5sum $filename"; } close(WRITE); $line = ; chop $line; &debug("got $line from md5sum"); $_ = $line; if (/(.*): No such file or directory/) { return ""; } elsif (/([0-9a-f]+) +(.*)$/) { $md5 = $1; $file = $2; ($file eq $filename) || &warning("md5's output looks weird"); &debug("$file has md5 of $md5"); } else { die "Bad output from md5sum" }; close READ; wait; return $md5; } sub stdinlist { local (@list); while () { chop; push(@list, $_); } return @list; } sub member { local ( $i, @l ) = @local; foreach (@l) { return 1 if ($i eq $_); } return 0; } sub getarchname { local($cpu, $cputoken); $cpu = `uname -m`; chop($cpu); $cputoken = $cpu; $cputoken =~ s/i.86/i386/; if ($cputoken eq "alpha") { $cputoken = "axp"; } return $cputoken; } sub getarchnum { local ($name); $name = &getarchname(); if ($name eq "i386") { return 1; } elsif ($name eq "axp") { return 2; } &error("unknown architecture: $name"); } sub getosnum { local ($os); $os = `uname`; if ($os =~ /linux/i) { $os = 1; } else { &error("unknown operating system: $os"); } return $os; } sub checkdir { local ($path, $create) = @_; if (! -d $path) { if ($create) { &debug("creating directory $path"); mkdir($path, 0755) || &error("can't create $path"); } else { &error("$path doesn't exist -- use --force to create it"); } } return; } 1; # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -*-perl-*- require "readopts.pl"; $rpm{"version"} = "1.4"; $rpm{"copyright"} = "Copyright (C) 1995 - Red Hat Software This may be freely redistributed under the terms of the GNU Public License"; $rpm{"options"} = ""; $rpm{"rcfile"} = "rpmrc"; $rpm{"topdir" } ="/usr/src"; $rpm{"arch_sensitive"} = 0; $rpm{"docdir"} = "/usr/doc"; $rpm{"binext"} = ".rpm"; $rpm{"srcext"} = ".src.rpm"; $rpm{"specext"} = ".spec"; $rpm{"libdir"} = "/var/lib/rpm"; $rpm{"percent"} = 0; $rpm{"force"} = 0; $rpm{"require_vendor"} = 0; $rpm{"require_distribution"} = 0; $rpm{"require_icon"} = 0; $rpm{"require_group"} = 0; $rpm{"keeptemps"} = 0; $rpm{"timecheck"} = 7200; # $rpm{"distribution"}; # $rpm{"vendor"}; # $rpm{"root"}; # 0 = quiet # 1 = default # 2 = verbose # 3 = debug $rpm{"messagelevel"} = 1; $rpm{"clean"} = 0; $rpm{"short_circuit"} = 0; $rpm{"PATH"} = "/bin:/usr/bin:/sbin:/usr/sbin:/usr/bin/X11"; $rpm{"DOCPATH"} = "/usr/doc:/usr/man:/usr/info:/usr/X11R6/man"; # Now load any rc files if (-f "/etc/$rpm{'rcfile'}") { &readopts("/etc/$rpm{'rcfile'}"); } if (-f "$ENV{'HOME'}/.$rpm{'rcfile'}") { &readopts("$ENV{'HOME'}/.$rpm{'rcfile'}"); } if (! $rpm{specdir} ) { $rpm{"specdir"} = $rpm{topdir} . "/SPECS"; } if (! $rpm{builddir} ) { $rpm{"builddir"} = $rpm{topdir} . "/BUILD"; } if (! $rpm{sourcedir} ) { $rpm{"sourcedir"} = $rpm{topdir} . "/SOURCES"; } if (! $rpm{rpmdir} ) { $rpm{"rpmdir"} = $rpm{topdir} . "/RPMS"; } if (! $rpm{srcrpmdir} ) { $rpm{"srcrpmdir"} = $rpm{topdir} . "/SRPMS"; } 1; # RPM Package Management System -*-perl-*- # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # binary and source package building routines # This needs to match the pack() call in gen_header EXACTLY $package_header_length = 104; $date = 0; $host = ""; sub gen_header { local ( *spec, $type, $x, $speci_len, $size ) = @_; local ( $result, $typeb, $cpu, $name, $archive_offset ); local ( $speci_offset, $os, $group_len, $icon_len ); local ( @s, $ifn ); if ($type ne "bin") { $typeb = 1; $cpu = 0; $os = 0; } else { $typeb = 0; $cpu = &getarchnum(); $os = &getosnum(); } $group_len = length($spec{"subpackage:$x:group"}); $icon_len = 0; if ($spec{"subpackage:$x:icon"}) { $ifn = $rpm{"sourcedir"} . "/" . $spec{"subpackage:$x:icon"}; @s = stat($ifn); if (@s) { $icon_len = $s[7]; } } $name = $spec{"name"}; if ($spec{"subpackage:$x:name"}) { $name .= "-" . $spec{"subpackage:$x:name"}; } $name .= "-" . $spec{"version"} . "-" . $spec{"release"}; $name = substr($name, 0, 64); # This stuff gets stuck in later by the packaging scripts $archive_offset = $package_header_length; $speci_len = 0x00000000; $speci_offset = $package_header_length + $group_len + $icon_len; $result = pack("CCCC CC CC CC a66 N N N N N N N", 0xed, 0xab, 0xee, 0xdb, 0x01, 0x01, 0x00, $typeb, 0x00, $cpu, $name, $speci_offset, $speci_len, $archive_offset, $size, $os, $group_len, $icon_len); # Add the group $result .= $spec{"subpackage:$x:group"}; # Add the icon if ($icon_len > 0) { open(FD, $ifn); while () { $result .= $_; } close(FD); } return $result; } sub write_pack_bin_script { local ($script, *spec, *pspec) = @_; local ( $i, $j ); local ( $name, $subname, $version, $release, $path, $info ); local ( $pre, $post, $preun, $postun, $pf, $isconf, $isdoc ); local ( $cpio_stderr_fn, $cpio_opts ); local ( @files, %filesdoc, %filesconf ); local ( %md5sum_array ); local ( $lastpath ); local ( $cpu ); local ( $filelist_fn, $speci_fn, $cpio_stderr_fn, $preamble ); local ( $header, $header_fn, $pad, $size, @infoarray, $speci_filelist ); local ( $l_header, $cputoken ); &debug("ENTERING: write_pack_bin_script()"); $name = $spec{"name"}; $version = $spec{"version"}; $release = $spec{"release"}; open(OF, ">$script"); print OF "#!/bin/sh -e\n"; print OF " # Binary package script generated by rpm $rpm{'version'} on $date # package name: $name # version: $version # release: $release # subpackageC: $spec{'subpackageC'} "; if (&isverbose) { print OF " set -x "; } $date = time; $host = `hostname -fqdn`; chop($host); $cputoken = &getarchname(); foreach $i (0 .. $spec{"subpackageC"} - 1) { $filelist_fn = &tempname(); $speci_fn = &tempname(); $cpio_stderr_fn = &tempname(); $header_fn = &tempname(); $subname = $spec{"subpackage:$i:name"}; $preamble = $spec{"subpackage:$i:preamble"}; # Add stuff from the main preamble that we want in all preambles if ($i) { foreach (split(/\n/, $spec{"subpackage:0:preamble"})) { if (/^source([0-9]*):/i || /^patch([0-9]*):/i || /^copyright:/i || /^vendor:/i || /^distribution:/i) { $preamble .= "$_\n"; } } } $preamble .= "CpuType: $cpu\n"; $preamble .= "BuildDate: $date\n"; $preamble .= "BuildHost: $host\n"; $preamble .= "PreambleVersion: 1\n"; print OF " # # subpackage = $subname # filelist = $filelist_fn # speci = $speci_fn # header = $header_fn # cat <<\"..EOF..\" > $speci_fn %package $subname name: $name version: $version release: $release $preamble"; @files = (); %filesdoc = (); %filesconf = (); # Now we generate an internal file list, expanding # directories, etc. This list is used to generate # the speci and filelist. # The internal file list will *not* have $rpm{'root'} # prepended to it! &expand_filelist(*spec, *pspec, $i, *files, *filesconf, *filesdoc); # generate the %speci (the file list) section of speci file @files = sort @files; # md5sum_array() should follow $rpm{'root'} &md5sum_array(*files, *md5sum_array, 0); # The speci list is reverse sorted, for easy removal $lastpath = ""; $size = 0; $speci_filelist = ""; foreach $path (reverse @files) { if ($path eq $lastpath) { &error("file listed twice: $path"); } $lastpath = $path; # stat_info_array() should follow $rpm{'root'} $info = &stat_info_array($path, $filesconf{$path}, $filesdoc{$path}, *md5sum_array); @infoarray = split(/[ \t\n]+/, $info); $size += $infoarray[0]; if ($info eq "missing") { &error("file missing: $path"); } &time_check($path, $info); $speci_filelist .= "$path $info\n"; } # Now that we have the size we finish off the speci print OF "size: $size\n"; # pre script if ($pspec{"pre:$i"}) { $pre = $pspec{"pre:$i"}; print OF "%pre $subname\n$pre"; } # post script if ($pspec{"post:$i"}) { $post = $pspec{"post:$i"}; print OF "%post $subname\n$post"; } # preun script if ($pspec{"preun:$i"}) { $preun = $pspec{"preun:$i"}; print OF "%preun $subname\n$preun"; } # postun script if ($pspec{"postun:$i"}) { $postun = $pspec{"postun:$i"}; print OF "%postun $subname\n$postun"; } # and finally the speci filelist print OF "%speci $subname\n"; print OF $speci_filelist; print OF "..EOF..\n"; # At this point the speci file is made # Now we just need to create the file list print OF "\ncat <<\"..EOF..\" > $filelist_fn\n"; # The speci is now in the header # print OF "$speci_fn\n"; # The file list is plain sorted, for best cpio --extract foreach $path (@files) { # strip leading "/" for chroots $path =~ s/^\///; print OF "$path\n"; } print OF "..EOF..\n"; # Now just assemble the header $header = &gen_header(*spec, "bin", $i, 0, $size); open(PF, ">$header_fn"); print PF $header; close(PF); $l_header = length($header); # Get the speci size, pad it to 4 bytes and insert in header print OF "SPECSIZE=`ls -l $speci_fn | awk '{print \$5}'`\n"; print OF "perl -e 'print \"\\0\" x ((4 - (\$ARGV[0] % 4)) % 4);' \$SPECSIZE >> $speci_fn\n"; print OF "perl -e 'print pack(\"NN\", \$ARGV[0], \$ARGV[0] + ((4 - (\$ARGV[0] % 4)) % 4) + $l_header);' \$SPECSIZE | dd conv=notrunc bs=1 count=8 seek=80 of=$header_fn\n"; # Now we just need to build the package if ($subname) { $pf = "$name-$subname-$version-$release.$cputoken$rpm{'binext'}"; } else { $pf = "$name-$version-$release.$cputoken$rpm{'binext'}"; } # If we want to build from some chroot(), do it here print OF "cd $rpm{'root'}/\n"; if (! &isquiet) { print OF "echo -n \"$pf: \"\n"; } # Finish off the output filename if ($rpm{'arch_sensitive'}) { $pf = $rpm{'rpmdir'} . "/" . $cputoken . "/" . $pf; } else { $pf = $rpm{'rpmdir'} . "/" . $pf; } if (&isverbose) { $cpio_opts = "-ovH"; } else { $cpio_opts = "-oH"; } print OF "cpio $cpio_opts crc < $filelist_fn 2> $cpio_stderr_fn | gzip -c9fn | cat $header_fn $speci_fn - > $pf\n"; print OF "if [ \$? -ne 0 ]; then\n"; print OF " exit $?\n"; print OF "fi\n"; if (&isverbose) { print OF "cat $cpio_stderr_fn\n"; } elsif (! &isquiet) { # Normal verbosity print OF "grep '[0-9][0-9]* blocks' $cpio_stderr_fn\n"; } # This is where we check for errors since cpio is # bone headed and doesn't return a non zero exit code # if it can't find a file. Who wrote cpio anyway? print OF "if grep 'No such file' $cpio_stderr_fn ; then\n"; print OF " exit 1;\n"; print OF "fi\n"; if (! $rpm{'keeptemps'}) { print OF "rm -f $header_fn\n"; print OF "rm -f $speci_fn\n"; print OF "rm -f $filelist_fn\n"; print OF "rm -f $cpio_stderr_fn\n"; } } print OF "exit 0\n"; close OF; chmod 0755, $script; &debug("EXITING: write_pack_bin_script()"); } sub write_pack_src_script { local ($script, $specfile, *spec, *spec_source, *spec_patch) = @_; local ( $tmpdir, $tmpscript, $tmp, $preamble, $size, @stat, $i ); local ( $filelist, $cpio_stderr_fn, $header_fn, $speci_fn, $cpio_opts ); local ( @the_icons ); &debug("ENTERING: write_pack_src_script()"); $tmpdir = &tempname(); $tmpscript = &tempname(); $filelist = &tempname(); $header_fn = &tempname(); $speci_fn = &tempname(); $cpio_stderr_fn = &tempname(); $size = 0; open(OF, ">$script"); print OF "#!/bin/sh -e\n"; print OF "# Source package script generated by rpm $rpm{'version'} on $date\n"; print OF "# package name: $spec{'name'}\n"; print OF "# version: $spec{'version'}\n"; print OF "# release: $spec{'release'}\n"; if (&isverbose) { print OF "\nset -x\n\n"; } print OF "mkdir -p $tmpdir\n"; print OF "cd $tmpdir\n"; print OF "touch $filelist\n"; # Add spec file $specfile =~ s/.*\/(.*)/$1/; print OF "ln -s $rpm{'specdir'}/$specfile $tmpdir/$specfile\n"; print OF "echo '$specfile' >> $filelist\n"; @stat = stat("$rpm{'specdir'}/$specfile"); $size += $stat[7]; # Add icon file(s) foreach $i (0 .. $spec{"subpackageC"} - 1) { if ($spec{"subpackage:$i:icon"}) { $tmp = $spec{"subpackage:$i:icon"}; if (! &member($tmp, @the_icons)) { push(@the_icons, $tmp); print OF "ln -s $rpm{'sourcedir'}/$tmp $tmpdir/$tmp\n"; print OF "echo '$tmp' >> $filelist\n"; @stat = stat("$rpm{'sourcedir'}/$tmp"); $size += $stat[7]; } } } # Add all source and patch files foreach $tmp (values %spec_source, values %spec_patch) { $tmp =~ s/.*\/(.*)/$1/; print OF "echo '$tmp' >> $filelist\n"; print OF "ln -s $rpm{'sourcedir'}/$tmp $tmpdir/$tmp\n"; @stat = stat("$rpm{'sourcedir'}/$tmp"); $size += $stat[7]; } # Generate the header $header = &gen_header(*spec, "src", 0, 0, $size); open(PF, ">$header_fn"); print PF $header; close(PF); $l_header = length($header); # Generate a minimal speci # $date and $host are already set from the binary packaging $preamble = "Name: $spec{'name'}\n"; $preamble .= "Version: $spec{'version'}\n"; $preamble .= "Release: $spec{'release'}\n"; $preamble .= $spec{"subpackage:0:preamble"}; # Add stuff from the main preamble foreach (split(/\n/, $spec{"subpackage:0:preamble"})) { if (/^source([0-9]*):/i || /^patch([0-9]*):/i || /^copyright:/i || /^vendor:/i || /^distribution:/i) { $preamble .= "$_\n"; } } $preamble .= "CpuType: $cpu\n"; $preamble .= "BuildDate: $date\n"; $preamble .= "BuildHost: $host\n"; $preamble .= "Size: $size\n"; $preamble .= "PreambleVersion: 1\n"; print OF "cat <<\"..EOF..\" > $speci_fn\n"; print OF "$preamble"; print OF "..EOF..\n"; # Get the speci size, pad it to 4 bytes and insert in header print OF "SPECSIZE=`ls -l $speci_fn | awk '{print \$5}'`\n"; print OF "perl -e 'print \"\\0\" x ((4 - (\$ARGV[0] % 4)) % 4);' \$SPECSIZE >> $speci_fn\n"; print OF "perl -e 'print pack(\"NN\", \$ARGV[0], \$ARGV[0] + ((4 - (\$ARGV[0] % 4)) % 4) + $l_header);' \$SPECSIZE | dd conv=notrunc bs=1 count=8 seek=80 of=$header_fn\n"; # Package it all up $tmp = "$spec{'name'}-$spec{'version'}-$spec{'release'}$rpm{'srcext'}"; if (! &isquiet) { print OF "echo -n \"$tmp: \""; } if (&isverbose) { $cpio_opts = "-ovLH"; } else { $cpio_opts = "-oLH"; } print OF "\ncpio $cpio_ABCDEopts crc < $filelist 2> $cpio_stderr_fn | gzip -c9fn | cat $header_fn $speci_fn - > $rpm{'srcrpmdir'}/$tmp\n"; print OF "if [ \$? -ne 0 ]; then\n"; print OF " exit $?\n"; print OF "fi\n"; if (&isverbose) { print OF "cat $cpio_stderr_fn\n"; } elsif (! &isquiet) { # Normal verbosity print OF "grep '[0-9][0-9]* blocks' $cpio_stderr_fn\n"; } # This is where we check for errors since cpio is # bone headed and doesn't return a non zero exit code # if it can't find a file. Who wrote cpio anyway? print OF "if grep 'No such file' $cpio_stderr_fn ; then\n"; print OF " exit 1;\n"; print OF "fi\n"; print OF "\ncd ..\n"; print OF "rm -rf $tmpdir\n"; if (! $rpm{'keeptemps'}) { print OF "rm -f $header_fn\n"; print OF "rm -f $filelist\n"; print OF "rm -f $cpio_stderr_fn\n"; print OF "rm -f $speci_fn\n"; } print OF "\nexit 0\n"; close OF; chmod 0755, $script; &debug("EXITING: write_pack_src_script()"); } sub expand_filelist { local ( *spec, *pspec, $i, *files, *filesconf, *filesdoc ) = @_; local ( $name, $version, $release, $isconf, $isdoc, $j, $path ); @files = (); %filesdoc = (); %filesconf = (); $name = $spec{"name"}; $version = $spec{"version"}; $release = $spec{"release"}; # Now we generate an internal file list, expanding # directories, etc. This list is used to generate # the speci and filelist. # The file list will *not* have $rpm{'root'} # prepended to it! foreach $j (0 .. $spec{"subpackage:$i:fileC"} - 1) { $path = $spec{"subpackage:$i:file:$j:path"}; if ($rpm{'root'}) { $path = $rpm{'root'} . $path; } if ((-d $path) && (! $pspec{"subpackage:$i:file:$j:isdir"})) { &debug("execing: find $path -print"); open(FIND, "find $path -print |"); while () { chop; if ($rpm{'root'}) { s/^$rpm{'root'}//; } push(@files, $_); $filesdoc{$_} = &is_doc($_) || $pspec{"subpackage:$i:file:$j:isdoc"}; $filesconf{$_} = $pspec{"subpackage:$i:file:$j:isconf"}; } close FIND; &debug("done: find $path -print"); } else { foreach $_ (&rpmglob($path)) { if ($rpm{'root'}) { s/^$rpm{'root'}//; } push(@files, $_); $filesdoc{$_} = &is_doc($_) || $pspec{"subpackage:$i:file:$j:isdoc"}; $filesconf{$_} = $pspec{"subpackage:$i:file:$j:isconf"}; } } } # Now add any %doc macro files to the internal file list if ($pspec{"doc:$i"}) { # Add the doc directory first push(@files, "$rpm{'docdir'}/$name-$version-$release"); } foreach $j (split(/[ \n\t]+/, $pspec{"doc:$i"})) { $j =~ s/.*\/(.*)/$1/; next if (! $j); $path = "$rpm{'docdir'}/$name-$version-$release/$j"; if ($rpm{'root'}) { $path = $rpm{'root'} . $path; } &debug("doc: $path"); foreach $path (&rpmglob($path)) { if (-d $path) { &debug("execing: find $path -print"); open(FIND, "find $path -print |"); while () { chop; if ($rpm{'root'}) { s/^$rpm{'root'}//; } push(@files, $_); if (! (-d $_)) { $filesdoc{$_} = 1; } } close FIND; } else { if ($rpm{'root'}) { $path =~ s/^$rpm{'root'}//; } push(@files, $path); $filesdoc{$path} = 1; } } } # The list is fully expanded } sub time_check { local ( $path, $info ) = @_; return if ($rpm{'timecheck'} == 0); @foo = split(/[ \t\n]+/, $info); $time = time - $foo[1]; if ($rpm{'timecheck'} < $time) { &warning("TIMECHECK: $path is over $rpm{'timecheck'} seconds old"); } } sub list_check { local (*spec, *pspec) = @_; local ( $i, $j ); local ( $name, $subname, $version, $release ); local ( $failed, $info, $path, $lastpath ); local ( @files, %filesdoc, %filesconf, %md5sum_array ); $name = $spec{"name"}; $version = $spec{"version"}; $release = $spec{"release"}; $failed = 0; foreach $i (0 .. $spec{"subpackageC"} - 1) { $subname = $spec{"subpackage:$i:name"}; if ($subname) { &normal("List check: $name-$subname-$version-$release"); } else { &normal("List check: $name-$version-$release"); } &verbose("file size date md5sum mode uid gid isconf isdoc dev symlink"); # Expand the file list &expand_filelist(*spec, *pspec, $i, *files, *filesconf, *filesdoc); @files = sort @files; # md5sum_array() should follow $rpm{'root'} &md5sum_array(*files, *md5sum_array, 0); $lastpath = ""; foreach $path (@files) { if ($path eq $lastpath) { $failed |= 1; &normal("file listed twice: $path"); } $lastpath = $path; # stat_info_array() should follow $rpm{'root'} $info = &stat_info_array($path, $filesconf{$path}, $filesdoc{$path}, *md5sum_array); if ($info eq "missing") { $failed |= 1; &normal("file missing: $path"); } else { &time_check($path, $info); } &verbose("$path $info"); } } return $failed; } 1; # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. require "ctime.pl"; require "dbrecord.pl"; require "dbmisc.pl"; sub showpackages { local (*querymodes, @packages) = @_; local ($package); &debug("display packages in list @packages"); if (!@packages) { warning("no matches"); return 1; } foreach $package (@packages) { if ($package ne "--version--") { showpackage(*querymodes, $package); } } } sub showpackage { local (*querymodes, $package) = @_; local($psecstr, %spec); &debug("info on $package"); $specstr = $Packages{$package}; if (!defined $specstr) { #&error("Database corrupt - use --rebuild to reconstruct it"); &warning("Database corrupt - use --rebuild to reconstruct it"); return } if (!$querymodes{list} && !$querymodes{info}) { %spec = &strtorec($specstr, "subs"); } elsif (!$querymodes{list} && $querymodes{info}) { %spec = &strtorec($specstr, "subs"); } else { %spec = &strtorec($specstr, "all"); } showpackagespec(*querymodes, *spec); } sub showpackagespec { local (*querymodes, *spec) = @_; local ($i, $j, $prefix, $state, $label); local ($name, $version, $release); debug("showing ", " for $spec{name}"); if (!$querymodes{info} && !$querymodes{list}) { $name = $spec{name}; $version = $spec{version}; $release = $spec{release}; if ($spec{"subpackage:0:name"}) { &normal("$name-", $spec{"subpackage:0:name"}, "-$version-$release"); } else { &normal("$name-$version-$release"); } $prefix = " "; return 0; } elsif ($querymodes{info}) { debug("printing info"); &print_preamble("", 0, *spec); if (!$querymodes{list}) { return 0; } $prefix = " "; } else { $prefix = ""; } debug("looking at $name $querymodes{list} $querymodes{info}"); debug("fileC = ", $spec{"subpackage:0:fileC"}); if ($querymodes{list}) { for ($i = 0; $i < $spec{"subpackage:0:fileC"}; $i++) { if (($querymode{doc} && (&is_realdoc($spec{"subpackage:0:file:$i:info"}))) || ($querymode{config} && (&is_config($spec{"subpackage:0:file:$i:info"}))) || (!$querymode{doc} && !$querymode{config})) { $state = sprintf("%-9s", $spec{"subpackage:0:file:$i:state"} . " ") if $querymodes{state}; if (&isverbose) { $post = " " . $spec{"subpackage:0:file:$i:info"}; } &normal($prefix, $state, $spec{"subpackage:0:file:$i:path"}, $post); } } } } sub doquery { local($what, *querymode, @args) = @_; &opendatabase("ro"); &debug("Doing $what query of @args"); $what =~ /^all$/ && &showpackages(*querymode, sort(keys(%Packages))); $what =~ /^whence$/ && &showpackages(*querymode, whence(@args)); $what =~ /^Whence$/ && &showpackages(*querymode, whence(&stdinlist())); $what =~ /^package$/ && &showrpmpackages(*querymode, @args); $what =~ /^Package$/ && &showrpmpackages(*querymode, &stdinlist()); $what =~ /^$/ && &showpackages(*querymode, &getmultmatches(@args)); &closedatabase; } sub showrpmpackages { local (*querymode, @list) = @_; local ($file, %header, %spec, %pspec); require "build.pl"; require "spec.pl"; require "header.pl"; foreach $file (@list) { &debug("reading spec file from $file"); &readheader("", $file, *header, *spec, *pspec); showpackagespec(*querymode, *spec); } } sub print_preamble { local ( $pre, $x, *spec ) = @_; local ( $res, $instdate, $distribution, $vendor, $misc ); local ( $builddate, $buildhost, $description ); local ( $i, $foo, $arg, $indesc, $descpre, $line, $subname, $group ); if (defined $spec{"subpackage:$x:insttime"}) { $instdate = &ctime($spec{"subpackage:$x:insttime"}); chop($instdate); } else { $instdate = ""; } $indesc = 0; $descpre = "Description : "; $group = ""; foreach $line (split('\n', $spec{"subpackage:$x:preamble"})) { $_ = $line; &debug("preamble -> ", $_); ($foo, $arg) = split; /^source([0-9]*):/i && (next); /^patch([0-9]*):/i && (next); /^size:/i && ($size = $arg, next); /^group:/i && ($group = $arg, next); /^buildhost:/i && ($buildhost = $arg, next); /^builddate:/i && ($builddate = &ctime($arg), chop($builddate), next); $arg = $line; $arg =~ s/^\S+\s+//; /^distribution:/i && ($distribution = $arg, next); /^vendor:/i && ($vendor = $arg, next); /^description:/i && do { $line =~ s/^\S+\s+//; $indesc = 1; }; if ($indesc) { if ($line =~ /\\$/) { # Not end of description $line =~ s/\\$//; } else { $indesc = 0; } $description .= $pre . $descpre . $line . "\n"; $descpre = " "; next; } $misc .= $pre . $line . "\n"; } $name = $spec{"name"}; if ($spec{"subpackage:$x:name"}) { $name .= "-" . $spec{"subpackage:$x:name"}; } printf("%sName : %-27s Distribution: %s\n", $pre, $name, $distribution); printf("%sVersion : %-27s Vendor: %s\n", $pre, $spec{"version"}, $vendor); printf("%sRelease : %-27s Build date: %s\n", $pre, $spec{"release"}, $builddate); printf("%sInstall date: %-27s Build host: %s\n", $pre, $instdate, $buildhost); printf("%sGroup : %s\n", $pre, $group); printf("%sSize : %-27s\n", $pre, $size); # print $misc; printf("%s", $description); } 1; # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -*-perl-*- # this was modified from the perl library Getopts # pass in the ARGV array # return "leftover" arguments # continue processing through a non '-*' argument # return all unprocessed arguments # don't fail on unrecognized "arguments" $rpm_getopts_errs = 0; sub rpm_getopts { local($argumentative, @ARGV) = @_; local(@args,$_,$first,$rest); local(@leftovers); local($[) = 0; $rpm_getopts_errs = 0; @leftovers = (); @args = split( / */, $argumentative ); while(@ARGV) { if (! (($_ = $ARGV[0]) =~ /^-(.)(.*)/)) { push(@leftovers, $_); shift(@ARGV); next; } ($first,$rest) = ($1,$2); $pos = index($argumentative,$first); if($pos >= $[) { if($args[$pos+1] eq ':') { shift(@ARGV); if($rest eq '') { ++$rpm_getopts_errs unless @ARGV; $rest = shift(@ARGV); } eval "\$lopt_$first = \$rest;"; } else { eval "\$lopt_$first += 1"; if($rest eq '') { shift(@ARGV); } else { $ARGV[0] = "-$rest"; } } } else { push(@leftovers, $_); shift(@ARGV); } } return @leftovers; } 1; # RPM Package Management System -*-perl-*- # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # verbose debugging #$vd = 1; # parse_spec_file( filename, *spec, *pspec, *spec_source, *spec_patch ) # also sets global $spec_buildsubdir # %spec format: # $spec{"name"} # $spec{"version"} # $spec{"release"} # $spec{"subpackageC"} # $spec{"subpackage:#:name"} # $spec{"subpackage:#:preamble"} # $spec{"subpackage:#:group"} # $spec{"subpackage:#:icon"} # $spec{"subpackage:#:fileC"} # $spec{"subpackage:#:file:#:path"} # $spec{"subpackage:#:file:#:state"} -- not set or used by parse_spec_file() # $spec{"subpackage:#:file:#:info"} # These will not be part of the database # They are used for building and installing # $pspec{"prep"} # $pspec{"build"} # $pspec{"install"} # $pspec{"clean"} # $pspec{"doc:#"} -- A string containing %doc lines (minus %doc) # $pspec{"pre:#"} # $pspec{"post:#"} # $pspec{"preun:#"} # $pspec{"postun:#"} # $pspec{"subpackage:#:file:#:isconf"} # $pspec{"subpackage:#:file:#:isdoc"} # $pspec{"subpackage:#:file:#:isdir"} sub parse_spec_file { local ( $specfile, *spec, *pspec, *spec_source, *spec_patch, $check_copyright ) = @_; local ( @specarray ); &debug("ENTERING: parse_spec_file()"); # open (SF, "/lib/cpp $specfile|"); open (SF, "<$specfile"); while () { chop; $specarray[@specarray] = $_; } close SF; return &parse_spec_array(*specarray, *spec, *pspec, *spec_source, *spec_patch, $check_copyright); } sub parse_spec_array { local ( *specarray, *spec, *pspec, *spec_source, *spec_patch, $check_copyright ) = @_; local ( $foo, $num, $arg, $stage, $line, $fn ); local ( $cs ); # current subname local ( $csn ); # current subname number local ( $cfn ); # current file number local ( $sp ) = "subpackage"; # shorthand local ( $copyright ) = 0; # if still zero at end, fail local ( $n, $v, $r ); # name, version, release local ( %subnamemap ); # subname to number map local ( $isconf, $isdoc, $isdir ); local ( @foo, $docpath, @descriptions ); local ( $vendor, $distribution, $groups, $icons ); local ( @excludelist, $arch, $inif); &debug("ENTERING: parse_spec_array()"); # Reset everything undef %spec_source; undef %spec_patch; undef %spec; undef %pspec; undef $spec_buildsubdir; $csn = $cfn = 0; $spec{"subpackageC"} = 1; $spec{"subpackage:0:fileC"} = 0; $stage = "package"; $line = -1; $arch = &getarchname(); $inif = 0; LOOP: foreach $_ (@specarray) { $line++; # Check for conditional inclusion, which can go anywhere /^%ifarch/i && do { if ($stage eq "preamble") { &error("%ifarch may not be used in the preamble"); } ($inif, $arg) = split; @foo = split(" ", $arg); $inif = 1; foreach $n (@foo) { if ($n eq $arch) { $inif = 0; } } next LOOP; }; /^%endif/i && (($inif = 0), 1) && next LOOP; $inif && next LOOP; # Note that the order here is NOT important! /^%package/i && ($stage = "package"); /^%files/i && ($stage = "files"); /^%speci/i && ($stage = "speci"); /^%pre$/i && ($stage = "pre"); /^%post$/i && ($stage = "post"); /^%pre[^u]/i && ($stage = "pre"); /^%post[^u]/i && ($stage = "post"); /^%preun/i && ($stage = "preun"); /^%postun/i && ($stage = "postun"); # The following don't take arguments so we can skip to the next line /^%prep/i && ($stage = "prep" , next LOOP); /^%build/i && ($stage = "build", next LOOP); /^%install/i && ($stage = "install", next LOOP); /^%clean/i && ($stage = "clean", next LOOP); /^%postbuild/i && ($stage = "clean", next LOOP); # Blank lines ( $arg ) = split; next LOOP if (! $arg); # Now depending on stage deal with line if ($stage eq "package") { $vd && &debug("parse: %package $_"); # First extract the subname, if any ($foo, $arg) = split; /^%package/i && do { if ($line) { # Not the first line, so incr package $spec{"subpackageC"}++; } $csn = $spec{"subpackageC"} - 1; $spec{"$sp:$csn:name"} = $cs = $arg; $subnamemap{$cs} = $csn; $spec{"$sp:$csn:fileC"} = 0; next LOOP; }; if (! $line) { # First line, not a %package line # Set up the implied package $spec{"$sp:$csn:name"} = $cs = ""; $subnamemap{$cs} = $csn; } # Check for key fields if (($csn != 0) && (/^name:/i || /^version:/i || /^release:/i || /^source:/i || /^patch:/i || /^vendor:/i || /^distribution:/i)) { &error("spec file: illegal field in %package section:\n$_"); } /^name:/i && do { ($arg =~ /[: \/]/) && &error("Illegal char in name: $arg"); $spec{"name"} = $n = $arg; next LOOP; }; /^version:/i && do { ($arg =~ /[:\- \/]/) && &error("Illegal char in version: $arg"); $spec{"version"} = $v = $arg; next LOOP; }; /^release:/i && do { ($arg =~ /[:\- \/]/) && &error("Illegal char in release: $arg"); $spec{"release"} = $r = $arg; next LOOP; }; # Handle root option # Root: does not go in the preamble because we don't want # it to end up in the binary package. /^root:/i && do { $arg =~ s/\$RPM_BUILD_DIR/$rpm{builddir}/; ($arg =~ /^[^\/]/) && &error("Root spec must start with /: $arg"); $rpm{"root"} = $arg; next LOOP; }; # handle exclude option # if we can't build the package for this architecture, bail out /exclude:/i && do { @excludelist = split(" ", $arg); foreach $n (@excludelist) { if ($n eq $arch) { &warning("this package can't be built on $arch"); return 1; } } next LOOP; }; # Anything else gets put in the preamble $spec{"$sp:$csn:preamble"} .= "$_\n"; /^copyright:/i && ($copyright = $arg); /^group:/i && do { $spec{"$sp:$csn:group"} = $arg; $groups[$csn] = 1; next LOOP; }; /^icon:/i && do { $arg =~ s/.*\/(.*)/$1/; $spec{"$sp:$csn:icon"} = $arg; $icons[$csn] = 1; next LOOP; }; # All we really care about are source and patch lines /^source([0-9]*):/i && do { $num = $1; $num = 0 if ($1 eq ""); $arg =~ s/.*\/(.*)/$1/; $spec_source{$num} = $arg; next LOOP; }; /^patch([0-9]*):/i && do { $num = $1; $num = 0 if ($1 eq ""); $arg =~ s/.*\/(.*)/$1/; $spec_patch{$num} = $arg; next LOOP; }; # Take note that we found description, vendor, distribution /^description:/i && do { $descriptions[$csn] = 1; next LOOP; }; /^vendor:/i && do { $vendor = 1; next LOOP; }; /^distribution:/i && do { $distribution = 1; next LOOP; }; } elsif ($stage eq "prep") { $vd && &debug("parse: %prep"); # Only %setup and %patch macros if (! $spec_buildsubdir) { if (! $n) {&error("no Name field.")}; if (! $v) {&error("no Version field.")}; $spec_buildsubdir = "$n-$v"; } /^%setup/i && ($pspec{"prep"} .= &setup_macro(*spec_source, $_), next LOOP); /^%patch/i && ($pspec{"prep"} .= &patch_macro(*spec_patch, $_), next LOOP); # Otherwise just pass it through $pspec{"prep"} .= "$_\n"; } elsif ($stage eq "build") { $vd && &debug("parse: %build"); # The build section has no macros $pspec{"build"} .= "$_\n"; } elsif ($stage eq "install") { $vd && &debug("parse: %install"); # The build section has no macros. # But as we scan the %files sections we will # add stuff to $pspec{"install"} and $pspec{"doc:#"} # for %doc macros. $pspec{"install"} .= "$_\n"; /^%doc/i && (&warning("%doc macro in %install section."), return 1); } elsif ($stage eq "clean") { $vd && &debug("parse: %clean"); # The clean section has no macros $pspec{"clean"} .= "$_\n"; } elsif ($stage eq "pre") { $vd && &debug("parse: %pre"); # First extract the subname, if any /^%pre/i && do { ($foo, $arg) = split; $cs = $arg; $csn = $subnamemap{$cs}; next LOOP; }; # Stuff the line away $pspec{"pre:$csn"} .= "$_\n"; } elsif ($stage eq "preun") { $vd && &debug("parse: %preun"); # First extract the subname, if any /^%preun/i && do { ($foo, $arg) = split; $cs = $arg; $csn = $subnamemap{$cs}; next LOOP; }; # Stuff the line away $pspec{"preun:$csn"} .= "$_\n"; } elsif ($stage eq "post") { $vd && &debug("parse: %post"); # First extract the subname, if any /^%post/i && do { ($foo, $arg) = split; $cs = $arg; $csn = $subnamemap{$cs}; next LOOP; }; # Stuff the line away $pspec{"post:$csn"} .= "$_\n"; } elsif ($stage eq "postun") { $vd && &debug("parse: %postun"); # First extract the subname, if any /^%postun/i && do { ($foo, $arg) = split; $cs = $arg; $csn = $subnamemap{$cs}; next LOOP; }; # Stuff the line away $pspec{"postun:$csn"} .= "$_\n"; } elsif ($stage eq "files") { $vd && &debug("parse: %files"); if (! $line) { &error("%files section must not come before preamble"); } # First extract the subname, if any /^%files/i && do { ($foo, $arg) = split; $cs = $arg; $csn = $subnamemap{$cs}; if (! defined($csn)) { &error("bad %file section subname: $cs"); } next LOOP; }; # chop; # Handle blank lines, macros, and wildcards # Blank lines ( $arg ) = split; next LOOP if (! $arg); # %docdir macro /^%docdir/i && do { ($foo, $arg) = split; $arg =~ s/\/*$//; $rpm{'DOCPATH'} .= ":$arg"; next; }; # %config macro $isconf = 0; /^%config/i && do { $isconf = 1; ($foo, $arg) = split; $_ = $arg; }; # %dir macro $isdir = 0; /^%dir/i && do { $isdir = 1; ($foo, $arg) = split; $_ = $arg; }; # Still need to do %doc $isdoc = 0; /^%doc/i && do { ($foo, $arg) = split; if ($arg =~/^\//) { # Marked as a doc file $isdoc = 1; $_ = $arg; } else { # This is a pm-style %doc macro $pspec{"install"} .= "# %doc macro: $_\n"; # Add files to pspec for use in pack script @foo = split; shift(@foo); $pspec{"doc:$csn"} .= " " . join(' ', @foo); # Now generate the proper install script $docpath = "$rpm{'root'}/$rpm{'docdir'}/$n-$v-$r"; $pspec{"install"} .= "mkdir -p $docpath\n"; $pspec{"install"} .= "cd $rpm{'builddir'}/$spec_buildsubdir\n"; foreach $fn (@foo) { if (($fn =~ /\*/) || ($fn =~ /\?/)) { &error("no globbing allowed in %doc macro: $fn"); } $pspec{"install"} .= "cp -rp $fn $docpath\n"; } next LOOP; } }; # This used to be done here, but is now moved to pack.pl # $isdoc |= &is_doc($_); /^\/tmp/ && &error("Illegal file in %files: $_"); /^[^\/]/ && &error("Illegal file in %files: $_"); # Stuff the file away &add_file($_, $isconf, $isdoc, $isdir, $csn, *spec, *pspec); # The state and info attributes, and globbing, are # done after the build and installation are finished. } elsif ($stage eq "speci") { $vd && &debug("parse: %speci"); # First extract the subname, if any /^%speci/i && do { ($foo, $arg) = split; $cs = $arg; $csn = $subnamemap{$cs}; next LOOP; }; # While a %speci section sould have no blank lines, # we should ignore them just to be sure. # print "line:", $_, "X\n"; # printf "len = %d\n", length($_); ( $arg ) = split(/[ \t\n\000]+/, $_); next LOOP if (! $arg); # print "arg = X", $arg, "X\n"; # printf "arglen = %d\n", length($arg); # printf "argord = %d\n", ord($arg)[\]; # A %speci section has no macros @foo = split; $fn = $spec{"$sp:$csn:fileC"}++; $spec{"$sp:$csn:file:$fn:path"} = shift(@foo); $spec{"$sp:$csn:file:$fn:info"} = join(" ", @foo); # print "fileC = $fn = X", $spec{"$sp:$csn:file:$fn:path"}, "X\n"; } } if ($check_copyright && ! $copyright) { &error("no Copyright field."); } if (! $n) {&error("no Name field.")}; if (! $v) {&error("no Version field.")}; if (! $r) {&error("no Release field.")}; if ($rpm{"require_vendor"} && (! $vendor)) { if (! $rpm{"vendor"}) { &error("no Vendor field."); } else { foreach $i (0 .. $spec{"subpackageC"} - 1) { $spec{"subpackage:$i:preamble"} .= "Vendor: $rpm{'vendor'}\n"; } } } if ($rpm{"require_distribution"} && (! $distribution)) { if (! $rpm{"distribution"}) { &error("no Distribution field."); } else { foreach $i (0 .. $spec{"subpackageC"} - 1) { $spec{"subpackage:$i:preamble"} .= "Distribution: $rpm{'distribution'}\n"; } } } foreach $i (0 .. $spec{"subpackageC"} - 1) { if (! $descriptions[$i]) { $foo = "missing Description field: $spec{'name'}-" . $spec{"subpackage:$i:name"}; &error($foo); } } if ($rpm{"require_group"}) { foreach $i (0 .. $spec{"subpackageC"} - 1) { if (! $groups[$i]) { $foo = "missing Group field: $spec{'name'}-" . $spec{"subpackage:$i:name"}; &error($foo); } } } if ($rpm{"require_icon"}) { foreach $i (0 .. $spec{"subpackageC"} - 1) { if (! $icons[$i]) { $foo = "missing Icon field: $spec{'name'}-" . $spec{"subpackage:$i:name"}; &error($foo); } } } &debug("EXITING: parse_spec_array()"); return 0; } sub add_file { local ($file, $isconf, $isdoc, $isdir, $csn, *spec, *pspec) = @_; local ( $fn ); local ( $sp ) = "subpackage"; ( $file ) = split(/[ \t\n]+/, $file); $fn = $spec{"$sp:$csn:fileC"}++; $spec{"$sp:$csn:file:$fn:path"} = $file; $pspec{"$sp:$csn:file:$fn:isconf"} = $isconf; $pspec{"$sp:$csn:file:$fn:isdoc"} = $isdoc; $pspec{"$sp:$csn:file:$fn:isdir"} = $isdir; } 1; # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. require "dbrecord.pl"; require "dbmisc.pl"; require "misc.pl"; require "run.pl"; # this doesn't do anything about removing direcories, or recognizing # config files sub douninstall { local (%spec, $test) = @_; local ($package, %paths, %conflicts, $fileinfo, $ostr, %ospec); local ($i, $file, $list, $label, $newlist, $olabel, $pathindex, $md5); local ($dbmd5, @infoline, %md5list); # get a list of files not to delete %shared = &findshared(1, 0, *md5list, *spec); if ($spec{"subpackage:0:name"}) { $label = "$spec{name}-" . $spec{"subpackage:0:name"} . ":${version}:$spec{release}"; $name = "$spec{name}-" . $spec{"subpackage:0:name"}; } else { $label = "$spec{name}:${version}:$spec{release}"; $name = $spec{name}; } debug("label is $label"); debug("rearranging shared list"); # this list is arranged by *package* get it be by files instead foreach $package (keys(%shared)) { debug("$package contains shared files"); $ostr = $Packages{$package}; if (!defined $ostr) { &error("RPM database is corrupt. Use --rebuild to ", "reconstruct it"); } %ospec = strtorec($ostr, "all"); foreach $fileinfo (split(" ", $shared{$package})) { ($filenum, $ofilenum) = ($fileinfo =~ /(.*):(.*)/); $paths{$ospec{"subpackage:0:file:$ofilenum:path"}} = 1; debug($ospec{"subpackage:0:file:$ofilenum:path"}, " is shared with ", $ospec{name}); } } $prescript = $PostIndex{"$label:pre"}; $postscript = $PostIndex{"$label:post"}; &debug("running preuninstall script"); if (! $test && $prescript) { if (&run_script($prescript)) { return 1 } } for ($i = 0; $i < $spec{"subpackage:0:fileC"}; $i++) { $file = $spec{"subpackage:0:file:$i:path"}; &debug("looking at $file"); if (($spec{"subpackage:0:file:$i:state"} eq "normal") && !$paths{$file}) { if (&is_directory($spec{"subpackage:0:file:$i:info"})) { debug("removing directory $file"); if (!&safe_rmdir($file, $test)) { warning("directory $file could not be removed"); } } elsif (&is_config($spec{"subpackage:0:file:$i:info"})) { debug("found config file"); $md5 = &md5($file); @infofile = split(" ",$spec{"subpackage:0:file:$i:info"}); $dbmd5 = $infofile[2]; if (!length($md5)) { # it's already been removed, we can't do much now debug("config file $file is missing"); } elsif ($md5 eq $dbmd5) { debug("removing $file"); if (&safe_unlink($file, $test) != 1) { warning("$file could not be removed"); } } else { normal("moving $file to $file.rpmsave"); if (!&safe_rename($file, "$file.rpmsave", $test)) { warning("could not rename $file to $file.rpmsave"); } } } else { debug("removing $file"); if (safe_unlink($file, $test) != 1) { warning("$file could not be removed"); } } } else { debug("keeping $file"); } $list = $PathIndex{$file}; if (!(defined $list)) { debug("can't find $file"); warning("RHS database may be corrupt"); } else { debug("old list: $list label: $label"); $newlist = ""; foreach $fileinfo (split(" ", $list)) { if ($fileinfo ne "$label:$i") { if ($newlist) { $newlist = "$newlist $fileinfo"; } else { $newlist = $fileinfo; } } } debug("new list: $newlist"); if (!$newlist && !$test) { debug("erasing PathIndex entry"); delete($PathIndex{$file}); } elsif (!$test) { $PathIndex{$file} = $newlist; } } } debug("removing spec and icon index"); if (!$test) { delete($Packages{$label}); delete($IconIndex{$label}); delete($PostIndex{"$label:pre"}); delete($PostIndex{"$label:post"}); } &debug("removing from name index"); $list = $NameIndex{$name}; &debug("\$NameIndex{$name} is $list label is $label"); if (!defined $list) { &warning("RPM database may be corrupt"); } else { $newlist = ""; foreach $fileinfo (split(" ", $list)) { &debug("uninstalling $label -- found $fileinfo"); if ($fileinfo ne $label) { if ($newlist) { $newlist = "$newlist $fileinfo"; } else { $newlist = $fileinfo; } } } if (!$newlist && !$test) { debug("erasing \$NameIndex{$name} entry"); delete($NameIndex{$name}); } elsif (!$test) { debug("setting \$NameIndex{$name} to $newlist"); $NameIndex{$name} = $newlist; } } &debug("running postuninstall script"); if (! $test && $postscript) { if (&run_script($postscript)) { return 1 } } } sub uninstallpackage { local($force, $test, $nosub, $package) = @_; local($str, %rec, $subpackages, $i, $name, $version, $release); debug("Uninstalling $package"); ($name, $version, $release, $rest) = $package =~ /([^:]*):([^:]*):([^:]*)(.*)/; $label = "$name:$version:$release"; $str = $Packages{$label}; if (!defined $str) { &error("RPM database corrupt -- use --rebuild to rebuilt it"); } %rec = &strtorec($str, "all"); &douninstall(%rec, $test); } sub uninstallpackages { local($force, $test, $nosub, @list) = @_; local($package, @pacakges, $packagespec); &opendatabase("rw"); foreach $packagespec (@list) { @packages = &getmatches($packagespec); if (@packages == 0) { warning("no packages matching $packagespec found"); next; } elsif (@packages > 1 && !$force) { warning("$package specifies multiple packages (@packages)"); warning("to remove them, use the --force option"); next; } foreach $package (@packages) { &uninstallpackage($force, $test, $nosub, $package); } } &closedatabase; } sub safe_unlink { local ($fn, $test) = @_; if (!$test) { return unlink($fn); } return 1; } sub safe_rmdir { local ($fn, $test) = @_; if (!$test) { return rmdir($fn); } return 1; } sub safe_rename { local ($fn, $targ, $test) = @_; if (!$test) { return rename($fn, $targ); } return 1; } 1; # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -*-perl-*- require "dbrecord.pl"; require "dbmisc.pl"; require "misc.pl"; sub verifyspec { local (*spec) = @_; local (@filelist, @md5sum_array, $diskinfo, $info, $file); local ( @di, @i, $x, $a, $b, $name, $isbad ); local ( @text ) = ("size", "mtime", "MD5 checksum", "file mode and/or permissions", "user id", "group id", "isconf", "isdoc", "device number", "symbolic link"); $name = $spec{name}; if ($spec{"subpackage:0:name"}) { $name .= "-" . $spec{"subpackage:0:name"}; } $name .= "-" . $spec{version} . "-" . $spec{release}; &verbose("verifying $name..."); foreach (0 .. ($spec{"subpackage:0:fileC"} - 1)) { $filelist[$_] = $spec{"subpackage:0:file:$_:path"}; &debug("verifysub: $_ == $filelist[$_]"); } &md5sum_array(*filelist, *md5sum_array, 0); foreach (0 .. ($spec{"subpackage:0:fileC"} - 1)) { $isbad = 0; $file = $filelist[$_]; $diskinfo = &stat_info_array($file, 0, 0, *md5sum_array); if ($diskinfo eq "missing") { print "$file ($name) is missing\n"; next; } $info = $spec{"subpackage:0:file:$_:info"}; @di = split(/[ \t\n]+/, $diskinfo); @i = split(/[ \t\n]+/, $info); foreach $x (0,2..5,8,9) { next if (&is_directory($info) && ($x == 0)); $a = $di[$x]; $b = $i[$x]; if ($a ne $b) { if (&isverbose) { print "$file ($name) $text[$x] has changed\n"; print "$file ($name) $a != $b\n"; } else { $isbad = 1; } } } if ($isbad) { print "$file ($name) is bad\n"; } } } sub verifydbpackages { local (@packages) = @_; local ($package, $str, %spec); &debug("verify packages in list @packages\n"); if (!@packages) { warning("no matches"); return 1; } foreach $package (@packages) { if ($package eq "--version--") { next } $str = $Packages{$package}; if (!defined $str) { &error("RPM database corrupt -- use --rebuild to rebuilt it"); } %spec = &strtorec($str, "all"); &verifyspec($spec); } } sub verifyrpmpackages { local (@list) = @_; local ($file, %header, %spec, %pspec); require "build.pl"; require "spec.pl"; require "header.pl"; foreach $file (@list) { &debug("reading spec file from $file"); &readheader("", $file, *header, *spec, *pspec); &verifyspec(*spec); } } sub doverify { local($what, @args) = @_; &opendatabase("ro"); &debug("Doing $what verify (@args)"); $what =~ /^all$/ && &verifydbpackages(sort(keys(%Packages))); $what =~ /^whence$/ && &verifydbpackages(whence(@args)); $what =~ /^Whence$/ && &verifydbpackages(whence(&stdinlist())); $what =~ /^package$/ && &verifyrpmpackages(@args); $what =~ /^Package$/ && &verifyrpmpackages(&stdinlist()); $what =~ /^$/ && &verifydbpackages(&getmultmatches(@args)); &closedatabase(); } 1; #-*-perl-*- # This is a wrapper to the chat2.pl routines that make life easier # to do ftp type work. # Mostly by Lee McLoughlin # based on original version by Alan R. Martello # And by A.Macpherson@bnr.co.uk for multi-homed hosts # # Basic usage: # $ftp_port = 21; # $retry_call = 1; # $attempts = 2; # if( &ftp'open( $site, $ftp_port, $retry_call, $attempts ) != 1 ){ # die "failed to open ftp connection"; # } # if( ! &ftp'login( $user, $pass ) ){ # die "failed to login"; # } # &ftp'type( $text_mode ? 'A' : 'I' ); # if( ! &ftp'get( $remote_filename, $local_filename, 0 ) ){ # die "failed to get file; # } # &ftp'quit(); # # # $Id: ftp.pl,v 2.4 1994/01/26 14:59:07 lmjm Exp lmjm $ # $Log: ftp.pl,v $ # Revision 2.4 1994/01/26 14:59:07 lmjm # Added DG result code. # # Revision 2.3 1994/01/18 21:58:18 lmjm # Reduce calls to sigset. # Reset to old signal after use. # # Revision 2.2 1993/12/14 11:09:06 lmjm # Use installed socket.ph. # Allow for more returns. # # Revision 2.1 1993/06/28 15:02:00 lmjm # Full 2.1 release # # eval "require 'socket.ph'" || eval "require 'sys/socket.ph'" || die "socket.ph missing: $!\n"; require 'chat2.pl'; $ftp_error = ""; $rpm_ftp_login = "anonymous"; $rpm_ftp_password = "root@"; sub ftp_file { local ( $fn, $local_filename ) = @_; local ( $site, $dir, $remote_filename ); $fn =~ m|ftp://([^/]*)(.*)/([^/]*)|; $site = $1; $dir = $2; $remote_filename = $3; $ftp_error = ""; if (&ftp'open($site, 21, 1, 4) != 1 ) { $ftp_error = "failed to open ftp connection"; &ftp'quit(); return 0; } if (! &ftp'login($rpm_ftp_login, $rpm_ftp_password)) { $ftp_error = "failed to login"; &ftp'quit(); return 0; } if ($dir) { if (! &ftp'cwd($dir)) { $ftp_error = "failed to change directory"; &ftp'quit(); return 0; } } &ftp'type('I'); if (! &ftp'get($remote_filename, $local_filename, 0)) { $ftp_error = "failed to get file"; &ftp'quit(); return 0; } &ftp'quit(); return 1; } sub ftp_dir { local ( $fn ) = @_; local ( $site, $dir, @result, $fd, $x, @x ); $fn =~ m|ftp://([^/]*)(.*)|; $site = $1; $dir = $2; $ftp_error = ""; if (&ftp'open($site, 21, 1, 4) != 1 ) { $ftp_error = "failed to open ftp connection"; return (); } if (! &ftp'login($rpm_ftp_login, $rpm_ftp_password)) { $ftp_error = "failed to login"; return (); } if ($dir) { if (! &ftp'cwd($dir)) { $ftp_error = "failed to change directory"; return (); } } &ftp'type('I'); @result = (); &ftp'dir_open("-C"); $fd = "ftp'NS"; while (<$fd>) { chop; @x = split; foreach (@x) { push(@result, $_); } } &ftp'dir_close(); &ftp'quit(); return @result; } package ftp; $retry_pause = 60; # Pause before retrying a login. if( defined( &main'PF_INET ) ){ $pf_inet = &main'PF_INET; $sock_stream = &main'SOCK_STREAM; local($name, $aliases, $proto) = getprotobyname( 'tcp' ); $tcp_proto = $proto; } else { # XXX hardwired $PF_INET, $SOCK_STREAM, 'tcp' # but who the heck would change these anyway? (:-) $pf_inet = 2; $sock_stream = 1; $tcp_proto = 6; } # If the remote ftp daemon doesn't respond within this time presume its dead # or something. $timeout = 120; # Timeout a read if I don't get data back within this many seconds $timeout_read = 3 * $timeout; # Timeout an open $timeout_open = $timeout; $ftp'version = '$Revision: 2.4 $'; # This is a "global" it contains the last response from the remote ftp server # for use in error messages $ftp'response = ""; # Also ftp'NS is the socket containing the data coming in from the remote ls # command. # The size of block to be read or written when talking to the remote # ftp server $ftp'ftpbufsize = 4096; # How often to print a hash out, when debugging $ftp'hashevery = 1024; # Output a newline after this many hashes to prevent outputing very long lines $ftp'hashnl = 70; # Is there a connection open? $ftp'service_open = 0; # If a proxy connection then who am I really talking to? $real_site = ""; # Where error/log reports are sent to $ftp'showfd = 'STDERR'; # Name of a function to call on a pathname to map it into a remote # pathname. $ftp'mapunixout = ''; $ftp'manunixin = ''; # This is just a tracing aid. $ftp_show = 0; sub ftp'debug { $ftp_show = @_[0]; if( $ftp_show > 9 ){ $chat'debug = 1; } } sub ftp'set_timeout { local( $to ) = @_; return if $to == $timeout; $timeout = $to; $timeout_open = $timeout; $timeout_read = 3 * $timeout; if( $ftp_show ){ print $ftp'showfd "ftp timeout set to $timeout\n"; } } sub ftp'open_alarm { die "timeout: open"; } sub ftp'timed_open { local( $site, $ftp_port, $retry_call, $attempts ) = @_; local( $connect_site, $connect_port ); local( $res ); alarm( $timeout_open ); while( $attempts-- ){ if( $ftp_show ){ print $ftp'showfd "proxy connecting via $proxy_gateway [$proxy_ftp_port]\n" if $proxy; print $ftp'showfd "Connecting to $site"; if( $ftp_port != 21 ){ print $ftp'showfd " [port $ftp_port]"; } print $ftp'showfd "\n"; } if( $proxy ) { if( ! $proxy_gateway ) { # if not otherwise set $proxy_gateway = "internet-gateway"; } if( $debug ) { print $ftp'showfd "using proxy services of $proxy_gateway, "; print $ftp'showfd "at $proxy_ftp_port\n"; } $connect_site = $proxy_gateway; $connect_port = $proxy_ftp_port; $real_site = $site; } else { $connect_site = $site; $connect_port = $ftp_port; } if( ! &chat'open_port( $connect_site, $connect_port ) ){ if( $retry_call ){ print $ftp'showfd "Failed to connect\n" if $ftp_show; next; } else { print $ftp'showfd "proxy connection failed " if $proxy; print $ftp'showfd "Cannot open ftp to $connect_site\n" if $ftp_show; return 0; } } $res = &ftp'expect( $timeout, 120, 0, # service unavailable to $site 220, 1, # ready for login to $site 421, 0); #service unavailable to $site closing connection if( ! $res ){ &chat'close(); next; } return 1; } continue { print $ftp'showfd "Pausing between retries\n"; sleep( $retry_pause ); } return 0; } sub main'ftp__sighandler { local( $sig ) = @_; local( $msg ) = "Caught a SIG$sig flagging connection down"; $ftp'service_open = 0; if( $ftp_logger ){ eval "&$ftp_logger( \$msg )"; } } sub ftp'set_signals { $ftp_logger = @_; $SIG{ 'PIPE' } = "ftp__sighandler"; } # Set the mapunixout and mapunixin functions sub ftp'set_namemap { ($ftp'mapunixout, $ftp'mapunixin) = @_; if( $debug ) { print $ftp'showfd "mapunixout = $ftp'mapunixout, $mapunixin = $ftp'mapunixin\n"; } } sub ftp'open { local( $site, $ftp_port, $retry_call, $attempts ) = @_; local( $old_sig ) = $SIG{ 'ALRM' }; $SIG{ 'ALRM' } = "ftp\'open_alarm"; local( $ret ) = eval "&timed_open( '$site', $ftp_port, $retry_call, $attempts )"; alarm( 0 ); $SIG{ 'ALRM' } = $old_sig; if( $@ =~ /^timeout/ ){ return -1; } if( $ret ){ $ftp'service_open = 1; } return $ret; } sub ftp'login { local( $remote_user, $remote_password ) = @_; local( $ret ); if( ! $ftp'service_open ){ return 0; } if( $proxy ){ &ftp'send( "USER $remote_user@$site" ); } else { &ftp'send( "USER $remote_user" ); } $ret = &ftp'expect( $timeout, 230, 1, # $remote_user logged in 331, 2, # send password for $remote_user 500, 0, # syntax error 501, 0, # syntax error 530, 0, # not logged in 332, 0, # account for login not supported 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } if( $ret == 1 ){ # Logged in no password needed return 1; } elsif( $ret == 2 ){ # A password is needed &ftp'send( "PASS $remote_password" ); $ret = &ftp'expect( $timeout, 230, 1, # $remote_user logged in 202, 0, # command not implemented 332, 0, # account for login not supported 530, 0, # not logged in 500, 0, # syntax error 501, 0, # syntax error 503, 0, # bad sequence of commands 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } if( $ret == 1 ){ # Logged in return 1; } } # If I got here I failed to login return 0; } sub service_closed { $ftp'service_open = 0; &chat'close(); } sub ftp'close { &ftp'quit(); $ftp'service_open = 0; &chat'close(); } # Change directory # return 1 if successful # 0 on a failure sub ftp'cwd { local( $dir ) = @_; local( $ret ); if( ! $ftp'service_open ){ return 0; } if( $ftp'mapunixout ){ $dir = eval "&$ftp'mapunixout( \$dir, 'd' )"; } &ftp'send( "CWD $dir" ); $ret = &ftp'expect( $timeout, 200, 1, # working directory = $dir 250, 1, # working directory = $dir 257, 1, # working directory = $dir 500, 0, # syntax error 501, 0, # syntax error 502, 0, # command not implemented 530, 0, # not logged in 550, 0, # cannot change directory 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } return $ret; } # Get a full directory listing: # &ftp'dir( remote LIST options ) # Start a list going with the given options. # Presuming that the remote deamon uses the ls command to generate the # data to send back then then you can send it some extra options (eg: -lRa) # return 1 if sucessful and 0 on a failure sub ftp'dir_open { local( $options ) = @_; local( $ret ); if( ! $ftp'service_open ){ return 0; } if( ! &ftp'open_data_socket() ){ return 0; } if( $options ){ &ftp'send( "LIST $options" ); } else { &ftp'send( "LIST" ); } $ret = &ftp'expect( $timeout, 150, 1, # reading directory 125, 0, # data connection already open? 450, 0, # file unavailable 500, 0, # syntax error 501, 0, # syntax error 502, 0, # command not implemented 530, 0, # not logged in 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } if( ! $ret ){ &ftp'close_data_socket; return 0; } accept( NS, S ) || die "accept failed $!"; # # the data should be coming at us now # return 1; } # Close down reading the result of a remote ls command # return 1 if successful and 0 on failure sub ftp'dir_close { local( $ret ); if( ! $ftp'service_open ){ return 0; } # read the close # $ret = &ftp'expect($timeout, 226, 1, # transfer complete, closing connection 250, 1, # action completed 425, 0, # can't open data connection 426, 0, # connection closed, transfer aborted 451, 0, # action aborted, local error 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } # shut down our end of the socket &ftp'close_data_socket; if( ! $ret ){ return 0; } return 1; } # Quit from the remote ftp server # return 1 if successful and 0 on failure sub ftp'quit { local( $ret ); $site_command_check = 0; @site_command_list = (); if( ! $ftp'service_open ){ return 0; } &ftp'send( "QUIT" ); $ret = &ftp'expect( $timeout, 221, 1, # transfer complete, closing connection 500, 0, # error quitting?? 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } return $ret; } # Support for ftp'read sub ftp'read_alarm { die "timeout: read"; } # Support for ftp'read sub ftp'timed_read { alarm( $timeout_read ); return sysread( NS, $ftpbuf, $ftpbufsize ); } # Do not use this routing use ftp'get sub ftp'read { if( ! $ftp'service_open ){ return -1; } local( $ret ) = eval '&timed_read()'; alarm( 0 ); if( $@ =~ /^timeout/ ){ return -1; } return $ret; } # Get a remote file back into a local file. # If no loc_fname passed then uses rem_fname. # returns 1 on success and 0 on failure sub ftp'get { local($rem_fname, $loc_fname, $restart ) = @_; local( $ret ); if( ! $ftp'service_open ){ return 0; } if( $loc_fname eq "" ){ $loc_fname = $rem_fname; } if( ! &ftp'open_data_vwxyz{|}~socket() ){ print $ftp'showfd "Cannot open data socket\n"; return 0; } if( $loc_fname ne '-' ){ # Find the size of the target file local( $restart_at ) = &ftp'filesize( $loc_fname ); if( $restart && $restart_at > 0 && &ftp'restart( $restart_at ) ){ $restart = 1; # Make sure the file can be updated chmod( 0644, $loc_fname ); } else { $restart = 0; unlink( $loc_fname ); } } if( $ftp'mapunixout ){ $rem_fname = eval "&$ftp'mapunixout( \$rem_fname, 'f' )"; } &ftp'send( "RETR $rem_fname" ); $ret = &ftp'expect( $timeout, 150, 1, # receiving $rem_fname 125, 0, # data connection already open? 450, 2, # file unavailable 550, 2, # file unavailable 500, 0, # syntax error 501, 0, # syntax error 530, 0, # not logged in 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } if( $ret != 1 ){ print $ftp'showfd "Failure on 'RETR $rem_fname' command\n"; # shut down our end of the socket &ftp'close_data_socket; return 0; } accept( NS, S ) || die "accept failed $!"; # # the data should be coming at us now # # # open the local fname # concatenate on the end if restarting, else just overwrite if( !open( FH, ($restart ? '>>' : '>') . $loc_fname ) ){ print $ftp'showfd "Cannot create local file $loc_fname\n"; # shut down our end of the socket &ftp'close_data_socket; return 0; } local( $start_time ) = time; local( $bytes, $lasthash, $hashes ) = (0, 0, 0); local( $old_sig ) = $SIG{ 'ALRM' }; $SIG{ 'ALRM' } = "ftp\'read_alarm"; # while( ($len = sysread( NS, $ftpbuf, $ftpbufsize)) > 0 ){ while( ($len = &ftp'read()) > 0 ){ $bytes += $len; if( $strip_cr ){ $ftp'buf =~ s/\r//g; } if( $ftp_show ){ while( $bytes > ($lasthash + $ftp'hashevery) ){ print $ftp'showfd '#'; $lasthash += $ftp'hashevery; $hashes++; if( ($hashes % $ftp'hashnl) == 0 ){ print $ftp'showfd "\n"; } } } if( ! print FH $ftp'ftpbuf ){ print $ftp'showfd "\nfailed to write data"; $bytes = -1; last; } } $SIG{ 'ALRM' } = $old_sig; close( FH ); # shut down our end of the socket &ftp'close_data_socket; if( $len < 0 ){ print $ftp'showfd "\ntimed out reading data!\n"; return 0; } if( $ftp_show && $bytes > 0 ){ if( $hashes && ($hashes % $ftp'hashnl) != 0 ){ print $ftp'showfd "\n"; } local( $secs ) = (time - $start_time); if( $secs <= 0 ){ $secs = 1; # To avoid a divide by zero; } local( $rate ) = int( $bytes / $secs ); print $ftp'showfd "Got $bytes bytes ($rate bytes/sec)\n"; } # # read the close # $ret = &ftp'expect( $timeout, 226, 1, # transfer complete, closing connection 250, 1, # action completed 110, 0, # restart not supported 425, 0, # can't open data connection 426, 0, # connection closed, transfer aborted 451, 0, # action aborted, local error 550, 0, # permission denied 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } if( $ret && $bytes < 0 ){ $ret = 0; } return $ret; } sub ftp'delete { local( $rem_fname ) = @_; local( $ret ); if( ! $ftp'service_open ){ return 0; } if( $ftp'mapunixout ){ $rem_fname = eval "&$ftp'mapunixout( \$rem_fname, 'f' )"; } &ftp'send( "DELE $rem_fname" ); $ret = &ftp'expect( $timeout, 250, 1, # Deleted $rem_fname 550, 0, # Permission denied 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } return $ret == 1; } sub ftp'deldir { local( $fname ) = @_; # not yet implemented # RMD } # UPDATE ME!!!!!! # Add in the hash printing and newline conversion sub ftp'put { local( $loc_fname, $rem_fname ) = @_; local( $strip_cr ); if( ! $ftp'service_open ){ return 0; } if( $loc_fname eq "" ){ $loc_fname = $rem_fname; } if( ! &ftp'open_data_socket() ){ return 0; } if( $ftp'mapunixout ){ $rem_fname = eval "&$ftp'mapunixout( \$rem_fname, 'f' )"; } &ftp'send( "STOR $rem_fname" ); # # the data should be coming at us now # local( $ret ) = &ftp'expect( $timeout, 150, 1, # sending $loc_fname 125, 0, # data connection already open? 450, 0, # file unavailable 532, 0, # need account for storing files 452, 0, # insufficient storage on system 553, 0, # file name not allowed 500, 0, # syntax error 501, 0, # syntax error 530, 0, # not logged in 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } if( $ret != 1 ){ # shut down our end of the socket &ftp'close_data_socket; return 0; } accept( NS, S ) || die "accept failed $!"; # # the data should be coming at us now # # # open the local fname # if( !open( FH, "<$loc_fname" ) ){ print $ftp'showfd "Cannot open local file $loc_fname\n"; # shut down our end of the socket &ftp'close_data_socket; return 0; } while( ){ if( ! $ftp'service_open ){ last; } print NS ; } close( FH ); # shut down our end of the socket to signal EOF &ftp'close_data_socket; # # read the close # $ret = &ftp'expect( $timeout, 226, 1, # transfer complete, closing connection 250, 1, # action completed 110, 0, # restart not supported 425, 0, # can't open data connection 426, 0, # connection closed, transfer aborted 451, 0, # action aborted, local error 551, 0, # page type unknown 552, 0, # storage allocation exceeded 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } if( ! $ret ){ print $ftp'showfd "Failure on 'STOR $loc_fname' command\n"; } return $ret; } sub ftp'restart { local( $restart_point, $ret ) = @_; if( ! $ftp'service_open ){ return 0; } &ftp'send( "REST $restart_point" ); # # see what they say $ret = &ftp'expect( $timeout, 350, 1, # restarting at $restart_point 500, 0, # syntax error 501, 0, # syntax error 502, 2, # REST not implemented 530, 0, # not logged in 545, 2, # REST not implemented 554, 2, # REST not implemented 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } return $ret; } # Set the file transfer type sub ftp'type { local( $type ) = @_; if( ! $ftp'service_open ){ return 0; } &ftp'send( "TYPE $type" ); # # see what they say $ret = &ftp'expect( $timeout, 200, 1, # file type set to $type 500, 0, # syntax error 501, 0, # syntax error 504, 0, # Invalid form or byte size for type $type 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } return $ret; } $site_command_check = 0; @site_command_list = (); # routine to query the remote server for 'SITE' commands supported sub ftp'site_commands { local( $ret ); if( ! $ftp'service_open ){ return 0; } # if we havent sent a 'HELP SITE', send it now if( !$site_command_check ){ $site_command_check = 1; &ftp'send( "HELP SITE" ); # assume the line in the HELP SITE response with the 'HELP' # command is the one for us $ret = &ftp'expect( $timeout, ".*HELP.*", "\$1", 214, "0", 202, "0", 421, "99" ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = "0"; } if( $ret eq "0" ){ print $ftp'showfd "No response from HELP SITE\n" if( $ftp_show ); } @site_command_list = split(/\s+/, $ret); } return @site_command_list; } # return the pwd, or null if we can't get the pwd sub ftp'pwd { local( $ret, $cwd ); if( ! $ftp'service_open ){ return 0; } &ftp'send( "PWD" ); # # see what they say $ret = &ftp'expect( $timeout, 257, 1, # working dir is 500, 0, # syntax error 501, 0, # syntax error 502, 0, # PWD not implemented 550, 0, # file unavailable 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } if( $ret ){ if( $ftp'response =~ /^257\s"(.*)"\s.*$/ ){ $cwd = $1; } } return $cwd; } # return 1 for success, 0 for failure sub ftp'mkdir { local( $path ) = @_; local( $ret ); if( ! $ftp'service_open ){ return 0; } if( $ftp'mapunixout ){ $path = eval "&$ftp'mapunixout( \$path, 'f' )"; } &ftp'send( "MKD $path" ); # # see what they say $ret = &ftp'expect( $timeout, 257, 1, # made directory $path 500, 0, # syntax error 501, 0, # syntax error 502, 0, # MKD not implemented 530, 0, # not logged in 550, 0, # file unavailable 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } return $ret; } # return 1 for success, 0 for failure sub ftp'chmod { local( $path, $mode ) = @_; local( $ret ); if( ! $ftp'service_open ){ return 0; } if( $ftp'mapunixout ){ $path = eval "&$ftp'mapunixout( \$path, 'f' )"; } &ftp'send( sprintf( "SITE CHMOD %o $path", $mode ) ); # # see what they say $ret = &ftp'expect( $timeout, 200, 1, # chmod $mode $path succeeded 500, 0, # syntax error 501, 0, # syntax error 502, 0, # CHMOD not implemented 530, 0, # not logged in 550, 0, # file unavailable 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } return $ret; } # rename a file sub ftp'rename { local( $old_name, $new_name ) = @_; local( $ret ); if( ! $ftp'service_open ){ return 0; } if( $ftp'mapunixout ){ $old_name = eval "&$ftp'mapunixout( \$old_name, 'f' )"; } &ftp'send( "RNFR $old_name" ); # # see what they say $ret = &ftp'expect( $timeout, 350, 1, # OK 500, 0, # syntax error 501, 0, # syntax error 502, 0, # RNFR not implemented 530, 0, # not logged in 550, 0, # file unavailable 450, 0, # file unavailable 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } # check if the "rename from" occurred ok if( $ret ){ if( $ftp'mapunixout ){ $new_name = eval "&$ftp'mapunixout( \$new_name, 'f' )"; } &ftp'send( "RNTO $new_name" ); # # see what they say $ret = &ftp'expect( $timeout, 250, 1, # rename $old_name to $new_name 500, 0, # syntax error 501, 0, # syntax error 502, 0, # RNTO not implemented 503, 0, # bad sequence of commands 530, 0, # not logged in 532, 0, # need account for storing files 553, 0, # file name not allowed 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } } return $ret; } sub ftp'quote { local( $cmd ) = @_; local( $ret ); if( ! $ftp'service_open ){ return 0; } &ftp'send( $cmd ); $ret = &ftp'expect( $timeout, 200, 1, # Remote '$cmd' OK 500, 0, # error in remote '$cmd' 421, 99 ); # service unavailable, closing connection if( $ret == 99 ){ &service_closed(); $ret = 0; } return $ret; } # ------------------------------------------------------------------------------ # These are the lower level support routines sub ftp'expectgot { ($ftp'response, $ftp'fatalerror) = @_; if( $ftp_show ){ print $ftp'showfd "$ftp'response\n"; } } # # create the list of parameters for chat'expect # # ftp'expect(time_out, {value, return value}); # the last response is stored in $ftp'response # sub ftp'expect { local( $ret ); local( $time_out ); local( @expect_args ); local( $code, $pre ); $ftp'response = ''; $ftp'fatalerror = 0; $time_out = shift( @_ ); while( @_ ){ $code = shift( @_ ); $pre = '^'; if( $code =~ /^\d+$/ ){ $pre = "[.|\n]*^"; } push( @expect_args, "$pre(" . $code . " .*)\\015\\n" ); push( @expect_args, "&expectgot( \$1, 0 ); " . shift( @_ ) ); } # Treat all unrecognised lines as continuations push( @expect_args, "^(.*)\\015\\n" ); push( @expect_args, "&expectgot( \$1, 0 ); 100" ); # add patterns TIMEOUT and EOF push( @expect_args, 'TIMEOUT' ); push( @expect_args, "&expectgot( 'timed out', 0 ); 0" ); push( @expect_args, 'EOF' ); push( @expect_args, "&expectgot( 'remote server gone away', 1 ); 99" ); if( $ftp_show > 9 ){ &printargs( $time_out, @expect_args ); } $ret = &chat'expect( $time_out, @expect_args ); if( $ret == 100 ){ # we saw a continuation line, wait for the end push( @expect_args, "^.*\n" ); push( @expect_args, "100" ); while( $ret == 100 ){ if( $ftp_show > 9 ){ &printargs( $time_out, @expect_args ); } $ret = &chat'expect( $time_out, @expect_args ); } } return $ret; } # # opens NS for io # sub ftp'open_data_socket { local( $sockaddr, $port ); local( $type, $myaddr, $a, $b, $c, $d ); local( $mysockaddr, $family, $hi, $lo ); $sockaddr = 'S n a4 x8'; ($a,$b,$c,$d) = unpack( 'C4', $chat'thisaddr ); $this = $chat'thisproc; socket( S, $pf_inet, $sock_stream, $tcp_proto ) || die "socket: $!"; bind( S, $this ) || die "bind: $!"; # get the port number $mysockaddr = getsockname( S ); ($family, $port, $myaddr) = unpack( $sockaddr, $mysockaddr ); $hi = ($port >> 8) & 0x00ff; $lo = $port & 0x00ff; # # we MUST do a listen before sending the port otherwise # the PORT may fail # listen( S, 5 ) || die "listen"; &ftp'send( "PORT $a,$b,$c,$d,$hi,$lo" ); return &ftp'expect($timeout, 200, 1, # PORT command successful 250, 1, # PORT command successful 500, 0, # syntax error 501, 0, # syntax error 530, 0, # not logged in 421, 0); # service unavailable, closing connection } sub ftp'close_data_socket { close( NS ); } sub ftp'send { local( $send_cmd ) = @_; if( $send_cmd =~ /\n/ ){ print $ftp'showfd "ERROR, \\n in send string for $send_cmd\n"; } if( $ftp_show ){ local( $sc ) = $send_cmd; if( $send_cmd =~ /^PASS/){ $sc = "PASS "; } print $ftp'showfd "---> $sc\n"; } &chat'print( "$send_cmd\r\n" ); } sub ftp'printargs { while( @_ ){ print $ftp'showfd shift( @_ ) . "\n"; } } sub ftp'filesize { local( $fname ) = @_; if( ! -f $fname ){ return -1; } return (stat( _ ))[ 7 ]; } # make this package return true 1; sub run_script { local ( $script ) = @_; local ( $pid, $of, $pre, $ret ); $pre = &tempname(); # Write the script if ($rpm{'root'}) { $of = $rpm{'root'} . $pre; } else { $of = $pre; } open(FD, ">$of") || &error("couldn't write $w script"); print FD $script, "\n"; close FD; chmod(0700, $of); # Fork it and exec it (($pid = fork()) < 0) && &error("couldn't fork $w script"); if (! $pid) { if ($rpm{'root'}) { chroot($rpm{'root'}) || &error("couldn't chroot"); chdir('/'); } if (&isdebug()) { exec "/bin/sh", "-x", "-c", $pre; } else { exec "/bin/sh", $pre; } } wait; $ret = 0; if ($?) { &warning("$w returned non-zero exit code"); $ret = 1; } if (! $rpm{"keeptemps"}) { system("rm -f $of"); } return $ret; } sub run_prepost { local ( *pspec, $w ) = @_; local ( $pid, $of, $pre ); if (!length($pspec{"$w:0"})) { return; } &run_script($pspec{"$w:0"}) } 1; # RPM Package Management System -*-perl-*- # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. sub readopts { local ($rcfile) = @_; local ($option, $rest, $orig); local ($arch, $flags); &debug("reading options from $rcfile"); open(RCFILE, "<$rcfile") || error("Cannot open $rcfile for reading"); while () { chop; $orig = $_; s/^ *//; s/ *$//; $_ || next; if (($option, $rest) = /^([^:]*):(.*)$/) { $option =~ s/ *$//; $rest =~ s/^ *//; if ($option eq "optflags") { if (!(($arch, $flags) = ($rest =~ /^([^ ]+) *(.*)$/))) { &error("bad line $orig in $rcfile"); } &debug("\$optflags{$arch} set to \"$flags\""); $optflags{$arch} = $flags; } elsif ($option eq "search") { push(@rpmsearchpath, $rest); } elsif ($inrcfile{$option}) { &debug("\$rpm{$option} changed from $rpm{$option} to $rest"); $rpm{$option} = $rest; } else { &warning("unknown option $option in $rcfile"); } } else { &warning("bad line $orig in $rcfile"); } } } $inrcfile{"topdir"} = 1; $inrcfile{"specdir"} = 1; $inrcfile{"builddir"} = 1; $inrcfile{"sourcedir"} = 1; $inrcfile{"rpmdir"} = 1; $inrcfile{"srcrpmdir"} = 1; $inrcfile{"arch_sensitive"} = 1; $inrcfile{"docdir"} = 1; $inrcfile{"libdir"} = 1; $inrcfile{"force"} = 1; $inrcfile{"require_vendor"} = 1; $inrcfile{"require_distribution"} = 1; $inrcfile{"require_icon"} = 1; $inrcfile{"require_group"} = 1; $inrcfile{"timecheck"} = 1; $inrcfile{"distribution"} = 1; $inrcfile{"vendor"} = 1; $inrcfile{"messagelevel"} = 1; 1; ELF4T!4 (88/8/%*  $'%!(& #")  / x/ &p ,39r Ad/ QXjpw~PV 0p 0  0g p1 0 0 ")d0p07p0C0_DYNAMIC_GLOBAL_OFFSET_TABLE__init_finistrcpyioctltgetnumtgetent_bufsizegetenv__strtol_internalfgetsmemcpymalloctgetflagospeedwritetputsstrncmpPCfopenfclosetgetentrewindexitstrchrtgetstrfreetputs_baud_ratetgototparamBCstrcatreallocUP___brk_addr__environatexit_etext_edata__bss_start_endlibtermcap.so.28///#//$///"/// / / / / // //!///%////k hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhVS[Ñ'pxtЃ>u[^ÐS[b'[ÐUWVS[L'D$$D$,D$ D$T$0:f::tB:u:PB:Ct) L$:t\uz:uBB:u:tBD$< t D$FL$ t<vD$t<:t|$j*PVT$$H T$uu0Չl$PT$ǃT$u%jPjjVVWT$ M|$$T$j=VT$ ,ǃT$u2j@VT$ ǃT$uj#VT$ ǃT$t) 0щM{|$ t7|$ |$$UVGPT$$1 T$t?u܃|$ t=0ՉD$PT$ǃT$ujPjj*t tFt<:t<|u)9uWRL$8Q tFt:u1Ʌ0Pt 'jPjj!UV!VD$(P{Ńt UD$$L$,[^_]ÐKPL$ Qǃ1[^_]Ðj+MPj cD$|$ՋL$0QWƃt9VD$(PD$8|$tt$ VbD$|$0uWD$(L$0D$$uy[^_]ÐU$WVS[úEEM QuVxEu}u 1VJtt R}t%THEǃ0}щMut0Ґ~M6uEEPƒtUBjPjxjj)zPjX M MǃE쉃EU:t E@EEB:uM:AMEutxV0Ѝxj=Rfu|7@t;EDEM9KV~tMAMB:uE:@E>V%uMe[^_]ÐVS[át$ 9t#Q9:u8Bu F8Bu:#tBA9u1u[^ÐA퐐jj jP[^ÐVS[!t$ 9t*Q9:u8BuF8Bu z:u BA9u1%[^ÐUWVS[üt$}t'U}:u8Bu F8Bu:=tBE}u1u 1[^_]Ðu琐|$ uY>:tt<\uz:uBB::u)@Pt)jPjj1L$ )l$|$:|$\unL$FȃЃ w,D$1Ҋ< w_BY|$DЉD$F:t69D$t :u"RT$|$^u L$FD$|$G|$L$FP|$G|$|$ tL$ 9[^_]Ð UWVS[|$ l$(1T$t2G ΊD$< v?.u Gt0G?*uGt$$PGՃ?utsXfQfD$f|$}12d\PՃN[^_] ÐVS[t$ L$T$D$PjjRQV[^ÐS[ÿL$T$D$t@D$T$D$P`PdPj2 PQ"[Ð1[Ð(UWVS[Lt$PD$|$~ D$D$׊D$0EE|$D$d0EED$dT$D$ 0EED$ ׀0UE|$_~D$`D$׊D$EE|$T$4T$D$4|$LtS>D$9t$(uD$ 0|$HD$$0|$LH)D$0|$tD$vED$|$tL$L$D$D$hD$ST$D$L$D$(4T$4>D$49~ L$4 ω>D$4 D$4@D$T$4zpu L$D$4D$<-uT$)]|$+u L$G|$*uD$4|$/u>|$L$D$4`D$S6`T$2`A6L$11D$ Ǎlj|$>|$}|$T$)T$)MEED$ L$ ~"D$HPU}T$ T$JT$ |$ދD$$L$$~$L$LQUMD$$D$HD$$|$ދD$@[^_](ÐVS[apxtЃ>u[^ÐS[2hl&[kEr n bt f \\Virtual memory exhausted. tc=li#co#/etc/termcapTERMCAPrtgetent: loop detected, check your termcap tgetent: warning: termcap entry too long virtual memory exhausted x2Kn@/.>N^n~H  px X x/@GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.hash.dynsym.dynstr.rel.data.rel.got.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.commentD! )xxX1  ; 8D MS0X^ppdxxl8/80rh/hyp/px/xp/p0p \p H $0* ),        1l/ >@ Ih/ Wt/  d zp/ I8/ h/ k  0  P` P   r d/ /g  d'9?FMPV Vb0ip1 pz0}p 0p0 p p0x/00 0crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__add_listbuild_listget_one_entrytc_readadjust_lines_colstparam1strcpyioctltgetnumtgetent_bufsize_DYNAMICtgotogetenv_etext__strtol_internalfgetsmemcpymalloctgetflag___brk_addrospeedtparam__environBC_initwritestrcattputsstrncmpreallocPCfopen__bss_startfclosetgetent_finiatexit_edata_GLOBAL_OFFSET_TABLE__endrewindexitUPstrchrtgetstrfreetputs_baud_rateELFP,44 ([[<<"se(6m*E]S=|tIY^V)zx_fU7b1hK-+g`i! rwl0AP:c<ak od&"qp% 4GJZHvj@Ouyn~D.2R/;T'9{8 5N# FQW>$CLM3X,[?\B}  (&P ,,k 8Є ?6 IN@/: W/8 ^/e g/ kP v@J }3< 0 4 D  Ю  g9M L p9/   ̮ l P  c7     F !( $ ' * 4 7 :4 = @Į C F` I L O RH U X ` j  m pܮ s v yX |  خ    Ȯ       <  h \    | t    d x $        ,   0  @  ( + . 1;8 >T Ap D GԮ J R U X [G bM ovH I @LT W W RL L MY N  `&   TK NT Pc P? '@Q 1`RM :Zn DS J0V W^PU eo@[ w`^c `* a aW 0aV a&  V `m @* U p& r@ !V*2:B L`= Vw c@/ mp v   $ $t PP  , pp $* ,P 3ВT 70T = F bnxD,,,_DYNAMIC_GLOBAL_OFFSET_TABLE__init_fini__waddbytesscrollwclrtoeolNONL__waddchwaddchwaddnstrbox__touchwinwerasewclear__touchlinewclrtobotLLCACR__pfasttgoto__mvcurND_IO_stdout_mvcur__overflowBCHOCMTAGTtputsNLAM__cputcharBSNCCOLScurscrUPLINES__hashKDK9CDDOWN_PARMXNK6KLsfCEOSSFK4VEVSMAMSMy_term__rawmodeIMXBDLXSULSCK1__echoitDCRIGHT_PARMDAHCCLK8DODef_termK0DMXTKSBTSRSEK3ICUSUETIPCalLEFT_PARMSOUCIP__noqchUP_PARMK5XXdlEOK2KEK7KHstdscrMIKUDL_PARMEIALNSUPPERCASEKRRCTEsrCSAL_PARMINEDVBwdelch__id_subwinsmemcpywdeletelndelwinfreefullnamenocbreak_IO_stdin_cbreak__uflowwmovewgetchwgetstridlokgettmodegetenv__set_stophandlersetterm__startwinnewwininitscrwrefreshwinschwinsertlnlongname__swflagsmvwin__set_subwinmallocsubwin__ctype_boverlayoverwritevsprintfprintwvwprintwmvwprintwmvprintwwprintw__tscrollfflushabortvsscanfmvwscanwvwscanwscanwmvscanwwscanwioctltgetnum__strtol_internalgetcaptgetflagttytypetgetenttgetstrwstandendwstandouttouchoverlaptouchlinetouchwin__bsd_signalendwinsigaddsetkilltcgetattr__restore_stophandler__orig_termios__stop_signal_handlertcsetattrsigprocmasksetvbuf__basetnlecho__tcactionresettynonlsavettynoechorawnoraw__unctrl__unctrllenlibtermcap.so.2___brk_addr__environatexit_etext_edata__bss_start_endlibcurses.so.1D#H%LHPeTIXx\k`;d&hpl5pBt?x0|PAcoR.4JvF@OLynijNȳD̳fгUԳ7سbܳ1hK-V>_,gi2 rQl: $"(,s0C4T86<]@SDHtLYP^TXX)\W`zd9h8l[pdt3xu|wma/\Gĵȵ̵еԵصܵ  $(,048<@DHLPTX\`dhlptx|Ķȶ̶жԶضܶ  $(,048<@DHLPTX\`dhlptx|ķȷ̷зԷطܷ  $(,048<@DHLPTX\`dhlptx|ĸȸ̸иԸظܸ  $(,048<@DHLPTX\`dhlptx|лH3$4Ļ<6890;<=dhAD@|ܻEػ J M\RTS(TȻ"#lWpXY`ZP[$,]4^% `Ldj&@o't(xԻ)tXu8v̻*ĺȺ̺кԺغܺ| }  $(,048<@DHL!P~TX \` dh+lptx|[o hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPVS[apxtЃ>u[^ÐS[2[Ð UWVS[T$ jrT$(JT$%T$$T$D$$у+8r(HHT$ jrj}F$)Ɖ)‰P]PT$,Ru1[^_] ÐT$ jrfT$ B$ tX$T$ BH9u0B0 tjrRFT$$jB$ 1ET$ B$ 1|$ D$T$ z0||$,tD$yw9D$u T$Twu6T$ B <0u QA 8:A98wA 98s8AT$p|$tALp AdpT$ BH9u \FRT$ jrRXT$$jr81N}1L$|$T$ jr[^_] ÐS[ïD$ T$T$ffL$T$RP([ÐS[oL$ T$D$BPjD$PQv[ÐUWVS[/l$t$T$~ 1Jt)At"G𐐐0ЍxjWVU [^_]ÐUWVS[üT$(zrNt$ B$j@D$19T$0T$D$~R~)t$UDM$DMDN$DNt$T$t$TMdMT$dJt$AT$t$TMdMT$dJt$A9t$t$T$t$TMdMT$dJAT$VTEdEt$dFAt$VTEdET$dBAT$VTEdEt$dFD$9|O19L$ %D$ @~?T$(B$@T$,t$(F$@T$,xF$@`F$@dxAt$(F$@T$,F$@T$,xF$@`F$@dxAt$(F$@T$,F$@T$,xF$@`F$@dxA9L$ Bt$(F$@T$,F$@T$,xF$@`F$@dxqt$T$(B$@T$,t$(F$T$@T$,xF$t$@`T$(B$@dxqt$B$@T$,t$(F$T$@T$,xF$t$@`T$(B$@dxqt$B$@T$,t$(F$T$@T$,xF$t$@`T$(B$@dx9L$ t$(F00u&T$z  D} E ed}bdzt$(V;[^_]ÐVS[t$ V0t1[^ÐN0@[^ÐUWVS[ÜL$$QA$tBD$Ћ|$$|$D$L$$9ALD$|$$G$L$hT$L$TM9T$D$)Ѓ~j~+: uzt։)D$ F: uzt,փ|$u|$$G$L$+xD$ F: uzt,փ|$uL$$A$|$+HD$ F9T$: uzt,փ|$u|$$G$L$+xD$ FBz uzt-ƃ|$uL$$A$|$+HD$B BBz uzt-ƃ|$u|$$G$L$+xD$B BBz uzt-ƃ|$uL$$A$|$+HD$B B9T$|$t2j|$(G$L$ +xPL$Q|$(WL$4QD$D$|$L$$9y[^_]ÐUWVS[܃L$(IL$|$(|$ L$(A$|$t0AH9r[^_]ÐD$D$ L$(A$|$IʋhT$D$|$ T}9T$rD$)Ѓ~j~,: uzt)D$ B: u>t)|$uL$(A$|$+HD$ : u>t)|$u|$(G$L$+xD$ 9T$ t$l$: u}t-|$uL$(A$|$+HD$ |$rz u}t-|$uL$(A$|$+pD$B L$Arz u}t-|$u|$(G$L$+pD$B |$Grz u}t-|$uL$(A$|$+pD$B L$AD$9T$j|$,GHPL$(Q|$(WL$8QH[^_]ÐVS[At$ L$T$D$jPRQV[^ÐWVS[|$t$T$D$L$ xQ[^_ÐUWVS[ÿl$09| șș։x09Așxș։x88tGtPjQ ' q9qwj Q  AtPjQ 0 q9qwj Q  AOWǃx8O9~F))9A98u8u ǃU:{t$8tPjQ + q9qwj Q  AO8u ǃx98~9}8u8u8tePP PƋH 9xtU0HPKPjV Uj(x[^_]Ð UWVS[Ü}D$ xL$L$$8(8t/}F)։<L$x9|VD$}Ѕ}B)Ƌ(8ttL$)G+x5+T$9(,8u 08t׉wL$)y֋D$9|8u>9l$}8Pj$PIǃǃx 4(B)ЉD:9}u~ 8tfPjUǃxH 98u%L$9}[^_] Ð(8t5Ѕ}B)ȍ<x+8u 8u9V88t9G909x,808tPjR Ht5 P9Pwj Pb  @88$tPjR( Qt5 P9Pwj P  @tPjR Pt5 P9Pwj PR  @(8u 8u ǃx9KHx0t PjR Rt5 P9PwjP @x9h4HPjP: 9|ċ(8+xjxPǃ9<tPjR Gt5 P9Pwj P  @xo+x9808u,8<tPjR It5 P9Pwj P  @x9|x0tPjR Ht5 P9PwjPB @9x9x|$$tq@A$x@‰сt 11F>‰сt 11F9s|>‰сt 11D7‰сt 11D7‰сt 11D7‰сt 11ʃ9r^_]ÐUWVS[r|$WG$wHlwJ9sh)Ѓt7~"~}(fBfʍJffff9s(fffAfBfAfBfAfB9r BjGHPGPGPW([^_]ÐUWVS[r|$GW$,zG$ G$D uW$D5W$@D$DPOPRL$Q jGHPjVW~FGH9ruG$,G$,19WvEP EDPB9WwjGHPjVW#u W[^_]ÐWVS[q|$uGG(PVG,PMG$PD 9t52R9u9:t9:uW[^_Ð UWVS[lp1L$ 9iD$|$ G$@D$OD$D$T$9V)Ѓ~X~(: uztD$ F: uztփ|$u +D$D$ F: uztփ|$u +D$D$ F9T$: uztփ|$u +D$D$ FBz uztƃ|$u +D$D$B BBz uztƃ|$u +D$D$B BBz uztƃ|$u +D$D$B B9T$J|$t*j|$$G$+HP|$WUL$0QE|$ 9o7[^_] ÐVL$t$ 9t?:t8|tA@t:u9|uAː^ÐUWVS[n|$G0$u!GH9GuGH9Gu1[^_]ÐH8t%L8u1틓PB9BwRB 0BH8t?GG PGGP@P tV@PVWt[^_]WVS[ m|$t$W t < tFꐐ>t[^_Ð1[^_Ð UWVT$JJL$:9tiwWT$ 9D$sKL$iT$)9t$ v6G$D$ L$A$D$G T$BT$ BFE9ww͋?9|$u^_] ÐD$|$tH0Ã`0ÐS[lHLTu 1[ÐX8uP1u\PLtË$8u 8t@t P=jjPP‹@hJ0@`t PjjPPV‹`u@P1[Ð`[ÐUWVS[ìjt$VF$Nʋ@D$׋NȋL$Tj9vm)Ѓt;}#}~,fBfjfEffEf9v+fEffEfBfEfBfEfB9w׊L$ bjFHPFPFPVB9FuKF$TR|B u|Bt+F0 u1[^_]ÐVrVN[^_]ÐUWVS[li|$u WG$lwqG$ G$D uW$D5W$@D$DPOPRL$Q jGHPjVWN9wruG$,G$,19WvEP EDPB9WwjGHPjVWsu W[^_]ÐVL$t$ 9|tAt:u9|u#A|tA@t:u^ÐVL$t$ D$|} 1^Ð9Av9qvAQA$ qA$ ^ÐUWVS[ìgt$$L$(VT$ʋ9rVT$T$,T$9s1[^_]Ð+nT$,+V T$~u)nT$V V69uI9OwD$9GrT$,9W wD$D$9GrNT$,V VbVW V[^_]Ð UWVS[ìft$$L$(l$,|$ u)ȉD$ u 0)jUQVT$0RD$,|$u1[^_] ÐT$|$fB B19l$ |$G$D$T$B19}d|$t0~~ @A @A @A9}* @@ @@ @@ @9|׍6PT$BP|$GE9l$ UD$[^_] ÐUWVS[\et$T$ |$O9L$$r1 |$9|$(r$D$$|$o9wD$(ЋL$O9v1[^_]Ðu+t$$u+T$(j|$,W|$,WRV ƃt|$7~V(19Fv@9FwV|$W[^_]ÐUWVS[|dL$(fy T$$f+z fy i(D$T$9QvxuA$|$,D$AT$$+Bz$D$A T$BFV|$~QPFPL$$qD$L$|$9yw[^_]ÐUWVS[ücj4ǃu 1[^_]ÐL$0PG$uW1[^_]Ðt$0vPvG(u$WG$P1[^_]Ð|$@D$4D$0P,G,u*G$PiG(P`WZ1 [^_]ÐW(19l$0JL$D$D$0~9G$G,BrrJ BBL$4L$r0t$G$L$G,t$FJNL$NAt$4t$EL$G$L$G,t$FJNL$NAt$4t$EL$9l$0L$L$(L$$t$t$ L$L$t$t$G$L$G,t$rL$1t$L$ 1L$$t$(L$4L$G$rtL$G,t$Fr,L$qt$L$ qL$$At$(FL$4L$G$r8tL$G,t$F8rHL$q8t$8L$ q8L$$A8t$(F8L$4L$G$rTt L$G,t$FTrdL$qTt$TL$ qTL$$ATt$(FTL$4L$pt$(D$$pD$ pD$pD$pD$pp9l$0GGt$0wL$4Ot$8wL$D$9t$dDB u"|$WL$0Q|$HW"VL$PQ|$G|$nFdDB uWL$0Q|$HWUL$PQ|$|$nFdDB uWL$0Q|$HWUL$PQ{|$|$nFdDB uWL$0Q|$HWgUL$PQ<D$9t$D$4D$0D$,|$(9|$4[^_](ÐUWVS[L\t$0V|$4|$9sT$t$0v t$ |$4O 9sL$ t$4Fȋ|$0|$t$0~|$(9vD$(|$4Gȋt$0v t$|$0wt$$9vD$$9T$(~ t$$9t$ |[^_]ÐD$$+D$ D$D$()t~+T$|$4G$T$T$ )ʉ+L$t$0F$ D$ +D$ҋ|$WAt$VPR j|$8W D$()PD$()PUt$DVE9l$(|$4+WG$T$L$ +O t$0+VF$D$ +F ɋ|$OBt$VPQ j|$8W D$()PD$()PUt$DV}|$t$4+VF$T$L$ +N T$|$0+WG$D$ +G ɋt$NB|$WPQ jt$8V D$()PD$()P|$ Wt$DV9l$([^_]ÐS[YT$D$ PR`P [ÐS[òYL$T$ D$PRQW [ÐWVS[ÀYT$D$|$t$PR`P uVW`P [^_Ð1[^_ÐUWVS[Y|$T$D$l$ t$$PRW uVUW [^_]Ð1[^_]ÐUWVS[ùX$$ $$PRt$ VD$ |$OD$ЃtT}:}"D$Pt$U|$PFUtmOPFUtZO|OPUntFFPU\t4FPUJt"FPU5t }L$L$|$%[^_]ÐS[âWD$ J9Jw%PR[ÈB[ÐUWVS[\Wl$@BfBf19%u69Ev1׋E$4tMPFPyFfG9EwE0@u@@0@u tyE0u@@0@taPjhPfǃfǃ u#@`0@@PUe08uP}t0 P9Pwj P< @u@P[E0tZuQ11ҋE9s!u$D$NjtBfG9D$w鋃T8uE}9~ U 1}u@׋@$ E$@AE$t]VUnE$PE 9rEE$@ D$U EЋL$9sE$4V F9s&fG9Ea@9u)EPEPPPL E1tzHHfMf)ff+E fff|-9Uv%f| 9EvUM[EE@EE PEEPPP @MMHMM H P<[^_]Ð1[^_]ÐHUWVS[üS|$`~BD$\@$|$`|t.jPRRP ffǃD$\@$|$`D$L$P$`G}9D$Pt$L9t$0}Nt$0|$D9|$,~|$,t$@+t$Dt$81ҋ$`9Wv L$\1 DB$`9Vw狼$`PD$`P蚷D$,D$8+D$4@D$0T$4@@$ T$ PjP PjP PjP PjP˧ |3jUL$QjT$@RS[r7T$D$ PR`Ps [ÐS[B7L$T$ D$PRQG [ÐVS[7T$ D$t$PR`P讧 uD$PV`P [^Ð1[^ÐWVS[ð6|$T$D$t$PR`PI uD$ PVW蕧 [^_Ð1[^_ÐUWVS[I6$$$t$VP蒦u"WUV [^_]Ð1[^_]ÐUWVS[5l$E0 u1[^_]Ð}ujjUhU¥VWUZ@9(u= P9Pwj P臤 @8uE[^_]ÐWVS[-5D$8u1PP蘥t)D$ PhTjƢ t6fT$ ft,fL$ft"3P茢‹Pv‹P͢tjj jPP裢tjj jP躢81[^_Ð /(8u jj P 8Ou  0t PPz‹T1ҋ8t7$8t,8u 8t8u<8u18u 8t8u8u4[^_ÐWVS[Ý2D$D$ FD$ D$ P譡‹>uՍD$ FD$ PD$P~‹>u΋8t'tp[^_ÐwP~ tzP͟~ t:utp[^_ÐS[r1D$jP询[ÐS[R1T$t8t p8u |8tJ0[ÐD$`0Ð UWVS[0|$ GT$$r9so L$$I L$9sl$L$T$$JL$WWT$9vL$T$L$$QT$OO 9v|$9D$~9|[^_] Ð+l$)t$+|$O)9t$D$)tJ~+~jWUVT$4R FjWUVL$4QFjWUVT$4RF9t$~[jWUVL$4QɝFjWUPT$4R贝FjWUPL$4Q蟝FjWUPT$4R芝9t$[^_] ÐVS[q/t$ L$T$D$jPRQV?[^ÐUWVS[?/|$o19tP~2~jGHPjjWjGHPjVWݜFjGHPjVWɜF9}]jGHPjVW谜VjGHPjRW蚜VjGHPjRW脜VjGHPjRWn9|[^_]ÐUWVS[_.|$o19tP~2~jGHPjjWjGHPjVWFjGHPjVWF9}]jGHPjVWЛVjGHPjRW躛VjGHPjRW褛VjGHPjRW莛9|[^_]ÐUWV|$l$L$t$|$ t G$G ƋG$u(G$@G$@ #@9vG$@ 90s0^_]ÐUWVS[,|$T$ T$o%Gqۉt$Kc+x*8*8*8*8*8**8*8**8*8*8*"+:+8*8*8*8*8*8*8*8*8*8**8*8*8**8*x*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*8*H+8*8*8*8**8*8*8*8*X+8*X*t$`|$ ~1|$c~D$d 0EEL$D$ 0EED$ р0MET$$T$G9D$D$yD$GD$D$[ȈEEID$ ȉD$(D$}$T$)‰)D$GGE[^_]Ð}[^_]Ð,UWVS[*l$Uj詚D$jt$VZjVR|$ WVjUD$0jV0$jVj3莚jjuИPj2Ujj(耙@PRjWj[^_],ÐS[R)Pj荗[ÐS[")Pj][WVS[)ǃPj聙t1[^_Ð 󥋃PP(4$hNj 󥃣tƃƃ~ 󥁣48uߋ% 0PjjZ %[^_ÐS['LǃPjj %[ÐS[Â'LǃPjj裘 %[ÐS["'LthPjj@ %[ÐS[&LtPjj %[ÐS[b&tH HPjj臗 %[S[&t` HPjj7 %[S[%hlHLPjjÖ %[ÐS[B%hl `PjjG %[S[$ PHuOX= v ǃX XP蛓Hu ǃXXPjHP PHPjPAPjP*([ÐS[$֔@tMx0})PjpPݓ@`0 jj@BHPBPP0PjP薓PjP P賒jjj PQ,Pjj螔 %[ÐS["#Pj譓%[ÐS["Pjj; %[ÐVS["pxtЃ>u[^ÐS[Ò"f[unknownTERMxxxx|dumb:licoLINESCOLUMNSambsdaeohcinmimsncnsosulxbxnxtxsxxALbcbtcdceclcmcrcsdcDLdmdoedeik0k1k2k3k4k5k6k7k8k9hoicimipkdkekhklkrkskullmandnlpcrcscseSFsoSRtatetiucueupusvbvsvealdlsfsrALDLUPDOLERIsgugcurses: __tscroll failed0xff0xfe0xfd0xfc0xfb0xfa0xf90xf80xf70xf60xf50xf40xf30xf20xf10xf00xef0xee0xed0xec0xeb0xea0xe90xe80xe70xe60xe50xe40xe30xe20xe10xe00xdf0xde0xdd0xdc0xdb0xda0xd90xd80xd70xd60xd50xd40xd30xd20xd10xd00xcf0xce0xcd0xcc0xcb0xca0xc90xc80xc70xc60xc50xc40xc30xc20xc10xc00xbf0xbe0xbd0xbc0xbb0xba0xb90xb80xb70xb60xb50xb40xb30xb20xb10xb00xaf0xae0xad0xac0xab0xaa0xa90xa80xa70xa60xa50xa40xa30xa20xa10xa00x9f0x9e0x9d0x9c0x9b0x9a0x990x980x970x960x950x940x930x920x910x900x8f0x8e0x8d0x8c0x8b0x8a0x890x880x870x860x850x840x830x820x810x80^?~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! ^_^~^]^\^[^Z^Y^X^W^V^U^T^S^R^Q^P^O^N^M^L^K^J^I^H^G^F^E^D^C^B^A^@@(#)addbytes.c 8.4 (Berkeley) 5/4/94 @(#)addch.c 8.2 (Berkeley) 5/4/94@(#)addnstr.c 8.2 (Berkeley) 5/4/94@(#)box.c 8.2 (Berkeley) 5/4/94@(#)clear.c 8.2 (Berkeley) 5/4/94@(#)clrtobot.c 8.2 (Berkeley) 5/4/94@(#)clrtoeol.c 8.2 (Berkeley) 5/4/94@(#)cr_put.c 8.3 (Berkeley) 5/4/94@(#)ctrace.c 8.2 (Berkeley) 10/5/93@(#)cur_hash.c 8.1 (Berkeley) 6/4/93@(#)curses.c 8.3 (Berkeley) 5/4/94X@(#)delch.c 8.2 (Berkeley) 5/4/94@(#)deleteln.c 8.2 (Berkeley) 5/4/94@(#)delwin.c 8.2 (Berkeley) 5/4/94@(#)erase.c 8.2 (Berkeley) 5/4/94@(#)fullname.c 8.1 (Berkeley) 6/4/93@(#)getch.c 8.2 (Berkeley) 5/4/94@(#)getstr.c 8.2 (Berkeley) 5/4/94@(#)id_subwins.c 8.2 (Berkeley) 5/4/94@(#)idlok.c 8.2 (Berkeley) 5/4/94@(#)initscr.c 8.2 (Berkeley) 5/4/94@(#)insch.c 8.2 (Berkeley) 5/4/94@(#)insertln.c 8.2 (Berkeley) 5/4/94@(#)longname.c 8.1 (Berkeley) 6/4/93@(#)move.c 8.2 (Berkeley) 5/4/94@(#)mvwin.c 8.2 (Berkeley) 5/4/94@(#)newwin.c 8.3 (Berkeley) 7/27/94@(#)overlay.c 8.2 (Berkeley) 5/4/94@(#)overwrite.c 8.2 (Berkeley) 5/4/94@(#)printw.c 8.3 (Berkeley) 5/4/94@(#)putchar.c 8.2 (Berkeley) 5/4/94@(#)refresh.c 8.7 (Berkeley) 8/13/94 @(#)scanw.c 8.3 (Berkeley) 5/4/94@(#)scroll.c 8.3 (Berkeley) 5/4/94@(#)setterm.c 8.7 (Berkeley) 7/27/94@(#)standout.c 8.3 (Berkeley) 8/10/94@(#)toucholap.c 8.2 (Berkeley) 5/4/94@(#)touchwin.c 8.2 (Berkeley) 5/4/94@(#)tscroll.c 8.4 (Berkeley) 7/27/94@(#)tstp.c 8.3 (Berkeley) 5/4/94@(#)tty.c 8.5 (Berkeley) 8/13/94@(#)unctrl.c 8.1 (Berkeley) 6/4/93ݜڜלԜќΜ˜ȜŜœ}{ywusqomkigeca_][YWUSQOMKIGECA?=;97531/-+)'%#! ߛݛۛٛכ՛ӛћΛɛě~ytoje`[VQLGB=83.)$ ޚٚԚϚʚŚzupkfa\WRMHC>94/*%  ߙڙՙЙ˙ƙ{vqlgb]XSN(((((()).)>)N)^)n)~)))))))))**.*>*N*^*n*~*********++.+>+N+^+n+~+++++++++,,.,>,R ( P|   &, GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.hash.dynsym.dynstr.rel.data.rel.got.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.commentx!   p )||1 ,,  ; $$D &&M((S((XP,P,k^PPdXXl ry000HT0- m        1 >  I W P, dP, z, I  9 = Eg V p$ fD  @pu uD  . (     0 rD `* #,k / 2 54 8Ю ; > GT \eM r|g9M D@/: L  Į   w p9/  `   H / ! +2@ 9@Q CG J S`& eVn q`^c {     @J   ܮ  Zn PU $t PP (   X   W )̮ , 4خ 7 Bl E H SN Y@LT b eȮ h k@[ sa |Pc W   , /e aW     pp 4 <  S h  \ H P *    "@/ ,P 3Є :| =t @ C FP QV Z dTK k/8 rc7 },d MY NT x p F $  ВT  RL  I      P? P 0aV %, / 2, 5L <  ?0 B0V O`m W^ a d@ g o@* uU }   ,,8 0T 3< $`= T `RM 6  p&  p  #(Ԯ +1 9 < ?GQa& Y \acrtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__fgotoplodtabcol__makenewquickchmakechdomvcurscrollnzapKDK9CDXNDOWN_PARM__touchlineioctltgetnumLLvsprintfprintw__waddbytesK6CAKLCRsfgettmode__bsd_signal__pfast_DYNAMIC__id_subwins__ctype_btgotogetenv__mvcur_etext__waddchND__strtol_internal__tscrollCE_IO_stdout_vsscanfOSmemcpyendwinsetvbuftouchoverlapmvcurK4SFVE__overflowVSMAboxwstandendmallocgetcapwinsertlnwdelch__unctrl__set_stophandlertgetflagMSoverwriteMy_term__unctrllen__rawmodeIM___brk_addrfflushttytypeweraseXBXSDLsigaddset__environBC__swflagssubwinabort__basetnlecho_initULK1SCHO__echoitnocbreakCMsettermDCRIGHT_PARMTADA__tcactionidlokfullnameHCCLK8overlayvwprintw_IO_stdin_killwrefreshcbreakDOGT__startwinresettywaddnstrmvwprintwDef_termK0XTDMnonlwclrtobottputsKSBTmvwinSRK3SEwdeletelnNLsavettyICAMUStouchlinenoechoscrollUETIPCal__touchwinmvwscanwLEFT_PARMnewwinwaddch__cputchar__bss_startSOwgetstrinitscrUCtouchwin__hashIPtgetenttcgetattrBSraw__uflow__noqchwmoveUP_PARMdelwinK5XXdl__restore_stophandlerwinsch_finimvprintwatexitEOK2KEwgetchK7KH__set_subwinvwscanwstdscrNCMIKUDL_PARMscanwmvscanwALEINSUPPERCASE_edata_GLOBAL_OFFSET_TABLE__endKRnorawwclearCOLS__orig_termioswstandoutRCcurscrlongnamewclrtoeol__stop_signal_handlerwscanwUPTEsrNONLCSLINESAL_PARMINEDtgetstrtcsetattrwprintwVBfreesigprocmask .= .. GDBM_File.pm AutoLoader.pm auto GDBM_File i586-linuxCarp.pm Exporter.pm TieHash.pm DynaLoader.pmFcntl.pmflush.plctime.plchat2.plpackage GDBM_File; require Carp; require TieHash; require Exporter; use AutoLoader; require DynaLoader; @ISA = qw(TieHash Exporter DynaLoader); @EXPORT = qw( GDBM_CACHESIZE GDBM_FAST GDBM_INSERT GDBM_NEWDB GDBM_READER GDBM_REPLACE GDBM_WRCREAT GDBM_WRITER ); sub AUTOLOAD { local($constname); ($constname = $AUTOLOAD) =~ s/.*:://; $val = constant($constname, @_ ? $_[0] : 0); if ($! != 0) { if ($! =~ /Invalid/) { $AutoLoader::AUTOLOAD = $AUTOLOAD; goto &AutoLoader::AUTOLOAD; } else { Carp::croak("Your vendor has not defined GDBM_File macro $constname, used"); } } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } bootstrap GDBM_File; # Preloaded methods go here. Autoload methods go after __END__, and are # processed by the autosplit program. 1; __END__ package AutoLoader; use Carp; =head1 NAME AutoLoader - load functions only on demand =head1 SYNOPSIS package FOOBAR; use Exporter; use AutoLoader; @ISA = (Exporter, AutoLoader); =head1 DESCRIPTION This module tells its users that functions in the FOOBAR package are to be autoloaded from F. See L. =cut AUTOLOAD { my $name = "auto/$AUTOLOAD.al"; $name =~ s#::#/#g; eval {require $name}; if ($@) { # The load might just have failed because the filename was too # long for some old SVR3 systems which treat long names as errors. # If we can succesfully truncate a long name then it's worth a go. # There is a slight risk that we could pick up the wrong file here # but autosplit should have warned about that when splitting. if ($name =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){ eval {require $name}; } elsif ($AUTOLOAD =~ /::DESTROY$/) { eval "sub $AUTOLOAD {}"; } if ($@){ $@ =~ s/ at .*\n//; croak $@; } } goto &$AUTOLOAD; } sub import { my ($callclass, $callfile, $callline,$path,$callpack) = caller(0); ($callpack = $callclass) =~ s#::#/#; # Try to find the autosplit index file. Eg., if the call package # is POSIX, then $INC{POSIX.pm} is something like # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that. # # However, if @INC is a relative path, this might not work. If, # for example, @INC = ('lib'), then # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require # 'auto/POSIX/autosplit.ix' (without the leading 'lib'). # if (defined($path = $INC{$callpack . '.pm'})) { # Try absolute path name. $path =~ s#^(.*)$callpack\.pm$#$1auto/$callpack/autosplit.ix#; eval { require $path; }; # If that failed, try relative path with normal @INC searching. if ($@) { $path ="auto/$callpack/autosplit.ix"; eval { require $path; }; } carp $@ if ($@); } } 1; . .. GDBM_File DynaLoaderFcntl . .. autosplit.ix# Index created by AutoSplit for ../../lib/GDBM_File.pm (file acts as timestamp) package GDBM_File; 1; . ..dl_findfile.aldl_expandspec.al autosplit.ix# NOTE: Derived from ../../lib/DynaLoader.pm. Changes made here will be lost. package DynaLoader; sub dl_findfile { # Read ext/DynaLoader/DynaLoader.doc for detailed information. # This function does not automatically consider the architecture # or the perl library auto directories. my (@args) = @_; my (@dirs, $dir); # which directories to search my (@found); # full paths to real files we have found my ($vms) = ($Config{'osname'} eq 'VMS'); print STDERR "dl_findfile(@args)\n" if $dl_debug; # accumulate directories but process files as they appear arg: foreach(@args) { # Special fast case: full filepath requires no search if (m:/: && -f $_ && !$do_expand){ push(@found,$_); last arg unless wantarray; next; } # Deal with directories first: # Using a -L prefix is the preferred option (faster and more robust) if (m:^-L:){ s/^-L//; push(@dirs, $_); next; } # Otherwise we try to try to spot directories by a heuristic # (this is a more complicated issue than it first appears) if (m:/: && -d $_){ push(@dirs, $_); next; } # VMS: we may be using native VMS directry syntax instead of # Unix emulation, so check this as well if ($vms && /[:>\]]/ && -d $_){ push(@dirs, $_); next; } # Only files should get this far... my(@names, $name); # what filenames to look for if (m:-l: ){ # convert -lname to appropriate library name s/-l//; push(@names,"lib$_.$dl_so"); push(@names,"lib$_.a"); }else{ # Umm, a bare name. Try various alternatives: # these should be ordered with the most likely first push(@names,"$_.$dl_so") unless m/\.$dl_so$/o; push(@names,"lib$_.$dl_so") unless m:/:; push(@names,"$_.o") unless m/\.(o|$dl_so)$/o; push(@names,"$_.a") unless m/\.a$/; push(@names, $_); } foreach $dir (@dirs, @dl_library_path) { next unless -d $dir; foreach $name (@names) { my($file) = "$dir/$name"; print STDERR " checking in $dir for $name\n" if $dl_debug; $file = _check_file($file); if ($file){ push(@found, $file); next arg; # no need to look any further } } } } if ($dl_debug) { foreach(@dirs) { print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_; } print STDERR "dl_findfile found: @found\n"; } return $found[0] unless wantarray; @found; } 1; # NOTE: Derived from ../../lib/DynaLoader.pm. Changes made here will be lost. package DynaLoader; sub dl_expandspec{ my($spec) = @_; # Optional function invoked if DynaLoader.pm sets $do_expand. # Most systems do not require or use this function. # Some systems may implement it in the dl_*.xs file in which case # this autoload version will not be called but is harmless. # This function is designed to deal with systems which treat some # 'filenames' in a special way. For example VMS 'Logical Names' # (something like unix environment variables - but different). # This function should recognise such names and expand them into # full file paths. # Must return undef if $spec is invalid or file does not exist. my($file) = $spec; # default output to input my($osname) = $Config{'osname'}; if ($osname eq 'VMS'){ # dl_expandspec should be defined in dl_vms.xs croak "dl_expandspec: should be defined in XS file!\n"; }else{ return undef unless -f $file; } print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug; $file; } 1; # Index created by AutoSplit for ../../lib/DynaLoader.pm (file acts as timestamp) package DynaLoader; sub dl_findfile ; sub dl_expandspec ; 1; . .. autosplit.ix# Index created by AutoSplit for ../../lib/Fcntl.pm (file acts as timestamp) package Fcntl; 1; . .. autosplit.ix# Index created by AutoSplit for ../../lib/GDBM_File.pm (file acts as timestamp) package GDBM_File; 1; . .. Config.pm auto sys features.phlinuxpackage Config; require Exporter; @ISA = (Exporter); @EXPORT = qw(%Config); $] == 5.001 or die sprintf "Perl lib version (5.001) doesn't match executable version (%.3f)\n", $]; # This file was created by configpm when Perl was built. Any changes # made to this file will be lost the next time perl is built. =head1 NAME Config - access Perl configuration option =head1 SYNOPSIS use Config; if ($Config{'cc'} =~ /gcc/) { print "built by gcc\n"; } =head1 DESCRIPTION The Config module contains everything that was available to the C program at Perl build time. Shell variables from F are stored in the readonly-variable C<%Config>, indexed by their names. =head1 EXAMPLE Here's a more sophisticated example of using %Config: use Config; defined $Config{sig_name} || die "No sigs?"; foreach $name (split(' ', $Config{sig_name})) { $signo{$name} = $i; $signame[$i] = $name; $i++; } print "signal #17 = $signame[17]\n"; if ($signo{ALRM}) { print "SIGALRM is $signo{ALRM}\n"; } =head1 NOTE This module contains a good example of how to make a variable readonly to those outside of it. =cut ## ## This file was produced by running the Configure script. It holds all the ## definitions figured out by Configure. Should you modify one of these values, ## do not forget to propagate your changes by running "Configure -der". You may ## instead choose to run each of the .SH files by yourself, or "Configure -S". ## # ## Configuration time: Tue Jul 11 10:02:02 EDT 1995 ## Configured by: marc ## Target system: linux porky.redhat.com 1.2.9 #5 thu jun 8 09:50:07 gmt 1995 i586 # ## Variables propagated from previous config.sh file. $config_sh=<<'!END!OF!CONFIG!'; archlib='/usr/lib/perl5/i586-linux' ccflags='-D__USE_BSD_SIGNAL -Dbool=char -DHAS_BOOL' cppflags='-D__USE_BSD_SIGNAL -Dbool=char -DHAS_BOOL' dynamic_ext='DB_File Fcntl GDBM_File ODBM_File POSIX SDBM_File Socket' extensions='DB_File Fcntl GDBM_File ODBM_File POSIX SDBM_File Socket' intsize='4' libpth='/lib /usr/lib /usr/local/lib' osname='linux' osvers='1' sharpbang='#!' shsharp='true' sig_name='ZERO HUP INT QUIT ILL TRAP IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH LOST PWR UNUSED' so='so' startsh='#!/bin/sh' static_ext=' ' Author='' CONFIG='true' Date='$Date' Header='' Id='$Id' Locker='' Log='$Log' Mcc='Mcc' PATCHLEVEL='1' RCSfile='$RCSfile' Revision='$Revision' Source='' State='' afs='false' alignbytes='4' aphostname='' archlibexp='/usr/lib/perl5/i586-linux' archname='i586-linux' awk='awk' baserev='5.0' bash='' bin='/usr/bin' binexp='/usr/bin' bison='' byacc='byacc' byteorder='1234' c='' castflags='0' cat='cat' cc='gcc' cccdlflags='-fpic' ccdlflags='-rdynamic' cf_by='marc' cf_time='Tue Jul 11 10:02:02 EDT 1995' chgrp='' chmod='' chown='' clocktype='clock_t' comm='comm' compress='' contains='grep' cp='cp' cpio='' cpp='cpp' cpp_stuff='42' cpplast='-' cppminus='-' cpprun='gcc -E' cppstdin='gcc -E' cryptlib='' csh='csh' d_Gconvert='gcvt((x),(n),(b))' d_access='define' d_alarm='define' d_archlib='define' d_attribut='define' d_bcmp='define' d_bcopy='define' d_bsd='undef' d_bsdpgrp='undef' d_bzero='define' d_casti32='undef' d_castneg='define' d_charvspr='undef' d_chown='define' d_chroot='define' d_chsize='undef' d_closedir='define' d_const='define' d_crypt='define' d_csh='define' d_cuserid='define' d_dbl_dig='define' d_dbm_open='undef' d_difftime='define' d_dirnamlen='undef' d_dlerror='define' d_dlopen='define' d_dlsymun='undef' d_dosuid='define' d_dup2='define' d_eunice='undef' d_fchmod='define' d_fchown='define' d_fcntl='define' d_fd_macros='define' d_fd_set='define' d_fds_bits='define' d_fgetpos='define' d_flexfnam='define' d_flock='define' d_fork='define' d_fpathconf='define' d_fsetpos='define' d_getgrps='define' d_gethent='define' d_gethname='undef' d_getlogin='define' d_getpgrp2='undef' d_getpgrp='define' d_getppid='define' d_getprior='define' d_htonl='define' d_index='undef' d_isascii='define' d_killpg='define' d_link='define' d_locconv='define' d_lockf='define' d_lstat='define' d_mblen='define' d_mbstowcs='define' d_mbtowc='define' d_memcmp='define' d_memcpy='define' d_memmove='define' d_memset='define' d_mkdir='define' d_mkfifo='define' d_mktime='define' d_msg='define' d_msgctl='define' d_msgget='define' d_msgrcv='define' d_msgsnd='define' d_mymalloc='undef' d_nice='define' d_oldsock='undef' d_open3='define' d_pathconf='define' d_pause='define' d_phostname='undef' d_pipe='define' d_portable='define' d_pwage='undef' d_pwchange='undef' d_pwclass='undef' d_pwcomment='undef' d_pwexpire='undef' d_pwquota='undef' d_readdir='define' d_readlink='define' d_rename='define' d_rewinddir='define' d_rmdir='define' d_safebcpy='define' d_safemcpy='undef' d_seekdir='define' d_select='define' d_sem='define' d_semctl='define' d_semget='define' d_semop='define' d_setegid='define' d_seteuid='define' d_setlinebuf='define' d_setlocale='define' d_setpgid='define' d_setpgrp2='undef' d_setpgrp='define' d_setprior='define' d_setregid='define' d_setresgid='undef' d_setresuid='undef' d_setreuid='define' d_setrgid='undef' d_setruid='undef' d_setsid='define' d_shm='define' d_shmat='define' d_shmatprototype='define' d_shmctl='define' d_shmdt='define' d_shmget='define' d_shrplib='undef' d_sitelib='undef' d_socket='define' d_sockpair='define' d_statblks='define' d_stdio_cnt_lval='undef' d_stdio_ptr_lval='define' d_stdiobase='define' d_stdstdio='define' d_strchr='define' d_strcoll='define' d_strctcpy='define' d_strerrm='strerror(e)' d_strerror='define' d_strxfrm='define' d_suidsafe='undef' d_symlink='define' d_syscall='define' d_sysconf='define' d_sysernlst='' d_syserrlst='define' d_system='define' d_tcgetpgrp='define' d_tcsetpgrp='define' d_telldir='define' d_time='define' d_times='define' d_truncate='define' d_tzname='define' d_umask='define' d_uname='define' d_vfork='undef' d_void_closedir='undef' d_voidsig='define' d_voidtty='' d_volatile='define' d_vprintf='define' d_wait4='define' d_waitpid='define' d_wcstombs='define' d_wctomb='define' d_xenix='undef' date='date' db_hashtype='u_int32_t' db_prefixtype='size_t' defvoidused='15' direntrytype='struct dirent' dlext='so' dlsrc='dl_dlopen.xs' echo='echo' egrep='egrep' emacs='' eunicefix=':' expr='expr' find='find' flex='' fpostype='fpos_t' freetype='void' full_csh='/bin/csh' full_sed='/bin/sed' gcc='' gccversion='2.7.0' gidtype='gid_t' glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/local/lib ' grep='grep' groupcat='' groupstype='gid_t' h_fcntl='false' h_sysfile='true' hint='previous' hostcat='' huge='' i_bsdioctl='' i_db='define' i_dbm='define' i_dirent='define' i_dld='undef' i_dlfcn='define' i_fcntl='undef' i_float='define' i_gdbm='define' i_grp='define' i_limits='define' i_malloc='define' i_math='define' i_memory='define' i_ndbm='undef' i_neterrno='undef' i_niin='define' i_pwd='define' i_sgtty='undef' i_stdarg='define' i_stddef='define' i_stdlib='define' i_string='define' i_sysdir='define' i_sysfile='define' i_sysfilio='undef' i_sysin='undef' i_sysioctl='define' i_sysndir='undef' i_sysparam='define' i_sysselct='undef' i_syssockio='' i_sysstat='define' i_systime='define' i_systimek='undef' i_systimes='define' i_systypes='define' i_termio='undef' i_termios='define' i_time='undef' i_unistd='define' i_utime='define' i_varargs='undef' i_varhdr='stdarg.h' i_vfork='undef' incpath='' inews='' installarchlib='/usr/lib/perl5/i586-linux' installbin='/usr/bin' installman1dir='/usr/man/man1' installman3dir='/usr/man/man3' installprivlib='/usr/lib/perl5' installscript='/usr/bin' installsitelib='' known_extensions='DB_File Fcntl GDBM_File NDBM_File ODBM_File POSIX SDBM_File Socket' ksh='' large='' ld='gcc' lddlflags='-shared' ldflags='' less='' libc='' libs='-lgdbm -ldbm -ldb -ldl -lm -lc -lbsd' libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x' line='line' lint='' lkflags='' ln='ln' lns='/bin/ln -s' lp='' lpr='' ls='ls' lseektype='off_t' mail='' mailx='' make='' mallocobj='' mallocsrc='' malloctype='void *' man1dir='/usr/man/man1' man1direxp='/usr/man/man1' man1ext='1' man3dir='/usr/man/man3' man3direxp='/usr/man/man3' man3ext='3' medium='' mips='' mips_type='' mkdir='mkdir' models='none' modetype='mode_t' more='' mv='' myarchname='i586-linux' mydomain='' myhostname='porky.redhat.com' myuname='linux porky.redhat.com 1.2.9 #5 thu jun 8 09:50:07 gmt 1995 i586 ' n='-n' nm_opt='' nroff='nroff' optimize='-O2 -m486' orderlib='false' package='perl5' passcat='' patchlevel='1' perl='perl' pg='' phostname='hostname' plibpth='' pmake='' pr='' prefix='/usr' prefixexp='/usr' privlib='/usr/lib/perl5' privlibexp='/usr/lib/perl5' prototype='define' randbits='31' ranlib=':' rm='rm' rmail='' runnm='false' scriptdir='/usr/bin' scriptdirexp='/usr/bin' sed='sed' selecttype='fd_set *' sendmail='' sh='' shar='' shmattype='char *' shrpdir='none' signal_t='void' sitelib='' sitelibexp='' sizetype='size_t' sleep='' smail='' small='' sockethdr='' socketlib='' sort='sort' spackage='Perl5' spitshell='cat' split='' ssizetype='ssize_t' stdchar='char' stdio_base='((fp)->_IO_read_base)' stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' stdio_ptr='((fp)->_IO_read_ptr)' strings='/usr/include/string.h' submit='' sysman='/usr/man/man1' tail='' tar='' tbl='' test='test' timeincl='/usr/include/sys/time.h ' timetype='time_t' touch='touch' tr='tr' troff='' uidtype='uid_t' uname='uname' uniq='uniq' usedl='define' usemymalloc='n' usenm='false' useposix='true' usevfork='false' usrinc='/usr/include' uuname='' vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' zcat='' !END!OF!CONFIG! tie %Config, Config; sub TIEHASH { bless {} } sub FETCH { # check for cached value (which maybe undef so we use exists not defined) return $_[0]->{$_[1]} if (exists $_[0]->{$_[1]}); my($value); # search for the item in the big $config_sh string return undef unless (($value) = $config_sh =~ m/^$_[1]='(.*)'\s*$/m); $value = undef if $value eq 'undef'; # So we can say "if $Config{'foo'}". $_[0]->{$_[1]} = $value; # cache it return $value; } sub FIRSTKEY { $prevpos = 0; my $key; ($key) = $config_sh =~ m/^(.*)=/; $key; } sub NEXTKEY { my ($pos, $len); $pos = $prevpos; $pos = index( $config_sh, "\n", $pos) + 1; $prevpos = $pos; $len = index( $config_sh, "=", $pos) - $pos; $len > 0 ? substr( $config_sh, $pos, $len) : undef; } sub EXISTS{ exists($_[0]->{$_[1]}) or $config_sh =~ m/^$_[1]=/m; } sub readonly { die "\%Config::Config is read-only\n" } sub myconfig { my($output); $output = <<'END'; Summary of my $package (patchlevel $PATCHLEVEL) configuration: Platform: osname=$osname, osver=$osvers, archname=$archname uname='$myuname' hint=$hint Compiler: cc='$cc', optimize='$optimize' cppflags='$cppflags' ccflags ='$ccflags' ldflags ='$ldflags' stdchar='$stdchar', d_stdstdio=$d_stdstdio, usevfork=$usevfork voidflags=$voidflags, castflags=$castflags, d_casti32=$d_casti32, d_castneg=$d_castneg intsize=$intsize, alignbytes=$alignbytes, usemymalloc=$usemymalloc, randbits=$randbits Libraries: so=$so libpth=$libpth libs=$libs libc=$libc Dynamic Linking: dlsrc=$dlsrc, dlext=$dlext, d_dlsymun=$d_dlsymun cccdlflags='$cccdlflags', ccdlflags='$ccdlflags', lddlflags='$lddlflags' END $output =~ s/\$(\w+)/$Config{$1}/ge; $output; } sub STORE { &readonly } sub DELETE{ &readonly } sub CLEAR { &readonly } 1; . .. GDBM_FileFcntl . ...exists .packlist GDBM_File.so GDBM_File.bsGDBM_File.bs ../../lib/auto/GDBM_File/GDBM_File.so ../../lib/auto/GDBM_File/GDBM_File.bs ../../lib/GDBM_File.pm ELF 4'4 (E$E$$4TT%5%5),20 $ .4"&3 #!(*  -+ /1'%5 4 &  ,28@ NWbpszP+0  r$/9p4Q\eZ~P\0r^+(ZA;Mfrft 464646_DYNAMIC_GLOBAL_OFFSET_TABLE__init_finicroakerrnoXS_GDBM_File_constantstack_spstack_basemarkstack_ptrnasv_2pvsv_2ivsv_newmortalsv_setnvXS_GDBM_File_gdbm_TIEHASHgdbm_opensv_setref_pvXS_GDBM_File_gdbm_closesv_isagdbm_closeXS_GDBM_File_gdbm_DESTROYXS_GDBM_File_gdbm_FETCHgdbm_fetchsv_usepvnXS_GDBM_File_gdbm_STOREgdbm_storesv_setivXS_GDBM_File_gdbm_DELETEgdbm_deleteXS_GDBM_File_gdbm_FIRSTKEYgdbm_firstkeyXS_GDBM_File_gdbm_NEXTKEYgdbm_nextkeyXS_GDBM_File_gdbm_reorganizegdbm_reorganizeXS_GDBM_File_gdbm_syncgdbm_syncXS_GDBM_File_gdbm_existsgdbm_existsXS_GDBM_File_gdbm_setoptgdbm_setoptboot_GDBM_FilenewXSsv_yeslibgdbm.so.2___brk_addr__environatexit_etext_edata__bss_start_end5!5#T55.|55/\5 5)x5d5 l555t55%55'X55-h5p5`5 45(55 55 5 5,5 5$5"(5&,50545*85<5@50D5H5L5P5$ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hVS[)pxtЃ>u[^ÐS[ê)[ÐUS[×)EPPXUWVS[u)dUH+''''''('''''''''''''''''''uu u<utzu u u L~u tgu t;u" uD5u/ u de[^_]ÐUWVS[â'hlp62z)tTP4 A tt@0tPQ+ƋlD@ t @ PPVp]‹luuRWhle[^_]ÐUWVS[Ò&hlp62BU)MȃvyP}B ttRtPRl0}LA tt@DtPQEl}D@ t@ PEl}D @ t@ PE}xFl0}LA tt@DtPQ+P}W}Wj}W‹l}VPRhle[^_]ÐUWVS[õ$hlp62z)tPGPPHt9l@ t@ -P2PPhle[^_]ÐUWVS[#hlp62z)tPW@ t'@ t @ &Pb2P Phle[^_]ÐU WVS["hlp 61AM)tHRR}Rt6lB tB RrERl2}D@ ttRTtRP E싓tUUuu}WRW}}}}l}}W}WPZhl}e[^_]ÐUWVS[r!hlp 61AM)EƒviRR}Rt6lB tB RERl2}D@ ttRTtRPEt9}l}TB tRTQRAE苓tU}4l}T B t B RPuuuu}Wl}VP t>}d:uRm}W}WdRVRJhl}e[^_]ÐUWVS[2hlp 61AM)tRR}Rt6lB tB RER\l2}D@ ttRTtRPKEtUuu}W l}VPOhle[^_]ÐUWVS[hlp 61AM)tRcR}Ret6lB tB *RRRUPRN}}}}l}}W}WPhl}e[^_]ÐU WVS[òhlp 61AM)t6RCR}REt6lB tB R2ERl2}D@ ttRTtRPE싓tUUuu}WR}}}}fl}}W}WPhl}e[^_]ÐUWVS[5hlp62z)tYPPPt9l@ t@ -PP\PK‹lVRhle[^_]ÐUWVS[%hlp62z)tzPPPt9l@ t@ -PPLPhle[^_]ÐUWVS[2hlp 61AM)tRR}Rt6lB tB RER\l2}D@ ttRTtRPKEtUuu}Wl}VPOhle[^_]ÐU WVS[hlp62z)tPdD@ t@ PrElD@ t@ PBElD @ tp PƍPlPt6l@ t@ PPlVEPMQRR‹lVRhle[^_]ÐUWVS[5p<GV|PP$VP PVP P$VP1PVPDPVPUP$VPfPVPxPVPP~$VPPgVPPSVPP?$VPP(lh<8e[^_]ÐVS[pxtЃ>u[^ÐS[ÚF[GDBM_File::%s not implemented on this architectureGDBM_CACHESIZEGDBM_FASTGDBM_FASTMODEGDBM_INSERTGDBM_NEWDBGDBM_READERGDBM_REPLACEGDBM_WRCREATGDBM_WRITER0@@@Usage: GDBM_File::constant(name,arg)Usage: GDBM_File::TIEHASH(dbtype, name, read_write, mode, fatal_func = (FATALFUNC)croak)GDBM_FileUsage: GDBM_File::close(db)db is not of type GDBM_FileUsage: GDBM_File::DESTROY(db)db is not a referenceUsage: GDBM_File::FETCH(db, key)Usage: GDBM_File::STORE(db, key, value, flags = GDBM_REPLACE)No write permission to gdbm filegdbm store returned %d, errno %d, key "%.*s"Usage: GDBM_File::DELETE(db, key)Usage: GDBM_File::FIRSTKEY(db)Usage: GDBM_File::NEXTKEY(db, key)Usage: GDBM_File::reorganize(db)Usage: GDBM_File::sync(db)Usage: GDBM_File::exists(db, key)Usage: GDBM_File::setopt(db, optflag, optval, optlen)GDBM_File.cGDBM_File::constantGDBM_File::TIEHASHGDBM_File::closeGDBM_File::DESTROYGDBM_File::FETCHGDBM_File::STOREGDBM_File::DELETEGDBM_File::FIRSTKEYGDBM_File::NEXTKEYGDBM_File::reorganizeGDBM_File::syncGDBM_File::existsGDBM_File::setopt5   . > N ^ n ~  T  4,GCC: (GNU) 2.6.4 snapshot 950518GCC: (GNU) 2.7.0GCC: (GNU) 2.6.4 snapshot 950518.symtab.strtab.shstrtab.hash.dynsym.dynstr.rel.got.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.commentp! P)TT1 ,,: C I pN  dT Z Qb4$h4$o4$v4${5%464&4&V&d*' 0       14 >P I4 W4   d z4 @ I4 4  P P p 0r+5 ;t "/:AHOUa\or  @ p4+&1ZJS0k46Z  46 446$*P6PP^fmx^crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__GDBM_File.cnot_hereconstantXS_GDBM_File_gdbm_NEXTKEYgdbm_open_DYNAMICXS_GDBM_File_gdbm_reorganizegdbm_existserrno_etextsv_newmortalgdbm_closesv_isasv_2pvsv_2ivnewXS___brk_addrgdbm_firstkeyXS_GDBM_File_gdbm_FETCH__environstack_baseXS_GDBM_File_gdbm_setoptXS_GDBM_File_gdbm_DESTROY_initsv_setivnaXS_GDBM_File_constantXS_GDBM_File_gdbm_STOREgdbm_nextkeygdbm_syncgdbm_fetchXS_GDBM_File_gdbm_DELETEsv_setnvXS_GDBM_File_gdbm_closeXS_GDBM_File_gdbm_syncXS_GDBM_File_gdbm_FIRSTKEYgdbm_setopt__bss_startXS_GDBM_File_gdbm_existsstack_spsv_usepvn_finisv_setref_pvatexitsv_yes_edata_GLOBAL_OFFSET_TABLE__endcroakgdbm_deleteXS_GDBM_File_gdbm_TIEHASHmarkstack_ptrboot_GDBM_Filegdbm_storegdbm_reorganize . ...exists .packlistFcntl.soFcntl.bsFcntl.bs ../../lib/auto/Fcntl/Fcntl.so ../../lib/auto/Fcntl/Fcntl.bs ../../lib/Fcntl.pm ELF 4x4 (           &  ,28@@ R[ftw~P h _DYNAMIC_GLOBAL_OFFSET_TABLE__init_finicroakerrnostrncmpXS_Fcntl_constantstack_spstack_basemarkstack_ptrnasv_2pvsv_2ivsv_newmortalsv_setnvboot_FcntlnewXSsv_yes___brk_addr__environatexit_etext_edata__bss_start_end      ; hhhhh h($h0(h8pVS[ÙpxtЃ>u[^ÐS[j[ÐUS[WEPhPUWVS[2,Uu[^ÐS[HL[%s not implemented on this architectureF_F_DUPFDF_GETFDF_GETLKF_SETFDF_GETFLF_SETFLF_SETLKF_SETLKWF_RDLCKF_UNLCKF_WRLCKFD_CLOEXECO_O_CREATO_EXCLO_NOCTTYO_TRUNCO_APPENDO_NONBLOCKO_NDELAYO_RDONLYO_RDWRO_WRONLY@@@@@@P@`@p@@@@Usage: Fcntl::constant(name,arg)Fcntl.cFcntl::constant  L @4HGCC: (GNU) 2.6.4 snapshot 950518GCC: (GNU) 2.7.0GCC: (GNU) 2.6.4 snapshot 950518.symtab.strtab.shstrtab.hash.dynsym.dynstr.rel.got.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment! LL)1 H: 44@CIN  T Z( ( b h o v P{   V '        1 > I W  d z PI   ``  $P h/8DM  SZa@ szcrtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__Fcntl.cnot_hereconstant_DYNAMICerrno_etextsv_newmortalsv_2pvsv_2ivnewXS___brk_addr__environstack_base_initnastrncmpboot_Fcntlsv_setnv__bss_startstack_sp_finiatexitsv_yesXS_Fcntl_constant_edata_GLOBAL_OFFSET_TABLE__endcroakmarkstack_ptr . .. socket.phcdefs.phif (!defined &_SYS_SOCKET_H) { eval 'sub _SYS_SOCKET_H {1;}'; require 'features.ph'; require 'linux/socket.ph'; } 1; if (!defined &_SYS_CDEFS_H) { eval 'sub _SYS_CDEFS_H {1;}'; if (defined &__GNU_LIBRARY__) { require 'features.ph'; } if (defined &__GNUC__) { if (!defined &__P) { eval 'sub __P { local($args) = @_; eval "$args"; }'; } eval 'sub __DOTS {, ...;}'; if ((defined(&__GNUC__) ? &__GNUC__ : 0) < 2 || ((defined(&__GNUC__) ? &__GNUC__ : 0) == 2 && ((defined(&__GNUC_MINOR__) ? &__GNUC_MINOR__ : 0) < 5 || (defined( &__cplusplus) && (defined(&__GNUC_MINOR__) ? &__GNUC_MINOR__ : 0) < 6)))) { if (!defined &__CONSTVALUE) { eval 'sub __CONSTVALUE { &__const__;}'; eval 'sub __CONSTVALUE2 {1;}'; } if (!defined &__NORETURN) { eval 'sub __NORETURN { &__volatile__;}'; eval 'sub __NORETURN2 {1;}'; } } else { if (!defined &__CONSTVALUE) { eval 'sub __CONSTVALUE {1;}'; if (defined( &const) || !defined( &__STDC__)) { eval 'sub __CONSTVALUE2 {1;}'; } else { eval 'sub __CONSTVALUE2 { &__attribute__ (( &const));}'; } } if (!defined &__NORETURN) { eval 'sub __NORETURN {1;}'; if (defined &noreturn) { eval 'sub __NORETURN2 {1;}'; } else { eval 'sub __NORETURN2 { &__attribute__ (( &noreturn));}'; } } } } else { eval 'sub __inline {1;}'; eval 'sub __CONSTVALUE {1;}'; eval 'sub __CONSTVALUE2 {1;}'; eval 'sub __NORETURN {1;}'; eval 'sub __NORETURN2 {1;}'; if ((defined ((defined(&__STDC__) ? &__STDC__ : 0)) && (defined(&__STDC__) ? &__STDC__ : 0)) || defined ((defined(&__cplusplus) ? &__cplusplus : 0))) { if (!defined &__P) { eval 'sub __P { local($args) = @_; eval "$args"; }'; } eval 'sub __const { &const;}'; eval 'sub __signed { &signed;}'; eval 'sub __volatile { &volatile;}'; eval 'sub __DOTS {, ...;}'; } else { if (!defined &__P) { eval 'sub __P { local($args) = @_; eval "()"; }'; } eval 'sub __const {1;}'; eval 'sub __signed {1;}'; eval 'sub __volatile {1;}'; eval 'sub __DOTS {1;}'; } } if (defined ((defined(&__GNUC__) ? &__GNUC__ : 0)) && (defined(&__GNUC__) ? &__GNUC__ : 0) < 2) { eval 'sub __extension__ {1;}'; } if (defined ((defined(&__STDC__) ? &__STDC__ : 0)) && (defined(&__STDC__) ? &__STDC__ : 0)) { eval 'sub __CONCAT { local($x,$y) = @_; eval "$x ## $y"; }'; eval 'sub __STRING { local($x) = @_; eval "#$x"; }'; eval 'sub __ptr_t { &void *;}'; } else { eval 'sub __CONCAT { local($x,$y) = @_; eval " &xy"; }'; eval 'sub __STRING { local($x) = @_; eval "\\"x\\""; }'; eval 'sub __ptr_t {char *;}'; } if (defined &__USE_BSD) { if (0) { eval 'sub const { &__const;}'; } eval 'sub signed { &__signed;}'; eval 'sub volatile { &__volatile;}'; } if (defined &__cplusplus) { eval 'sub __BEGIN_DECLS { &extern "C" {;}'; eval 'sub __END_DECLS {};}'; } else { eval 'sub __BEGIN_DECLS {1;}'; eval 'sub __END_DECLS {1;}'; } } 1; if (!defined &_FEATURES_H) { eval 'sub _FEATURES_H {1;}'; if ((!defined( &_GNU_SOURCE) && !defined( &__STRICT_ANSI__) && !defined( &_POSIX_SOURCE) && !defined( &_POSIX_C_SOURCE) && !defined( &_BSD_SOURCE) && !defined( &_SVID_SOURCE))) { eval 'sub _GNU_SOURCE {1;}'; } eval 'sub __USE_ANSI {1;}'; if (defined &_BSD_SOURCE) { eval 'sub __FAVOR_BSD {1;}'; } if ((!defined( &__STRICT_ANSI__) && !defined( &_POSIX_SOURCE) && !defined( &_POSIX_C_SOURCE) && !defined( &_BSD_SOURCE) && !defined( &_SVID_SOURCE))) { eval 'sub _BSD_SOURCE {1;}'; eval 'sub _SVID_SOURCE {1;}'; } if ((!defined( &__STRICT_ANSI__) && !defined( &_POSIX_SOURCE) && !defined( &_POSIX_C_SOURCE))) { eval 'sub _POSIX_SOURCE {1;}'; eval 'sub _POSIX_C_SOURCE {2;}'; } if (defined( &_POSIX_SOURCE) || (defined(&_POSIX_C_SOURCE) ? &_POSIX_C_SOURCE : 0) >= 1) { eval 'sub __USE_POSIX {1;}'; } if (defined( &_POSIX_C_SOURCE) && (defined(&_POSIX_C_SOURCE) ? &_POSIX_C_SOURCE : 0) >= 2) { eval 'sub __USE_POSIX2 {1;}'; } if (defined( &_BSD_SOURCE) || defined( &_SVID_SOURCE)) { eval 'sub __USE_MISC {1;}'; } if (defined &_BSD_SOURCE) { eval 'sub __USE_BSD {1;}'; } if (defined &_SVID_SOURCE) { eval 'sub __USE_SVID {1;}'; } if (defined &_GNU_SOURCE) { eval 'sub __USE_GNU {1;}'; } eval 'sub __GNU_LIBRARY__ {1;}'; require 'sys/cdefs.ph'; } 1; . .. socket.ph sockios.phif (!defined &_LINUX_SOCKET_H) { eval 'sub _LINUX_SOCKET_H {1;}'; require 'linux/sockios.ph'; eval 'sub SOCK_STREAM {1;}'; eval 'sub SOCK_DGRAM {2;}'; eval 'sub SOCK_RAW {3;}'; eval 'sub SOCK_RDM {4;}'; eval 'sub SOCK_SEQPACKET {5;}'; eval 'sub SOCK_PACKET {10;}'; eval 'sub AF_UNSPEC {0;}'; eval 'sub AF_UNIX {1;}'; eval 'sub AF_INET {2;}'; eval 'sub AF_AX25 {3;}'; eval 'sub AF_IPX {4;}'; eval 'sub AF_APPLETALK {5;}'; eval 'sub AF_MAX {8;}'; eval 'sub PF_UNSPEC { &AF_UNSPEC;}'; eval 'sub PF_UNIX { &AF_UNIX;}'; eval 'sub PF_INET { &AF_INET;}'; eval 'sub PF_AX25 { &AF_AX25;}'; eval 'sub PF_IPX { &AF_IPX;}'; eval 'sub PF_APPLETALK { &AF_APPLETALK;}'; eval 'sub PF_MAX { &AF_MAX;}'; eval 'sub MSG_OOB {1;}'; eval 'sub MSG_PEEK {2;}'; eval 'sub MSG_DONTROUTE {4;}'; eval 'sub SOL_SOCKET {1;}'; eval 'sub SOL_IP {0;}'; eval 'sub SOL_IPX {256;}'; eval 'sub SOL_AX25 {257;}'; eval 'sub SOL_ATALK {258;}'; eval 'sub SOL_TCP {6;}'; eval 'sub SOL_UDP {17;}'; eval 'sub SO_DEBUG {1;}'; eval 'sub SO_REUSEADDR {2;}'; eval 'sub SO_TYPE {3;}'; eval 'sub SO_ERROR {4;}'; eval 'sub SO_DONTROUTE {5;}'; eval 'sub SO_BROADCAST {6;}'; eval 'sub SO_SNDBUF {7;}'; eval 'sub SO_RCVBUF {8;}'; eval 'sub SO_KEEPALIVE {9;}'; eval 'sub SO_OOBINLINE {10;}'; eval 'sub SO_NO_CHECK {11;}'; eval 'sub SO_PRIORITY {12;}'; eval 'sub SO_LINGER {13;}'; eval 'sub IP_TOS {1;}'; eval 'sub IPTOS_LOWDELAY {0x10;}'; eval 'sub IPTOS_THROUGHPUT {0x08;}'; eval 'sub IPTOS_RELIABILITY {0x04;}'; eval 'sub IP_TTL {2;}'; if (defined &V1_3_WILL_DO_THIS_FUNKY_STUFF) { eval 'sub IP_HRDINCL {3;}'; eval 'sub IP_OPTIONS {4;}'; } eval 'sub IP_MULTICAST_IF {32;}'; eval 'sub IP_MULTICAST_TTL {33;}'; eval 'sub IP_MULTICAST_LOOP {34;}'; eval 'sub IP_ADD_MEMBERSHIP {35;}'; eval 'sub IP_DROP_MEMBERSHIP {36;}'; eval 'sub IP_DEFAULT_MULTICAST_TTL {1;}'; eval 'sub IP_DEFAULT_MULTICAST_LOOP {1;}'; eval 'sub IP_MAX_MEMBERSHIPS {20;}'; eval 'sub IPX_TYPE {1;}'; eval 'sub TCP_NODELAY {1;}'; eval 'sub TCP_MAXSEG {2;}'; eval 'sub SOPRI_INTERACTIVE {0;}'; eval 'sub SOPRI_NORMAL {1;}'; eval 'sub SOPRI_BACKGROUND {2;}'; } 1; if (!defined &_LINUX_SOCKIOS_H) { eval 'sub _LINUX_SOCKIOS_H {1;}'; eval 'sub FIOSETOWN {0x8901;}'; eval 'sub SIOCSPGRP {0x8902;}'; eval 'sub FIOGETOWN {0x8903;}'; eval 'sub SIOCGPGRP {0x8904;}'; eval 'sub SIOCATMARK {0x8905;}'; eval 'sub SIOCGSTAMP {0x8906;}'; eval 'sub SIOCADDRT {0x890B;}'; eval 'sub SIOCDELRT {0x890C;}'; eval 'sub SIOCGIFNAME {0x8910;}'; eval 'sub SIOCSIFLINK {0x8911;}'; eval 'sub SIOCGIFCONF {0x8912;}'; eval 'sub SIOCGIFFLAGS {0x8913;}'; eval 'sub SIOCSIFFLAGS {0x8914;}'; eval 'sub SIOCGIFADDR {0x8915;}'; eval 'sub SIOCSIFADDR {0x8916;}'; eval 'sub SIOCGIFDSTADDR {0x8917;}'; eval 'sub SIOCSIFDSTADDR {0x8918;}'; eval 'sub SIOCGIFBRDADDR {0x8919;}'; eval 'sub SIOCSIFBRDADDR {0x891a;}'; eval 'sub SIOCGIFNETMASK {0x891b;}'; eval 'sub SIOCSIFNETMASK {0x891c;}'; eval 'sub SIOCGIFMETRIC {0x891d;}'; eval 'sub SIOCSIFMETRIC {0x891e;}'; eval 'sub SIOCGIFMEM {0x891f;}'; eval 'sub SIOCSIFMEM {0x8920;}'; eval 'sub SIOCGIFMTU {0x8921;}'; eval 'sub SIOCSIFMTU {0x8922;}'; eval 'sub OLD_SIOCGIFHWADDR {0x8923;}'; eval 'sub SIOCSIFHWADDR {0x8924;}'; eval 'sub SIOCGIFENCAP {0x8925;}'; eval 'sub SIOCSIFENCAP {0x8926;}'; eval 'sub SIOCGIFHWADDR {0x8927;}'; eval 'sub SIOCGIFSLAVE {0x8929;}'; eval 'sub SIOCSIFSLAVE {0x8930;}'; eval 'sub SIOCADDMULTI {0x8931;}'; eval 'sub SIOCDELMULTI {0x8932;}'; eval 'sub SIOCADDRTOLD {0x8940;}'; eval 'sub SIOCDELRTOLD {0x8941;}'; eval 'sub SIOCDARP {0x8950;}'; eval 'sub SIOCGARP {0x8951;}'; eval 'sub SIOCSARP {0x8952;}'; eval 'sub SIOCDRARP {0x8960;}'; eval 'sub SIOCGRARP {0x8961;}'; eval 'sub SIOCSRARP {0x8962;}'; eval 'sub SIOCGIFMAP {0x8970;}'; eval 'sub SIOCSIFMAP {0x8971;}'; eval 'sub SIOCDEVPRIVATE {0x89F0;}'; eval 'sub SIOCPROTOPRIVATE {0x89E0;}'; } 1; package Carp; =head1 NAME carp - warn of errors (from perspective of caller) croak - die of errors (from perspective of caller) confess - die of errors with stack backtrace =head1 SYNOPSIS use Carp; croak "We're outta here!"; =head1 DESCRIPTION The Carp routines are useful in your own modules because they act like die() or warn(), but report where the error was in the code they were called from. Thus if you have a routine Foo() that has a carp() in it, then the carp() will report the error as occurring where Foo() was called, not where carp() was called. =cut # This package implements handy routines for modules that wish to throw # exceptions outside of the current package. $CarpLevel = 0; # How many extra package levels to skip on carp. require Exporter; @ISA = Exporter; @EXPORT = qw(confess croak carp); sub longmess { my $error = shift; my $mess = ""; my $i = 1 + $CarpLevel; my ($pack,$file,$line,$sub); while (($pack,$file,$line,$sub) = caller($i++)) { $mess .= "\t$sub " if $error eq "called"; $mess .= "$error at $file line $line\n"; $error = "called"; } $mess || $error; } sub shortmess { # Short-circuit &longmess if called via multiple packages my $error = $_[0]; # Instead of "shift" my ($curpack) = caller(1); my $extra = $CarpLevel; my $i = 2; my ($pack,$file,$line,$sub); while (($pack,$file,$line,$sub) = caller($i++)) { if ($pack ne $curpack) { if ($extra-- > 0) { $curpack = $pack; } else { return "$error at $file line $line\n"; } } } goto &longmess; } sub confess { die longmess @_; } sub croak { die shortmess @_; } sub carp { warn shortmess @_; } 1; package Exporter; =head1 Comments If the first entry in an import list begins with !, : or / then the list is treated as a series of specifications which either add to or delete from the list of names to import. They are processed left to right. Specifications are in the form: [!]name This name only [!]:DEFAULT All names in @EXPORT [!]:tag All names in $EXPORT_TAGS{tag} anonymous list [!]/pattern/ All names in @EXPORT and @EXPORT_OK which match A leading ! indicates that matching names should be deleted from the list of names to import. If the first specification is a deletion it is treated as though preceded by :DEFAULT. If you just want to import extra names in addition to the default set you will still need to include :DEFAULT explicitly. e.g., Module.pm defines: @EXPORT = qw(A1 A2 A3 A4 A5); @EXPORT_OK = qw(B1 B2 B3 B4 B5); %EXPORT_TAGS = (T1 => [qw(A1 A2 B1 B2)], T2 => [qw(A1 A2 B3 B4)]); Note that you cannot use tags in @EXPORT or @EXPORT_OK. Names in EXPORT_TAGS must also appear in @EXPORT or @EXPORT_OK. Application says: use Module qw(:DEFAULT :T2 !B3 A3); use Socket qw(!/^[AP]F_/ !SOMAXCONN !SOL_SOCKET); use POSIX qw(/^S_/ acos asin atan /^E/ !/^EXIT/); You can set C<$Exporter::Verbose=1;> to see how the specifications are being processed and what is actually being imported into modules. =cut require 5.001; $ExportLevel = 0; $Verbose = 0; require Carp; sub export { # First make import warnings look like they're coming from the "use". local $SIG{__WARN__} = sub { my $text = shift; $text =~ s/ at \S*Exporter.pm line \d+.\n//; local $Carp::CarpLevel = 1; # ignore package calling us too. Carp::carp($text); }; my $pkg = shift; my $callpkg = shift; my @imports = @_; my($type, $sym); *exports = \@{"${pkg}::EXPORT"}; if (@imports) { my $oops; *exports = \%{"${pkg}::EXPORT"}; if (!%exports) { grep(s/^&//, @exports); @exports{@exports} = (1) x @exports; foreach $extra (@{"${pkg}::EXPORT_OK"}) { $exports{$extra} = 1; } } if ($imports[0] =~ m#^[/!:]#){ my(@allexports) = keys %exports; my $tagsref = \%{"${pkg}::EXPORT_TAGS"}; my $tagdata; my %imports; # negated first item implies starting with default set: unshift(@imports, ':DEFAULT') if $imports[0] =~ m/^!/; foreach (@imports){ my(@names); my($mode,$spec) = m/^(!)?(.*)/; $mode = '+' unless defined $mode; @names = ($spec); # default, maybe overridden below if ($spec =~ m:^/(.*)/$:){ my $patn = $1; @names = grep(/$patn/, @allexports); # XXX anchor by default? } elsif ($spec =~ m#^:(.*)# and $tagsref){ if ($1 eq 'DEFAULT'){ @names = @exports; } elsif ($tagsref and $tagdata = $tagsref->{$1}) { @names = @$tagdata; } } warn "Import Mode $mode, Spec $spec, Names @names\n" if $Verbose; if ($mode eq '!') { map {delete $imports{$_}} @names; # delete @imports{@names} would be handy :-) } else { @imports{@names} = (1) x @names; } } @imports = keys %imports; } foreach $sym (@imports) { if (!$exports{$sym}) { if ($sym !~ s/^&// || !$exports{$sym}) { warn qq["$sym" is not exported by the $pkg module ], "at $callfile line $callline\n"; $oops++; next; } } } Carp::croak("Can't continue with import errors.\n") if $oops; } else { @imports = @exports; } warn "Importing from $pkg into $callpkg: ", join(", ",@imports),"\n" if ($Verbose && @imports); foreach $sym (@imports) { $type = '&'; $type = $1 if $sym =~ s/^(\W)//; *{"${callpkg}::$sym"} = $type eq '&' ? \&{"${pkg}::$sym"} : $type eq '$' ? \${"${pkg}::$sym"} : $type eq '@' ? \@{"${pkg}::$sym"} : $type eq '%' ? \%{"${pkg}::$sym"} : $type eq '*' ? *{"${pkg}::$sym"} : warn "Can't export symbol: $type$sym\n"; } }; sub import { local ($callpkg, $callfile, $callline) = caller($ExportLevel); my $pkg = shift; export $pkg, $callpkg, @_; } sub export_tags { my ($pkg) = caller; *tags = \%{"${pkg}::EXPORT_TAGS"}; push(@{"${pkg}::EXPORT"}, map {$tags{$_} ? @{$tags{$_}} : $_} @_ ? @_ : keys %tags); } 1; package TieHash; use Carp; sub new { my $pack = shift; $pack->TIEHASH(@_); } # Grandfather "new" sub TIEHASH { my $pack = shift; if (defined &{"$pack\::new"}) { carp "WARNING: calling $pack\->new since $pack\->TIEHASH is missing" if $^W; $pack->new(@_); } else { croak "$pack doesn't define a TIEHASH method"; } } sub EXISTS { my $pack = ref $_[0]; croak "$pack doesn't define an EXISTS method"; } sub CLEAR { my $self = shift; my $key = $self->FIRSTKEY(@_); my @keys; while (defined $key) { push @keys, $key; $key = $self->NEXTKEY(@_, $key); } foreach $key (@keys) { $self->DELETE(@_, $key); } } # The TieHash::Std package implements standard perl hash behaviour. # It exists to act as a base class for classes which only wish to # alter some parts of their behaviour. package TieHash::Std; @ISA = qw(TieHash); sub TIEHASH { bless {}, $_[0] } sub STORE { $_[0]->{$_[1]} = $_[2] } sub FETCH { $_[0]->{$_[1]} } sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} } sub NEXTKEY { each %{$_[0]} } sub EXISTS { exists $_[0]->{$_[1]} } sub DELETE { delete $_[0]->{$_[1]} } sub CLEAR { %{$_[0]} = () } 1; package DynaLoader; =head1 NAME DynaLoader - Dynamically load C libraries into Perl code dl_error(), dl_findfile(), dl_expandspec(), dl_load_file(), dl_find_symbol(), dl_undef_symbols(), dl_install_xsub(), boostrap() - routines used by DynaLoader modules =head1 SYNOPSIS require DynaLoader; @ISA = qw(... DynaLoader ...); =head1 DESCRIPTION This document defines a standard generic interface to the dynamic linking mechanisms available on many platforms. Its primary purpose is to implement automatic dynamic loading of Perl modules. This document serves as both a specification for anyone wishing to implement the DynaLoader for a new platform and as a guide for anyone wishing to use the DynaLoader directly in an application. The DynaLoader is designed to be a very simple high-level interface that is sufficiently general to cover the requirements of SunOS, HP-UX, NeXT, Linux, VMS and other platforms. It is also hoped that the interface will cover the needs of OS/2, NT etc and also allow pseudo-dynamic linking (using C at runtime). It must be stressed that the DynaLoader, by itself, is practically useless for accessing non-Perl libraries because it provides almost no Perl-to-C 'glue'. There is, for example, no mechanism for calling a C library function or supplying arguments. It is anticipated that any glue that may be developed in the future will be implemented in a separate dynamically loaded module. DynaLoader Interface Summary @dl_library_path @dl_resolve_using @dl_require_symbols $dl_debug Implemented in: bootstrap($modulename) Perl @filepaths = dl_findfile(@names) Perl $libref = dl_load_file($filename) C $symref = dl_find_symbol($libref, $symbol) C @symbols = dl_undef_symbols() C dl_install_xsub($name, $symref [, $filename]) C $message = dl_error C =over 4 =item @dl_library_path The standard/default list of directories in which dl_findfile() will search for libraries etc. Directories are searched in order: $dl_library_path[0], [1], ... etc @dl_library_path is initialised to hold the list of 'normal' directories (F, etc) determined by B (C<$Config{'libpth'}>). This should ensure portability across a wide range of platforms. @dl_library_path should also be initialised with any other directories that can be determined from the environment at runtime (such as LD_LIBRARY_PATH for SunOS). After initialisation @dl_library_path can be manipulated by an application using push and unshift before calling dl_findfile(). Unshift can be used to add directories to the front of the search order either to save search time or to override libraries with the same name in the 'normal' directories. The load function that dl_load_file() calls may require an absolute pathname. The dl_findfile() function and @dl_library_path can be used to search for and return the absolute pathname for the library/object that you wish to load. =item @dl_resolve_using A list of additional libraries or other shared objects which can be used to resolve any undefined symbols that might be generated by a later call to load_file(). This is only required on some platforms which do not handle dependent libraries automatically. For example the Socket Perl extension library (F) contains references to many socket functions which need to be resolved when it's loaded. Most platforms will automatically know where to find the 'dependent' library (e.g., F). A few platforms need to to be told the location of the dependent library explicitly. Use @dl_resolve_using for this. Example usage: @dl_resolve_using = dl_findfile('-lsocket'); =item @dl_require_symbols A list of one or more symbol names that are in the library/object file to be dynamically loaded. This is only required on some platforms. =item dl_error() Syntax: $message = dl_error(); Error message text from the last failed DynaLoader function. Note that, similar to errno in unix, a successful function call does not reset this message. Implementations should detect the error as soon as it occurs in any of the other functions and save the corresponding message for later retrieval. This will avoid problems on some platforms (such as SunOS) where the error message is very temporary (e.g., dlerror()). =item $dl_debug Internal debugging messages are enabled when $dl_debug is set true. Currently setting $dl_debug only affects the Perl side of the DynaLoader. These messages should help an application developer to resolve any DynaLoader usage problems. $dl_debug is set to C<$ENV{'PERL_DL_DEBUG'}> if defined. For the DynaLoader developer/porter there is a similar debugging variable added to the C code (see dlutils.c) and enabled if Perl was built with the B<-DDEBUGGING> flag. This can also be set via the PERL_DL_DEBUG environment variable. Set to 1 for minimal information or higher for more. =item dl_findfile() Syntax: @filepaths = dl_findfile(@names) Determine the full paths (including file suffix) of one or more loadable files given their generic names and optionally one or more directories. Searches directories in @dl_library_path by default and returns an empty list if no files were found. Names can be specified in a variety of platform independent forms. Any names in the form B<-lname> are converted into F, where F<.*> is an appropriate suffix for the platform. If a name does not already have a suitable prefix and/or suffix then the corresponding file will be searched for by trying combinations of prefix and suffix appropriate to the platform: "$name.o", "lib$name.*" and "$name". If any directories are included in @names they are searched before @dl_library_path. Directories may be specified as B<-Ldir>. Any other names are treated as filenames to be searched for. Using arguments of the form C<-Ldir> and C<-lname> is recommended. Example: @dl_resolve_using = dl_findfile(qw(-L/usr/5lib -lposix)); =item dl_expandspec() Syntax: $filepath = dl_expandspec($spec) Some unusual systems, such as VMS, require special filename handling in order to deal with symbolic names for files (i.e., VMS's Logical Names). To support these systems a dl_expandspec() function can be implemented either in the F file or code can be added to the autoloadable dl_expandspec() function in F. See F for more information. =item dl_load_file() Syntax: $libref = dl_load_file($filename) Dynamically load $filename, which must be the path to a shared object or library. An opaque 'library reference' is returned as a handle for the loaded object. Returns undef on error. (On systems that provide a handle for the loaded object such as SunOS and HPUX, $libref will be that handle. On other systems $libref will typically be $filename or a pointer to a buffer containing $filename. The application should not examine or alter $libref in any way.) This is function that does the real work. It should use the current values of @dl_require_symbols and @dl_resolve_using if required. SunOS: dlopen($filename) HP-UX: shl_load($filename) Linux: dld_create_reference(@dl_require_symbols); dld_link($filename) NeXT: rld_load($filename, @dl_resolve_using) VMS: lib$find_image_symbol($filename,$dl_require_symbols[0]) =item dl_find_symbol() Syntax: $symref = dl_find_symbol($libref, $symbol) Return the address of the symbol $symbol or C if not found. If the target system has separate functions to search for symbols of different types then dl_find_symbol() should search for function symbols first and then other types. The exact manner in which the address is returned in $symref is not currently defined. The only initial requirement is that $symref can be passed to, and understood by, dl_install_xsub(). SunOS: dlsym($libref, $symbol) HP-UX: shl_findsym($libref, $symbol) Linux: dld_get_func($symbol) and/or dld_get_symbol($symbol) NeXT: rld_lookup("_$symbol") VMS: lib$find_image_symbol($libref,$symbol) =item dl_undef_symbols() Example @symbols = dl_undef_symbols() Return a list of symbol names which remain undefined after load_file(). Returns C<()> if not known. Don't worry if your platform does not provide a mechanism for this. Most do not need it and hence do not provide it, they just return an empty list. =item dl_install_xsub() Syntax: dl_install_xsub($perl_name, $symref [, $filename]) Create a new Perl external subroutine named $perl_name using $symref as a pointer to the function which implements the routine. This is simply a direct call to newXSUB(). Returns a reference to the installed function. The $filename parameter is used by Perl to identify the source file for the function if required by die(), caller() or the debugger. If $filename is not defined then "DynaLoader" will be used. =item boostrap() Syntax: bootstrap($module) This is the normal entry point for automatic dynamic loading in Perl. It performs the following actions: =over 8 =item * locates an auto/$module directory by searching @INC =item * uses dl_findfile() to determine the filename to load =item * sets @dl_require_symbols to C<("boot_$module")> =item * executes an F file if it exists (typically used to add to @dl_resolve_using any files which are required to load the module on the current platform) =item * calls dl_load_file() to load the file =item * calls dl_undef_symbols() and warns if any symbols are undefined =item * calls dl_find_symbol() for "boot_$module" =item * calls dl_install_xsub() to install it as "${module}::bootstrap" =item * calls &{"${module}::bootstrap"} to bootstrap the module =back =back =head1 AUTHOR Tim Bunce, 11 August 1994. This interface is based on the work and comments of (in no particular order): Larry Wall, Robert Sanders, Dean Roehrich, Jeff Okamoto, Anno Siegel, Thomas Neumann, Paul Marquess, Charles Bailey, myself and others. Larry Wall designed the elegant inherited bootstrap mechanism and implemented the first Perl 5 dynamic loader using it. =cut # # And Gandalf said: 'Many folk like to know beforehand what is to # be set on the table; but those who have laboured to prepare the # feast like to keep their secret; for wonder makes the words of # praise louder.' # # Quote from Tolkien sugested by Anno Siegel. # # Read ext/DynaLoader/README for detailed information. # # Tim.Bunce@ig.co.uk, August 1994 use Config; use Carp; use AutoLoader; @ISA=qw(AutoLoader); # enable messages from DynaLoader perl code $dl_debug = 0 unless $dl_debug; $dl_debug = $ENV{'PERL_DL_DEBUG'} if $ENV{'PERL_DL_DEBUG'}; $dl_so = $dl_dlext = ""; # avoid typo warnings $dl_so = $Config{'so'}; # suffix for shared libraries $dl_dlext = $Config{'dlext'}; # suffix for dynamic modules # Some systems need special handling to expand file specifications # (VMS support by Charles Bailey ) # See dl_expandspec() for more details. Should be harmless but # inefficient to define on systems that don't need it. $do_expand = ($Config{'osname'} eq 'VMS'); @dl_require_symbols = (); # names of symbols we need @dl_resolve_using = (); # names of files to link with @dl_library_path = (); # path to look for files # This is a fix to support DLD's unfortunate desire to relink -lc @dl_resolve_using = dl_findfile('-lc') if $Config{'dlsrc'} eq "dl_dld.xs"; # Initialise @dl_library_path with the 'standard' library path # for this platform as determined by Configure push(@dl_library_path, split(' ',$Config{'libpth'})); # Add to @dl_library_path any extra directories we can gather from # environment variables. So far LD_LIBRARY_PATH is the only known # variable used for this purpose. Others may be added later. push(@dl_library_path, split(/:/, $ENV{'LD_LIBRARY_PATH'})) if $ENV{'LD_LIBRARY_PATH'}; # No prizes for guessing why we don't say 'bootstrap DynaLoader;' here. boot_DynaLoader() if defined(&boot_DynaLoader); $%&'()* if ($dl_debug){ print STDERR "DynaLoader.pm loaded (@dl_library_path)\n"; print STDERR "DynaLoader not linked into this perl\n" unless defined(&boot_DynaLoader); } 1; # End of main code # The bootstrap function cannot be autoloaded (without complications) # so we define it here: sub bootstrap { # use local vars to enable $module.bs script to edit values local(@args) = @_; local($module) = $args[0]; local(@dirs, $file); confess "Usage: DynaLoader::bootstrap(module)" unless $module; # A common error on platforms which don't support dynamic loading. # Since it's fatal and potentially confusing we give a detailed message. croak("Can't load module $module, dynamic loading not available in this perl.\n". " (You may need to build a new perl executable which either supports\n". " dynamic loading or has the $module module statically linked into it.)\n") unless defined(&dl_load_file); print STDERR "DynaLoader::bootstrap($module)\n" if $dl_debug; my(@modparts) = split(/::/,$module); my($modfname) = $modparts[-1]; my($modpname) = join('/',@modparts); foreach (@INC) { my $dir = "$_/auto/$modpname"; next unless -d $dir; # skip over uninteresting directories # check for common cases to avoid autoload of dl_findfile last if ($file=_check_file("$dir/$modfname.$dl_dlext")); # no luck here, save dir for possible later dl_findfile search push(@dirs, "-L$dir"); } # last resort, let dl_findfile have a go in all known locations $file = dl_findfile(@dirs, map("-L$_",@INC), $modfname) unless $file; croak "Can't find loadable object for module $module in \@INC" unless $file; my($bootname) = "boot_$module"; $bootname =~ s/\W/_/g; @dl_require_symbols = ($bootname); # Execute optional '.bootstrap' perl script for this module. # The .bs file can be used to configure @dl_resolve_using etc to # match the needs of the individual module on this architecture. my $bs = $file; $bs =~ s/(\.\w+)?$/\.bs/; # look for .bs 'beside' the library if (-s $bs) { # only read file if it's not empty local($osname, $dlsrc) = @Config{'osname','dlsrc'}; print STDERR "BS: $bs ($osname, $dlsrc)\n" if $dl_debug; eval { do $bs; }; warn "$bs: $@\n" if $@; } # Many dynamic extension loading problems will appear to come from # this section of code: XYZ failed at line 123 of DynaLoader.pm. # Often these errors are actually occurring in the initialisation # C code of the extension XS file. Perl reports the error as being # in this perl code simply because this was the last perl code # it executed. my $libref = dl_load_file($file) or croak "Can't load '$file' for module $module: ".dl_error()."\n"; my(@unresolved) = dl_undef_symbols(); carp "Undefined symbols present after loading $file: @unresolved\n" if (@unresolved); my $boot_symbol_ref = dl_find_symbol($libref, $bootname) or croak "Can't find '$bootname' symbol in $file\n"; dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file); # See comment block above &{"${module}::bootstrap"}(@args); } sub _check_file{ # private utility to handle dl_expandspec vs -f tests my($file) = @_; return $file if (!$do_expand && -f $file); # the common case return $file if ( $do_expand && ($file=dl_expandspec($file))); return undef; } # Let autosplit and the autoloader deal with these functions: __END__ sub dl_findfile { # Read ext/DynaLoader/DynaLoader.doc for detailed information. # This function does not automatically consider the architecture # or the perl library auto directories. my (@args) = @_; my (@dirs, $dir); # which directories to search my (@found); # full paths to real files we have found my ($vms) = ($Config{'osname'} eq 'VMS'); print STDERR "dl_findfile(@args)\n" if $dl_debug; # accumulate directories but process files as they appear arg: foreach(@args) { # Special fast case: full filepath requires no search if (m:/: && -f $_ && !$do_expand){ push(@found,$_); last arg unless wantarray; next; } # Deal with directories first: # Using a -L prefix is the preferred option (faster and more robust) if (m:^-L:){ s/^-L//; push(@dirs, $_); next; } # Otherwise we try to try to spot directories by a heuristic # (this is a more complicated issue than it first appears) if (m:/: && -d $_){ push(@dirs, $_); next; } # VMS: we may be using native VMS directry syntax instead of # Unix emulation, so check this as well if ($vms && /[:>\]]/ && -d $_){ push(@dirs, $_); next; } # Only files should get this far... my(@names, $name); # what filenames to look for if (m:-l: ){ # convert -lname to appropriate library name s/-l//; push(@names,"lib$_.$dl_so"); push(@names,"lib$_.a"); }else{ # Umm, a bare name. Try various alternatives: # these should be ordered with the most likely first push(@names,"$_.$dl_so") unless m/\.$dl_so$/o; push(@names,"lib$_.$dl_so") unless m:/:; push(@names,"$_.o") unless m/\.(o|$dl_so)$/o; push(@names,"$_.a") unless m/\.a$/; push(@names, $_); } foreach $dir (@dirs, @dl_library_path) { next unless -d $dir; foreach $name (@names) { my($file) = "$dir/$name"; print STDERR " checking in $dir for $name\n" if $dl_debug; $file = _check_file($file); if ($file){ push(@found, $file); next arg; # no need to look any further } } } } if ($dl_debug) { foreach(@dirs) { print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_; } print STDERR "dl_findfile found: @found\n"; } return $found[0] unless wantarray; @found; } sub dl_expandspec{ my($spec) = @_; # Optional function invoked if DynaLoader.pm sets $do_expand. # Most systems do not require or use this function. # Some systems may implement it in the dl_*.xs file in which case # this autoload version will not be called but is harmless. # This function is designed to deal with systems which treat some # 'filenames' in a special way. For example VMS 'Logical Names' # (something like unix environment variables - but different). # This function should recognise such names and expand them into # full file paths. # Must return undef if $spec is invalid or file does not exist. my($file) = $spec; # default output to input my($osname) = $Config{'osname'}; if ($osname eq 'VMS'){ # dl_expandspec should be defined in dl_vms.xs croak "dl_expandspec: should be defined in XS file!\n"; }else{ return undef unless -f $file; } print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug; $file; } package Fcntl; =head1 NAME Fcntl - load the C Fcntl.h defines =head1 SYNOPSIS use Fcntl; =head1 DESCRIPTION This module is just a translation of the C F file. Unlike the old mechanism of requiring a translated F file, this uses the B program (see the Perl source distribution) and your native C compiler. This means that it has a far more likely chance of getting the numbers right. =head1 NOTE Only C<#define> symbols get translated; you must still correctly pack up your own arguments to pass as args for locking functions, etc. =cut require Exporter; use AutoLoader; require DynaLoader; @ISA = qw(Exporter DynaLoader); # Items to export into callers namespace by default # (move infrequently used names to @EXPORT_OK below) @EXPORT = qw( F_DUPFD F_GETFD F_GETLK F_SETFD F_GETFL F_SETFL F_SETLK F_SETLKW FD_CLOEXEC F_RDLCK F_UNLCK F_WRLCK O_CREAT O_EXCL O_NOCTTY O_TRUNC O_APPEND O_NONBLOCK O_NDELAY O_RDONLY O_RDWR O_WRONLY ); # Other items we are prepared to export if requested @EXPORT_OK = qw( ); sub AUTOLOAD { local($constname); ($constname = $AUTOLOAD) =~ s/.*:://; $val = constant($constname, @_ ? $_[0] : 0); if ($! != 0) { if ($! =~ /Invalid/) { $AutoLoader::AUTOLOAD = $AUTOLOAD; goto &AutoLoader::AUTOLOAD; } else { ($pack,$file,$line) = caller; die "Your vendor has not defined Fcntl macro $constname, used at $file line $line. "; } } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } bootstrap Fcntl; # Preloaded methods go here. Autoload methods go after __END__, and are # processed by the autosplit program. package Fcntl; # return to package Fcntl so AutoSplit is happy 1; __END__ ;# Usage: &flush(FILEHANDLE) ;# flushes the named filehandle ;# Usage: &printflush(FILEHANDLE, "prompt: ") ;# prints arguments and flushes filehandle sub flush { local($old) = select(shift); $| = 1; print ""; $| = 0; select($old); } sub printflush { local($old) = select(shift); $| = 1; print @_; $| = 0; select($old); } 1; ;# ctime.pl is a simple Perl emulation for the well known ctime(3C) function. ;# ;# Waldemar Kebsch, Federal Republic of Germany, November 1988 ;# kebsch.pad@nixpbe.UUCP ;# Modified March 1990, Feb 1991 to properly handle timezones ;# $RCSfile: ctime.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:23:47 $ ;# Marion Hakanson (hakanson@cse.ogi.edu) ;# Oregon Graduate Institute of Science and Technology ;# ;# usage: ;# ;# #include # see the -P and -I option in perl.man ;# $Date = &ctime(time); CONFIG: { package ctime; @DoW = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); @MoY = ('Jan','Feb','Mar','Apr','May','Jun', 'Jul','Aug','Sep','Oct','Nov','Dec'); } sub ctime { package ctime; local($time) = @_; local($[) = 0; local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); # Determine what time zone is in effect. # Use GMT if TZ is defined as null, local time if TZ undefined. # There's no portable way to find the system default timezone. $TZ = defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : ''; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = ($TZ eq 'GMT') ? gmtime($time) : localtime($time); # Hack to deal with 'PST8PDT' format of TZ # Note that this can't deal with all the esoteric forms, but it # does recognize the most common: [:]STDoff[DST[off][,rule]] if($TZ=~/^([^:\d+\-,]{3,})([+-]?\d{1,2}(:\d{1,2}){0,2})([^\d+\-,]{3,})?/){ $TZ = $isdst ? $4 : $1; } $TZ .= ' ' unless $TZ eq ''; $year += 1900; sprintf("%s %s %2d %2d:%02d:%02d %s%4d\n", $DoW[$wday], $MoY[$mon], $mday, $hour, $min, $sec, $TZ, $year); } 1; # chat.pl: chat with a server # Based on: V2.01.alpha.7 91/06/16 # Randal L. Schwartz (was ) # multihome additions by A.Macpherson@bnr.co.uk # allow for /dev/pts based systems by Joe Doupnik package chat; if( defined( &main'PF_INET ) ){ $pf_inet = &main'PF_INET; $sock_stream = &main'SOCK_STREAM; local($name, $aliases, $proto) = getprotobyname( 'tcp' ); $tcp_proto = $proto; } else { # XXX hardwired $PF_INET, $SOCK_STREAM, 'tcp' # but who the heck would change these anyway? (:-) $pf_inet = 2; $sock_stream = 1; $tcp_proto = 6; } $sockaddr = 'S n a4 x8'; chop($thishost = `hostname`); # *S = symbol for current I/O, gets assigned *chatsymbol.... $next = "chatsymbol000000"; # next one $nextpat = "^chatsymbol"; # patterns that match next++, ++, ++, ++ ## $handle = &chat'open_port("server.address",$port_number); ## opens a named or numbered TCP server sub open_port { ## public local($server, $port) = @_; local($serveraddr,$serverproc); # We may be multi-homed, start with 0, fixup once connexion is made $thisaddr = "\0\0\0\0" ; $thisproc = pack($sockaddr, 2, 0, $thisaddr); *S = ++$next; if ($server =~ /^(\d+)+\.(\d+)\.(\d+)\.(\d+)$/) { $serveraddr = pack('C4', $1, $2, $3, $4); } else { local(@x) = gethostbyname($server); return undef unless @x; $serveraddr = $x[4]; } $serverproc = pack($sockaddr, 2, $port, $serveraddr); unless (socket(S, $pf_inet, $sock_stream, $tcp_proto)) { ($!) = ($!, close(S)); # close S while saving $! return undef; } unless (bind(S, $thisproc)) { ($!) = ($!, close(S)); # close S while saving $! return undef; } unless (connect(S, $serverproc)) { ($!) = ($!, close(S)); # close S while saving $! return undef; } # We opened with the local address set to ANY, at this stage we know # which interface we are using. This is critical if our machine is # multi-homed, with IP forwarding off, so fix-up. local($fam,$lport); ($fam,$lport,$thisaddr) = unpack($sockaddr, getsockname(S)); $thisproc = pack($sockaddr, 2, 0, $thisaddr); # end of post-connect fixup select((select(S), $| = 1)[0]); $next; # return symbol for switcharound } ## ($host, $port, $handle) = &chat'open_listen([$port_number]); ## opens a TCP port on the current machine, ready to be listened to ## if $port_number is absent or zero, pick a default port number ## process must be uid 0 to listen to a low port number sub open_listen { ## public *S = ++$next; local($thisport) = shift || 0; local($thisproc_local) = pack($sockaddr, 2, $thisport, $thisaddr); local(*NS) = "__" . time; unless (socket(NS, $pf_inet, $sock_stream, $tcp_proto)) { ($!) = ($!, close(NS)); return undef; } unless (bind(NS, $thisproc_local)) { ($!) = ($!, close(NS)); return undef; } unless (listen(NS, 1)) { ($!) = ($!, close(NS)); return undef; } select((select(NS), $| = 1)[0]); local($family, $port, @myaddr) = unpack("S n C C C C x8", getsockname(NS)); $S{"needs_accept"} = *NS; # so expect will open it (@myaddr, $port, $next); # returning this } ## $handle = &chat'open_proc("command","arg1","arg2",...); ## opens a /bin/sh on a pseudo-tty sub open_proc { ## public local(@cmd) = @_; *S = ++$next; local(*TTY) = "__TTY" . time; local($pty,$tty) = &_getpty(S,TTY); die "Cannot find a new pty" unless defined $pty; $pid = fork; die "Cannot fork: $!" unless defined $pid; unless ($pid) { close STDIN; close STDOUT; close STDERR; setpgrp(0,$$); if (open(DEVTTY, "/dev/tty")) { ioctl(DEVTTY,0x20007471,0); # XXX s/b &TIOCNOTTY close DEVTTY; } open(STDIN,"<&TTY"); open(STDOUT,">&TTY"); open(STDERR,">&STDOUT"); die "Oops" unless fileno(STDERR) == 2; # sanity close(S); exec @cmd; die "Cannot exec @cmd: $!"; } close(TTY); $next; # return symbol for switcharound } # $S is the read-ahead buffer ## $return = &chat'expect([$handle,] $timeout_time, ## $pat1, $body1, $pat2, $body2, ... ) ## $handle is from previous &chat'open_*(). ## $timeout_time is the time (either relative to the current time, or ## absolute, ala time(2)) at which a timeout event occurs. ## $pat1, $pat2, and so on are regexs which are matched against the input ## stream. If a match is found, the entire matched string is consumed, ## and the corresponding body eval string is evaled. ## ## Each pat is a regular-expression (probably enclosed in single-quotes ## in the invocation). ^ and $ will work, respecting the current value of $*. ## If pat is 'TIMEOUT', the body is executed if the timeout is exceeded. ## If pat is 'EOF', the body is executed if the process exits before ## the other patterns are seen. ## ## Pats are scanned in the order given, so later pats can contain ## general defaults that won't be examined unless the earlier pats ## have failed. ## ## The result of eval'ing body is returned as the result of ## the invocation. Recursive invocations are not thought ## through, and may work only accidentally. :-) ## ## undef is returned if either a timeout or an eof occurs and no ## corresponding body has been defined. ## I/O errors of any sort are treated as eof. $nextsubname = "expectloop000000"; # used for subroutines sub expect { ## public if ($_[0] =~ /$nextpat/) { *S = shift; } local($endtime) = shift; local($timeout,$eof) = (1,1); local($caller) = caller; local($rmask, $nfound, $timeleft, $thisbuf); local($cases, $pattern, $action, $subname); $endtime += time if $endtime < 600_000_000; if (defined $S{"needs_accept"}) { # is it a listen socket? local(*NS) = $S{"needs_accept"}; delete $S{"needs_accept"}; $S{"needs_close"} = *NS; unless(accept(S,NS)) { ($!) = ($!, close(S), close(NS)); return undef; } select((select(S), $| = 1)[0]); } # now see whether we need to create a new sub: unless ($subname = $expect_subname{$caller,@_}) { # nope. make a new one: $expect_subname{$caller,@_} = $subname = $nextsubname++; $cases .= <<"EDQ"; # header is funny to make everything elsif's sub $subname { LOOP: { if (0) { ; } EDQ while (@_) { ($pattern,$action) = splice(@_,0,2); if ($pattern =~ /^eof$/i) { $cases .= <<"EDQ"; elsif (\$eof) { package $caller; $action; } EDQ $eof = 0; } elsif ($pattern =~ /^timeout$/i) { $cases .= <<"EDQ"; elsif (\$timeout) { package $caller; $action; } EDQ $timeout = 0; } else { $pattern =~ s#/#\\/#g; $cases .= <<"EDQ"; elsif (\$S =~ /$pattern/) { \$S = \$'; package $caller; $action; } EDQ } } $cases .= <<"EDQ" if $eof; elsif (\$eof) { undef; } EDQ $cases .= <<"EDQ" if $timeout; elsif (\$timeout) { undef; } EDQ $cases .= <<'ESQ'; else { $rmask = ""; vec($rmask,fileno(S),1) = 1; ($nfound, $rmask) = select($rmask, undef, undef, $endtime - time); if ($nfound) { $nread = sysread(S, $thisbuf, 1024); if ($nread > 0) { $S .= $thisbuf; } else { $eof++, redo LOOP; # any error is also eof } } else { $timeout++, redo LOOP; # timeout } redo LOOP; } } } ESQ eval $cases; die "$cases:\n$@" if $@; } $eof = $timeout = 0; do $subname(); } ## &chat'print([$handle,] @data) ## $handle is from previous &chat'open(). ## like print $handle @data sub print { ## public if ($_[0] =~ /$nextpat/) { *S = shift; } print S @_; if( $chat'debug ){ print STDERR "printed:"; print STDERR @_; } } ## &chat'close([$handle,]) ## $handle is from previous &chat'open(). ## like close $handle sub close { ## public if ($_[0] =~ /$nextpat/) { *S = shift; } close(S); if (defined $S{"needs_close"}) { # is it a listen socket? local(*NS) = $S{"needs_close"}; delete $S{"needs_close"}; close(NS); } } ## @ready_handles = &chat'select($timeout, @handles) ## select()'s the handles with a timeout value of $timeout seconds. ## Returns an array of handles that are ready for I/O. ## Both user handles and chat handles are supported (but beware of ## stdio's buffering for user handles). sub select { ## public local($timeout) = shift; local(@handles) = @_; local(%handlename) = (); local(%ready) = (); local($caller) = caller; local($rmask) = ""; for (@handles) { if (/$nextpat/o) { # one of ours... see if ready local(*SYM) = $_; if (length($SYM)) { $timeout = 0; # we have a winner $ready{$_}++; } $handlename{fileno($_)} = $_; } else { $handlename{fileno(/'/ ? $_ : "$caller\'$_")} = $_; } } for (sort keys %handlename) { vec($rmask, $_, 1) = 1; } select($rmask, undef, undef, $timeout); for (sort keys %handlename) { $ready{$handlename{$_}}++ if vec($rmask,$_,1); } sort keys %ready; } # ($pty,$tty) = $chat'_getpty(PTY,TTY): # internal procedure to get the next available pty. # opens pty on handle PTY, and matching tty on handle TTY. # returns undef if can't find a pty. # Modify "/dev/pty" to "/dev/pts" for Dell Unix v2.2 (aka SVR4.04). Joe Doupnik. sub _getpty { ## private local($_PTY,$_TTY) = @_; $_PTY =~ s/^([^']+)$/(caller)[$[]."'".$1/e; $_TTY =~ s/^([^']+)$/(caller)[$[]."'".$1/e; local($pty, $tty, $kind); if( -e "/dev/pts000" ){ ## mods by Joe Doupnik Dec 1992 $kind = "pts"; ## SVR4 Streams } else { $kind = "pty"; ## BSD Clist stuff } for $bank (112..127) { next unless -e sprintf("/dev/$kind%c0", $bank); for $unit (48..57) { $pty = sprintf("/dev/$kind%c%c", $bank, $unit); open($_PTY,"+>$pty") || next; select((select($_PTY), $| = 1)[0]); ($tty = $pty) =~ s/pty/tty/; open($_TTY,"+>$tty") || next; select((select($_TTY), $| = 1)[0]); system "stty nl>$tty"; return ($pty,$tty); } } undef; } 1; ELF4t4 (kk!^n~KDt?8@Q 9I? b!$ny]c1&3>HN q{5-P8A sB5\S.%x#e#[0<`, 4i7Gaw9f+*^6YBD>-Ev uI,Uh;="A'JEWmgr@GO_~!;R7Z(*46k+ C| J")MF ':/T3V.pd<CL}zl%(F 2K1 X0)jo:H=/$&2 ~ 4{ & ,0W 7 @Gty Pq Wm _f@ qx@ s    q  зT ! > ? #2P  =p> FNXdluzЩ ` K Ыn  лL k /   @ "O /4 > INT/ _ myA ] <^ ^ _ @` ` xa8 g8 m8    ")/5<CL8S  ghm4t0J    )  t `)  J > @ @2 @ n 08 H  ] ] "P (z 1$ 9 @ G, N# U) _ k$w (,@ J  x   # Pc  @s  p P^ J  *`37 :AH@' P = V( ^Ъ d"3 ou#9 ~@#q p\ < 3H  % & 7L &< `= 0|E w  5& y\ 0- xl Pz\ &py| ,[g 3@5& <zl A@x\ Fw J/ R] R en t\ 0p0K 0 P1| 1 2R 03. 3 p5a 5 65 67 t "7B *`7X 3d;P9< F0Q LQ! SZ dln }P^ d0 m' Tg  W UP VE XL 0YL YK Y: Z< PZ pZ@ Z ZN  [- P[ p[ (\a -`oz 5o( =0o( Gp7 N rL Upr_ ^r ktL u uH |puE ur @vr vE y\  {L p{| {5 | Q ~b - 0(  `Z U  Y  ! (  / 6 n B H O ^ X ]  f n \ v ] } `L U   hy <(       N  `& S  i  Pi ! L - B 5 `< ? l I < R " ^ 0" i `$ u  } x | t p U U `U ( U PU X I      a   , 6 = B O p Y п; a p, j ) q p% |  @        _DYNAMIC_GLOBAL_OFFSET_TABLE__init_finiinit_entrysave_strstrcpy_tracingvisbuf_tracefmemcpywrap_entrymallocerr_abortmerge_entrywarning__ctype_bcaptoinfo_tracecharinfotocapmemsetsscanfstrchrsprintfunctrlstrcatstrncmpinfo_tablealias_tablecap_tableinfo_hash_tablecap_hash_tableset_sourceset_typestrncpycurr_line_IO_stderr_fprintfvfprintfexitsyserr_abortabortmake_hash_tablefind_entrystrcmpfind_type_entrytailread_entry_sourcereset_inputparse_entryheadentry_matchresolve_usesname_matchread_entryfree_entriesfreeget_tokencurr_tokenfeofftellpanic_modecomment_startcomment_endcurr_file_possyntaxstrrchrpush_tokenfgetsboolnamesboolfnamesboolcodesnumnamesnumfnamesnumcodesstrnamesstrfnamesstrcodesread_file_entryopenreadmust_swapcalloclseekclosegetenvstrtokcur_termcurscr_nc_scroll_optimizeLINESnewscrmvcur_scrolln_nc_scroll_windowinit_acsacs_mapputpTABSIZEwattronwattroffwchgat_nc_renderwaddchwclrtoeolwaddnstrwscrl_nc_synchookwechocharwaddchnstrbeepflashwbkgdwtouchlnwborderwhlinewvlinewclearwerasewclrtobotstart_colorCOLOR_PAIRScolor_pairsCOLORSSPinit_pairinit_colortparmcan_change_colorhas_colorscolor_contentpair_contentwdelchdelwin_nc_outch_IO_stdout___overflowdoupdate_nc_signal_handlerreset_prog_modeselectfflushvidattrmvcurvidputstputs_nc_outstrfputsisendwinendwincurs_setmvcur_wrapreset_shell_modeungetch_nc_backspacewmovewgetchis_wintouchedwrefreshcbreak_nc_timed_waiterrnoerasecharnocbreakwgetnstrnlnoechonorawkeypadkillcharnonlechorawinitscr_IO_stdin_newtermdef_shell_modedef_prog_modestdscrtermnamewinschwinsdellnwinsnstrwinnstrnapmsusleeptcsetattrdelay_outputflushinptcflushbaudratecfgetospeedsavettytcgetattrresettykey_nameskeynamelongnamettytypemvcur_initmvwinfilterfilenosetupterm_slk_initslk_initializeripofflineCOLS_nc_setupscreentypeaheadnewwin_nc_makenewderwinsubwinhas_ichas_ilidlokidcokclearokimmedokleaveokscrollokhalfdelaynodelaynotimeoutwtimeoutmetacopywinoverlayoverwritenewpadsubpadprefreshpnoutrefreshpechocharprintwvsprintfwprintwmvprintwmvwprintwvwprintwqiflushnoqiflushintrflushwredrawlnwnoutrefreshwsyncdownvwscanwvsscanfscanwwscanwmvscanwmvwscanwgetwinfreadferrorputwinfwritescr_restorefopenfclosescr_dumptimescr_init_fxstatscr_setdupwinwsetscrregset_termdelscreenrsprippedoffuse_envioctlperror__strtol_internalisattydel_curtermrestarttermset_curtermslk_labelslk_noutrefreshslk_refreshslk_restoreslk_setslk_touchslk_clearslk_initslk_attrsetslk_attronslk_attrofftgetentPCUPBCospeedtgetflagtgetnumtgetstrtgototigetflagtigetnumtigetstris_linetouchedtrace__openwritestrerror_traceattr_tracedump_tputs_tracesigaddsetsigprocmasksigactiongetpidkillgettimeofdaytermattrswsyncupmvderwinsyncokwcursyncupstrncatread_termcap_entry___brk_addr__environatexit_etext_edata__bss_start_endlibncurses.so.1!!$!4!D!T!d!t!!!!!!!!!""$"4"D"T"d"t"""""""""##$#4#D#T#d#t#########$$$$4$D$T$d$t$$$$$$$$$%%$%4%D%T%d%t%%%%%%%%%&&$&4&D&T&d&t&&&&&&&&&''$'4'D'T'd't'''''''''(($(4(D(T(d(t((((((((())$)4)D)T)d)t)))))))))**$*4*D*T*d*t*********++$+4+D+T+d+t+++++++++,GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~,$,4,D,T,d,t,,,,,,,,,--$-4-D-T-d-t---------..$.4.D.T.d.t.........//$/4/D/T/d/t/////////00$040D0T0d0t00000000011$141D1T1d1t11111111122$242D2T2d2t22222222233$343D3T3d3t33333333344$444D4T4d4t44444444455$545D5T5d5t55555555566$646D6T6d6t66666666677$747D7T7d7t77777777788$848D8T8d8t88888888899$949D9T9d9t999999999::$:4:D:T:d:t:::::::::;;$;4;D;T;d;t;;;;;;;;;<<$<4<D<T<d<t<<<<<<<<<==$=4=D=T=d=t=========>>$>4>D>T>d>t>>>>>>>>>>>>??? ????? ?$?(?,?0?4?8?P}T}X}\}6`}d}nh}>l}p}^t}x}(|}}}}}h}4}P}} }}D}}}}U}}}'}9}8I hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhVS[=pxtЃ>u[^ÐS[[ÐUS[U+DH}%fDB4H}DŽH}ǃ]]ÐUWVS[ÖuU0׉=wVVP@tVzPQP- @tPQP Ue[^_]ÐUWVS[u>)1Ґu DŽ/uDŽ)B~19~6uDŽL)LB9̋PDFuQPNPRQT~>1ҐuDŽ5uDŽFB~19~6LuDŽFB9͍@[^_]UVMu 1|u |0uD@+~1f|A4ufTF4ftfTA4@%~1ut@=~܋u]ÐUS[~QPqL]]ÐUS[{u6uQP5ǃPH]]ÐUWVS[MEE<\t<^AU350}P%$},t2}'tx}\uj |E\}􋃜EDxt_EUEUUAF9EDxu0 IM MEfxRxwRPc%i<jP%{6}%*%+jPb%{2}%*%-!jP%?VNƋ%>%tV Ƌ%+%;c<=t<+t<-t <*t=tjP~puAjFP9t FP'HPփN+T4%+%-%*l%/Lt7u ǃ,u!ǃ\jPVƋ%+ jPV\Ƌ%+^jP%sV jPZ%-%c9 PjP%cjP%2OjP%3jPr%dowg%\?%NPOP}W#RP>F>}|$<uDBu *t.uFϐ/>e[^_]ÐU0WVS[æEEEEEEhjEPIuЉ} 0щMԋu T z>z/{zJODBu.t*t?$uX~tM u %}wEPuV;RPu Vƒj;VE WRPVEP"RVEP RVj0щMԍT (7}WuV[RPu VPƒu.j;VE EPuVRwR}uVEPRVE Pƒuj;u VE E9WuVRPu VƒuQj;VqE EPuVRPV0щMԍT .jRVE Pƒ uE RuVRPu V$ƒ t"EPRVE Pƒ j+u VƒU %+Ut҉UU| DP@tLUЃ9u$PPP6 RRPP4 0щMԍT jRVE Pƒ uE R{jRVE Pvƒ u%E E}S>jSVE P6ƒ uUE E}BSVPY0щMԍT E u 6ۃN+*???????????????????????????????????????????????????????4????????%z%u ыDPt*E E ы6DVu؋E 8du@E SP%d%.%sE u 1uEx2u;}uc}u]%rE62~)1I%iE 8t @E 8qe[^_]ÐUS[E ]]US[ûEtj@PPƃ]]ÐUWVS[y}u P PgaPP tPwaPP VWPaPPe[^_]ÐUWVS[}u P PgaPP}tPwaPPW VWPaPP3jUWVS[Y}u P PgaPPtPwaPP VWPvaPPU WVS[1ɋu1UUD:PMXU UMtAUU 49u}ƋthQaPIe[^_]ÐUWVS[9u1@t,VaPFF>u싃@t WaPЍe[^_]ÐUWVS[é}u WR4tWFP&t6ue[^_]ÐUWVS[Vuu9s=~U 9Wu PURu E9r1e[^_]ÐUVS[EP\VUj|V\te[^]ÐUWVS[ÖhHƒuaPUUЋu󥋃Dǂ@Dt@e[^_]ÐUS[ MDB u;QPaPPbPPj]]ÐUHWVS[ÓE} PtWVt!PEVڐDtDDu狃t<PBbPtPLbP[^_]ÐUWVS[ã}j|WuuWVVbPVdj|M QDu#M QVVbPV0u j|Q}} +j|Wƒt;)9u!u9z뿐Ar1[^_]ÐUWVS[sL8ƅH81<tW(PXbP 0to9ta>dPPuKdP\}uEtMQPZdPWEe[^_]ÐUS[KUtRPpdP]]ÐUS[P=w|P‹|PhPƒtt#tǃP$PHP< t< t⃻Pu tǃlǃlPP]]ÐUVS[ڿEPVt )@Pe[^]ÐUS[ÛPPPHy dP]]ÐUS[[EǃPǃ|]]ÐUWVS[uEE8L^}%}ucPMJM|DB@uPMBPdP5 MʀmMM\G2ucPMM<wnЉE1ucPMM<wUDЉEG~ă}uEExjq+|B$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$D$$$$$$$$$$$$$4$$$$$$$$$$Ի$$$$$$$$$$$$$$$$$$$$$$d$T$$$$$Ի$$$$$Ļ$Ļ$$$t     }\m^]\F,I:=PMPdPMF FEM}XdPe[^_]UVS[êu9tue[^]ÐU|WVS[sEjP5Hj EPQ fEf%f fUfEf%f fUfEf%f fUfEf%f fUfEf%f fUfEf%f fUf}t WwE~PVQƅ+0PjM VPfEf~jPW E,~,PE PQfE f,~jPWT +M DF+~EUШtjPW u+EL~LPE 4PQ 1j%hjPW uuM fDq4"ff ‹} fTw4FfEf&9|fEf&~)jEPQ: %%} fDw4F%~EPM AM~ DžDž,dPQW d19Dž񉍐9L} >}H9Et%@@TD@9u E9}|΋P@}L}TUu)V}WQM M~}HP}WQVM|WMQVPhMʃ 9-R @@fD 9~U}9(R @@fD B9U}E}G}98y}Oe[^_]ÐUWVS[yǀ+ǀ+ǀ+ǀ+ǀ+ǀ+ǀ+ǀ+ǀ-ǀ|ǀ+ǀ~ǀ_ǀ+ǀ:ǀ'ǀ#ǀoǀ<ǀ>ǀvǀ^ǀ#ǀ$#ǀ#tP.10Ѝx9PՃS+Q F @F9Ne[^_]ÐUMU } tA ЉA Q1]ÐUUE } u !B1]ÐUWV}O)} t E M ~W@@ EAG9~1e^_]ÐUMU} u QuA ƒ}u QЉ]ÐUWVS[} EpM@9MI9}@%ƒ+TԪDĪĪͪE}M)щ9j EP艸ƒ3F9|MQ蟻1QNc1\|:ȋJt)j}W#REP贶5MI@E@UM< uE Pu MI ׋E xH@ME@ 9}w@MTE+9}fD1E E}G9E,MQ1e[^_]ÐU$WVS[M M}}MQ@}EAM EE}Uu9wUMjj MA@}8MP}WTƒ9t!u}uG@M+<E܋M9us}ta}@}MI4fT79E|fu fM܋}fL7}w@MIETE}+>9}fD>MQ¨1e[^_]ÐUVS[ê$tOPfQPft4҉APPjͩfPNfut҉ǀP Ɖx%t XRQV1e[^]ÐUWVfEfEfU fUf}f}fMf9~fMɉMM9M~MfufEf9}fu9}΋MȿEfUEf9uu}fEfUf:1'+}}E<}0+UU<} +U)Uș}EfE}fM9u0U})URE +uuș}xj}}9u5E)ȉE@U< +uuș}0+MMrǀPvB9X@ut'xujt@jjPPqǀǀe[^]ÐUWVS[ög(Ru} }?}샻qF9A@B@@Lxt~u Ȱ`ʲ9PtPPRMxMPB9BwPRpBt PtF9qU~}@ut'xujr@}W}WPPo}쉸(R"tvB@@ xt~u Ȱ`ʲ9PtPPRMvMPB9BwPRo Bt P{sXt P`s(PP,svB@@} xt~u Ȱ`ʲ9PtPPRMuMPB9BwPRnBt P{rX P\rM싃xt~u Ȱ`ʲ9PtPPRMtMPB9BwPRRm Bt Pq~QF9|Tx t ǁǁ0x tǁEM Y(P!q 0 P} WWR jPn  }?}샻qF9A@B@@Lxt~u Ȱ`ʲ9PtPPRMsMPB9BwPRkBt PoF9qU~}@ut'xujm@}W}WPPj}쉸(R"ovB@@ xt~u Ȱ`ʲ9PtPPRMqMPB9BwPRj Bt P{nXt P`n(PP,nvB@@} xt~u Ȱ`ʲ9PtPPRMpMPB9BwPRiBt P{mX P\mM싃xt~u Ȱ`ʲ9PtPPRMoMPB9BwPRRh Bt Pl~QF9|Tx t ǁǁ0x tǁEM YPPl}?}tqF9A@B@@Lxt~u Ȱ`ʲ9PtPPRMCnMPB9BwPRfBt P;kF9qU~}􋁬@ut'xuji@}W}WPPe}쉸(RbjvB@@ xt~u Ȱ`ʲ9PtPPRMlMPB9BwPRUe Bt PiXt Pi(PPlivB@@} xt~u Ȱ`ʲ9PtPPRMkMPB9BwPR\dBt PhX;PhM싃xt~u Ȱ`ʲ9PtPPRMkMPB9BwPRc Bt Pg~QF9|Tx t ǁǁ0x tǁXt PjgEM } .e[^_]ÐUVS[Xu$t1PVVRC`PePfNue[^]ÐUS[kXERPXiPb]]ÐUS[+Xt1]]ÐUS[Wǀj@HPjjeajf_txt@j6d>c]]ÐUWVS[fWEUBEE}G@UEG} u9w6ƃ}u +EEjj PURMeFM9v̓}tN}O@UfTfU9E|fu fU}fT9}O@UT}+99}fD9E EUB9E6}ffGWZ`1e[^_]ÐUS[KVD$]]ÐUS[ VMu uEƀu ƀ ˆ8u7.u ƀ ʈ8uƂL$1]]ÐUVS[*UufVfu&eF PFPP6c tjPP` jPV`N FAPFPQP6^P\ N FAPFPQP^e[^]ÐU WVS[6T}E$u"tG t G9WK\uG tG u W_tuu _EurW<}~Z~Du(jRPc u.8tW$ƃ1jEPPp_ u 8t׋ML$u uƀˆ8uƂE􊐤‹Mt$u Ɓ ‹M􈑤8uƂƀ}uG \9ttuW\nXG WPGPP_ t GPP^ GPW^ 3a}tX\e[^_]ÐUWVS[PEp `ujEPP2] u 8t׋}|$u uƀˆ8uƂUƀ8Vtvupf~ tU1ҐD$B~ꋃƀƀƀF 6EPEPP_ /‹t$jEPP[ u 8t׋}|$u uƀˆ8uƂ&…|‹t$uƁˆ8uƂƀe[^_]U WVS[MMMMEMI8MXZ]YjMQYXE^EM MMQU u MA t MQGYMQ\ƃe \ SE9ttu+M9M vM }uMQYX렐E9u8M9M vM }u MQ&XM9M wb}|E +E9E\9}PXNjMA QPAPPZ tjWPbX jWMQSXWT0HȋM AM MfAff9A~f@fMQW}uW}uV}uY}uV}u jMQWt M 1 M e[^_]ÐUVS[JKPSƃuËPPVT u)VˋPPVjV[U\e[^]ÐUVS[úJP;StjPVuW 1e[^]ÐUWV}O@@W UGJ9Us9Uru w2O@@fWfTO@@fDftf9G} fGfD1e^_]ÐUVS[IuM tV}#)V9|BFPPPVYjF)@PRV Y VgS1e[^]ÐUWVS[VI}MOMu >}+E 9E t t<wPPjVN|<ҋPt+B PWWj^WWfG PWWfGfGf9G~fGF>[fMfOfMf1e[^_]ÐUWV}1)G4G9!@W@U A}|9MЋU ȍe^_]ÐUS[GEPP1]]ÐUS[GPjPX1]]ÐUS[ËG@PQPjPX1]]ÐU WVS[6GEuظx!t2j}U Um$XmPjXW0ɋ tR4$}E Em$^m~=PB9Bw!PRM>$~<j>V}Sm>>txʋDHt$ ɍAP$F.u+F$P<$]E*uM F>>u ڀF>(}E Em$ZmЍe[^_]ÐUWVS[A0t_șljdž jP`‹jP:‹jP‹jP‹ jP‹jP‹jPy‹ujjjVG P6‹ jj<PGP‹jj@PGP‹jj,PaGP‹jjHP0GPo‹  jjPFP;‹jj|PFP ‹t QgMyu.t$tV=Mǃ@e[^_]ÐUS[Û>t@HPjRFPL t PLxuttPL]]ÐUWVS[>} E9Eu9}u 1BE9E|E}ƉuM9}Oș}u}׋x uY~StPjQI (y9ywj Q"G  AN1pN9M~ E@))EMjUREPWURe[^_]ÐU WVS[<uU}0щHE0IE=wBE EʉN~7EPRU DUUuN}E@BEe[^_]ÐUWVS[3<Dž@BMQMQPC tvPP~C}} }~+@9E}E+Ey؋U+U yЃu}tQ} tKMQMQMQM QMQVǃ@Bt9~VPBBH9EBH9E MQMQMQjMQQ ǃ@BtW9~?PV!BQVFMQMQMQjjQnǃ@BtW9~?PVAQVEMQMQMQj@HPQǃ@BtW9~?PV@QVBE0~ }BH9EMQMQMQBHPEHPQǃ@Bȍx9~tƅ} ~PP\DPV>DQV1D@Bu PjPcD1[^_]ÐUWVS[7u DžDž}9uDž@B|t.}WP>PW>9u}),tFWP>‹9}$RWu>69PWW+uHtFVP=‹9}$RW=tc9~DPWWPW@B? u!tuE0UЍD}9}FDž@Bt.}WPP  h?Ph@PhAPhBP hCPhDPqhEPXhFP? hGP#hjP hk PhP hKPhIPhPh[Pq hl$PUhm(P<hn,P#ho0P  hRPhp4Phq8PhSP hr<PhZ@PnhsDPUhtHP< huLP hvPPhwTPhxXP hPhy\PhzhPh{lPn h|pPRh}tP9h~xP h|P hPhPhPhP hPhPPkhPRhP9 hPhPhPhP hPhPhPhPk hPOhQP6hPhP hPhPhPhP hTPhPhh`POhdP6 hP, B ]]ÐU WVS[}fU fU0, taƉ8FtEFt ƊU8Vu8FuG?j qFt'Ɖj Q, Ɖuhǃ0j MƃMu8ǃ0΅tNVMuM΃u5FFGfF ?ufUfV e[^_]US[Ë EB1]]ÐUWVS[V }u fGfVf9}Ҙ)‰UEfG fV f9} Ҙ)‰UEfWfFf9| Ҙ)‰UEfW fF f9| Ҙ)‰UENMGWF9)ʉU +EEN MGW F9) +EMQPMQMQMQMQMQVWEe[^_]ÐUS[+ UE jPR1]]ÐUS[ UE jPR1]]ÐUWVuU +UMA@9'UU$+UA@9} G9E  G9E$~ !E9E @EREM A@fM}fL8} G@f}Mf|uMM9u$}}MM萐}(uF}G@M} tM A@}89tA@ft8YM A@}fD8HM Q@}<:}MA@}8M}9tM A@}ft8 MfD EF9u$_E E } 9E1e^_]ÐUWVS[F }~ } ~jjM QMQǃu1O EM9MEjM QM‹EG@uT}~.1MIG@0PU5 U9|G@PW [G@MM 49sMM G@M9rE EM9MEe[^_]ÐUWVS[ }u MUEPRQVWtH  1e[^_]ÐUWVS[ù}uME PURQVWU RUREue[^_]ÐU$WVS[V}MA t} }E }}E}}E}}EB9};B9E }2E +EEuF9EEE +EV9 |} }JU 9UMMuvERE䐋MM}E )9uuMMEuF@ME܋@@u0EMu9tPM܋Q@ufD2fufD2fD2+9} Mf| uD29~f|2EGM9MouF@MfDfD ME uv9fuMfq fufqytA@1e[^_]ÐUS[[EU @ u$RPx1]]ÐUVS[UE PRV jVP[^]ÐUWVS[ó}U EPRVi jVW[^_]ÐUWVS[cu UEPRW VMQP ujWP> [^_]ÐUWVS[uUEPRW VM QMQ  ujWMQ[^_]ÐUWVS[c}U EPRV jVW`[^_]ÐUS[ǀǀƀƀPjPt 1 ]]ÐUS[{ǀƀƀPjPHt 1 ]]ÐUS[ǀRjPt1]]ÐUS[ËǀRjPwt 1 ]]ÐUS[RjP t1]]ÐUS[ûǀǀRjPt 1 ]]ÐUS[;ǀRjP1t1]]ÐUS[ǀRjPt1]]ÐUS[{ǀRjPgt 1 ]]ÐUS[ RjPt1]]ÐUS[û} tPjPt1]]ÐUVS[:uU EjPRVV 1e[^]ÐUS[U9uBRB ]]ÐU(WVS[æUR U}}@U9Bt*jB@PjR E؋}GU؉B}WE}W@H9|E}g ߋUUEG REEA9Euq@U}W@UfBftgE܋MS}U؋}܋9t7fFfufFfF9} fNF9~fNEAUB9E~}t$}GtfEfFfFUfBfBf}fzE EE EUB9E }tG@Uz u!f}fWffWfW fP1e[^_]UWVS[ÓE}jVP+ tWU RVh[^_]ÐUS[+UE PRPr ]]ÐUS[MU EPRQG ]]ÐUWVS[UE }uPRP t VWP e[^_]ÐUWVS[i}U EuPRW tVMQW e[^_]ÐUXWVS[URjjTEPBURIu0jjE@PE@P-ƃuVb 1fEfFfEffEfFfEfFfEfFfEfF fEfF EFEFEȉFEЉF$ẺF EF8EF}M QjEHPM QjWGQjPFЃMJzujWM QMQ‹tPB1 e[^_]ÐUVS[Mu u16(9s r1 e[^]ÐUS[{E8]]US[XUEPhTR }0P#UMt܅t1]]ÐUS[;PTtjj jPƒAP(tjj jPUƒ8u/fJ8f~fz4~ɉR48~ 8dPEtPt/fJ8f~fz4~ɉR4]]ÐUS[ëPPu/tǀǀ1]]ÐUS[;PP}t#1e[^_]ÐUS[Uȋ]]ÐUVS[Úut(Ft PV 1e[^]ÐUWVS[FPEE11ҋ8t/M8 uM B<uF~e[^_]ÐUS[ëUtBv1RDȋ]]ÐUWVS[F}E1?u|> t~|>!trfzD~*D7PGPMQPPS?D>PjGP(W E}ffxD~t Pe[^_]ÐUS[Ku9xu*P@Pu 1]]ÐUS[u9xu*PT@Pu 1]]ÐUS[kt@]]ÐUWVS[EU t}~}9\ |}v uMl PR}44}|7}Wl Pj E Psul @l @0UЍH}t1}tJ}t*;V#)T0U)FQPRU}}D8 1e[^_]ÐUS[t1 ]]ÐUS[Ët>@@P@P$]]ÐUWVS[hjw‹U}KfPDf~‰\ l fxD~PH@FE1ɐl Pj uD2 PUMD }9\ MD1!UG}~L u;E 11ɋuT1Tu B~NE 11ɐ}T98tpu  B~ԋu}~t1uVe[^_]ÐUS[kEwL 1]]ÐUS[+E<1]]ÐUS[U <1]]ÐUS[E!<1]]ÐUWVS[ÖU EPjRE t.B-u t t t$(PtBt=j*Pt@jj jPg 1҃t fPxt>t9j*P4t@jj jP1҃t fPztuHttǀHht3t.ltupttǀhfxv}fHi u%EuP߃]/ +$ddDT4TT$Dtd$ "% " ~p x 1P;Eu<6 Fu>d) 2u: ~ p x 1P. ~p x 1P"P "P "0ЍD "Eu>d{ ~p x 1P'>Eu>d; ~p x 1P+P "P "0ЍD "  ~p x 1ҋ " " ~p x 1P "P "0ЍD "CEu<&ҍ!Eu< ~p x 1ɋu Eu<ҍ qEu  | Ea1ҍ|Eu< v䋃 |  ~p x 1‹ ~p x 1 ~p x 1‹ ~p x 1)ЉK ~p x 1‹ ~p x 1 ~p x 1‹ ~p x 1֙ |  ~p x 1‹ ~p x 1֙:1ҋ ~p x 1  ~p x 11ҋ ~p x 1u4 ~ p x 1lb ~p x 1‹ ~p x 1!  ~p x 1‹ ~p x 1  ~p x 1‹ ~p x 11m ~p x 1‹ ~p x 19 ~p x 1‹ ~p x 19~ ~p x 1‹ ~p x 19. ~p x 1% _| M ~p x 1ҋ | !! ~p x 1E1ҋu>u>%u4FutoFu>uOE1ҋu>tRu>%u!FutFu>uƋu>t Fu> " e[^_]ÐUS[ËUPjR]]ÐUWVS[Vu<$tPMHFV}muj$Mj.u0FDPtBP$8]EF>*uM Fxu?fx>ft6t 9|$؀>t F>1e[^_]ÐUWS[Ú}HǃHhhA@PD }rj!FPjPl0HPPLPjjhPj(jWjPqP8e[_]ÐUWVS[ã}󥍽`ܓff"u}t"EtFP"P=>uE E%tW %`DPȃDPVP"0ЍDP3V:P"0ЍDP EuP"Pq"0щ\r|,uщ\DJPR&P[^_]ÐUWVS[u&})L3|*f}&e[^_]ÐUS[ÛUʋDH@u}'ƃ*'*Q[P*QfP*PT*]]ÐU<WVS[DžE @%DžQEPmQV0҉D1ҋM Au3E @@ 8 BM I9~Ӌ'DVJ1҃M I9,E @@<DuB9}1ɅPwQ}0҉HP~QV0҉D1ҋM Au;E @@ 8 BM I9~͋'DVPDžDž1ҋM I92E @@< uB9}1QPQ}0҉ЃPQV0҉D1ҋM AuAE @@ #苍 BE @9~Ƌ 'DV E @9[^_]ÐUWVS[ãUE PRV\0HPVDPjhPDP[^_]ÐU(WVS[6nEjuVjV}WVjEjV$jVjEEEuVEPjjP jVj$_jWj0e[^_]ÐUS[k} uPPjUVS[*}u)*ǃ**PRr**tj*PIǃ*ǃ*:*jVjjVj9*jVje[^]ÐU,WVS[fjEP*1E*E U؉E<}EUMQjjV}GWSjEPU+UM)щM؉M}+}E)E܉Ey~ IM@BE}}EE}t%UU ME ǁM @t!tu VjP t!tu VjP t!tu VjP t!tu VjP t!tu VjPc t! tu VjP: t!tu VjP t!tu VjP t!tu VjP t!tu VjP t!tu VjPm t!tu VjPD t!tu VjP t!tu VjP @t!tu VjP t(E%9u}t u VQu1e[^_]ÐUS[UPR]]ÐUS[û1ҋt@tt tt tttttЋ]]ÐUVS[u~0t V~4tVe[^]ÐUEU MxPu]ÐPLHH1]ÐUEU u]ÐP41]ÐUVS[ZutjF@PjVvPue[^]ÐUWVS[ut,VVtjG@PjW vPuՍe[^_]ÐUUхtfAfBffRPu]ÐUWVS[ÆMA PAPA@PA@PMǃMu1 fAfGfffAfGfAfGfAfGfA fG fA fG AGAGAGA$G$A G A8G8APMǁ0Lt0Pu5@PƋU8tDHPPc8trL?tZwPPu4DPP t,PPSP ?uuPdP9QDžuM~8u38t PTPj~P# uW8u=8tPTPjP uPPd+\JBtBtQtK@A UD#A UfDB4A UDŽA UDA RfMfTA4w8u!A PPVPxƃ V譽ƋB M4P ,8u:VR8u} uMu Q UR\1[^_]ÐU WVS[óUHutPļUHUhutP蜼UhUuTfBxf~3PPÕPV?VYUPPPÕPV*VDU&PUUz.tzthUz1t_fBzf~>PPÕPVV贺U&P茺UU0z1ubfBzf~9PPÕPV%V?UPUUtFhPV茽ƅw0к)‰PUPUt\hPV:ƅw0к)‰PUPVYƅxVLUUz3tz/u UǂUuXfB~f~7PPÕPVӾVUP̸UUfz6u z2ufB6Uzuf\uP茸U\UuPhUUtuPDUt[^_]ÐU]ÐVS[ݮpxtЃ>u[^ÐS[îX\趽[;Saved string '%s' at location %dOut of memorystring too complex to convertI'm confusedstring may not be optimalsaw %%r twicesaw %%m twicesaw %%n twice'%s' unknown %% code %s%%?%%{%d}%%>%%t%%{%d}%%+%%;%%>%%?%%{%d}%%>%%t%%'%c'%%+%%;%%>%s%c%%?%%'%c'%%>%%t%%{%d}%%+%%;%%>%c%c%%?%%'%c'%%>%%t%%'%c'%%+%%;%{6}%*%+%%B%%{%d}%%+%%c%%'%c'%%+%%c\%03o%{2}%*%-%%D%{96}%^%%n%{127}%^%%mnumeric prefix is missing trailing dOTxrOTptOTmaOTdTOTdBOTNLOTMTOTbcOTnlOTdNOTdCOTncOTnsOTbsOTugOTrsOTi2evhlmethlmerhlmelohlmelhlmehhlmscesascescpctrmrmscsmscrmpchsmpchdispcslinessetcolorendbidefbicolornmbicrbinelbirepsmgtbsmglrs3dss2dss1dss0dscsindevtpfxlsetabsetafgetmreqmpminfokmouscsnmzeromdocrsupcssubcsrcsdrbimscsdsbimsmgtpsmgtsmgrpsmglpsmgbpsmgbscsmcuumcufmcubmcudpordermcuu1mvpamcuf1mcub1mcud1mhparumrsupmrsubmrshmrmicmrlmritmrwidmsumssupmssubmsshmsnrmqsnlqsmicmslmsitmsdrfqswidmdefccvrchrlpicpisetbsetfscpinitpinitcocopu9u8u7u6u5u4u3u2u1u0waitpausehookpulsetoneqdialdialhupwingocwinrmclkdclksclkflnsmgrsmglmgcel1kf63kf62kf61kf60kf59kf58kf57kf56kf55kf54kf53kf52kf51kf50kf49kf48kf47kf46kf45kf44kf43kf42kf41kf40kf39kf38kf37kf36kf35kf34kf33kf32kf31kf30kf29kf28kf27kf26kf25kf24kf23kf22kf21kf20kf19kf18kf17kf16kf15kf14kf13kf12kf11rfikUNDkSPDkSAVkRESkRITkRPLkRDOkPRTkPRVkOPTkNXTkMOVkMSGkLFTkICkHOMkHLPkFNDkEXTkEOLkENDksltkDLkDCkCRTkCPYkCMDkCANkBEGkundkspdksavkreskrstkrplkrfrkrefkrdokprtkprvkoptkopnknxtkmovkmsgkmrkkhlpkfndkextkentkendkcrtkcpykcmdkclokcankbegrmlnsmlnenacsxoffcxoncrmamsmamrmxonsmxonkcbtplnacscrmpmc5pkc3kc1kb2ka3ka1iproghuuctslhtwindhtssgrriindscvparcrfrs3rs2rs1repmc5mc4mc0pfxpflocpfkeycuurincufcubilindnichcuddldchpadnelsmmrmmlf9lf8lf7lf6lf5lf4lf3lf2lf10lf1lf0smkxrmkxkcuu1khtskrikindkcuf1kppknpkllkcub1kil1kich1khomekf9kf8kf7kf6kf5kf4kf3kf2kf10kf1kf0kedkelkrmirkcud1kdl1kdch1kctabkclrktbckbsipil1ich1ifis3is2is1fslffflashrmulrmsormirrmdcrmcupsgr0rmacsechsmulsmsorevprotinvissmirdimsmdcsmcupboldblinksmacshddsldl1dch1cvviscuu1llcuf1cnormmrcupcub1civishomecud1cupcmdchhpaedelcleartbccsrcrbelcbtbitypebitwinbtnswidcscpsorviorhiorlorcnpinsmlsmcsmjumpmaddrspinhspinvbufszncvpairscolorswnummalwlhnlabwslvtpbxmclmlinesitcolslpixcpixsamxvpadaisycrxmxhpahlsbcecccndscrnpcnrrmcchtsmc5inxonxonulhzxteslokosmsgrmirdbdainhskmhcgneoxenlxhpxsbambwkuUP@8RTkPPUpfPSpoPNkNPDkLLDkhHMasGSaeGE@7ENmkXSLOFLLFFEmeEEmhDSveCVviCImrBOxrptdTdBNLbcnldNdCncnsbsugrsi2XvXtXrXoXlXhS8S7S6S5S4S3S2S1YZYzYyYxYwYvZzXyMTs3s2s1s0cidvxlABAFGmRQMiKmZyZxZwZvZuZtZsZrZqZpZoZnZmZlZkZjZiZhZgZfZeZdZcZbZaZZZYZXZWZVZUZTZSZRZQZPZOZNZMZLZKZJZIZHZGZFZEZDZCZBZASbSfspIpIcWAPAfhTOQDDIHUWGCWRCDKSCLfMRMLMCcbFrFqFpFoFnFmFlFkFjFiFhFgFfFeFdFcFbFaFZFYFXFWFVFUFTFSFRFQFPFOFNFMFKFJFIFHFGFFFDFCFBFAF9F8F7F6F5F4F3F2F1RF!3!2!1%j%i%h%g%f%e%d%c%b%a#4#3#2#1*0*9*8*7*6*5*4*3*2*1&0&9&8&7&6&5&4&3&2&1%0%9%8%7%6%5%4%3%2%1@0@9@6@5@4@3@2@1eAXFXNRASARXSXkBpnacrPpOK5K4K2K3K1iPtstawistsasrsfcvr3r2r1rppspxplpkSRRILEALSFICDODLDCpcnwmmmol9l8l7l6l5l4l3l2lal1l0kskekTkRkFkrkHklkAkIk9k8k7k6k5k4k3k2k;k1k0kSkEkMkdkDktkCkakbalici3isi1fsvbueseeiteecussompimdmtimdmbdsdcvsupndCMlehodocmCCchcdceclctcsblbtYpYoBTYnYmYlYkYjYiYhYgYfYeYdYcYbYaNCpaCoMWNlwssglicoYGYFYEYDYCYBYAhlutccNDNPNRHC5inxxoesmsmixnxsxb"%s", line %d: terminal '%s', Hash table complete: %d collisions out of %d entrieshashing %ssum is %ldOut of memorycompile: Line %d: Illegal terminal name - '%s' Terminal names must start with letter or digit head = %stail = %s|%s: attempting resolution%s: resolving use=%s (in core)%s: resolving use=%s (compiled)Name collision: %s %s pushed-back token: `%s', class %ddot-flag set@%&*!#Illegal character - %sPremature EOFCan't determine the entry formatempty longname fieldwhitespace in shortname fieldSeparator inconsistent with syntaxMissing separatorCommented out Token: Boolean; name='%s' Number; name='%s', value=%d String; name='%s', value='%s' Cancel; name='%s' Names; value='%s' End of file Bad token typetoken: `%s', class %dpushing token: `%s', class %dBackspaced off beginning of lineIllegal ^ character - %sIllegal character %s in \ sequenceVery long string found. Missing separator?OTxrOTptOTNLOTMTOTncOTnsOTbslpixcpixsamxvpadaisycrxmxhpahlsbcecccndscrnpcnrrmcchtsmc5inxonxonulhzxteslokosmsgrmirdbdainhskmhcgneoxenlxhpxsbambwreturn_does_clr_eolhas_hardware_tabslinefeed_is_newlinegnu_has_meta_keyno_correctly_working_crcrt_without_scrollingbackspaces_with_bslpi_changes_rescpi_changes_ressemi_auto_right_marginrow_addr_glitchhas_print_wheelcr_cancels_micro_modecol_addr_glitchhue_lightness_saturationback_color_erasecan_changenon_dest_scroll_regionno_pad_charnon_rev_rmcuphard_cursorprtr_silentneeds_xon_xoffxon_xofftransparent_underlinetilde_glitchdest_tabs_magic_smsostatus_line_esc_okover_strikemove_standout_modemove_insert_modememory_belowmemory_aboveinsert_null_glitchhas_status_linehas_meta_keyhard_copygeneric_typeerase_overstrikeeat_newline_glitchceol_standout_glitchno_esc_ctlcauto_right_marginauto_left_marginxrptNLMTncnsbsYGYFYEYDYCYBYAhlutccNDNPNRHC5inxxoesmsmixnxsxbOTdTOTdBOTdNOTdCOTugbitypebitwinbtnswidcscpsorviorhiorlorcnpinsmlsmcsmjumpmaddrspinhspinvbufszncvpairscolorswnummalwlhnlabwslvtpbxmclmlinesitcolshorizontal_tab_delaybackspace_delaynew_line_delaycarriage_return_delaymagic_cookie_glitch_ulbit_image_typebit_image_entwiningbuttonswide_char_sizeprint_rateoutput_res_vert_inchoutput_res_horz_inchoutput_res_lineoutput_res_charnumber_of_pinsmicro_line_sizemicro_char_sizemax_micro_jumpmax_micro_addressdot_horz_spacingdot_vert_spacingbuffer_capacityno_color_videomax_pairsmax_colorsmaximum_windowsmax_attributeslabel_widthlabel_heightnum_labelswidth_status_linevirtual_terminalpadding_baud_ratemagic_cookie_glitchlines_of_memoryinit_tabscolumnsdTdBdNdCugYpYoBTYnYmYlYkYjYiYhYgYfYeYdYcYbYaNCpaCoMWNlwssglicoOTmaOTbcOTnlOTrsOTi2evhlmethlmerhlmelohlmelhlmehhlmscesascescpctrmrmscsmscrmpchsmpchdispcslinessetcolorendbidefbicolornmbicrbinelbirepsmgtbsmglrs3dss2dss1dss0dscsindevtpfxlsetabsetafgetmreqmpminfokmouscsnmzeromdocrsupcssubcsrcsdrbimscsdsbimsmgtpsmgtsmgrpsmglpsmgbpsmgbscsmcuumcufmcubmcudpordermcuu1mvpamcuf1mcub1mcud1mhparumrsupmrsubmrshmrmicmrlmritmrwidmsumssupmssubmsshmsnrmqsnlqsmicmslmsitmsdrfqswidmdefccvrchrlpicpisetbsetfscpinitpinitcocopu9u8u7u6u5u4u3u2u1u0waitpausehookpulsetoneqdialdialhupwingocwinrmclkdclksclkflnsmgrsmglmgcel1kf63kf62kf61kf60kf59kf58kf57kf56kf55kf54kf53kf52kf51kf50kf49kf48kf47kf46kf45kf44kf43kf42kf41kf40kf39kf38kf37kf36kf35kf34kf33kf32kf31kf30kf29kf28kf27kf26kf25kf24kf23kf22kf21kf20kf19kf18kf17kf16kf15kf14kf13kf12kf11rfikUNDkSPDkSAVkRESkRITkRPLkRDOkPRTkPRVkOPTkNXTkMOVkMSGkLFTkICkHOMkHLPkFNDkEXTkEOLkENDksltkDLkDCkCRTkCPYkCMDkCANkBEGkundkspdksavkreskrstkrplkrfrkrefkrdokprtkprvkoptkopnknxtkmovkmsgkmrkkhlpkfndkextkentkendkcrtkcpykcmdkclokcankbegrmlnsmlnenacsxoffcxoncrmamsmamrmxonsmxonkcbtplnacscrmpmc5pkc3kc1kb2ka3ka1iproghuuctslhtwindhtssgrriindscvparcrfrs3rs2rs1repmc5mc4mc0pfxpflocpfkeycuurincufcubilindnichcuddldchpadnelsmmrmmlf9lf8lf7lf6lf5lf4lf3lf2lf10lf1lf0smkxrmkxkcuu1khtskrikindkcuf1kppknpkllkcub1kil1kich1khomekf9kf8kf7kf6kf5kf4kf3kf2kf10kf1kf0kedkelkrmirkcud1kdl1kdch1kctabkclrktbckbsipil1ich1ifis3is2is1fslffflashrmulrmsormirrmdcrmcupsgr0rmacsechsmulsmsorevprotinvissmirdimsmdcsmcupboldblinksmacshddsldl1dch1cvviscuu1llcuf1cnormmrcupcub1civishomecud1cupcmdchhpaedelcleartbccsrcrbelcbtarrow_key_mapbackspace_if_not_bslinefeed_if_not_lftermcap_resettermcap_init2enter_vertical_hl_modeenter_top_hl_modeenter_right_hl_modeenter_low_hl_modeenter_left_hl_modeenter_horizontal_hl_modealt_scancode_escscancode_escapepc_term_optionsexit_scancode_modeenter_scancode_modeexit_pc_charset_modeenter_pc_charset_modedisplay_pc_charset_page_lengthset_color_bandend_bit_image_regiondefine_bit_image_regioncolor_namesbit_image_carriage_returnbit_image_newlinebit_image_repeatset_tb_marginset_lr_marginset3_des_seqset2_des_seqset1_des_seqset0_des_seqcode_set_initdevice_typepkey_plabset_a_backgroundset_a_foregroundget_mousereq_mouse_posmouse_infokey_mousechar_set_nameszero_motionthese_cause_crsuperscript_characterssubscript_charactersstop_char_set_defstop_bit_imagestart_char_set_defstart_bit_imageset_top_margin_parmset_top_marginset_right_margin_parmset_left_margin_parmset_bottom_margin_parmset_bottom_marginselect_char_setparm_up_microparm_right_microparm_left_microparm_down_microorder_of_pinsmicro_upmicro_row_addressmicro_rightmicro_leftmicro_downmicro_column_addressexit_upward_modeexit_superscript_modeexit_subscript_modeexit_shadow_modeexit_micro_modeexit_leftward_modeexit_italics_modeexit_doublewide_modeenter_upward_modeenter_superscript_modeenter_subscript_modeenter_shadow_modeenter_normal_qualityenter_near_letter_qualityenter_micro_modeenter_leftward_modeenter_italics_modeenter_draft_qualityenter_doublewide_modedefine_charchange_res_vertchange_res_horzchange_line_pitchchange_char_pitchset_backgroundset_foregroundset_color_pairinitialize_pairinitialize_colororig_colorsorig_pairuser9user8user7user6user5user4user3user2user1user0wait_tonefixed_pauseflash_hookquick_dialdial_phonehangupgoto_windowcreate_windowremove_clockdisplay_clockset_clocklabel_formatset_right_marginset_left_marginclear_marginsclr_bolkey_f63key_f62key_f61key_f60key_f59key_f58key_f57key_f56key_f55key_f54key_f53key_f52key_f51key_f50key_f49key_f48key_f47key_f46key_f45key_f44key_f43key_f42key_f41key_f40key_f39key_f38key_f37key_f36key_f35key_f34key_f33key_f32key_f31key_f30key_f29key_f28key_f27key_f26key_f25key_f24key_f23key_f22key_f21key_f20key_f19key_f18key_f17key_f16key_f15key_f14key_f13key_f12key_f11req_for_inputkey_sundokey_ssuspendkey_ssavekey_srsumekey_srightkey_sreplacekey_sredokey_sprintkey_spreviouskey_soptionskey_snextkey_smovekey_smessagekey_sleftkey_sickey_shomekey_shelpkey_sfindkey_sexitkey_seolkey_sendkey_selectkey_sdlkey_sdckey_screatekey_scopykey_scommandkey_scancelkey_sbegkey_undokey_suspendkey_savekey_resumekey_restartkey_replacekey_refreshkey_referencekey_redokey_printkey_previouskey_optionskey_openkey_nextkey_movekey_messagekey_markkey_helpkey_findkey_exitkey_enterkey_endkey_createkey_copykey_commandkey_closekey_cancelkey_beglabel_offlabel_onena_acsxoff_characterxon_characterexit_am_modeenter_am_modeexit_xon_modeenter_xon_modekey_btabplab_normacs_charschar_paddingprtr_nonkey_c3key_c1key_b2key_a3key_a1init_progup_half_lineunderline_charto_status_linetabset_windowset_tabset_attributesscroll_reversescroll_forwardsave_cursorrow_addressrestore_cursorreset_filereset_3stringreset_2stringreset_1stringrepeat_charprtr_onprtr_offprint_screenpkey_xmitpkey_localpkey_keyparm_up_cursorparm_rindexparm_right_cursorparm_left_cursorparm_insert_lineparm_indexparm_ichparm_down_cursorparm_delete_lineparm_dchpad_charnewlinemeta_onmeta_offlab_f9lab_f8lab_f7lab_f6lab_f5lab_f4lab_f3lab_f2lab_f10lab_f1lab_f0keypad_xmitkeypad_localkey_upkey_stabkey_srkey_sfkey_rightkey_ppagekey_npagekey_llkey_leftkey_ilkey_ickey_homekey_f9key_f8key_f7key_f6key_f5key_f4key_f3key_f2key_f10key_f1key_f0key_eoskey_eolkey_eickey_downkey_dlkey_dckey_ctabkey_clearkey_catabkey_backspaceinsert_paddinginsert_lineinsert_characterinit_fileinit_3stringinit_2stringinit_1stringfrom_status_lineform_feedflash_screenexit_underline_modeexit_standout_modeexit_insert_modeexit_delete_modeexit_ca_modeexit_attribute_modeexit_alt_charset_modeerase_charsenter_underline_modeenter_standout_modeenter_reverse_modeenter_protected_modeenter_secure_modeenter_insert_modeenter_dim_modeenter_delete_modeenter_ca_modeenter_bold_modeenter_blink_modeenter_alt_charset_modedown_half_linedis_status_linedelete_linedelete_charactercursor_visiblecursor_upcursor_to_llcursor_rightcursor_normalcursor_mem_addresscursor_leftcursor_invisiblecursor_homecursor_downcursor_addresscommand_charactercolumn_addressclr_eosclr_eolclear_screenclear_all_tabschange_scroll_regioncarriage_returnbellback_tabbcnlrsi2XvXtXrXoXlXhS8S7S6S5S4S3S2S1YZYzYyYxYwYvZzXys3s2s1s0cidvxlABAFGmRQMiKmZyZxZwZvZuZtZsZrZqZpZoZnZmZlZkZjZiZhZgZfZeZdZcZbZaZZZYZXZWZVZUZTZSZRZQZPZOZNZMZLZKZJZIZHZGZFZEZDZCZBZASbSfspIpIcWAPAfhPUTOQDDIHUWGCWRCDKSCLfMRMLMCcbFrFqFpFoFnFmFlFkFjFiFhFgFfFeFdFcFbFaFZFYFXFWFVFUFTFSFRFQFPFOFNFMFLFKFJFIFHFGFFFEFDFCFBFAF9F8F7F6F5F4F3F2F1RF!3!2!1%j%i%h%g%f%e%d%c%b%a#4#3#2#1*0*9*8*7*6*5*4*3*2*1&0&9&8&7&6&5&4&3&2&1%0%9%8%7%6%5%4%3%2%1@0@9@8@7@6@5@4@3@2@1LFLOeAXFXNRASARXSXkBpnacrPpOK5K4K2K3K1iPtstawistsasrsfcvr3r2r1rppopfpspxplpkUPSRRILEALSFICDODLDCpcnwmmmol9l8l7l6l5l4l3l2lal1l0kskekukTkRkFkrkPkNkHklkAkIkhk9k8k7k6k5k4k3k2k;k1k0kSkEkMkdkLkDktkCkakbalici3isi1fsvbueseeitemeaeecussomrmpmkimmhdmtimdmbasdsdcvsupndveCMlevihodocmCCchcdceclctcsblbt/usr/lib/terminfoTERMINFO%s/%c/%s|x2d2d2dJ2d<2d,2d2d  TERMunknownError opening terminal: %s. zDkey_upkey_undokey_suspendkey_sundokey_stabkey_ssuspendkey_ssavekey_srsumekey_srightkey_sreplacekey_sredokey_srkey_sprintkey_spreviouskey_soptionskey_snextkey_smovekey_smessagekey_sleftkey_sickey_shomekey_shelpkey_sfindkey_sfkey_sexitkey_seolkey_sendkey_selectkey_sdlkey_sdckey_screatekey_scopykey_scommandkey_scancelkey_sbegkey_savekey_rightkey_resumekey_restartkey_replacekey_refreshkey_referencekey_redokey_printkey_previouskey_ppagekey_optionskey_openkey_npagekey_nextkey_movekey_messagekey_markkey_llkey_leftkey_ilkey_ickey_homekey_helpkey_findkey_f63key_f62key_f61key_f60key_f59key_f58key_f57key_f56key_f55key_f54key_f53key_f52key_f51key_f50key_f49key_f48key_f47key_f46key_f45key_f44key_f43key_f42key_f41key_f40key_f39key_f38key_f37key_f36key_f35key_f34key_f33key_f32key_f31key_f30key_f29key_f28key_f27key_f26key_f25key_f24key_f23key_f22key_f21key_f20key_f19key_f18key_f17key_f16key_f15key_f14key_f13key_f12key_f11key_f10key_f9key_f8key_f7key_f6key_f5key_f4key_f3key_f2key_f1key_f0key_exitkey_eoskey_eolkey_enterkey_endkey_eickey_downkey_dlkey_dckey_ctabkey_createkey_copykey_commandkey_closekey_clearkey_catabkey_cancelkey_c3key_c1key_btabkey_begkey_backspacekey_b2key_a3key_a1 A$@rwTIOCGWINSZLINESCOLUMNSTERMTERM environment variable not set. Not enough memory to create terminal structure. '%s': Unknown terminal type. '%s': I need something more specific. '%s': I can't handle hardcopy terminals. CC %d%02d%03d%2d%3d@B A$@tracecurses: Can't open 'trace' file: 1.9.2cTRACING NCURSES version %sA_STANDOUT, A_UNDERLINE, A_REVERSE, A_BLINK, A_DIM, A_BOLD, A_ALTCHARSET, A_PCCHARSET, A_INVIS, A_PROTECT, A_CHARTEXT, A_NORMAL,       @)5BCOLOR_BLACKCOLOR_REDCOLOR_GREENCOLOR_YELLOWCOLOR_BLUECOLOR_MAGENTACOLOR_CYANCOLOR_WHITE{COLOR_PAIR(%d) = (%s, %s), COLOR_PAIR(%d) }(null)\0x%02x' = 0x%02x0x%02x%s[%2d]='colors%*s[%2d]=' 123456789ABCDEFattrs%*s%d[%2d]='Got a segmentation violation signal, cleaning up and exiting Entry does not start with terminal names in column oneComment range is %ld to %ldStarting '%s'usetc%s aliased to %sUnknown Capability - '%s'maMTWrong type used for capability '%s'Unknown token type  %s$<%d>a^ZVQNKHEB ? < 9 5 0-'$!  !"#$     }wqkgc]YUPKGA<5. *&#       !"#${%u&p'j(e)`*[+V,P-M.I/E0A1=2:35415.6*7%8 9:;< =>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[z\v]r^n_j`fabb^cZdVeRfNgJhFiCj?k;l6m3n/o+p'q#rstuv wxyz{|}~}wqlgb]XSNID?:50+&! zupkfa\WRMID?:50+&! |wrmhc^YTO J E @ < 83.*%   !"#$%&'()*+,-./01234567}8w9r:l;g<a=[>W?Q@LAHBBC=D7E1F-G(H"IJKL MNOPQRSTUVWXYZ[\]^_`abcdef}gwhrimjhkcl^mYnToNpHqBr<s7t/u)v#wxy z{|}~!%&'"#()$z%up*k+|yvspmjgda^NKHEB ? < 9  -$!}zwtqnkheb _!\"Y#V$SPMJG   D A >;852/,)&#   #     C !"#$%&'()*+,-M./012:345.6789:;<=~>{?x@uArBoClDiEfFcG`H]IZJWKLTMQNNOKPQpRHSETBU?VdW<X9Y6Z3[0\-]*^'_$`!abcdefg h ijklmnopqgrstuvvw|xyz{|}~|yjvspmjgda^[XUROLIFC@=:741.+(%"  }zwtqnkheb_\YVS P M J G DA>;852/,)&# s !"#$%&'()*+,- ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\~]{^x_u`raoblcidfecf`g]hZiWjTkQlNmKnHoApEqBr?s<t9u6v3w0x-y*z'{$|!}~  !%&'"#E()$%*+,|xsnid_ZUPKtj]M:- ug[D9(iQ@,@=:741.+(%"  ~yuojc\WRMHC6,{l\K:( ~j[D.}zwtqnkheb_\YVSPMJGDA> }xsoid^YTOJDA=951.)%"{wsnjfb^ZVRNJFB>:73/*'# {vqke`[VQLGB=83.)$ }xsnid_ZUPKFA=83.)$ zupkfa\WRMHC>940,'" zuqkf`[UOKE@<61+%! |wqkfa\WRMHB<60+# wkZN;-  xfWE3 }jVI?.!wpiaZSLE>70)  {tmf_VNF=4# {sgYK=2# }vofYOE<-}tkbYMD;2&skcXOF<2( wiaYQIA91)! yqiaYQIA91)! }seXJ>7,! ~o`N<,mXA/ynbPG9)scPA/tfYL?2$q[F2seWD0"b_\YVSPMJGDA>;852/,)7&#  A."~{xurolifc`]ZWTQNKHEB?<9630-*'$!  |yvspmjgda^[XUROLIFC@=:741.+(%"  }zwtqnkheb_\YVSPMJGDA>;852/,)&#  ~{xurolifc`\]ZWTQNKHEB?<9630-*'$!2Kn,X   `  %KM \F ]? ^1 ) b a _ ` c V M d e f g U J H  L h W O Nv io h  a  Z  S  L  E > 7 0 (                 ! " # $ % & 'x (p )h *` +X ,P -H .@ /8 00 1( 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F Gw jn ke ^ KW IN G [> l2 m) n o R p qSrZstuvwxy~zr{e|[}O~G?4+"PQ|qf\OFT<0' ^x~΂ނ.>N^n~΃ރ.>N^n~΄ބ.>N^n~΅ޅ.>N^n~Άކ.>N^n~·އ.>N^n~Έވ.>N^n~Ήމ.>N^n~Ίފ.>N^n~΋ދ.>N^n~Όތ  4{}x*SGCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0GCC: (GNU) 2.7.0.symtab.strtab.shstrtab.hash.dynsym.dynstr.rel.data.rel.rodata.rel.got.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.commentP !  ) 1 x*x*P ; P{P{ G {{P }} Y_@ d?jpGDx!$Z~${$k,{,k4{4k`~n  opH ot`x@&       P P 1({> I${ W0{  d z,{  I! ${ 0   ` `L Џs 0S ( 0"$)00 L > P K@VD_ ` k y @ @C   g   ] 0 P8  ` ] Ė5 &  .  ;  Hv V  ` ` l @ y   P        @   0 0 К    p  P $t ( 2] @h L UP ^Y op! p P"f  #  #  $ $8 0*  0-  / Ԛ 0  P1  1  2  03 ((t /3 7 A `7 P 7 [ 8 g8< l {0>d @> `C  pIX @PI`  0Q  Q `y  T  X  ]. `%PlP 0dy A m Om- W p a u n w x {  ~   p   `     ly Љi @9 P9    py ( ;BIU  c  l  x  ")@P    xy |y    @ Х   з !y * 0 80 A 0 N  \y ip ~{ { {  {  @  L  L  L ,L Pc  x   <^ J !U )] 09 uH @ty In O[s g< rp |\  3 p0K `= ] ~P9< "3  {L     (  Q  " xa8 + UP 2 8 ? r L  X @ c u |     n       P  N   @#q  {5  ` - R 5 = ; B  M q X d ln y   08       J U Z< @  0o(  7B  H  @` # * I 9 " E Q X i h U q dy p rL # < t   0  ` n  t > W  p%  VE   5& % xl ( @x\ - `37 = C q J y\ S & a 2R i Y: o ~ @   p7  YK  # зT  U o( g8 Щ  3H  vE  " - $9 > 0|E G N w U  ^  h `< r Y y   67 @ @vr zl   0J ) [g  P1| ^ Ъ Pi @' `$ $1B 90- BJ0Q PQ! WЫn go65 w0" hy ! Pz\ `oz x`) p{| Z ZN X a `& U ? !Tg (@ /@ :k F0W Q \io{ / лL ] P PZ  %  m8 w  7L )  !\a &XL - 7>p Ep> N#9 W _1 h u> 03. K  0  pZ@ ur l t p\ &<  (~b  | p5a $P^ /y\ 70>P[ Hz Q/ \ d- j`Z rym'  4{`L ] п; py|   ,  d4 [- 5 PU $@5& -p, 68= L`7X U\@ fS p@2 z<(J 0( |/ _ ) pr_ $ m p[ P^ h^ @s A ( `U '1\ ?puE GM \tL f0YL mv{O crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__alloc_entry.cnext_freestringbufcaptoinfo.cpushstackptrstackonstackpopparamcvtchardpgetparmseenrseennseenmline.46bufferbufptrcomp_captab.ccomp_error.csourcenametermtypecomp_hash.chash_functioncomp_parse.cbuf.38cp.39first_nameenqueuecheck_namecomp_scan.cseparatorbuffer.6pushtypeyyinnext_charfirst_columnreset_totrans_stringcurr_columnlinebackspacenames.cread_entry.chardscroll.call_discardedlib_acs.clib_addch.clib_addstr.clib_beep.clib_bkgd.clib_box.clib_clear.clib_clrbot.clib_clreol.clib_color.ccga_palettehls_palettecolor_tablergb2hlslib_delch.clib_delwin.clib_doupdate.cLRCORNERClrUpdateTransformLineClearScreenClrToEOLClrToBOLIDcTransformLineNoIDcTransformLineInsStrDelCharlib_endwin.clib_erase.clib_getch.cfifo_peekkgetchlib_getstr.clib_initscr.cret.38lib_insch.clib_insdel.clib_insstr.clib_instr.clib_kernel.cspeedsbuflib_keyname.clib_longname.clib_move.clib_mvcur.ccostaddress_cursorauto_marginonscreen_mvcurrepeated_appendrelative_movesave_cursoyoxrestore_curslib_mvwin.clib_newterm.cfilter_modelib_newwin.clib_options.cinit_keytrynewtryadd_to_tryout_of_memory.68lib_overlay.coverlaplib_pad.clib_printw.clib_raw.clib_refresh.clib_scanw.clib_screen.cdumptimelib_scroll.clib_scrreg.clib_set_term.clib_setup.c_use_envresizeget_screensizegrab_entrydo_prototypelib_slk.c_slk_attrslk_intern_refreshmaxlabmaxlen_slk_formatlib_termcap.clib_ti.clib_touch.clib_tparm.cstack_ptrvariablelib_tputs.clib_trace.ctracefdbeen_here.40buf.43vbuf.46crep.49lib_tstp.ctstpcleanupact.40oact.41lib_twait.cset.4lib_unctrl.cbuffer.2lib_vidattr.cdo_colorlib_window.cparse_entry.cparametrizedset_termcap_defaultsC_CRC_LFC_BSC_HTread_termcap.csigaction.cstrerror.cvsscanf.cSPslk_restorecomment_endhas_colorsstrcpytparmread_file_entryboolfnamesioctlinit_colortgetnumdupwinvsprintfprintw_tracingwscrlcfgetospeedmerge_entrymvcur_wraptermattrsscr_setinit_acsstrerrordelay_outputtermnameis_wintouchedboolnames_DYNAMICmvcur_init_nc_outstrnoqiflushtracecomment_start__ctype_btgotowsyncdowngetenvstrnamesderwinerrno_etextpnoutrefreshstart_colorread_entry__strtol_internalusleepcaptoinfo_IO_stdout_vsscanfgetpidscr_restorefgetsuse_envsave_str_nc_scroll_optimizememcpyset_sourcedel_curtermmust_swap_IO_stderr_endwinwredrawlnmake_hash_tablenewtermmvcurperrorcurr_token_tracecharcolor_pairs_slk_init__overflowtcflushcurr_line_nc_synchookread_entry_sourcefeofmalloc__openisattywdelchdoupdatetgetflagclearokinit_paircurr_file_posoverwritekeynamewechocharnumfnamesselectis_linetouchedslk_attrset___brk_addrfflushslk_noutrefreshset_termttytypeospeedsubpadweraseslk_initTABSIZElseekputwin_nc_setupscreensigaddsetnumcodesdef_shell_mode__environBCalias_table_nc_makenewwcursyncupsubwinaborterasecharnlechoreset_prog_mode_initvisbufnocbreak_nc_backspacewinnstridcokcap_hash_tableread_termcap_entrystrrchrnewpadcallocidlokwvlinecan_change_colorunctrlwritetigetflagoverlaystrfnamessyserr_aborttailreset_shell_modevwprintwfprintf_IO_stdin_COLOR_PAIRSkillwrefreshstrcatcbreakwattroffinfotocapslk_touchgetwininfo_hash_tableheadresettywaddnstrmvwprintwnonl_traceattrsyntaxmvcur_scrollnwclrtobotkeypadferrorwinsdellnscr_dumptputsslk_refreshreadvidattrslk_attroff_tputs_traceslk_setwgetnstrstrncmpmvwinfilterfind_type_entrystrncpysavettyslk_attronrspinfo_tablenoechocopywinstrtokPCwattronintrflushsscanfscrollokstrncathalfdelaytigetstrsigaction_tracedumpset_curtermmvwscanwcap_tablefreadnewwinwaddchwrap_entryparse_entryinit_entrywaddchnstrgettimeofdayfopen__bss_start_nc_signal_handlermemsetinitscrreset_inputftellcur_termflashwbkgdimmedokungetchfclosetgetenttcgetattrtimestrcodesrawcolor_contentwmoveputpscr_initmetahas_icget_tokenstrcmpdelwinset_typeisendwinacs_mapwinsnstrresolve_uses_nc_rendernapmsfind_entryrestarttermwinsch_finileaveoksprintfmvprintwslk_clearkey_namesatexitcurs_setwgetchsetuptermCOLORSvwscanwwhlinewnoutrefreshflushinpripofflineqiflushstdscrnotimeoutwtouchlnpanic_modewarningscanwmvscanwfwrite_edatatypeaheadname_match_GLOBAL_OFFSET_TABLE__endwsetscrreg_fxstatbeepwsyncupnorawdelscreenwclear_nc_scroll_windowCOLSnewscrnodelaybaudratetigetnumexitkillcharmvderwincurscr_nc_timed_waitlongnamefilenoerr_abortslk_labelwclrtoeolrippedoffwchgatwscanwUPentry_matchnumnamessyncokopenprefreshstrchrwborder_traceffputswtimeout_nc_outchLINESboolcodespair_contentpush_tokenvidputstgetstrtcsetattrdef_prog_modewprintwcloseslk_initializepechocharhas_ilvfprintffreesigprocmaskfree_entries .< ..dialog perlpython rpmmd5sumlessELFP44 (44 d%/lib/ld-linux.so.1CIH80E'(3*29F,.5  ?C/1G@D-47: $&<  ">#BA6%+=;!) c #( n)2<8 oCH Oh ax "gXs qz c    " E  "X E( 8 H X gx " & \   g% , "2:]@("G8LMHTX[hc@ ih&"qx8x<hz l"ypE("8Q4X " F! `)h 0 r;G QXt]>hlibncurses.so.1has_colorsstrcpywscrl_DYNAMIC__ctype_bgetenvstart_color__strtol_internalfgets_IO_stderr_endwinfeofmallocinit_pair___brk_addrweraselseek__environsubwin_initfprintf_IO_stdin_wrefreshstrcatcbreakwaddnstrkeypadreadstrncmpnoechostrtokscrolloknewwinwaddchfopeninitscrflashfclosewmovestrcmpdelwinacs_map_finisprintfatexitwgetchwnoutrefreshstdscrwtouchln_GLOBAL_OFFSET_TABLE_COLSexitopenstrchrLINESwprintwclosefreelibc.so.5_etextgets__ctype_toupper__libc_initenviron__fpu_controlstrstrstrcasecmp__bss_startsetlocale_edata_end__setfpucwstrspn =`@,048<@<DH L P T X\`dh>lptx|AB !"#$%&'()ĸ,ȸ-̸Dи.Ը/ظ1ܸ4GH5689:5$%(%,h%0h%4h%8h%<h %@h(%Dh0%Hh8p%Lh@`%PhHP%ThP@%XhX0%\h` %`hh%dhp%hhx%lh%ph%th%xh%|h%h%h%hp%h`%hP%h@%h0%h %h%h%h%h%h%h%h%h %h(%ĸh0%ȸh8p%̸h@`%иhHP%ԸhP@%ظhX0%ܸh` %hh%hp%hx%h%h%h%hYЃPSQ̀-̀D$`PBZh@@KP [̀S=t Ѓ;u[ÐÐUWVSl$01D$$D$ D$hHjW|$,EPj}uI u<|$,tEPjMEP1[^_]ÐD$,H9D$$=tUu;D$,)؃~|$tEPPjDD$t] u;=ltEP jDltiupCft{u;|$$tEPj|$,UD$$CD$ D$,H9} |$ D$,H9uEP2jtD$,)؃tEPjTT$jj jL$QƃVD D$jj jT$ RƃV\\$L$QD$(PtÃ|$$t+PlPpPhPhP<[^_]Ðt D$,)؃tEPjjTT$jj jL$ QƃVD D$jj jT$$RƃV\\$L$QD$,PvEÃt D$,)؃tEPcjkjTT$jj jL$ QiƃVD D$jj jT$$RKƃV\\$L$QD$,PDÃit u{D$,)؃tEPjHTT$jj jL$QƃVD D$jj jT$ RƃV\\$L$QD$(PYtt$,)ރ~tEPj+TT$Rt$L$L$D$D$|$T$RLL$jj jD$$PƃVTT$jj jL$(QƃVD D$ jj jT$,RƃV\\$$L$$QD$4P3Ãt t$,)ރ~ƉׅtEPj+DD$PVTT$jj jL$$Q!ƃVDD$jj jT$(RƃVL L$ jj jD$,PƃV\\$$T$$RL$4QPÃt t$,)ރ~ƉׅtEP>jKDD$PVTT$jj jL$$QAƃVDD$jj jT$(R#ƃVL L$ jj jD$,PƃV\\$$T$$RL$4QCÃ#tǎD$,)؃tEPsj{DD$jj jT$R{ƃVLL$jj jD$ P]ƃVT T$jj jL$$Q?ƃV\\$D$PT$,RrÃ]tώ t$,)ލFvEPjA1u|WLL$jj jD$ PƃVT T$jj jL$$QƃV\\$D$PT$,R'ÃEP'j;hPc_D$PPPhڎhގhÐS ujfjhP=u =tPlPpPhP=ltphBjjRQjlPhPNjjhP/$",PhPClH9|hP^[ÐVSt_11PPf@P9 C~1۾K[|t ˃~[^ÐUWVS|$l$D$ G19t$~,jVWS1ۃ 9}j WC9|F9t$jG@PjW[^_]Ð UWVS$$P\$ShSƒuj S݋$,D$$0PD$P$(P hUj U_ƃu0t<0҃щȃ9sCjU$(P4k$<PD$$D$$P$4PWjU$(P [^_] Ð0щHD$$0ҋ$()Љ9T$wa0щHD$$(+D$D$P$0P$(PljS$4Pl[^_] Ð$0$,D$h1҅tT$RŃt~t10ЍD9$(s D$$0SD$P$(PjU$4P$8D$,$8XCo[^_] ÐUWVSt$l$T$ RT$ RVl |$$t 04FjhVShU|$$t@DF19}j VC9||$$t 8<FEPV|$$t@DFjEPV |$$t04Fjh VT$,DPT$,RV_[^_]ÐUWVS|$G19t$$(T$$JT$l$(MT$ RD$ PW 1ۃ 9\$(uuD$0 9t$uuD$0 u9uD$, 9t$u9uD$, `u D$0 ,F9t$uD$, ,4u D$0 H9u D$, HD$, PWC9\$(F9t$$[^_]ÐUWVSt$l$ FD$PD$$PV1ۃ 9\$$~(N@@VPVIC9\$$ۍ]LD$D$$PSVxN@@VPV N@@VPVC|$ D/9|V[^_]ÐUWVSD$h Pǃu!hhjsh?WD$ttD$1ېL$Qh@Wl D$t8t"t+tVxD PVhG+D PVhPD ^8t[RVhbW/T BPBPP\PVhbWpD$ppD$|$.W[^_]Ð$UWVShkÃt!htS[D$ t |$hw{Ãu1[^_]$Ð;t0Ѐ|/uh|Shh|ShD$D$P1[^_]$ÐUhhD$$P[^_]$ÐUhȓaUhQVSL$ t$f!ft19 t1Ґ@9L uPhtSh#htD195t1҃@9t uPht*|$t%Phtt[^ÐUWVS$,1D$ :(0Ӊ\$|)BT$R\$(S0҉T$ L$*D$ |4$F\4$ t t\4$,|4$wF\4$ t t,u\4$W t u, |4$tF\4$ t t|4$,!F1ۿWUT$$-T$t C~|$ t1\$$0D$ \$$4|4$FT4$ t t|4$tql4$0ЍpN. t tD5h[UZu$8Ih^U-t[^_]Ð$81[^_]ÐWVSt$L$\$1Ҋ<2tB2< t< t2u[^_Ð<#u [^_Ð<=u [^_Ð<29B2< t < t<=t 9tAB< t< t<=u2t<=u2<2<2t B2< t< t<2=u<2zB2< t< t<2d։30ЍP2J< t< tD1[^_ÐUWVS$DŽ$DŽ$DŽ$D$|$D$XPjD$x|$tu$7h0hja1ۋ$9$}G$1h_OQD$8|$0D$XƒL$tq C9$Ë$D$x$9~T$xl+$$p+$$=t.$Q$P$R$QhP$R$Q$P$R_jV ,Q$P$R$QjjVF,F4j$T$\L$\QVh8PV 1ۃ$9},PVC9|$F<PVj$PV 1ۃ$9}j VC9|tW(V0ۉӉH$)JT$XRjVj VTjUV j V@ $Njj$P$RVR$L$hD$h>G$$+T$hT$lL$lL$DD$DD$l|$lT$lJ$$$LL$lD$lP$$TT$pL$pQD$pP$RV|$(jL$tQ`PdR L$hD$hP$T$lL$lQ$P$RV&$$$L$\D$\(0Ӊ\$0D$\X0ыD$0D=9w30Չl$0Ӊ\$X\T$\0ՉH=9w0щKD$\ $R$ 9L$\!+     19\$x~P$19$ЉT$XRSL$| iL$XD$XPWRQ$P C9\$xT$pRC$9$}sF$T$XR$$\SVjvV2$T$lD$lL$lQSV` jhbV` $$D$X$$$jD$\L$\Q$PhfVsj$R$QhmVV(V$* $$DD$l$JT$hL$| I$D$dT$|҉T$`V$1ۃ9\$x~A-$|D$|؉D$X@$ 9|tC9\$x9\$xl$0~/|$x099$~M$9~3$v"$ t$+t$- $0~9|$x09 9$~"$9$$t$-$|$| >n$~qjjT$hL$|QT$TL$TQD$p@D$TT$TRL$t L$TD$TP$R j$Qp jD$tPjT$|RUD$dD$`L$|jjL$hD$| HL$HD$HPT$pRT$HL$HQD$tD$HT$HR$Q $P$T$tD$tL$tQ$PV:(|$|t`F^|$|u,SV$T$`D$`L$`Q$PV($u,SVr$T$tD$tL$tQ$PV(-|$|u,SV-$T$`D$`L$`Q$PVT)$u,SVV$ L$tD$tD$tP$RV(jvV$ L$`D$`D$`PT$xRVj(V}$ L$tD$tD$tP$RV(j+VI$ L$`D$`D$`PT$xRVsj)VUWVc$KS$t$+uD$xH9$SD$|$9D$h^>n$j$Q$$D$`T$`L$|TT$4L$4QD$d@D$dT$d$T$dL$dIL$4D$4PT$hRT$hL$hQ$Pj$R jL$tQHjD$|PD$d D$`D$|j$R$$L$`D$`T$|DD$,T$,RL$d IL$dD$d$D$dT$dRT$,L$,QD$h@D$hT$hR$QX$P#V$ L$tD$tD$tP$RV(j^V&$ L$`D$`D$`P$RVMjhtVP $ L$XQD$pPV T$|$L$h9} dF\$|$D$0v9\$h ,D$0T$0RVs$ L$`D$`D$`PT$xRVD$D(9\$| ,L$DD$DPV*$T$tD$tL$tQ$PVQ(D$0+9\$h ,T$0L$0QV$D$`D$`T$`RL$xQVD$D)9\$| ,D$DT$DRVUWV^$C$ \$|$L$t<D$Xƒ>n Q$PT$xRh L$@T$@D$|PD$< $<tD$nj$P$$T$`L$`D$| L$$D$$PT$dRT$dL$d$ L$dD$d@D$$T$$RL$h L$hD$hP$R$j$Q$$D$xT$x$T$4L$4QD$|@D$|T$|$T$|L$|IL$4D$4P$$$Q$Pw0T$pRBUWVV$CR`$ B $ b$$ $otV$$OtJ$cw$_$NV$~`$1L$tD$ j|$@WL$@QhVQjD$TP|$TWhV7(VD$ jD$@PL$@QhVj|$TWL$TQhV(D$0P|$8WVZV47VbL$Qh1|$,D$,||$$QV'[^_]4ÐdUWVSD$`D$\D$XD$T$D$P$9~L$Pl+$D$pp+$D$l=t($V$PL$xQt$xVhPML$pQt$pV$P$QjU95,V$P$Q$VjjU,E4j$L$ jD$tP芪 jL$\Qۨjt$dVoD$LD$HL$djjD$PL$dAD$0L$0Qt$Xvt$0D$0PL$\ L$0t$0VD$lP L$pQ$5t$\D$\D$\P$QUZ(|$dt`E^|$du,RUש$5t$HD$HD$HP$QU(|$xu,RU蕩$5t$\D$\D$\P$QU輩(-|$du,RUP$5t$HD$HD$HP$QUw)|$xu,RU5u$D$\D$\L$\Qt$tVU/(jvUԨ$D$HD$HL$HQt$`VUj(U覨$D$\D$\L$\Qt$tVUШ(j+Uu$D$HD$HL$HQt$`VU蟨j)UGWD$4PU苨\$hK|$pt |$p+D$`H9D$hD$dD$h9D$P:ML$}$jt$lVD$lD$hD$HL$Ht$dTRD$L@D$LL$L$ L$Lt$LVRD$P@D$PL$PQt$lVjD$tP= jL$\Q莥jt$dV"D$L D$HD$djD$lPL$lL$hL$Ht$HD$dTRL$L IL$Lt$L$4t$LD$LPRL$PIL$Pt$PVD$lPZL$pQ舧5u$D$\D$\L$\Q$VU(j^U苦$D$HD$HL$HQ$VU貦jhU赥 D$xD$@PL$XQU腦 t$dt$hD$P9} dE\$d\$hv9\$P,RU$ L$HD$Ht$HVD$`PU(9\$d,RU貥$ L$\D$\t$\VD$tPUܥ(+9\$P,RUq$ L$HD$Ht$HVD$`PU蛥)9\$d,RU3WL$4QUw\$hC|$p t$dt$hD$\<?19$~L$\C9$t$dt$hD$\ML$}19\$`~n9\$hȉL$@QSt$lމt$HD$HL$dRt$L4vt$LD$L$D$LL$LQRt$P6t$PD$PPL$lQC9\$`t$XVWD$P9\$hfML$}jt$lVD$lD$pD$HL$Ht$dRD$L@D$LL$L$ L$Lt$LVRD$PD$PL$PQt$lV-$j$P$$L$`t$`D$|RL$d IL$dt$d$4t$dD$dPRL$h L$ht$hV$P0L$XQWt$VUlUFf|$pCC|$p |$p  6|$p0|$p |$potI|$pOt@|$pc|$p|$pUҢ1ۃ9$~?11D$\ŃN6  ˃' 뷐yt;Yt4ntO또wJVr1[^_]ÐVR[^_]Ð|$u)D$jWShVrjG PSh'D$jG PShVFjWShV7(V薂VƒD$[^_]ÐV袃[^_]ÐUWVSl+$$Љp+$ Љ=t $$Q$$QVShPVS$,Q$,Q莂jS$ L$$SV,P$P$0Q$0QjjSX $t\(C0$H$$)HPjS]j Sj$0QSU j S$Cjj$,P$(QS,P$P$@Pjj$HPS螒0jL$QSց(C1 $$9}Ɛj S`G9|(C$$$$PL$QS}$4QhU蚁jUSq$H$LdơlC$jL$QS-1 9}"K@@SPS躀G9|ShRU$XulU~jj jU~$(D$jhU~P tUD$PxӐL$$jj jU~$(Sb1[^_]ÐS=t Ѓ;u[ÐÐ苁--create-rc--title--backtitle--separate-output--clear--yesno--msgbox--infobox--textbox--menu--checklist--radiolist--gauge--inputbox0.4 dialog version 0.3, by Savio Lam (lam836@cs.cuhk.hk). patched to version %s by Stuart Herbert (S.Herbert@shef.ac.uk) * Display dialog boxes from shell scripts * Usage: %s --clear %s --create-rc %s [--title ] [--separate-output] [--backtitle <backtitle>] [--clear] <Box options> Box options: --yesno <text> <height> <width> --msgbox <text> <height> <width> --infobox <text> <height> <width> --inputbox <text> <height> <width> [<init>] --textbox <file> <height> <width> --menu <text> <height> <width> <menu height> <tag1> <item1>... --checklist <text> <height> <width> <list height> <tag1> <item1> <status1>... --radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>... --gauge <text> <height> <width> <percent> �\n� �<�>�wt� Error opening file for writing in create_rc(). �# # Run-time configuration file for dialog # # Automatically generated by "dialog --create-rc <file>" # # # Types of values: # # Number - <number> # String - "string" # Boolean - <ON|OFF> # Attribute - (foreground,background,highlight?) # � # %s �%s = %d �%s = "%s" �ON�OFF�%s = %s �DIALOGRC�rt�HOME�.dialogrc�%s%s�%s/%s� Parse error: line %d of configuration file too long. � Parse error: unknown variable at line %d of configuration file. � Parse error: string value expected at line %d of configuration file. � Parse error: boolean value expected at line %d of configuration file. � Parse error: attribute value expected at line %d of configuration file. � Parse error: syntax error at line %d of configuration file. �(�,�,ON)�,OFF)� Can't allocate memory in dialog_checklist(). �on�(+)�Cancel� OK �(-)�[%c]�%s �"%s" �Cancel� OK �(+)�Cancel� OK �(-)� OK � Can't allocate memory in dialog_radiolist(). �on�(+)�Cancel� OK �(-)�%s�(%c)� Can't open input file in dialog_textbox(). � Error getting file size in dialog_textbox(). � Error moving file pointer in dialog_textbox(). � Can't allocate memory in dialog_textbox(). � Error reading file in dialog_textbox(). � EXIT �� Error moving file pointer in back_lines(). � Error reading file in back_lines(). � Internal error in back_lines(). � Error moving file pointer in get_line(). � Error reading file in get_line(). � Search � Error moving file pointer in print_position(). �(%3d%%)� No � Yes �%3d%%�XXX����������������������������������� ������������������������������������������������������������� �������������BLACK�����������RED������������GREEN����������YELLOW���������BLUE�����������MAGENTA��������CYAN�����������WHITE�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������use_shadow��������������������������Shadow dialog boxes? This also turns on color.��������������������������use_colors��������������������������Turn color support ON or OFF��������������������������������������������screen_color������������������������Screen color������������������������������������������������������������shadow_color������������������������Shadow color������������������������������������������������������������dialog_color��������������������(����Dialog box color��������������������������������������������������������title_color���������������������4����Dialog box title color��������������������������������������������������border_color��������������������@����Dialog box border color�������������������������������������������������button_active_color�������������L����Active button color�����������������������������������������������������button_inactive_color�����������X����Inactive button color���������������������������������������������������button_key_active_color���������d����Active button key color�������������������������������������������������button_key_inactive_color�������p����Inactive button key color�����������������������������������������������button_label_active_color�������|����Active button label color�����������������������������������������������button_label_inactive_color���������Inactive button label color���������������������������������������������inputbox_color����������������������Input box color���������������������������������������������������������inputbox_border_color���������������Input box border color��������������������������������������������������searchbox_color���������������������Search box color��������������������������������������������������������searchbox_title_color���������������Search box title color��������������������������������������������������searchbox_border_color����������ĩ����Search box border color�������������������������������������������������position_indicator_color��������Щ����File position indicator color�������������������������������������������menubox_color�������������������ܩ����Menu box color����������������������������������������������������������menubox_border_color����������������Menu box border color���������������������������������������������������item_color��������������������������Item color��������������������������������������������������������������item_selected_color������������������Selected item color�����������������������������������������������������tag_color����������������������� ����Tag color���������������������������������������������������������������tag_selected_color������������������Selected tag color������������������������������������������������������tag_key_color�������������������$����Tag key color�����������������������������������������������������������tag_key_selected_color����������0����Selected tag key color��������������������������������������������������check_color���������������������<����Check box color���������������������������������������������������������check_selected_color������������H����Selected check box color������������������������������������������������uarrow_color��������������������T����Up arrow color����������������������������������������������������������darrow_color��������������������`����Down arrow color������������������������������������������������������������������������������������ � �. �> �N �^ �n �~ � � � � � � � � � � �. �> �N �^ �n �~ � � � � � � � � ���.�>�N�^�n�~�����������.�>������������ ��� � ���@������������� � ���o�� ���������������� ���������������P ���� ����0�������������������������������������GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��.symtab�.strtab�.shstrtab�.interp�.hash�.dynsym�.dynstr�.rel.bss�.rel.plt�.init�.plt�.text�.fini�.rodata�.data�.ctors�.dtors�.got�.dynamic�.bss�.comment���������������������������������������������������������������������������#��������������8���������������)��� ������ � ����������������1������������o�����������������9��� ������ � ��0���������������B��� ������P �P ����������������K��������� � ��������������������Q��������� � ��P����������������V���������P�P��~�����������������\���������@�@��������������������b���������H�H�� �����������������j������������������������������p������������������������������w������������������������������~��������� � ����������������������������������������������������������������������������������������������������������������������������x����������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������� �������������� �������������� �������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl # RPM Package Management System # Copyright (C) 1995 Red Hat, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # rpm - we can rebuild it # we have the technology # better, stronger, faster # Copyright (C) 1995 - Red Hat Software unshift(@INC, "/usr/lib/rhs/rpm"); require "rpmgetopts.pl"; require "message.pl"; require "misc.pl"; require "opts.pl"; $DO_PREP = 1; $DO_BUILD = 2; $DO_INSTALL = 4; $DO_SOURCE = 8; $DO_BINARY = 16; $DO_TEST = 32; $DO_LIST_CHECK = 64; $DO_CLEAN = 128; $ENV{'PATH'} = $rpm{'PATH'}; $ENV{'PWD'} = `pwd`; chop $ENV{'PWD'}; sub sigint_handler { &error("SIGINT received - aborted"); } $SIG{"INT"} = 'sigint_handler'; &setmessagelevel(1); @args = (); $mode = 0; $rpm{"options"} = join(' ', @ARGV); @rest = &rpm_getopts("ab:cdfhiUlpqsSuyVwFPv", @ARGV); $bigmode = "none"; $lopt_y && ($bigmode = "verify"); $lopt_V && ($bigmode = "verify"); $lopt_q && ($bigmode = "query"); $lopt_U && ($bigmode = "install") && ($rpm{"upgrade"} = 1); $lopt_i && ($bigmode ne "query") && ($bigmode = "install"); $lopt_i && ($bigmode eq "query") && ($querymode{"info"} = 1); $lopt_u && ($bigmode = "uninstall"); $lopt_a && ($querywhat = "all"); $lopt_f && ($querywhat = "whence"); $lopt_F && ($querywhat = "Whence"); $lopt_p && ($querywhat = "package"); $lopt_P && ($querywhat = "Package"); $lopt_c && ($rpm{"clean"} = 1, $querymode{"list"} = 1, $querymode{config} = 1); $lopt_l && ($querymode{"list"} = 1); $lopt_S && ($rpm{'search'} = 1); $lopt_w && ($bigmode = "install") && ($rpm{'where'} = 1); $lopt_d && ($querymode{"list"} = 1, $querymode{"doc"} = 1); $lopt_s && ($querymode{"state"} = 1, $querymode{"list"} = 1); $lopt_h && ($rpm{"marker"} = "hash"); if ($lopt_v == 1) { &setmessageverbose(); } elsif ($lopt_v >= 2) { &setmessagedebug(); } # Now we can process the long arguments foreach $_ (@rest) { ($rpm{"root"} == 1) && ($rpm{"root"} = $_, $rpm{"rootspec"} = $_, next); ($rpm{"timecheck"} == -1) && ($rpm{"timecheck"} = $_, next); /^--upgrade$/ && ($bigmode = "install") && ($rpm{"upgrade"} = 1, next); /^--where$/ && ($bigmode = "install") && ($rpm{"where"} = 1, next); /^--rebuild$/ && ($bigmode = "build") && ($rpm{"rebuild"} = 1, next); /^--root$/ && ($rpm{"root"} = 1, next); /^--short-circuit$/ && ($rpm{"short_circuit"} = 1, next); /^--clean$/ && ($rpm{"clean"} = 1, next); /^--time-check$/ && ($rpm{"timecheck"} = -1, next); /^--test$/ && ($rpm{"test"} = 1, $rpm{"keeptemps"} = 1, next); /^--quiet$/ && (&setmessagequiet(), next); /^--percent$/ && ($rpm{"marker"} = "percent", next); /^--hash$/ && ($rpm{"marker"} = "hash", next); /^--force$/ && ($rpm{"force"} = 1, next); /^--query$/ && ($bigmode = "query", next); /^--verify$/ && ($bigmode = "verify", next); /^--keep-temp/ && ($rpm{"keeptemps"} = 1, next); /^--verbose$/ && (&setmessageverbose(), next); /^--install$/ && ($bigmode ne "query") && ($bigmode = "install") && next; /^--uninstall$/ && ($bigmode = "uninstall") && next; /^--search$/ && ($rpm{'search'} = 1, next); /^--debug$/ && (&setmessagedebug(), next); /^--version$/ && ($bigmode = "version", next); /^--help$/ && ($bigmode = "help", next); /^-/ && (&error("Unrecognized option: $_")); push(@args, $_); } ($rpm{"root"} == 1) && &error("--root requires argument"); if ($rpm{"rebuild"}) { require "install.pl"; $mode = $DO_PREP | $DO_BUILD | $DO_INSTALL | $DO_BINARY | $DO_CLEAN; $rpm{"clean"} = 1; if ($rpm{"messagelevel"} == 1) { # verbose by default &setmessageverbose(); } } if ($lopt_b) { if ($rpm{"messagelevel"} == 1) { # verbose by default &setmessageverbose(); } $_ = $lopt_b; $bigmode = "build"; /^p$/ && ($mode = $DO_PREP); /^l$/ && ($mode = $DO_LIST_CHECK); /^b$/ && ($mode = $DO_PREP | $DO_BUILD | $DO_INSTALL | $DO_BINARY | $DO_CLEAN); /^a$/ && ($mode = $DO_PREP | $DO_BUILD | $DO_INSTALL | $DO_BINARY | $DO_SOURCE | $DO_CLEAN); if ($rpm{"short_circuit"}) { /^c$/ && ($mode = $DO_BUILD); /^i$/ && ($mode = $DO_INSTALL); } else { /^c$/ && ($mode = $DO_PREP | $DO_BUILD); /^i$/ && ($mode = $DO_PREP | $DO_BUILD | $DO_INSTALL); } } ## All options are processed! if ($bigmode ne "build") { $rpm{"require_vendor"} = 0; $rpm{"require_distribution"} = 0; $rpm{"require_group"} = 0; $rpm{"require_icon"} = 0; } if ($bigmode eq "build") { $h = `hostname`; if ($h =~ /redhat\.com/) { if (! ($rpm{"require_vendor"} && $rpm{"require_distribution"} && $rpm{"require_group"})) { error("Bad /etc/rpmrc for redhat.com"); } } require "build.pl"; &do_build($mode, *args); } elsif ($bigmode eq "uninstall") { require "uninstall.pl"; &uninstallpackages($rpm{"force"}, $rpm{"test"}, $rpm{"nosub"}, @args); } elsif ($bigmode eq "verify") { require "verify.pl"; &doverify($querywhat, @args); } elsif ($bigmode eq "install") { require "install.pl"; &installpackages($rpm{"force"}, $rpm{"test"}, $rpm{"marker"}, $rpm{"upgrade"}, @args); } elsif ($bigmode eq "query") { require "query.pl"; &doquery($querywhat, *querymode, @args); } elsif ($bigmode eq "version") { print "rpm version $rpm{'version'}\n"; } else { require "help.pl"; if ($bigmode eq "help") { &help(); } else { &usage(); } } if (! $rpm{"keeptemps"}) { &remove_temps; } exit (0); ������������������������������������������ELF���������������4���,������4� ��(������4���4������������������������������������������������������������������������������@ ��,������������������������������/lib/ld-linux.so.1��C���Q���9�����������;������������������������&���"�������8������D���������������H�������C������6������O��� �������!���'���F���1��� ���)��������������N������@���I���K�������������4��� ���E�������$���,���M�������J���=���G����������A���(���B������ �������%��� ��������������*���������������������������������/�������������2���3���>���+������#�����������L������������������.����������������������������������������-���?�����������������������������������������������������������������������7������������������������������ �������:���<��������������������������0���P������5�������������������������( �����"������8 �r���������������'���@������1��� �g������7��� �o������>��� ������P��� �#������[����V������d���H������p��������� �z��� ���������������"����������������V���������8���������H�&���"������x�@�������������� �����8������������������8���������H����������x�Q��������� ������������������� �����"���������<������ �������������P�������������������������"���$��������+���&������3�������"���9��@������E��(�����"���L��@������S�������X���������]������������j�� �@������t��H �����"���z��X � ��������h �#��������x ���������D����!���� �����"�����l�I��� ��� �"������� �;���������C���"�����(�`�������8�d��������L��������H�����"�����X�&��������h�F��������x�9�������������!� ���T���������T�������������"������������&��������.��X�&�����6��h�5������;���������B�������"���F���&���"���N��� �����X���d������`���W������g���>������r�������"���w��(�}��������X��������X�����"�����h�����"�����D�������libcurses.so.1�ioctl�tgetnum�_DYNAMIC�__ctype_b�tgoto�getenv�__strtol_internal�__overflow�tgetflag�___brk_addr�__environ�_init�kill�tputs�PC�tgetent�tcgetattr�__uflow�_fini�atexit�_GLOBAL_OFFSET_TABLE_�tgetstr�tcsetattr�free�libtermcap.so.2�strcpy�_etext�fgets�memcpy�malloc�ospeed�BC�write�strcat�strncmp�fopen�__bss_start�fclose�_edata�_end�exit�UP�libc.so.5�__longjmp�popen�cfgetospeed�strerror�pclose�errno�getpid�glob�system�__open�isatty�sleep�_xstat�__ctype_toupper�lseek�__setjmp�__libc_init�calloc�environ�__fpu_control�signal�read�strncpy�regcomp�regexec�time�strcmp�dup�sprintf�setlocale�_fxstat�fileno�__setfpucw�open�regfree�__ctype_tolower�sigsetmask�close�_errno��@���H� ��L�7��T�=��V���D�P��X�M������*���������+���,���-���.������������0���������2���3����4��� ���5�� �6���8���9���:���;�� � ��$� ��(�!��,���0�>��4�?��8�"��<�@��@�A��D�#��H�%��L���P���T�B��X�C��\���`�D��d�E��h�F��l���p�G��t�H��x�(��|�I���J���K���L���������N���O�����蛷����5�%�����%�h����%�h���%�h���%�h���%�h ���%�h(���%�h0���%�h8���p%�h@���`%�hH���P%�hP���@%�hX���0%�h`��� %�hh���%�hp����%�hx���%��h���%�h���%�h���% �h���%�h���%�h���%�h���%�h���p% �h���`%$�h���P%(�h���@%,�h���0%0�h��� %4�h���%8�h����%<�h���%@�h���%D�h��%H�h��%L�h��%P�h ��%T�h(��%X�h0��%\�h8��p%`�h@��`%d�hH��P%h�hP��@%l�hX��0%p�h`�� %t�hh��%x�hp���%|�hx��%�h��%�h��%�h��%�h��%�h��%�h��%�h��%�h��p��������YЃPSQ�������̀-�������̀H�D$��T�P2h��K���P[���̀S�=��t Ѓ;�u[ÐÐUWVS]  ( ��G����9$��d��h�"PԆ��}uD�����u h�謆��� ����u h�芆��M~0<-t<+uz�u y��tPZ��M]��t褍��j���h�x t8�u%h�] t8�u  �h�8 t8�u  �1M|PPd��M}ji uN�d��uR��u2R��+[Q��uR��jQ��tj���}��j����jϬ��=�����c��~j�h � ��j�� �P%��=�u jb��PL��t jF��讯�� u j-��` 1b��uQ��kP��t j�����9��j����e[^_]ÐUVS]E uVPSD3�e[^]ÐUWS]j0P ���SWe[_]ÐUUE PRuj�h1�轑��j6���]ÐUE @ t t]ÐUS]}`�`����j�IK��=��th����^��j����SU$WVSU9$�~��P��]Sjp� ���SA��wO���w����������������������� 7��w5 ������ ��� ��Y������=����=���� ��P����� ��P�������P�������P�������P�������P�������P�������P�������P�������P� ���~P� ���nP� ���^P� ���NP� ���>P����.P����P����P����U$UULe腋E ��$ljEEE�}ܾp� ���EPjjU$�e[^_]UE=�uEEPhH�]��]ÐUEPhT��j" u#fEft%��Phd�^tj�j j�P[hj�=� ���EPhT��j ufEft %��.hm�tj�j j�P hu�^<=<� <P���]ÐU<WVS11ۍE؉EЉEԍ}ԉ}Whx�Eăt_Ph$�Uĉ0ƃ$�Cƃ$�CEP$�WUĉ0щMƃ$�CEЉEԋ}Wh{�EătdP$�PMUĉ0щMƃ$�Cƃ$�CEP$�WUĉ0щMƃ$�CEЉEԋ}Wh~�EătWP$�PUĉ0щMƃ$� CEPh�Uĉ0Ɔ�FEЉEԋ}Wh�Eăt\P$�PVUĉ0щMƃ$�CEP�W(Uĉ0щMƆ� FEЉEԋ}Wh�#Eăt1P�P0ҋ}ĉ}ĈщMƆ�F}Љ}ԋEPh�Eăt4P�W0ҋEĉEċ}ĈщMƆ� FEЉEԋ}Wh�Eăt1P$�P;0ҋ}ĉ}ĈщMƃ$� C}Љ}ԋEPh�3Eăt4P$�W0ҋEĉEċ}ĈщMƃ$� CEЉEԋ}Wh�EăuEE�EىEċ}W$�PUĉ0щMƃ$�Cƃ$�CEP$�WSUĉ0щMƃ$� CE$EE�}W$�PUЉ0щMƃ$� CLt8UE�EP$�WUЉ0щMƃ$� CVh�><��Sh$�c<��e[^_]ÐU��WVSh�u�P�P"����h�6��h� Hh�Dh�,h�(h�4} 4����4 08@~ ����Dž�Sh��t�V�Sh�~�u ��Sh�]�u ��Sh�<��u ���Sh��u ��Sh� �u t8�uh�c ��Ph�0�=(�t$u t8�uh� ��Ph�w�u t8�uh��� �Ph�:��u t8�u��� ���� ���Ph�@�uu @��Ph�P�uu P��Ph�`�uu @�`�Ph�lp�uu P�p�Sh�A�uu@��P��$Sh"� �u ��Sh%��uu@��P��)Sh"��u ��Ph(��uu ��h+�Bu"Ph0�J�t8�u �.�Ph3�Ãuu���8�uDž�Rj�j�P.PP0Љh6�h:�WS���PhF�wÃuu���:�uDž�OHPj�RPP0ЉhI�hK�WS����Pho�Ãuu�Phr�uu Dž�=,�t�'h�hu�WSi�����8�u p����[^_]ÐUE �]UU �����h�$�PR �]ÐUWVS}u E?�u>�u.PaE.>�tWV9| e[^_]ÐU=�u6h�P��Ph�P�P ����]ÐU=�u?= ��t6h�P�Ph�P�P �����]ÐUh�j�Pc]ÐUh�P�P?]ÐUh�j�P#]ÐUEPj���Ph�jP]ÐU=du���]Ðj~��]ÐU�:�th�PR]ÐUh�P�Po]ÐUh�j �PS]ÐU=(�th�j0�P%]Ðh�j �ߐUh�j@�P]ÐUh�jP�P]ÐUh�j`�P]ÐUh�jp�P]ÐUh�j�Ps]ÐUh�j�PS]ÐUh�j�P3]ÐUh�j�P]ÐUh�j�Pj |��h�j�P]ÐUh�j�P]ÐUWVS}]1uP��t P��t>tj�h����j�h����j�h����k�� tuuj�h�{9EuK؅u��p/�t.�1ېփtE9EuC񐐐9E uK}ܸ���tP��PS��j�h�$}��e[^_]ÐUWVSE����0�9t+‹B9CuC 9B sr��9uڋ0�B9txt1=�tBtt9B}T��t ����0�X@CC ����0�@ { ��t9}H0�9xtQ@u?���Z��j�W@ P, uj�h�|��"��0�x(�u-C ���)RDP0�@ Pv��ƃ C T���(�t}j�h�{��1�|~VC PR 0�ps u?x$=P�t&}�uj�h �{��jE��� 0�9tCBSKX0�@ 9C sDe[^_]ÐUS]t=(�t j�h�z��(�]]ÐU=��|b=,��u:0�x$u/,����j�h2�*{����t t�Pn������]ÐUWVS10�P��}�� 19}`0�90�u$uFj�hD�y�����09Zt ːB PBP�P C9|e[^_]ÐUM0�9t$9Hu���]Ð�9u1]ÐUVS]��|Ct9:؅}�� 0�@uZ9XtUVuH0�@9~ ���V9}K��tuݡ0�9X|,0�r؅}��%�)ÉZ 1e[^]ÐU0�@t@ PIA��¡0�P$���t"P ]Ð1]Ð���tt���]ÐUSj�tL0�9u���<9tËA9B}ы9u0�ABB ����1]]ÐU=P�u0�@$]Ð]ÐU0�B B ]ÐU0� A9BuB 9A vD u]Ð0�J ��AJ ]ÐBB ����]ÐU0�B ~HB =B ]BuHPt0�H@ ��0� A9BuB 9A vD]Ð;]Ð)��*��+��,��-��.��/��0��1��2��3��4��5��6��7��8��9��:��;��<��=��>��?��@��A��B��C��D��E��F��G��H��I��J��K��L��M��N��O��P��Q��R��S��T��U��V��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������US]D���t70�+X]EPhd�v��0�x�ujy0�9X|0�@]]ÐU0�BuB$]Ð9t@�9u0�@ Pm>��¡0�P$@����@����@ ����j�j�@ Piu j�h�Mu��]ÐUh��jit+0�@APQP H1]Ð���]ÐU*0� BAJR0�9�uء0�@����]ÐUEj�jP%���]ÐUVSu] �PF��0�uxj(j0�@�@@����@����@����@����@ ����@ @$XVj t 0�H0�P�PE��0�x up e[^]ÐUS1ۡ0�@t ���0�Buu B P0�@ ���u"0�P0�����j��PE��]]ÐU0�@]ÐUWVS}1E�<�?����G<9<0}U<.t!_<bt,<ctFE�REBE2ۍDWj�h�r��j <�rj�h�dr��j MFK1AMF<�re[^_]ÐUVSut>�u1VCP���;0�=0��tPVtЃ;�uj�h6�q��j5e[^]ÐUhK�j1ɺ<�@�fH@t �t  BA���vˉ]ÐUUt:�uL�:*utB<kt0<dtX<st,<ut8Fd����>d����.d����d����d�����`�]ÐUhS�PMh^�P]u+hj�t8�tP:]Ð]ÐUE<�]ÐUE<�]ÐUVS]Su Shv�Iuhy�h4�4;ރ@Vu Vh}�S`�Ph4�4�e[^]ÐU�@�@������������]ÐUW0@�H}]ÐUWVS�@����B�5�RUR0҈щH)��;�tCC;�u kN95�|�;�t8PW_m��0щMtC;�uN95�|=��u)=�@�u=@��u���1e[^_]ÐUW��t6P�Wl��0�H�1}]ÐU�=@�v<x u6�x u4x=�@�v#␐x tU�=@�w1]ÐU�8 u#;�8 t(�8�t�8 u1]ÐUWSRB�RURÉ0щH)�{Cu�@�w1e[_]ÐU=@��u���]Ð[���~=��t1]Ð���]ÐUW��t1P(�Wj��0�H�1}]ÐUWS�=@�vKx=�@P0ډH)�KCu1e[_]ÐUE�]ÐUWS=��u���+V} u�PR �PP�@X u��@�;�tK���P‰0щ�H�Ri��C�;�u���1e[_]ÐUWVS5�t{0ҿ@�te9t'h@�C Pt 9�u9�u-jjdh@�C �PSPX�Be[^_]ÐUM1�u���l�u PQ8!��P��$<� >�@>�<�<�`=�=�>�>�=�=�`>�>�>�>�>��?�>�>�>�h�����!]Ðh�����Q]Ðh�����8 t�8�u�8 t���h������=@����x u)�=@�wx tY�=@�wFh�����Q]Ðh����� �8�u1]Ðh�����㐐h�����]Ðh�����Q]Ðh�����]Ðh�����]Ðh�����!]Ð����0h�����P]ÐPz��]Ðh��������]ÐU WVS0ۿ@�щJu'��5�EPE}щM�T U�<H9|$}щJE)У����@�щˁ?�9�wCK9�vU��Y�K�z����P'E}0щMt<J9|@}щH)95�}N95�|\���5URd��C;�zKN95�|1e[^_]ÐUS];�t'PGtEE C;�u1]]ÐU��< t2t.< tJ�8�t>�8 t/吐�=@�vx u1]Ð�=@�tx tH=@�w]ÐUVS�tP�����Jƅt[5���t Pj�)@P|‰���)PVR���V'����e[^]UEU tt+Rh0���]ÐRh0���]Ð�]ÐUS]=h��tu[����u �bh����Ph0���j�SS �. �PS4 � �9�w �uh�������Pth�����1]]ÐUS]=��t �����S5���tS|~ Su1]]ÐUj�j j�h@�]ÐUW}W3a��0�H�}]ÐU@�]ÐUhS`��]ÐUVSE] u�(SVle[^]ÐU1�tt@]ÐU�t���������t h�=��} h��@t h��th�h�|�P]ÐUSá�*��$`E�F�jG�jG�jG�F�1F�jG�jG�jG�jG�F�jG�jG�jG�jG�jG�jG�jG�jG�jG�jG�jG�F�jG�jG�jG�jG�jG�jG�jG�F�F�PG�jG�jG�jG�jG�jG�jG�jG�jG�jG�F��PS��I��C<+t< t�t P.;�u����� ��S�����PS�PT��������PjCP�Pj�PCP:���SJ�����;!t �t PtS!����uh� PzE��j�h�#S�PF��j�h�^��]]ÐUS]�/h��$G�H��J��J��J��J�I�`H��J��J��J��J��J��J��J��J�I��J��J��J��J��J��J�H��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J�H�CЃ ��jS,��d��+������1��9$T��9H���t <+t<-2��+t -t&����T����D�=�u SU��t$�Ph�S#R��������<+t<-u����SU��uE-]E�Ej�Pj/���[g1*t@!t<@t.@���"������t1�Z t2 t-S@u���6�݃w#~������]]ÐUS�t =@����3_��t? ujj� PRt2��3=T�t���R1��=lu%=X�t�P?+��u j�Yh��Åuj:Y��{SY��]]ÐUE�EPh�Z��]ÐU塬�ux��]Ð=@�vP�@]Ð�����1t]��t�tt#1t)g���]Ð ���]Ðx��]ÐUS]=��u �@�=��rj�h�Y��jg��]]ÐUWVSu0Ѝ\9rPK9se[^_]ÐUWVS] 1=��t1t\��k��������%�SUR�P4o��à tf|L�}0t jE�� j��u���뷐~j�h�X��tW��tjEe[^_]ÐU WVS����@ ������������=�tZr��=�t j]=�u_ƃ=�u=��tKVUt~t҃=��t-VcV؈Eff]UE����EPR] ��ǃEt PtGcK��$N�0Q�P�@R�S�`P�0W� U�PU�W�pR��Q�P�R�S��S�R��X��U�V�R�X�V�S�R�W�W�pS�`Q�Q�S�pU�P�P�X�X�PX�V�T� U� U� U�T�T�PT�T�W� U� U�Q�0S� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U�M�j�h�j �~=�� G���jjj��x���~=�� DG���*jj��h��=�� ����j�j����=�� ����j�j����=�� ����j�j����=�� ����hj�j����Kf)��P���X����uj�j�j !�� tP�����~ j�j� P �� ~�~ j�j� P~!�� Nt =5��)��&=�� ����X�a=��} �����=�d~ �d���%�Pj)�� �(��Pz(��=��} �����`P�Pw)��WV`��EEPh�u��{j�����=�� ����;����=�� ����~ �=�� ����Q�Pj�oo5����t$ B$ 05����t$ $  �=�� ����F�Pj�5�`��=�tKh�O��j�5��u�Ph�j f���P!��ƿ����1t FO)ȃuj�h�U��=P��tj�h�;��;j� P\��P6���P} ��j軾=�� �����PB��=l�t=X�t j�n�=�~*�EEPh2����=�� �����P2���=�~*�EEPhA�6=�� �����PB��j�hT�;O��j�h�j/������j�ha�j-ƃ 95$d95Xj�h�VC�� Cj�hc�j :���Ph�j&��j�he�jrƃ 95$95  V8:��j�hl�j"]ƃ 95$95  vVh:��hj�hx�j% ƃ 95$D958 t u.���V{9����Ph�j%j�h�Wcƃ 7=�j�h�j5VJUhL��h�~���jCh�����Ϳ��]ÐUWVS}u ]u 1>j j…t!rމr1e[^_]ÐUUE PRhD� } j�h�xL��]ÐUUE PRhH�[ } j�h�HL��]ÐUWVS}U ]9U��� 8u0urB gt:} Bȃh����^u ���Kuzguf���5Bu:�}B:�u]KBC9Uwd���e[^_]UWVS} ud���]tVCPCPW)duue[^_]ÐUEU RPD�P]ÐUEU RPH�P]ÐUU�ȉ]ÐUUE |�t|�t ]PR)1]ÐUWVS}E |E���|n���|d���OMuE@EetEct\xteIV:SEPVSEP] WB1Ʌr1e[^_]ÐUWVSEj�P褳ƃ}������V��ǃt.~)jW˱Ãtj�j�V舱 uS誳V蔳\WSVEVw9}tSy1;�u{Mu {+u{Gt WS"WSIe[^_]ÐUSh� ��Ãt'S}]EPh�H��S]]ÐUWVS}9=$u ������9=u������1ۍUU~ljT+D+�CUREPƃtҋU t |d���U tt | |d���U udu(~0KD+PEtPe[^_]ÐUWVSu] S۵E0UЍDF9s: u�B9Vwe[^_]ÐUWS]U u!0ЍD9Cv@8�t9Cw1e[_]ÐUUE uB9r 1]ÐH8�t9v9vHx�u]ÐUS=��ts]S7J��}tS�P��2��=P��t5�P�P;��PP�P ��P�PYP����������]]ÐUUt�PR��P���]j� ���]ÐUWVSU9����Ut}�u��UR��EE����EPEPURS ��E]u]E����}�tE���J��޿�����uL�EE�����S ��Et`EPh�D��EP! }�tEPURUR ��URURz��UR�����j�SpE}.UR5@��EEPh�tD��EP裮뀐=�uWUR��uGEP^��t7UUEPh�3E��ytYtEP5}�t U �U�UP�E�URN��h �P������UREP'�t= �t P,���t P=��A������= �t0E��$��S��t=�~UUEPh�"C��1e[^_]ÐUWVSE�U1PEPO1UUVEPƃtaV; ��EPUR1ۃ SURnÃt%Suuܡ�P��ǃʐUR诬뎐u ���E�PW$��9�u 1%URgt j詰W e[^_]ÐU�����j,���]ÐU�����jl���]ÐUWVS}�S��ƃO} St%u���̐1e[^_]ÐUWVS}�Sz��ƃO} S|t%u���̐1e[^_]ÐUVSu1ېS��ÃtS��9uS���e[^]ÐUL�P芨tj�h&�@��j�( h�]ÐU7tP>��됐>��]ÐUVSu ��j�VS` | =��tO���uEPhM�A��0J��$Pf�@g�g�g�g�g�g�g�g�g�g�g�g�g�g� g�g�g�g�g�g�g�g�g�g�g�g�g�g�g�g�g�g�@g�g�g�g�g�g�g�g�g�g�g�g�g�g� g�g�g�h��hA��VȦ� fjVШ�jj�PuA�P�'j�9j�h�=��}uEPh�>��e[^]ÐUWVS]u t6;�t1j0҉Pkǃu 1>VSh�W{j�W}W61Pe[^_]ÐUEPh�PFu1]Ð]ÐUh�ۤuh�R]ÐP:]ÐUWVS1ۋu>�td#t%uP�t$ �uEP���R ��0щM\ CF>�ujCPE]u>�tV#t%u@� �P ��RST0щM\ CF>�u�Ee[^_]ÐUWS]j0@POSh�W艥W��WSZ u S=1ۃW2؍e[_]ÐU@VS]S/tWj�j�Sƣ uC���:j@EPS,1ۃ 9}D+P=uC9|1e[^]ÐUEjj�PXu]ÐUWVSEd���jjdGÉ߃UB9BwRG0UB tRtM)ڋEH9|9U҉U�jRSW荡S0Ѝ|G끐�؍e[^_]ÐUWVSu0ۋ}щJ} �t} щMT t"щMBjRGVE PEPS~h�dƃtI>�tDj0҉ЍDPSVh�W-Sh�S跠Sߣe[^_]ÐUWVSUR1lj}j�Wh�Ãu+SS芠>�t W| VrEe[^_]ÐUWVS1j>h�\���u%��������8|u@���j�URP:ƃ tqtMVojEPWAtVӟIEP趽U2U :h%�R"V*V蚟?�t 1e[^_]ÐUVS]u Et P`h'�stSVP|P>e[^]ÐU@WVSuEPVjП }V{3�����=�uMfEf%�f=�@u9j0ЃP讥VSMhT�Gf=�u 17j0ЃPeVShd�S號؍e[^_]ÐU@S]EPSj袠 |ES]]ÐU=d�u_]Ð{]ÐUS=P�u)u j8��Ãt 9uX]]ÐU=\�t\����E ��]ÐU WVS}u ]E����E����E����t H9|9~H9tE���}����=�tEH9|;69t2=t =|��t諵趴E���˵j7��9u 8��tJ7��VY7��E���tuLW=|��u h1� 4��O���}�~ Mu11-V��ƃuE���}�uj�|6��unV6��E}�uU=|��t9u4=�u+=��u"=��u\��� =u袴1��OV=P�t X����&}�tuX}�u`}�t ��|�����j$��e[^_]ÐUWVS]u 1zE������9}�tH9~E���X����K|:V��ƃu}�t"V5��G}�u色褲0��K}u}�tE ��j^��e[^_]ÐUWVSu }=l�t+=X�t"jK���j�艡���jy4��ÃuotHPjm6��tV=P�t=86��t1@j�jj�54��Pjj#4��ÃtXj�WVSUR"e[^_]ÐUWVSu }j�3��Ãu#tj3��uLWVSURe[^_]ÐUp}=�u '��]Ð]ÐUWS3Åuj�hA�1�����j0҉߈щM= ҋE���R艟S PhW�W轚S臛W�� }�uj�h�41��Wce[_]ÐUEU =�t P�=�u]UMU u�QH RBQjP�]ÐUU BAJjP �]ÐUWVS]u j j蛞SSGGG����VW[e[^_]ÐUS]t+9�uSg����SYCPHSB]]ÐUEu��=�u1]ÐUEu�@=�u1]ÐUS]Su Su1]]ÐU塠�]ÐUVSu��t$CPV覘u�u1e[^]ÐUVS]u SuVSe[^]ÐUEt@]Ð1]ÐUE@]ÐUSMU ZAY]]ÐUSMU AYZ]]ÐUE@���]ÐUE@]ÐUE@ ]ÐUUE B ]UVS]��=u�@PSE��S輴�����S��S蠴苶Ã���1 t u������ t3t.0HPS( ��tA=�t(3à tuø���)X1닐P ��=t�t?t;ӵà t utI ��t&聵É؍e[^]ÐUWVS}B��}�8��=u MQ�@19|E)PmD��EHPP���=t�tt'"蛵薵 t uT臵à t ut���u���諴p/軴ut*à tӃuyV衲tME������E����R��W��WfKÃt t ��_F tHPS��t&=�yj� ��mN{9uMQr ��e[^_]ÐU舲tj�h�*��]Ð{PƒuHPj���]ÐHPR��]ÐUVSuV��Ãt%S?u`PSL��K+Fu"`PײP!��j�h�uEPh �*��e[^]ÐUEP-��\,��EPEP���]ÐUWVS5ƃuj�h(�*��=ƃuj�hC�)��%MΉȻd���9|N`PQ ���e[^_]ÐUVS]u Su 胲 t u uʱVS���e[^]ÐUWVSu} W-��V,��Ã|J)~&j�j�jji*��PSe��j�jj�E*��P=��Vjtj�h]�(����j� *��Ej)��ƒ}t 9u���19}%t9~[VUrƃUtC9|k��X����\����T����)Pj�jVHj�j�jR)DPqj�jMQCX"Vƃt9u~CH9|��膧T����V)��j�jVHPue[^_]ÐU�����������0�����@����� �����D��]UWU=|���R ��Ph���`PX0=��`ЍH �19}��ƀ�����B9|=�u �����ƀ` ��ƀ������=�=uɉ= �}]ÐUEt%t.\t+t6D]Ð8]Ð]Ð4]Ð1]ÐUEt%t.\t+t6D]Ð0]Ð@]Ð ]Ð1]ÐUVSEu upP t1V�����~�9t P!Xt��t �9tV}É؍e[^]U ������R`PM)�]ÐUWVSu] Uj�BPRE5�� t���SVǃ=�~S~¡�Ѓ9<| ��=��v ������~tt8_ u/��u&S~��ƀ�=��~/�t%<t! uuP~ ��� ���`����=�1e[^_]ÐUVS]u D�t2P�PP\���t���ED�� u$=�uD� 5P�1VS ���e[^]UWVS]=0��t{0�������`8u"M QjP#����_u M Qjא<_u M QjSːSZ���M Qj�S뮐ukt!t+|�����h��M Qj�jk=���I��N0����5�� uK=�u ���M Qj�j ; ������=u���Sz���=�uM Qj�SSjË5d�V EV0�MDЃ 9<|G;�tXM QVP u+��C;�u3M Qj�STt�����1e[^_]ÐUD�t u}�uP�PP<9�|=H�t=D�u =�u��ƀ` ��ƀ�������ƀ`���ƀ���]ÐUUE =@��t.������=x�t�]Ð��`]ÐU@����]ÐUVSEu tPJu .u U` tu-_sC֐軧H�t`e[^]ÐUVSEu t~HP赥tS1B__� ttՁ`v K䐐+@te[^]ÐU庐�PsBPrP������dd�`�`�`�l�����h�����p����]ÐUM`�t`�t AR+PQ ]ÐUWVS}M `�=`�t9H}9x����=`�uËs�t‹�����rJzSRZSTVN=�u<`�P 8`�t9P P �8`�u顀PQP�e[^_]ÐUj�h�������]ÐU塐|7@d~,����:��¡9|]ÐUWVS}=|�$���� ���C��`�`�t9{} `�u9{u C��K����`�tC+PK)9}v[CP誢�������sC9},j�P uqtlEFE9|�����PVEE9~uNrQ:u0����sC9~?j�PDuu12EXNE9�����PV?e[^_]ÐUWVS}1���`�`�t9{} `�u9{u C�����`�tC+PC)9}B[CPFudsC9}jj�PuEt@F9|ICPu%sC9~+j�Puu N9PVE1Ee[^_]ÐUWVS]Sa��:9~CSA��ƃu }uV&9uHe[^_]ÐUWVSu>-uF.蛙h�1��V+��h�!�� �Uj�nd��j� j�2��j�wEj�=j�h�} URQ1h�BÃt];�tX>�uS豆ǃFj0҉ЍDP趆VSh�Wu>�u h�VJǃWW葂j�zUR衁URhj1��j荖T���URJ t j茆j�r1��e[^_]ÐUWVS} UR��ƃufj�9��Ãu1j&��}.u P,9 SVt V jSW���e[^_]ÐUWVS]} Wtj�h�)h�S~ƃuj�h����1��h���S��h���|��j�蠅j�Y0��jj 8GKÃ���V9VwPV~؈%���Ft`}tG9E}PtAÃt5V9VwPV}؈%���Ft uV,}j�j s~j/��j轄8T���j�7/��1e[^_]ÐU3���d��DJ}4]UUBwR4�]ÐBvj�h�L��1]ÐR]ÐUSE'���$t)���.t[^�������Pktj�h ����VJ6�����K09PÃt!{uj�h$�O��1 ؋]]ÐUEP%���]ÐUSURÃtUR��UMSK�]]ÐUUR��}tUM4 8�0]ÐUVSURRtV=0u+=4u"�04����`8Xp9�t RcuVSe[^]ÐUEPƒu ]Ð�9uB]j�h1���]ÐUSE] ���t$���t�������;tj�hJ�=��|j�h^�_SzS�P6=��}j�hy��EEPh���]]ÐUUE ����PR]ÐUS] }�u@]EPjlEP^ �� }�uj�h�u������S萷]]ÐUS] }�uSZt]EPh�"��]]ÐUSEU ttw�dR*P,��tD�Pu1-��ƒuStj`PRd]]ÐUUE t? t%]Ðt ]ÐP~P�]Ð�EEPh� ��]ÐUE }�u����Ph� ]ÐUVSE] t} t������<Mt!<=t+9<mu,C)C�C PyS-}&EEPh�#��e[^]ÐUEt|P贘]ÐUE|~ u!��]ÐUS]|軳uj� }]]ÐUE=�uOt|IDj�h�j��]Ðj9}蔅,��誌����jij�|]ÐU塬]Ð]ÐUWVSE��Pt2Pj�BP������P��18���E0V@E0V��$И�8�����������������������8����8����������������������U:+��BU{������E8+u@EPDz�PzVEP��E*��Mz���V��Ãu!V��EEPh� ��j{zCtM t&������tr���u S {� ���t S Cx9%���PCP��‹C SE8�EVMQ��E%j�VMQ��‹C  Ct MQj�ЃE8�he[^_]ÐUWVS}uW��Ãu"W\��EEPh � ����u+C@t%W/��EEPh4� ����u,Ct&W���EEPhN�_ ����Ctuu E 8�u1��{�} j���C���t3��'�������W��t {��tf��S :�S {� :�����t ��t+��9%���PC �9%���PCPi��‹C ���������j�hg�����tK trtKiEPj�E Pa��ƒ }�uFC ?S C&j�h�T�����StE P���u���P҃t {�}��Ct':5|0j�C �DC �EEPCP��tC t T���e[^_]ÐUU} �t%���]Ð1t���]UEPdPh�h@p@]ÐUEP��t@S%���]ø���]ÐUEP��t@ u 1]Ð@]ÐU=P�%���]ÐUEPAEEPh���]ÐUP�P]ÐUS]E ;�u Pjt؀8�t8$u��@@8�u]]ÐUWVSu}PitE����;-uEC< v=t���k} WgEEPh���j?t1ҍLC< v}t����}�tىȍe[^_]ÐUS�=��t�Qt ;�u]]ÐUSM�=��t!L�9t@t9 t 8�u1]]ÐUh`lt����j�n]Ð�����URU RUR8m����}]ÐUjh`IkUEPmE]ÐUWVSuD�Pdkj0ʉ)P4rSVhN�Wmme[^_]ÐU]ÐUWVS]u =��u¹d���lj=�9�|!d���ƉؙÍe[^_]ÐUWVStT���t��11EPWƃ���9]���t7t St+t69軃.KEt3tOt+t69;.k蛃˂]tuV���Gt+ tGt+t69ۂ. ;ke[^_]ÐUS�xt7���=��t���ShxPi9t T����x]]US]=�x r=�t����老��؋]]ÐUS];�tPC;�u]]ÐU WVSEM t؍]0Cut-CE)9vƐKP69we[^_]ÐUWVSuU 1>�tz<%tPFUGVFF<dt8<suՋ;�tːPCUGU;�u뮐j PU ǃU뇐e[^_]ÐUWVS}u 1=��tI4VW,Ã=��uj 7^h�v1 \�� t t tt PV~9< T���e[^_]ÐUVSu] `SVh-�@���e[^]ÐUWVSu] 1=��tSV-��Ã=��u j 3}9=< T���؍e[^_]ÐUUt%t.>u-"JHЉH�]ÐUVSu���9} H�DB9|H�te[^]ÐUS]J~ H�DJH�]]U19} H�@9|]ÐU 9~i=H��t$EP ��H�PxgEjP<kH� hMt UH�L]US] H�9~7H,���9} 9@9|]]ÐUHPj����]ÐUM E9H�<t1]@9~���]ÐUS]1ҡ9}&H�8tBS�B9|]]ÐUE}���9|BH]ÐUhL�ih�ih�uih4�fi�]ÐU :�tЍH  x�u]ÐUEPhU� Pd]UEPhY� Pqd]UM  )PQRhp]ÐU塐 �? ]ÐUS]9~CSu}uۂ]]ÐUWVU E6'��$�Э����������P���������������������Ь������������@�p������Э������=  %���+��R���X���P%ƿ\�����%������|���1=|�tc@tYR;%�������{1Rt~���Pˀ%���0�PE%��� 1e^_]ÐUSU E6O��$@����@����������������������������� ����P���`���p����Я����0����`�RjÃL��SF�� .������P���Ru}��� B���R���HC3R~ƒ������RSfP ���~ƒtdRa=  vI x u>H = v1搐�PtPP]]ÐUE���@:t<tf.tA됐?t \t6АAɐu]ÐIu]Ð@뙐H]ÐUVS]u <lt <btK��<p?��C2'��$`�`��������������������������������P��������p���@�������0�����O?/`P����K؍e[^]ÐUWVSE}   8�u^����Ð<:t[<%tp<.���<?t<\uC  nC3t@EPSËEPVuDSUÃ7C3uKEPSËEPVC;�Q����� = u1(��~  9r ) e[^_]ÐUj��P]ÐU<+4+ PP]ÐUWVS}] ;�tUuu}�t @�DHt X�#u���t;u9v CB;�u�e[^_]ÐUU:�t+ @�DAt���]ÐB:�u1]ÐU=��%���]ÐUWVS= }�uux ���= �uX1JVzÃt-FPgjPS��tSV+pVFH9|= e[^_]ÐU8uj�h_�]Ð= �ƒ j$]UVS]h��jl^j�SV YtVlZj�h~�(�tPY5�1e[^]U塘�tPY�����]UWVS]u }j�EPjS�PX%���tUډ]1e[^_]ÐUS�tPY؅u�����  ]]ÐUMU =�u1]Ð}�u = �u㡌�t9H~t9P} ���]Ë�u1]ÐUVSu] :�tK9Hƒ:�u9tCJ9}ȉC tCI9~ȉCC9C| SXe[^]ÐUWVSu] EPSً���tzt9Zu1J1쐐9ZuJ���ѐE8�t8CAx}xuEx�tx}xt됐e[^_]ÐU WVS}u }����}����E����E9Es,j j[‹E)BE)BREPE9v ;�tCEPEPSL u=�uWEPERh�0Uue[^_]ÐU= �uh ]Ð]ÐUEPa}tjPEPW��j@]ÐU ����=u]ÐUS]t0t 1h{tuWsltK=�t1tPe$`PPOtj�P]]ÐUWVS]SƉ]t w��} t9] }�tYMREtߍEPWÃtFEPS&ljtNu%}�t ME��=|�t+Ey=���~ SV] u =�u 1t@=�u PEPP EPEPEPE����U@ uut uE���}�EtEPEPEPWM=uEPEPEPWg}�tM91e[^_]UWVS] }t;�uhuj�h_���=u j�=u= �t ���� �������Sƃ=hu jSSC S} ��5 t=ht  ���� h =�tj� ����w=u6MQ‰Uu0}�} ���j�h�qj�EPWMQjRǃt$=u~j0뤐`PEP1=uj1e[^_]ÐUWVS]= 5  �� tE t9| t-9~)dU t �@‰U ߋu ���U u)9 }�@ЉE  E 9 ~ �@9}1)É. tU�9} 1 )ӋU t9~#E Pj�j�j RSo|E t9~Ɖ= 5 e[^_]ÐUhP�jiO =�tI]ÐUh�j9O =�t]ÐUh�j O =�t]ÐU}�t7hP�jNh�jNh�jN]Ðj�jNj�jNjАUWVS= ���������tijjYNewdj�Tj�j:Nj�j1NjMPM$h�jNjfTcT��� ���t@<5\9<u95t@ T������tAd=��t3�����=|u T���|����j�h�e[^_]ÐUWVSh��PMÃuj�h�o��0}ЍxSh���h L 1��Wh uV M uϊ < t< u �������� ���� PsRE8�t� E8�tpu@< t< uE��E@EP$RE8�9EPj�EP  }�t` ����E8EE8^u@EM 9t'Ut<\uBUE�EAE�9uڀy$uI�S*LS"Lj�h�.����e[^_]ÐUWVS t.P���j�h����1j�GƃuӉ]EPMQÃtFt=|�t SV 0HPEPR K uEe[^_]ÐUj�h� L }  ���]ÐUjEP P u]Ð}jERPE}�uEuE]ÐS�=�t Ѓ;u[ÐÐ������������KL��LESS�--help�-?�--version�-V�VISUAL�EDITOR�vi�LESSEDIT�%E ?lm+%lm. %f�No filenames allowed with -t option�Cannot allocate memory�WARNING: terminal cannot %s�LINES�li�COLUMNS�co�kr�kl�ku�kd�kP�kN�kh�@7�kD�TERM�unknown�dumb:hc:�hc�am�xn�da�db�sg�pc�ks��ke�ti�te�ce�clear to end of line�cd�clear to end of screen�cl�clear screen� �cm�so�se�us�ue�md�me�mb�vb�bs��bc�ho�|^�home cursor�ll� �move cursor to lower left of screen�al�sr�scroll backwards�Nothing in top line�Nothing in bottom line�No bracket in top line�No bracket in bottom line�No matching bracket�seek error�read error�Waiting for data�ch_ungetchar overrun�Finishing logfile�Warning: log file is incomplete�Cannot allocate %d buffers�seek error to 0�8bcccbcc18b95.bb125.bb�next�8bcccbcc18b95.b128.�koi8-r�8bcccbcc12bc5b95.b.�dos�8bcccbcc18b95.33b.�latin1�8bcccbcc18b95.b�ascii�invalid chardef�chardef longer than 256�invalid charset name��*s<%X>�LESSBINFMT�LESSCHARSET�LESSCHARDEF�%c�ESC�^%c��?�@�*�!�/�?��!done�|done�less version %s�ungetcc overflow�Pattern not found�:�%s� help�Examine: �-�Cannot edit standard input�Cannot edit file processed with LESSOPEN�(N-th) �No %snext file�No %sprevious file�No such file�_�+�mark: �goto mark: �|mark: �Brackets: � �Warning: some commands disabled�Warning: some edit commands disabled�.less�Cannot use lesskey file "%s"�-�%s�"%s" may be a binary file. See it anyway? �Missing filename ("less -\?" for help)�Warning: "%s" exists; Overwrite, Append or Don't log? �Overwrite, Append, or Don't log? (Type "O", "A", "D" or "q") �Cannot write to "%s"�%s/%s�HOME�LESSHELP�/usr/doc/less.hlp�%s*�SHELL�%s -c "%s"�r�echo %s�LESSOPEN�-�LESSCLOSE�...skipping... �Cannot find help file�-%s -m -H -+E -+s '-PmHELP -- ?eEND -- Press g to see it again:Press RETURN for more., or q when done ' %s�End of help�Cannot seek to end of file�Cannot seek to beginning of file�Cannot seek to line number %d�Determining length of file�Don't know length of file�Cannot seek to that file position�%6d�~ � �Calculating line numbers�!� �/dev/tty�SHELL�%s -c "%s"�sh�Cannot seek to start position�w�Cannot create pipe�Invalid mark letter�Cannot seek to end of file�Mark not set�Mark not in current file�Input is not a pipe�Log file is already in use�No log file�Log file "%s"�Line number is required after -l�Cannot use lesskey file "%s"�Tags file "%s"�/�%s�Use "h" for help�There is no %s flag ("less -\?" for help)�There is no %s flag�Cannot change the %s flag�Cannot query the %s flag�Can't use "-+" or "--" for a string flag�Can't use "--" for a numeric flag�-%s�String is required after %s�Number is required after %s�Scroll window size is %d lines�Scroll window size: �Forward scroll limit is %d lines�Forward scroll limit: �Don't use init/deinit strings�Send init/deinit strings to terminal�Tab stops every %d spaces�Tab stops: �Display ~ for lines after end-of-file�Display nothing for lines after end-of-file�Print backspace as ^H�Backspaces cause overstrike�Display underlined text in underline mode�tags file: �tag: �Chop long lines�Fold long lines�Squeeze multiple blank lines�Display all blank lines�Display control characters as ^X�Display control characters directly�Never ring the bell�Ring the bell for errors but not at eof/bof�Ring the bell for errors AND at eof/bof�prompt: �Log file: �log file: �Constantly display line numbers�Use line numbers�Don't use line numbers�Long prompt�Medium prompt�Short prompt�Position target at screen line %d�Target line: �Ignore case in searches and in patterns�Ignore case in searches�Case is significant in searches�Don't allow help command�Allow help command�Backwards scroll limit is %d lines�Backwards scroll limit: �Highlight all matches for previous search pattern�Highlight matches for previous search only�Don't highlight search matches�Open even non-regular files�Open only regular files�Quit immediately at end-of-file�Quit at end-of-file�Don't quit at end-of-file�Assume dumb terminal�Assume intelligent terminal�Repaint by painting from top of screen�Repaint by clearing each line�Repaint by scrolling from bottom of screen�Automatically allocate buffers when needed�Don't automatically allocate buffers�%d buffers�Buffers: �Search skips displayed screen�Search includes displayed screen�%s: %s�%ld�%d�-��No previous regular expression�Invalid pattern�Nothing to search�Line numbers turned off�tags�r�No tags file�No such tag in tags file�Tag not found�/dev/tty��������������������������������������������������������������������������l�l�l�����l����������������������������� � � e� j� � � k�y�� ��J�K�Y�d��u�� � f� � � b��v�z�!w�"F�2R� r�� �u�'g�<�<�p�%�{�{}�}�{}�(�()�)�()�[�[]�]�[]��#�$G�>�>�P�30�1�2�3�4�5�6�7�8�9�=��:f�/�?�/�*�?�*�n�+n�,N�-N�.m�'��E� :e� � :n�:p�:x�&-�/:t�t�s�o�_�|�%v� !�+� H�h�V�q�:q�:Q�ZZ� �� ���l�h�b�w�i�x�X� � 0� $� k� j� ������������������ is a directory� is not a regular file��������������������������������������������������a��������������-������b������ ���0�������B�������������������c���������������a�:�d���A������������ �����e����������l�������f��������������������g�������������h�=� �h������p����������H���A�����������������i����������h`��k�C�j���������`����5������k���H�����������������������l���H�����������������������m�����������������n���"������|�������o������������������������O��������������p����������p���H����������@�������������P��������������p����������q����������d����]�1��r���!����������������s���!�������t����������S���!�����������������t�������������0�}���������T��������������Е�q���������u���"�����������G�+��V���������������������������w���!������x����������x���$����������������X���A�����������x�Z�����y����������C�"�����z���������� ������?���������������������������������������������������������������x (press RETURN)�... (interrupt to abort)�������?n?f%f .?m(file %i of %m) ..?e(END) ?x- Next\: %x..%t�?n?f%f .?m(file %i of %m) ..?e(END) ?x- Next\: %x.:?pB%pB\%:byte %bB?s/%s...%t�?f%f .?n?m(file %i of %m) ..?ltline %lt?L/%L. :byte %bB?s/%s. .?e(END) ?x- Next\: %x.:?pB%pB\%..%t�?f%f .?m(file %i of %m) .?ltline %lt?L/%L. .byte %bB?s/%s. ?e(END) :?pB%pB\%..%t����4������������������290������������������ � �. �> �N �^ �n �~ � � � � � � � � ���.�>�N�^�n�~�����������.�>�N�^�n�~�����������.�>�N�^�n�~����������������`�� ��� � ������������P����@� ����� �������������������������������0 ���� ����8�������������������������GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��.symtab�.strtab�.shstrtab�.interp�.hash�.dynsym�.dynstr�.rel.bss�.rel.plt�.init�.plt�.text�.fini�.rodata�.data�.ctors�.dtors�.got�.dynamic�.bss�.comment�������������������������������������������������������������������������#��������������X���������������)��� ������@�@����������������1���������P�P�������������������9��� ������ � ��8���������������B��� ������0 �0 ����������������K��������� � ��������������������Q��������� � ������������������V������������$�����������������\������������������������������b������������4�����������������j�������������������������������p������������������������������w������������������������������~������������������������������������������������������������������@�@��"�������������������������������@��R������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �������������� �������������� �������������� �������������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ��.���<��� ��..������install�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # pcmem.sample $Revision: 1.1 $ $Date: 1995/05/25 04:30:06 $ (David Hinds) # # Initialize or shutdown a PCMCIA memory device # # The first argument should be either 'start' or 'stop'. The second # argument is the base name for the device. When starting a device, # there should be two additional arguments, the major and minor device # numbers. # # Three devices will be created: # # /dev/{name}a - character device, attribute memory # /dev/{name}b - block device, common memory # /dev/{name}c - character device, common memory action=$1 name=$2 case "${action:?}" in 'start') major=$3 minor=$4 rm -f /dev/${name:?}a /dev/${name:?}b /dev/${name:?}c mknod /dev/${name:?}c c ${major:?} ${minor:?} mknod /dev/${name:?}a c ${major:?} `expr ${minor:?} + 1` mknod /dev/${name:?}b b ${major:?} ${minor:?} ;; 'stop') fuser -k /dev/${name:?}a /dev/${name:?}b /dev/${name:?}c rm -f /dev/${name:?}a /dev/${name:?}b /dev/${name:?}c ;; esac ����������������������������������������#!/bin/sh # # serial.sample 1.2 1995/05/25 04:27:58 (David Hinds) # # Initialize or shutdown a PCMCIA serial device # # The first argument should be either 'start' or 'stop'. The second # argument is the base name for the device. # action=$1 name=$2 case "${action:?}" in 'start') rm -f /dev/modem ln -s /dev/$2 /dev/modem ;; 'stop') fuser -k /dev/$2 /dev/modem rm -f /dev/modem ;; esac ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������*.* /dev/tty3 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �%�!�con132x43����������������������������������+��@� � �����"�,�=�?�C�J�L�S�W�[�c�h�m�r�w�|�������������������������� "%'*-/bgms~con132x43�� �����%i%p1%dG�[%i%p1%d;%p2%dH� ��[?25l��[?25h���(B)U�������(B)0������[3~��[[A�[21~�[[B�[[C�[[D�[[E�[17~�[18~�[19~�[20~�[1~��[6~�[5~���[%p1%dP�[%p1%dM�[%p1%d@�8�%i%p1%dd�7� �M�H� �lmkjutvwqxn+o~s_`afg~ ,+.-hi0�[4~�[23~�[24~��[%p1%{30}%+%dm�[%p1%{40}%+%dm����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%�!�ulinux|linux console��������������������������������P����@����� ����)�+�/�6�8�?�C�G�K�O�U�Z�_�d�i�n�s�y����������������������������!$'),"(,5EU_io� �����[%i%p1%d;%p2%dH� ��[?25l��[?25h�����������������[@���[3~��[[A�[21~�[[B�[[C�[[D�[[E�[17~�[18~�[19~�[20~�[1~�[2~��[6~�[5~��� �[%p1%dP�[%p1%dM�[%p1%d@�[%p1%dL�8�7� �M�[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;11%;m�H� �`afghjklmno~p8qrs_tuvwxyz{|}~.-,+0�[4~�[23~�[24~�[25~�[26~�[28~�[29~�[31~�[32~�[33~�[34~�[%d;%dR��[?6c���[%p1%{30}%+%dm�[%p1%{40}%+%dm�[3%p1%dm�[4%p1%dm����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#�%�!�Klinux-mono|Linux console, no color�������������������������������P������� ����)�+�/�6�8�?�C�G�K�O�U�Z�_�d�i�n�s�y����������������������������!$'),"(,5?E� �����[%i%p1%d;%p2%dH� ��[?25l��[?25h�����������������[@���[3~��[[A�[21~�[[B�[[C�[[D�[[E�[17~�[18~�[19~�[20~�[1~�[2~��[6~�[5~��� �[%p1%dP�[%p1%dM�[%p1%d@�[%p1%dL�8�7� �M�[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;11%;m�H� �`afghjklmno~p8qrs_tuvwxyz{|}~.-,+0�[4~�[23~�[24~�[25~�[26~�[28~�[29~�[31~�[32~�[33~�[34~�[%d;%dR��[?6c���[3%p1%dm��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A�%�!�hlinux-nic|linux with ich/ich1 suppressed for non-curses programs�������������������������������P����@����� ����)�+�/�6�8�?�C�G�K�O�U�Z�_�d�i�n�s�y��������������������������� (8HR\b� �����[%i%p1%d;%p2%dH� ��[?25l��[?25h�������������������[3~��[[A�[21~�[[B�[[C�[[D�[[E�[17~�[18~�[19~�[20~�[1~�[2~��[6~�[5~��� �[%p1%dP�[%p1%dM�[%p1%dL�8�7� �M�[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;11%;m�H� �`afghjklmno~p8qrs_tuvwxyz{|}~.-,+0�[4~�[23~�[24~�[25~�[26~�[28~�[29~�[31~�[32~�[33~�[34~�[%d;%dR��[?6c���[%p1%{30}%+%dm�[%p1%{40}%+%dm�[3%p1%dm�[4%p1%dm���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ELF����������������4��� ������4� ��(����������������i ��i ������������ �����������������������d ��d������������������������������������� ��� ��� ���������������������������������������������������������������������������������������������� ��� �����������������������������������������������������������d������� ���������� �����������&��� ������� �,���������� �5������o��� �C��������������L���p��g���� �]��������������d�����o���� �u��������������|������������������������������������������������������������������������������� ����P ��6���� ���� ��D���� ���� ��0���� ���� ��)���� ������������������������������������������ �� �������������������������$����������_DYNAMIC�_GLOBAL_OFFSET_TABLE_�_init�_fini�_et_list�error_message�strerror�error_table_name�strcat�init_error_table�malloc�_IO_stderr_�fputs�vfprintf�__overflow�fflush�com_err_hook�com_err_va�com_err�set_com_err_hook�reset_com_err_hook�___brk_addr�__environ�atexit�_etext�_edata�__bss_start�_end�libcom_err.so.2���������T�� ��\����`����P����X����$����(����,�� ��0����4����8����<�� ��@����D����H�� ��L������������K�������������� ���h�������h������h������h������h ��� ���h(���$���h0���(���h8���p,���h@���`0���hH���P4���hP���@��������VS����[Q��px�tЃ>�u[^ÐS����["��[ÐUWVS����[ ��E����uM�u'VMEMtME��8����Et-E@E9Hu9p~���}?}uԍ���E���������ff���tQQ}WPW~UU����tE}?�uc~d���Ɖ0UBUE}�u ~ ���Ɖ0UBUΉ0UB����ȍe[^_]ÐUWVS����[Ú�����}���ME���M?t MBEN}����e[^_]ÐUWVS����[-��u} t;}�t5t1j…t-JJrz MJ8����8���1 ���e[^_]ÐUWVS����[ý��Uu }t#<���PR<���PP t,<���PVP<���PPtMQW<���P <���P9Pwj P( @<���P9Pwj P @<���Pe[^_]ÐUWVS����[ý��}u UE@���PRVWЍe[^_]ÐUWVS����[}��}u M@���:�u8EPQVW~e[^_]ÐUS����[/��E@��� u8ȋ]]US����[��@��� 8ȋ]]ÐVS����[��pxtЃ>u[^ÐS����[â��D���H���[��������������Unknown code � �ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_�: � ��������P����������d��������������.��>��N��^��n��~�������������������������������)�� ����� ��� �����������$�����T�� ���9�� ��������������X�����������������`�����0�������������������������GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��.symtab�.strtab�.shstrtab�.hash�.dynsym�.dynstr�.rel.data�.rel.got�.rel.plt�.init�.plt�.text�.fini�.rodata�.data�.ctors�.dtors�.got�.dynamic�.bss�.comment������������������������������������������������������������������������!��� ������T��T����������������)���������$��$��9�����������������1��� ������`��`�������� ���������;��� ������h��h��(���������������D��� ����������X���������������M�������������������������������S������������������������������X������������������������������^��������� �� ��������������������d��������� �� ��U������������������l������������� ��������������������r����������� ��������������������y����������� ������������������������������� ��L��������������������������d��d ����������������������������� ��$�������������������������������� ��l��������������������������������X ����������������������������������d�������0��������� ��������������$�� �������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������� �������������� �������������� �������������� ����������������������������������������������������������������������������������������������������������������������������� ���@ ������� ����@ ������� �1��� ������� �>���p ������� �I���������� �W����������������������� ���������� �d���������� �z��������������������� �I����������� ����������� ������������� ����������� ������������������������ ���p������� ���� ��@���� ������������������������ ���������� ������������� ���P������� ����P������ ����������������� ��)���� ���d��������� �������$�������������0�������������;�������������B����o���� �S�������������_�������������f�� ��0���� �w�������������������������P ��6���� ���������� ������o��� ����������������p��g���� ��������� ������������ ������� ���������������������������������� ��D���� � ������������������������������������crtstuff.c�gcc2_compiled.�__do_global_ctors_aux�__CTOR_END__�init_dummy�force_to_data�__DTOR_END__�__do_global_dtors_aux�__DTOR_LIST__�fini_dummy�__CTOR_LIST__�error_message.c�buffer�et_name.c�char_set�buf�init_et.c�com_err.c�default_com_err_proc�strerror�reset_com_err_hook�_DYNAMIC�_etext�_IO_stderr_�__overflow�malloc�init_error_table�___brk_addr�fflush�set_com_err_hook�__environ�_init�com_err_va�_et_list�error_message�strcat�error_table_name�com_err_hook�__bss_start�_fini�atexit�_edata�_GLOBAL_OFFSET_TABLE_�com_err�_end�fputs�vfprintf���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*-perl-*- sub finish { &rhs_infobox("Finishing", <<EOM > Completing final installation steps... > EOM , 60); # write /etc/fstab &finish_fstab; # write cd device to /etc/fstab &finish_cd; # set up cd device &finish_cd; # append swap partitions to /etc/fstab &finish_swap; # write net config files &finish_net; # write clock config file &finish_clock; # write keytable &finish_keyboard; # make mouse link &finish_mouse; # write config for /etc/sysconfig/pcmcia &finish_pcmcia; } 1; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*-perl-*- $force_config = 0; sub xinstall { local ( $config_again ); local ( $first_config ); $config_again = 1; $first_config = 1; do { # get X configured if ($config_again) { undef $xserver; &mount_bootdisk(); if ($first_config && -f "/bootdisk/defaults/xsetup" ) { require "/bootdisk/defaults/xsetup"; } if ($first_config && defined $xserver) { unlink("/etc/X11/X"); symlink("/usr/X11R6/bin/XF86_$xserver", "/etc/X11/X"); if (defined $mouseport) { unlink("/dev/mouse"); symlink("$mouseport", "/dev/mouse"); } open(IN, "</bootdisk/defaults/XF86Config"); open(OUT, ">/etc/X11/XF86Config"); while (<IN>) { print OUT; } close IN; close OUT; } else { $force_config = 1; $ret = &configure_mouse; $ret = &select_x_server; $force_config = 0; $first_config = 0; &invoke("/usr/rhs/install/Xconfigurator $xserver $mousetype"); } } &rhs_msgbox ( "X Install", <<EOM > X is about to start. If it succeeds you will have a few seconds to press a button on the screen. If you do not see the button, X has most likely been misconfigured, and a timeout will occur, bringing you back to text mode for further instructions. > This could take as long as two minutes on a slow network or using a slow CDROM drive. Please be patient. > EOM , 70); &invoke('/usr/X11/bin/startx'); if (! (-f "/tmp/xworked")) { &rhs_menu("X Error", <<EOM > X seems to have failed to configure and/or run properly. > What do you want to do? > EOM , 70, 3, "Retry", "Just try X again", "Reconfigure", "Reconfigure X and try again", "text", "Fall back to text based install"); if ($dialog_result eq "text") { return 0; } if ($dialog_result eq "Retry") { $config_again = 0; } else { $config_again = 1; } } else { # X worked open(FD, "/etc/X11/XF86Config"); $fsmount = "/mnt"; open(OFD, ">$fsmount/etc/X11/XF86Config"); while (<FD>) { print OFD $_; } close(FD); close(OFD); unlink("$fsmount/etc/X"); unlink("$fsmount/etc/X11/X"); symlink("../../usr/X11R6/bin/XF86_$xserver", "$fsmount/etc/X11/X"); unlink("$fsmount/usr/X11R6/bin/X"); symlink("../../../etc/X11/X", "$fsmount/usr/X11R6/bin/X"); &finish_mouse; &finish_pcmcia; &finish_cd; } } while (! (-f "/tmp/xworked")); return 1; } 1; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Handles configuraing NFS and setting stuff so -*-perl-*- # __mount_rhs mount the proper NFS volume $nfsserver = ""; $nfsdir = ""; sub nfs_mount { local ( $dont_try ); if (! $net_up) { &make_net_up; if (! $net_up) { &rhs_msgbox("Error", <<EOM > The network must be properly configured for an NFS install to work. > EOM , 60); return 0; } } if (! &_nfs_config) { return 0; } $dont_try = 0; while (1) { if (! $dont_try) { if (&_nfs_mount_and_verify) { return 1; } } $dont_try = 0; if (! &rhs_menu("Choose", <<EOM > What would you like to try? > EOM , 60, 4, "TCP/IP", "Reconfigure networking", "NFS", "Reconfigure NFS", "Mount", "Just try the mount again", "Quit", "Give up")) { return 0; } else { # Do choice if ($dialog_result eq "TCP/IP") { &reconfig_net_up; if (! $net_up) { &rhs_msgbox("Error", <<EOM > The network must be properly configured for an NFS install to work. > EOM , 50); $dont_try = 1; } } elsif ($dialog_result eq "NFS") { if (! &_nfs_config) { $dont_try = 1; } } elsif ($dialog_result eq "Mount") { # Do nothing } elsif ($dialog_result eq "Quit") { return 0; } else { print "Bad dialog_result: $dialog_result\n"; exit 1; } } } } sub _nfs_mount_and_verify { $rhsmountdevice = "$nfsserver:$nfsdir"; $rhsmountdevicetype = "nfs"; $hold_on_error = 0; $ret = &invoke("mount -t nfs -o ro $rhsmountdevice $rh_mountpath"); $hold_on_error = 1; if ($ret == 0) { if (&verify_rhs_files) { if (! $express_install) { &rhs_msgbox("Success", <<EOM > The NFS volume was mounted successfully and the Red Hat files were found. > EOM , 50); } return 1; } else { &rhs_msgbox("Error", <<EOM > The NFS volume was mounted, but the Red Hat files were not found. > EOM , 50); &__umount_rhs; &invoke("umount $rh_mountpath"); return 0; } } &rhs_msgbox("Error", <<EOM > I was not able to mount the NFS volume $rhsmountdevice. If this looks correct, you might want to check the server and see that it is properly exported. > If you used a hostname for the NFS server you might try using an IP address, in case the name is not resolving properly. > EOM , 60); return 0; } sub _nfs_config { if (! &rhs_inputbox("NFS", <<EOM > Enter the host name (or IP address) of your NFS server. > EOM , 50, $nfsserver)) { return 0; } $nfsserver = $dialog_result; if (! &rhs_inputbox("NFS", <<EOM > Enter the path to the directory you wish to mount from the NFS server. > EOM , 50, $nfsdir)) { return 0; } $nfsdir = $dialog_result; return 1; } ################ 1; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# CD-ROM Probing Routines -*-perl-*- ## ## Variables ## # $rh_mountpath is point at which to mount the device # with the RHS stuff on it. # $rpppath is the path from $rhspath to the rpp directory, # which is used to verify that this is indeed RHS stuff # $rh_mountdevice is the device to use in the mount call # $rh_mountdevicetype is the filesystem type to use in the mount call $cddev = ""; $cddevenglish = ""; @cdroms = ( "mcd", "Mitsumi", "scd0", "1st SCSI", "scd1", "2nd SCSI", "cdu535", "Sony CDU-535", "sonycd", "Sony CDU-31A", "hda", "First drive on primary IDE interface", "hdb", "Second drive on primary IDE interface", "hdc", "First drive on secondary IDE interface", "hdd", "Second drive on secondary IDE interface", "sbpcd0", "1st SoundBlaster PRO (or Panasonic?)", "sbpcd1", "2nd SoundBlaster PRO (or Panasonic?)", "sbpcd2", "3rd SoundBlaster PRO (or Panasonic?)", "sbpcd3", "4th SoundBlaster PRO (or Panasonic?)", "aztcd", "Aztech CD-268" ); ## ## Functions ## ## attempt_cd_mount will set $cddev, $cddevenglish ## sub attempt_cd_mount { local ($mode, $arg1, $arg2) = @_; local ($cdi, $ret); if ($mode eq "probe") { print "Probing for Red Hat CD-ROM...\n"; $cdi = 0; while ($cdi < @cdroms - 1) { $cddev = "/dev/$cdroms[$cdi]"; $cddevenglish = $cdroms[$cdi + 1]; print "\nTrying $cddev...\n"; $hold_on_error = 0; print "Invoking mount w/ path $rh_mountpath\n"; $ret = &invoke("mount -t iso9660 -o ro $cddev $rh_mountpath"); print "mount returned $ret\n"; $hold_on_error = 1; if ($ret == 0) { # We mounted it - is it our CD ? $ret = &verify_rhs_files; if ($ret == 1) { print "Success!\n"; $rh_mountdevice = $cddev; $rh_mountdevicetype = "iso9660"; return 1; } print "No Red Hat stuff here.\n"; &invoke_no_output("umount $rh_mountpath"); } print "Failed\n"; $cdi += 2; } print "Total failure. Hit Enter to continue."; <STDIN>; return 0; } elsif ($mode eq "device") { # Try to mount $arg1 $hold_on_error = 0; $ret = &invoke("mount -t $arg2 -o ro $arg1 $rh_mountpath"); $hold_on_error = 1; if ($ret == 0) { # We mounted it - is it our CD ? $ret = &verify_rhs_files; if ($ret == 1) { $cddev = $arg1; $cddevenglish = $arg1; $rh_mountdevice = $cddev; $rh_mountdevicetype = $arg2; return 1; } print "No Red Hat stuff here.\n"; &invoke_no_output("umount $rh_mountpath"); } <STDIN>; return 0; } return -1; } sub get_device { local ($device, $type); while (!$device || !$type) { $device = ""; $type = ""; if (! &rhs_inputbox ("Device name", <<EOM > Please enter the full device name (including /dev/). > EOM , 70, "/dev/")) { next; } $device = $dialog_result; if (! &rhs_inputbox ("Filesystem Type", <<EOM > Please enter the filesystem type (iso9660, minix, ext2, msdos, hpfs, etc) > EOM , 70, "")) { next; } $type = $dialog_result; } return ($device, $type); } sub mount_partition { local ($device, $type, $success); ($device, $type) = &get_device; $success = 0; while (1) { $success = &attempt_cd_mount ("device", $device, $type); if ($success == 1) { # if respond OK return 1 if (&rhs_yesno ( "Success", <<EOM I think I\'ve found the Red Hat stuff on the $device drive. > Is this correct? EOM , 50)) { return 1; } } $again = 1; REPEAT: while ($again) { $ret = &rhs_menu ("Error", <<EOM > >Red Hat file not found! >What should I do now? > EOM , 60, 2, "Again", "Try again", "Quit", "Give up"); next REPEAT if (! $ret); if ($dialog_result eq "Quit") { return 0; } elsif ($dialog_result eq "Again") { ($device, $type) = &get_device; } else { next REPEAT; } $again = 0; } } } sub probe_rhs_cdrom { local ($ret, $success, $mode, $again, $arg1, $arg2, $arg3); $success = 0; while (1) { $success = &attempt_cd_mount ("probe"); if ($success == 1) { # if respond OK return 1 if (&rhs_yesno ( "Success", <<EOM I think I\'ve found the Red Hat CD-ROM in the $cddevenglish CD-ROM drive, which I found on device $cddev. > Is this correct? EOM , 50)) { return 1; } } $again = 1; REPEAT: while ($again) { $ret = &rhs_menu ("Error", <<EOM > >Red Hat CD-ROM not found! >What should I do now? > EOM , 60, 2, "Probe", "Probe again", "Quit", "Give up"); next REPEAT if (! $ret); if ($dialog_result eq "Quit") { return 0; } elsif ($dialog_result ne "Probe") { next REPEAT; } $again = 0; } } } ################### 1; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# NOTE: Derived from ../../lib/DynaLoader.pm. Changes made here will be lost. package DynaLoader; sub dl_findfile { # Read ext/DynaLoader/DynaLoader.doc for detailed information. # This function does not automatically consider the architecture # or the perl library auto directories. my (@args) = @_; my (@dirs, $dir); # which directories to search my (@found); # full paths to real files we have found my ($vms) = ($Config{'osname'} eq 'VMS'); print STDERR "dl_findfile(@args)\n" if $dl_debug; # accumulate directories but process files as they appear arg: foreach(@args) { # Special fast case: full filepath requires no search if (m:/: && -f $_ && !$do_expand){ push(@found,$_); last arg unless wantarray; next; } # Deal with directories first: # Using a -L prefix is the preferred option (faster and more robust) if (m:^-L:){ s/^-L//; push(@dirs, $_); next; } # Otherwise we try to try to spot directories by a heuristic # (this is a more complicated issue than it first appears) if (m:/: && -d $_){ push(@dirs, $_); next; } # VMS: we may be using native VMS directry syntax instead of # Unix emulation, so check this as well if ($vms && /[:>\]]/ && -d $_){ push(@dirs, $_); next; } # Only files should get this far... my(@names, $name); # what filenames to look for if (m:-l: ){ # convert -lname to appropriate library name s/-l//; push(@names,"lib$_.$dl_so"); push(@names,"lib$_.a"); }else{ # Umm, a bare name. Try various alternatives: # these should be ordered with the most likely first push(@names,"$_.$dl_so") unless m/\.$dl_so$/o; push(@names,"lib$_.$dl_so") unless m:/:; push(@names,"$_.o") unless m/\.(o|$dl_so)$/o; push(@names,"$_.a") unless m/\.a$/; push(@names, $_); } foreach $dir (@dirs, @dl_library_path) { next unless -d $dir; foreach $name (@names) { my($file) = "$dir/$name"; print STDERR " checking in $dir for $name\n" if $dl_debug; $file = _check_file($file); if ($file){ push(@found, $file); next arg; # no need to look any further } } } } if ($dl_debug) { foreach(@dirs) { print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_; } print STDERR "dl_findfile found: @found\n"; } return $found[0] unless wantarray; @found; } 1; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# NOTE: Derived from ../../lib/DynaLoader.pm. Changes made here will be lost. package DynaLoader; sub dl_expandspec{ my($spec) = @_; # Optional function invoked if DynaLoader.pm sets $do_expand. # Most systems do not require or use this function. # Some systems may implement it in the dl_*.xs file in which case # this autoload version will not be called but is harmless. # This function is designed to deal with systems which treat some # 'filenames' in a special way. For example VMS 'Logical Names' # (something like unix environment variables - but different). # This function should recognise such names and expand them into # full file paths. # Must return undef if $spec is invalid or file does not exist. my($file) = $spec; # default output to input my($osname) = $Config{'osname'}; if ($osname eq 'VMS'){ # dl_expandspec should be defined in dl_vms.xs croak "dl_expandspec: should be defined in XS file!\n"; }else{ return undef unless -f $file; } print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug; $file; } 1; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������package Config; require Exporter; @ISA = (Exporter); @EXPORT = qw(%Config); $] == 5.001 or die sprintf "Perl lib version (5.001) doesn't match executable version (%.3f)\n", $]; # This file was created by configpm when Perl was built. Any changes # made to this file will be lost the next time perl is built. =head1 NAME Config - access Perl configuration option =head1 SYNOPSIS use Config; if ($Config{'cc'} =~ /gcc/) { print "built by gcc\n"; } =head1 DESCRIPTION The Config module contains everything that was available to the C<Configure> program at Perl build time. Shell variables from F<config.sh> are stored in the readonly-variable C<%Config>, indexed by their names. =head1 EXAMPLE Here's a more sophisticated example of using %Config: use Config; defined $Config{sig_name} || die "No sigs?"; foreach $name (split(' ', $Config{sig_name})) { $signo{$name} = $i; $signame[$i] = $name; $i++; } print "signal #17 = $signame[17]\n"; if ($signo{ALRM}) { print "SIGALRM is $signo{ALRM}\n"; } =head1 NOTE This module contains a good example of how to make a variable readonly to those outside of it. =cut ## ## This file was produced by running the Configure script. It holds all the ## definitions figured out by Configure. Should you modify one of these values, ## do not forget to propagate your changes by running "Configure -der". You may ## instead choose to run each of the .SH files by yourself, or "Configure -S". ## # ## Configuration time: Tue Jul 11 10:02:02 EDT 1995 ## Configured by: marc ## Target system: linux porky.redhat.com 1.2.9 #5 thu jun 8 09:50:07 gmt 1995 i586 # ## Variables propagated from previous config.sh file. $config_sh=<<'!END!OF!CONFIG!'; archlib='/usr/lib/perl5/i586-linux' ccflags='-D__USE_BSD_SIGNAL -Dbool=char -DHAS_BOOL' cppflags='-D__USE_BSD_SIGNAL -Dbool=char -DHAS_BOOL' dynamic_ext='DB_File Fcntl GDBM_File ODBM_File POSIX SDBM_File Socket' extensions='DB_File Fcntl GDBM_File ODBM_File POSIX SDBM_File Socket' intsize='4' libpth='/lib /usr/lib /usr/local/lib' osname='linux' osvers='1' sharpbang='#!' shsharp='true' sig_name='ZERO HUP INT QUIT ILL TRAP IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH LOST PWR UNUSED' so='so' startsh='#!/bin/sh' static_ext=' ' Author='' CONFIG='true' Date='$Date' Header='' Id='$Id' Locker='' Log='$Log' Mcc='Mcc' PATCHLEVEL='1' RCSfile='$RCSfile' Revision='$Revision' Source='' State='' afs='false' alignbytes='4' aphostname='' archlibexp='/usr/lib/perl5/i586-linux' archname='i586-linux' awk='awk' baserev='5.0' bash='' bin='/usr/bin' binexp='/usr/bin' bison='' byacc='byacc' byteorder='1234' c='' castflags='0' cat='cat' cc='gcc' cccdlflags='-fpic' ccdlflags='-rdynamic' cf_by='marc' cf_time='Tue Jul 11 10:02:02 EDT 1995' chgrp='' chmod='' chown='' clocktype='clock_t' comm='comm' compress='' contains='grep' cp='cp' cpio='' cpp='cpp' cpp_stuff='42' cpplast='-' cppminus='-' cpprun='gcc -E' cppstdin='gcc -E' cryptlib='' csh='csh' d_Gconvert='gcvt((x),(n),(b))' d_access='define' d_alarm='define' d_archlib='define' d_attribut='define' d_bcmp='define' d_bcopy='define' d_bsd='undef' d_bsdpgrp='undef' d_bzero='define' d_casti32='undef' d_castneg='define' d_charvspr='undef' d_chown='define' d_chroot='define' d_chsize='undef' d_closedir='define' d_const='define' d_crypt='define' d_csh='define' d_cuserid='define' d_dbl_dig='define' d_dbm_open='undef' d_difftime='define' d_dirnamlen='undef' d_dlerror='define' d_dlopen='define' d_dlsymun='undef' d_dosuid='define' d_dup2='define' d_eunice='undef' d_fchmod='define' d_fchown='define' d_fcntl='define' d_fd_macros='define' d_fd_set='define' d_fds_bits='define' d_fgetpos='define' d_flexfnam='define' d_flock='define' d_fork='define' d_fpathconf='define' d_fsetpos='define' d_getgrps='define' d_gethent='define' d_gethname='undef' d_getlogin='define' d_getpgrp2='undef' d_getpgrp='define' d_getppid='define' d_getprior='define' d_htonl='define' d_index='undef' d_isascii='define' d_killpg='define' d_link='define' d_locconv='define' d_lockf='define' d_lstat='define' d_mblen='define' d_mbstowcs='define' d_mbtowc='define' d_memcmp='define' d_memcpy='define' d_memmove='define' d_memset='define' d_mkdir='define' d_mkfifo='define' d_mktime='define' d_msg='define' d_msgctl='define' d_msgget='define' d_msgrcv='define' d_msgsnd='define' d_mymalloc='undef' d_nice='define' d_oldsock='undef' d_open3='define' d_pathconf='define' d_pause='define' d_phostname='undef' d_pipe='define' d_portable='define' d_pwage='undef' d_pwchange='undef' d_pwclass='undef' d_pwcomment='undef' d_pwexpire='undef' d_pwquota='undef' d_readdir='define' d_readlink='define' d_rename='define' d_rewinddir='define' d_rmdir='define' d_safebcpy='define' d_safemcpy='undef' d_seekdir='define' d_select='define' d_sem='define' d_semctl='define' d_semget='define' d_semop='define' d_setegid='define' d_seteuid='define' d_setlinebuf='define' d_setlocale='define' d_setpgid='define' d_setpgrp2='undef' d_setpgrp='define' d_setprior='define' d_setregid='define' d_setresgid='undef' d_setresuid='undef' d_setreuid='define' d_setrgid='undef' d_setruid='undef' d_setsid='define' d_shm='define' d_shmat='define' d_shmatprototype='define' d_shmctl='define' d_shmdt='define' d_shmget='define' d_shrplib='undef' d_sitelib='undef' d_socket='define' d_sockpair='define' d_statblks='define' d_stdio_cnt_lval='undef' d_stdio_ptr_lval='define' d_stdiobase='define' d_stdstdio='define' d_strchr='define' d_strcoll='define' d_strctcpy='define' d_strerrm='strerror(e)' d_strerror='define' d_strxfrm='define' d_suidsafe='undef' d_symlink='define' d_syscall='define' d_sysconf='define' d_sysernlst='' d_syserrlst='define' d_system='define' d_tcgetpgrp='define' d_tcsetpgrp='define' d_telldir='define' d_time='define' d_times='define' d_truncate='define' d_tzname='define' d_umask='define' d_uname='define' d_vfork='undef' d_void_closedir='undef' d_voidsig='define' d_voidtty='' d_volatile='define' d_vprintf='define' d_wait4='define' d_waitpid='define' d_wcstombs='define' d_wctomb='define' d_xenix='undef' date='date' db_hashtype='u_int32_t' db_prefixtype='size_t' defvoidused='15' direntrytype='struct dirent' dlext='so' dlsrc='dl_dlopen.xs' echo='echo' egrep='egrep' emacs='' eunicefix=':' expr='expr' find='find' flex='' fpostype='fpos_t' freetype='void' full_csh='/bin/csh' full_sed='/bin/sed' gcc='' gccversion='2.7.0' gidtype='gid_t' glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/local/lib ' grep='grep' groupcat='' groupstype='gid_t' h_fcntl='false' h_sysfile='true' hint='previous' hostcat='' huge='' i_bsdioctl='' i_db='define' i_dbm='define' i_dirent='define' i_dld='undef' i_dlfcn='define' i_fcntl='undef' i_float='define' i_gdbm='define' i_grp='define' i_limits='define' i_malloc='define' i_math='define' i_memory='define' i_ndbm='undef' i_neterrno='undef' i_niin='define' i_pwd='define' i_sgtty='undef' i_stdarg='define' i_stddef='define' i_stdlib='define' i_string='define' i_sysdir='define' i_sysfile='define' i_sysfilio='undef' i_sysin='undef' i_sysioctl='define' i_sysndir='undef' i_sysparam='define' i_sysselct='undef' i_syssockio='' i_sysstat='define' i_systime='define' i_systimek='undef' i_systimes='define' i_systypes='define' i_termio='undef' i_termios='define' i_time='undef' i_unistd='define' i_utime='define' i_varargs='undef' i_varhdr='stdarg.h' i_vfork='undef' incpath='' inews='' installarchlib='/usr/lib/perl5/i586-linux' installbin='/usr/bin' installman1dir='/usr/man/man1' installman3dir='/usr/man/man3' installprivlib='/usr/lib/perl5' installscript='/usr/bin' installsitelib='' known_extensions='DB_File Fcntl GDBM_File NDBM_File ODBM_File POSIX SDBM_File Socket' ksh='' large='' ld='gcc' lddlflags='-shared' ldflags='' less='' libc='' libs='-lgdbm -ldbm -ldb -ldl -lm -lc -lbsd' libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x' line='line' lint='' lkflags='' ln='ln' lns='/bin/ln -s' lp='' lpr='' ls='ls' lseektype='off_t' mail='' mailx='' make='' mallocobj='' mallocsrc='' malloctype='void *' man1dir='/usr/man/man1' man1direxp='/usr/man/man1' man1ext='1' man3dir='/usr/man/man3' man3direxp='/usr/man/man3' man3ext='3' medium='' mips='' mips_type='' mkdir='mkdir' models='none' modetype='mode_t' more='' mv='' myarchname='i586-linux' mydomain='' myhostname='porky.redhat.com' myuname='linux porky.redhat.com 1.2.9 #5 thu jun 8 09:50:07 gmt 1995 i586 ' n='-n' nm_opt='' nroff='nroff' optimize='-O2 -m486' orderlib='false' package='perl5' passcat='' patchlevel='1' perl='perl' pg='' phostname='hostname' plibpth='' pmake='' pr='' prefix='/usr' prefixexp='/usr' privlib='/usr/lib/perl5' privlibexp='/usr/lib/perl5' prototype='define' randbits='31' ranlib=':' rm='rm' rmail='' runnm='false' scriptdir='/usr/bin' scriptdirexp='/usr/bin' sed='sed' selecttype='fd_set *' sendmail='' sh='' shar='' shmattype='char *' shrpdir='none' signal_t='void' sitelib='' sitelibexp='' sizetype='size_t' sleep='' smail='' small='' sockethdr='' socketlib='' sort='sort' spackage='Perl5' spitshell='cat' split='' ssizetype='ssize_t' stdchar='char' stdio_base='((fp)->_IO_read_base)' stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' stdio_ptr='((fp)->_IO_read_ptr)' strings='/usr/include/string.h' submit='' sysman='/usr/man/man1' tail='' tar='' tbl='' test='test' timeincl='/usr/include/sys/time.h ' timetype='time_t' touch='touch' tr='tr' troff='' uidtype='uid_t' uname='uname' uniq='uniq' usedl='define' usemymalloc='n' usenm='false' useposix='true' usevfork='false' usrinc='/usr/include' uuname='' vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' zcat='' !END!OF!CONFIG! tie %Config, Config; sub TIEHASH { bless {} } sub FETCH { # check for cached value (which maybe undef so we use exists not defined) return $_[0]->{$_[1]} if (exists $_[0]->{$_[1]}); my($value); # search for the item in the big $config_sh string return undef unless (($value) = $config_sh =~ m/^$_[1]='(.*)'\s*$/m); $value = undef if $value eq 'undef'; # So we can say "if $Config{'foo'}". $_[0]->{$_[1]} = $value; # cache it return $value; } sub FIRSTKEY { $prevpos = 0; my $key; ($key) = $config_sh =~ m/^(.*)=/; $key; } sub NEXTKEY { my ($pos, $len); $pos = $prevpos; $pos = index( $config_sh, "\n", $pos) + 1; $prevpos = $pos; $len = index( $config_sh, "=", $pos) - $pos; $len > 0 ? substr( $config_sh, $pos, $len) : undef; } sub EXISTS{ exists($_[0]->{$_[1]}) or $config_sh =~ m/^$_[1]=/m; } sub readonly { die "\%Config::Config is read-only\n" } sub myconfig { my($output); $output = <<'END'; Summary of my $package (patchlevel $PATCHLEVEL) configuration: Platform: osname=$osname, osver=$osvers, archname=$archname uname='$myuname' hint=$hint Compiler: cc='$cc', optimize='$optimize' cppflags='$cppflags' ccflags ='$ccflags' ldflags ='$ldflags' stdchar='$stdchar', d_stdstdio=$d_stdstdio, usevfork=$usevfork voidflags=$voidflags, castflags=$castflags, d_casti32=$d_casti32, d_castneg=$d_castneg intsize=$intsize, alignbytes=$alignbytes, usemymalloc=$usemymalloc, randbits=$randbits Libraries: so=$so libpth=$libpth libs=$libs libc=$libc Dynamic Linking: dlsrc=$dlsrc, dlext=$dlext, d_dlsymun=$d_dlsymun cccdlflags='$cccdlflags', ccdlflags='$ccdlflags', lddlflags='$lddlflags' END $output =~ s/\$(\w+)/$Config{$1}/ge; $output; } sub STORE { &readonly } sub DELETE{ &readonly } sub CLEAR { &readonly } 1; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GDBM_File.bs ../../lib/auto/GDBM_File/GDBM_File.so ../../lib/auto/GDBM_File/GDBM_File.bs ../../lib/GDBM_File.pm ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Fcntl.bs ../../lib/auto/Fcntl/Fcntl.so ../../lib/auto/Fcntl/Fcntl.bs ../../lib/Fcntl.pm ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ELF�������������� ��4���x������4� ��(���������������� �� ����������� ����������������������� �������������������������� ���������������������������������������������������������������������������� ������������������������������������������ ��������� �������������������� ����������������������������� ���������� �����������&��� ������� �,��������������2��������������8��������������@���@ ������R��������������[��������������f��������������t��������������w��������������~���������������������������������������������P ��h������������������������������������������������������������������������������ ��������������������������������������_DYNAMIC�_GLOBAL_OFFSET_TABLE_�_init�_fini�croak�errno�strncmp�XS_Fcntl_constant�stack_sp�stack_base�markstack_ptr�na�sv_2pv�sv_2iv�sv_newmortal�sv_setnv�boot_Fcntl�newXS�sv_yes�___brk_addr�__environ�atexit�_etext�_edata�__bss_start�_end���������� ������ ���� ���� ������������� �������� ��������������������������������������;�������������� ���h�������h������h������h������h ��� ���h(���$���h0���(���h8���p��������VS����[Ù��px�tЃ>�u[^ÐS����[j��[ÐUS����[W��EPhPUWVS����[2��,��������U<Ft<O��Y��jPURv��u����9��u������u����uP���u������u����u`��u����uh��u����upl��u ����ux<��u������u������u��������u �����jPURV��u����u��u����u\��u ����u,��u����u���u ����u���u# ����tu. ����u���u7 ����tgu@����uXJuG ����u %,�������,�������e[^_]ÐUWVS����[r��0���4���8���6�2z)tPt A t<���@�0<���PQƋ4����D@ t �@ PPV]‹4����uuR0���4�������e[^_]ÐUVS����[f��8���4�����FP@���PP54���D���0���40e[^]ÐVS����[��pxtЃ>u[^ÐS����[��H���L���[��������������%s not implemented on this architecture�F_�F_DUPFD�F_GETFD�F_GETLK�F_SETFD�F_GETFL�F_SETFL�F_SETLK�F_SETLKW�F_RDLCK�F_UNLCK�F_WRLCK�FD_CLOEXEC�O_�O_CREAT�O_EXCL�O_NOCTTY�O_TRUNC�O_APPEND�O_NONBLOCK�O_NDELAY�O_RDONLY�O_RDWR�O_WRONLY�������@�������@������@������@������@������@������P@������`@������p@������@������@������@Usage: Fcntl::constant(name,arg)�Fcntl.c�Fcntl::constant������������������������������������������������������������������������������ ����� ��� ����������������L�� ������ ��������������@������������4����������H�������������������������GCC: (GNU) 2.6.4 snapshot 950518��GCC: (GNU) 2.7.0��GCC: (GNU) 2.6.4 snapshot 950518��.symtab�.strtab�.shstrtab�.hash�.dynsym�.dynstr�.rel.got�.rel.plt�.init�.plt�.text�.fini�.rodata�.data�.ctors�.dtors�.got�.dynamic�.bss�.comment������������������������������������������������������������������������!��� ������L��L����������������)�������������������������������1��� ����������H���������������:��� ������4��4��@���������������C�������������������������������I������������������������������N��������� �� �������������������T��������� �� ��������������������Z���������( ��( �������������������b����������� ���������������������h����������� ��������������������o����������� ��������������������v����������� ��P�����������������{����������� ����������������������������� ����������������������������������� ��V�������������������������������� �����������������������������������������'��������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �������������� �������������� �������������� �������������� ��������������������������������������������������������������������������������������������������������������� ��� ����������� ��������1���������� �>��� ��������I���������� �W���������� ������������� ��� ��������d��� ��������z���������� ����P��������I���������� ����������� ������������� ���`�����������`�� ����������������������������������������� ��������������������������������������������������������������������������������������������������������������������������������������������$��P ��h�����/�������������8���������D�������������M�� ������� �S�������������Z�������������a��@ ������s���������z���������������������������������������������crtstuff.c�gcc2_compiled.�__do_global_ctors_aux�__CTOR_END__�init_dummy�force_to_data�__DTOR_END__�__do_global_dtors_aux�__DTOR_LIST__�fini_dummy�__CTOR_LIST__�Fcntl.c�not_here�constant�_DYNAMIC�errno�_etext�sv_newmortal�sv_2pv�sv_2iv�newXS�___brk_addr�__environ�stack_base�_init�na�strncmp�boot_Fcntl�sv_setnv�__bss_start�stack_sp�_fini�atexit�sv_yes�XS_Fcntl_constant�_edata�_GLOBAL_OFFSET_TABLE_�_end�croak�markstack_ptr����������������������������������������������������������������������������������������������������������������������������������������if (!defined &_SYS_SOCKET_H) { eval 'sub _SYS_SOCKET_H {1;}'; require 'features.ph'; require 'linux/socket.ph'; } 1; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if (!defined &_SYS_CDEFS_H) { eval 'sub _SYS_CDEFS_H {1;}'; if (defined &__GNU_LIBRARY__) { require 'features.ph'; } if (defined &__GNUC__) { if (!defined &__P) { eval 'sub __P { local($args) = @_; eval "$args"; }'; } eval 'sub __DOTS {, ...;}'; if ((defined(&__GNUC__) ? &__GNUC__ : 0) < 2 || ((defined(&__GNUC__) ? &__GNUC__ : 0) == 2 && ((defined(&__GNUC_MINOR__) ? &__GNUC_MINOR__ : 0) < 5 || (defined( &__cplusplus) && (defined(&__GNUC_MINOR__) ? &__GNUC_MINOR__ : 0) < 6)))) { if (!defined &__CONSTVALUE) { eval 'sub __CONSTVALUE { &__const__;}'; eval 'sub __CONSTVALUE2 {1;}'; } if (!defined &__NORETURN) { eval 'sub __NORETURN { &__volatile__;}'; eval 'sub __NORETURN2 {1;}'; } } else { if (!defined &__CONSTVALUE) { eval 'sub __CONSTVALUE {1;}'; if (defined( &const) || !defined( &__STDC__)) { eval 'sub __CONSTVALUE2 {1;}'; } else { eval 'sub __CONSTVALUE2 { &__attribute__ (( &const));}'; } } if (!defined &__NORETURN) { eval 'sub __NORETURN {1;}'; if (defined &noreturn) { eval 'sub __NORETURN2 {1;}'; } else { eval 'sub __NORETURN2 { &__attribute__ (( &noreturn));}'; } } } } else { eval 'sub __inline {1;}'; eval 'sub __CONSTVALUE {1;}'; eval 'sub __CONSTVALUE2 {1;}'; eval 'sub __NORETURN {1;}'; eval 'sub __NORETURN2 {1;}'; if ((defined ((defined(&__STDC__) ? &__STDC__ : 0)) && (defined(&__STDC__) ? &__STDC__ : 0)) || defined ((defined(&__cplusplus) ? &__cplusplus : 0))) { if (!defined &__P) { eval 'sub __P { local($args) = @_; eval "$args"; }'; } eval 'sub __const { &const;}'; eval 'sub __signed { &signed;}'; eval 'sub __volatile { &volatile;}'; eval 'sub __DOTS {, ...;}'; } else { if (!defined &__P) { eval 'sub __P { local($args) = @_; eval "()"; }'; } eval 'sub __const {1;}'; eval 'sub __signed {1;}'; eval 'sub __volatile {1;}'; eval 'sub __DOTS {1;}'; } } if (defined ((defined(&__GNUC__) ? &__GNUC__ : 0)) && (defined(&__GNUC__) ? &__GNUC__ : 0) < 2) { eval 'sub __extension__ {1;}'; } if (defined ((defined(&__STDC__) ? &__STDC__ : 0)) && (defined(&__STDC__) ? &__STDC__ : 0)) { eval 'sub __CONCAT { local($x,$y) = @_; eval "$x ## $y"; }'; eval 'sub __STRING { local($x) = @_; eval "#$x"; }'; eval 'sub __ptr_t { &void *;}'; } else { eval 'sub __CONCAT { local($x,$y) = @_; eval " &xy"; }'; eval 'sub __STRING { local($x) = @_; eval "\\"x\\""; }'; eval 'sub __ptr_t {char *;}'; } if (defined &__USE_BSD) { if (0) { eval 'sub const { &__const;}'; } eval 'sub signed { &__signed;}'; eval 'sub volatile { &__volatile;}'; } if (defined &__cplusplus) { eval 'sub __BEGIN_DECLS { &extern "C" {;}'; eval 'sub __END_DECLS {};}'; } else { eval 'sub __BEGIN_DECLS {1;}'; eval 'sub __END_DECLS {1;}'; } } 1; ��������������������������������������������������������������������������o we can say "if $Config{'foo'}". $_[0]->{$_[1]} = $value; # cache it return $value; } sub FIRSTKEY { $prevpos = 0; my $key; ($key) = $config_sh =~ m/^(.*)=/; $key; } sub NEXTKEY { my ($pos, $len); $pos = $prevpos; $pos = index( $config_sh, "\n", $pos) + 1; $prevpos = $pos; $len = index( $config_sh, "=", $pos) - $pos; $len > 0 ? substr( $config_sh, $pos, $len) : undef; } sub EXISTS{ exists($_[0]->{$_[1]}) or $config_sh =~ m/^$_[1]=/m; } sub readonly { die "\%Config::Config is read-only\n" } sub myconfig { my($output); $output = <<'END'; Summary of my $package (patchlevel $PATCHLEVEL) configuration: Platform: osname=$osname, osver=$osvers, archname=$archname uname='$myuname' hint=$hint Compiler: cc='$cc', optimize='$optimize' cppflags='$cppflags' ccflags ='$ccflags' ldflags ='$ldflags' stdchar='$stdchar', d_stdstdio=$d_stdstdio, usevfork=$usevfork voidflags=$voidflags, castflags=$castflags, d_casti32=$d_casti32, d_castneg=$d_castneg intsize=$intsize, alignbytes=$alignbytes, usemymalloc=$usemymalloc, randbits=$randbits Libraries: so=$so libpth=$libpth libs=$libs libc=$libc Dynamic Linking: dlsrc=$dlsrc, dlext=$dlext, d_dlsymun=$d_dlsymun cccdlflags='$cccdlflags', ccdlflags='$ccdlflags', lddlflags='$lddlflags' END $output =~ s/\$(\w+)/$Config{$1}/ge; $output; } sub STORE { &readonly } sub DELETE{ &readonly } sub CLEAR { &readonly } 1; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@C�@V�ډ!‰@V�U�j�L$AP|$$WL$(Qj|$$P@V�POL$8Q5 u|$WtsO�[^_]ÐL$  @V���0V�|$0V�= V��5 V�~U�|��U�����_��=V��CL$1qV�@P¡U�HV�j�|$GPL$(Q=V�|$$-HV�|$�~0]L$QjjUC��������L$Ջ|$G`V�L$Qu|$Wj��O�[^_]ÐL$PT¡U�j�|$GPL$(Q|$,WjL$(PU�Pr |$WUuW��O�[^_]ÐL$P¡U�j�|$GPL$(Q|$,WjL$(PU�P |$WuWh���P�[^_]Ð3P�[^_]ÐMP�[^_]ÐgP�[^_]ÐP�[^_]ÐP�[^_]ÐP�[^_]ÐP�[^_]ÐFD$(V�9+`V�U�`V�U�1f=V��tV�F(V�9|50V�t, V� U�@V�!‰@V�@V�-HV� V�IL$ ��]hh �U`V�E�PdS <u%t =DV��tC%C=DV��tC�C�fCf9V�vСU�t+XV�Crf{ue V�fS5U�<�u@V�sF@V�t@V�C!‰@V�XV�@V�)‰S@V�L$@V�$@V�U�= V�+ 0V�+XV�LV�V�DV�����jj Ph%Q�hh �_t=Q�����U�1f=V��t-U�tPPVh;Q����F(V�9|ӡXV�PhUQ����0V�PheQ����@V�PhsQ����V�PhQ���� 1[^_]ÐD$jjP:Q� Ð��S$��$��PR\$ S =Q��t#ShQ�j [��ÐShQ�hXS�x [��Ð��S$��$��PR\$ Sw =Q��t#ShQ�j [��ÐShQ�hXS� [��ÐS�R�=�R�t Ѓ;u[ÐÐ��������������/lib/modules/misc�/lib/modules/scsi�/lib/modules/net�/lib/modules/fs�/lib/modules/default/misc�/lib/modules/default/scsi�/lib/modules/default/net�/lib/modules/default/fs�/lib/modules/%s/misc�/lib/modules/%s/scsi�/lib/modules/%s/net�/lib/modules/%s/fs�/linux/modules�.�insmod: malloc failed�insmod: realloc failed�kernel_version�Error: The module was compiled on kernel version %s. This kernel is version %s. They don't match! Check that the module is usable with the current kernel, recompile the module and try again.� Trying to load it anyway...�_R�rmmod�ksyms�insmod�Usage: insmod [-f] [-x] [-o name] [-m] [-s] [-v] module [[sym=value]...] �get_kernel_sys failed: Cannot find Kernel symbols!�Kernel symbol problem�#�_Using_Versions�Using_Versions�.o�.mod�MODPATH�:�%s:�%s/%s�r�Cannot open %s�Could not read header of %s�%s: %s�ELF�%s: not an object file�yes�no�versioned kernel: %s versioned module: %s�a.out�%s kernel %s module�init_module�cleanup_module�mod_use_count_�bss2 sym %08x, size =%7d: %s�%s: wrong version�%s undefined�Failed to load module! The symbols from kernel %s don't match %s�-o�Symbol '%s' not found�%x�%o�%d�A module named %s already exists�Cannot allocate space for module�create_module�_�Initialization of %s failed�%08lx %c %s �%s needed, but can't be found�/proc/modules�Strange reference in /proc/modules: '%s' used by '%s'?�usage: rmmod [-r] [-s] module ... �-r�-a�-s�usage: rmmod [-r] module ...�module '%s' not loaded�module '%s' is in use!��/dev/kmem�Usage: ksyms [-a] [-h] �Address Symbol Defined by �%08lx --- (%dk) --- [%s] �%08lx %s� [%s]� �Bad relocation�Unimplemented relocation: r_length = %d�reading %d symbols�Error reading symbol table�Error reading stringtab�Bad nlist entry�external bss size =%7d �total module size =%7d�Error reading text & data�textseg -> 0x%08lx, size =%7d�dataseg -> 0x%08lx, size =%7d�bss1seg -> 0x%08lx, size =%7d�bss2seg -> 0x%08lx, size =%7d�Unable to resolve symbol %s�'%s' not in got�Unable to handle reloc type %d�can't handle program headers...�Error reading ELF section headers�Error reading ELF PROGBITS section�Error - multiple bss sections�Can't handle >1 symbol section�Error reading ELF SYMTAB section�Error reading ELF STRTAB section�Error reading ELF REL section�can't handle section RELA�can't handle section HASH�can't handle section DYNAMIC�can't handle section SHLIB�can't handle section DYMSYM�can't handle section NUM�can't handle section > 12�Ouch! Mail <bj0rn@blox.se> and say that bss_seg was -1�_GLOBAL_OFFSET_TABLE_�Section %d: (%s) at 0x%lx�textseg = 0x%lx�bss_size = %d�last byte = 0x%lx�module size = %d�%s�%s ��������RH�CH�0H�H�H�G�G�G�G�G�}G�lG�ZG�HG����������������������������������������R��������� �. �> �N �^ �n �~ � � � � � � � � � � �. �> �N �^ �n �~ � � � � � � � � � � �. �> �N �^ �n �~ � ������� ���� � ���@G�������������d� ����� ����������������R����@������������������� �����������������������������GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��GCC: (GNU) 2.7.0��.symtab�.strtab�.shstrtab�.interp�.hash�.dynsym�.dynstr�.rel.bss�.rel.plt�.init�.plt�.text�.fini�.rodata�.data�.ctors�.dtors�.got�.dynamic�.bss�.comment���������������������������������������������������������������������������#��������������|���������������)��� ������d�d�����������������1�����������������������������9��� ��������� ���������������B��� ���������@��������������K���������� �� ��������������������Q��������� � �������������������V��������� � ��;�����������������\���������@G�@G��������������������b���������HG�HG��U �����������������j���������Q�Q��`������������������p����������R��R��������������������w���������R�R��������������������~���������R�R�����������������������������R�R���������������������������PS�PS��T�������������������������������PS��l��������������������������������S������������������������������������������������������������������������������������������������������������������������������������������������������������'�� ��.�������..������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������)�� ��.������ ��..��*���tmp�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������*�� ��.���)���..������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� 6� 6� 6�6�6�6�6�6�7��7��7��7��7��7��7��7�� 7�� 7�� 7�� 7�� 7��7��7��7��7�7�7�7�7�7�7�7� 7� 7� 7� 7� 7�7�7�7�7�7�8��8��8��8��8��8��8��8�� 8�� 8�� 8�� 8�� 8��8��8��8��8��8��8�8�8�8�8�8�8�8� 8� 8� 8� 8� 8�8�8�8�8�8�9��9��9��9��9��9��9��9�� 9�� 9�� 9�� 9�� 9��9��9��9��9��9��9�9�9�9�9�O���9�9�9� 9� 9� 9� 9� 9�9�9�9�9�9�:��:��:��:��:��:��:��:�� :�� :�� :�� :�� :��:��:��:��:��:��:�:�:�:�:�:�:�:� :� :� :� :� :�:�:�:�:�:�;��;��;��;��;��;��;��;�� ;�� ;�� ;�� ;�� ;��;��;��;��;��;��;�;�;�;�;�;�;�;� ;� ;� ;� ;� ;�;�;�;�;�;�<��<��<��<��<��<��<��<�� <�� <�� <�� <�� <��<��<��<��O���<��<��<�<�<�<�<�<�<�<� <� <� <� <� <�<�<�<�<�<�=��=��=��=��=��=��=��=�� =�� =�� =�� =�� =��=��=��=��=��=��=�=�=�=�=�=�=�=� =� =� =� =� =�=�=�=�=�=�>��>��>��>��>��>��>��>�� >�� >�� >�� >�� >��>��>��>��>��>��>�>�>�>�>�>�>�>� >� >� >� >� >�>�>�>�>�>�?��?��?��?��?��?��?��?�� ?��O��� ?�� ?�� ?�� ?��?��?��?��?��?��?�?�?�?�?�?�?�?� ?� ?� ?� ?� ?�?�?�?�?�?�@��@��@��@��@��@��@��@�� @�� @�� @�� @�� @��@��@��@��@��@��@�@�@�@�@�@�@�@� @� @� @� @� @�@�@�@�@�@�A��A��A��A��A��A��A��A�� A�� A�� A�� A�� A��A��A��A��A��A��A�A�A�A�A�A�A�A� A� A� A� A� A�A�A�A�A�A�B��B��O�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������