blueproximity-1.2.5.orig/0000755000175000017500000000000010761555105015231 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/start_proximity.sh0000755000175000017500000000010010761555105021040 0ustar nitaglfnitaglf#!/bin/bash PRG="$0" P=`dirname $PRG` cd $P python proximity.py blueproximity-1.2.5.orig/LANG/0000755000175000017500000000000010761555105015752 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/it/0000755000175000017500000000000010761555105016366 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/it/LC_MESSAGES/0000755000175000017500000000000010761555105020153 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/it/LC_MESSAGES/blueproximity.mo0000644000175000017500000002464310761555105023435 0ustar nitaglfnitaglf\ # ) 3 : "C &f # $ !    - < P Ka e       * >H Z dn}4 / B5?x<>R4MK^}gx<s/+- +:f7]} &4C4x4<$* AL]pyn , "&6#]$!  K._z"  #- = HRc8w <  D9 >~ ; = H7!!!!`!T)"/~"""l"{2#@#4#0$$2U$0$$I%b&E' \'f'l't'''''$'''% (40(4e(4((<())0)?)V)n) w) ))1;Q!8O-TS%X5[.+> (BG2W*U\,MN/JD"? @ L0F= VCAIHPR<&'4$Z6 )K#3:EY97 BlueProximity 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. BlueProximity 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 Envy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Current State: Simulation Mode (locking disabled) Status: max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' for writing.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open 'D_istance:D_uration (sec.):Detected Distance: Distance:Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressNameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:StateStop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below._Bluetooth Device_Distance:_File_Locking_Proximity Details_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pgonelocal0 local1 local2 local3 local4 local5 local6 local7 usermin: min: - max: - state: -running...screen is lockedscreen is unlockedstarted.stopped.usable~/blueproximity.logProject-Id-Version: Report-Msgid-Bugs-To: POT-Creation-Date: 2008-01-31 11:29+0100 PO-Revision-Date: 2008-02-06 20:51+0100 Last-Translator: e633 Language-Team: e633 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Italian X-Poedit-Country: ITALY BlueProximity è software libero; puoi redistribuirlo e/o modificarlo secondo i termini della GNU General Public License pubblicata dalla Free Software Foundation; da qualsiasi versione dopo la 2 compresa. BlueProximity viene distribuito nella speranza di risultare utile ma SENZA GARANZIE; nemmeno quella implicita di COMMERCIABILITA' o UTILITA' PER QUALCHE SCOPO. Riferirsi alla GNU General Public License per i dettagli. Avresti dovuto riceverne una copia, altrimenti scrivi a: Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Stato attuale: Modalità simulazione (blocco disabilitato) Stato: max: stato: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' in scrittura.Comandi azioneBloccoLoggingatm misurateSbloccoPlease note that the device should already be paired!Tutti i dispositivi bluetooth raggiungibili. Usa il tasto di scansione per aggiornare la lista.Tutti i canali RFCOMM utilizzabili. Usa il tasto di scansione in alto per aggiornare la lista. Clicca su una voce della lista per selezionare il canale corrispondente.Preferenza BlueProximityAvvio di BlueProximity in corso...CanaleIntervallo _comandi: (sec.)Impossibile aprire 'D_istanza:D_urata (sec.):Distanza rilevataDistanza:D_urata (sec.):F_acilitàNome_fileInizializzato...C_omando di blocco:Lascialo - è bloccato, torna indietro - è ritornato...MACIndirizzo_MACNomeNessuna connessione rilevata, tentativo di stabilirne una...Scansione in corso...Modalità pausa - non connessoAssicurarsi di aver installato il pacchetto ConfigObject per python.Assicurarsi di aver installato le librerie GObject per python.Assicurarsi di aver installato le librerie GTK2 per python.Assicurarsi di aver installato le librerie Glade2 per python.Assicurarsi di aver installato le librerie bluetooth per python e bluez.Com_ando di prossimità:C_anale RFCOMMRic_erca canali sul dispositivoRicerca dispositivi bluetooth visibili e raggiungibili. Verranno mostrati nella lista qui sopra.Ricerca canali RFCOMM disponibili per il seguente dispositivo (campo indirizzo MAC).Seleziona dalla lista dei dispositivi _trovati.StatoArresta ric_ercaL'indirizzo MAC del tuo dispositivo bluetooth (ad esempio telefonino o cuffie) nel formato XX:XX:XX:XX:XX:XXIl nome del file di log. Assicurarsi che l'utente che ha avviato BlueProximity abbia i diritti di scrittura su questo file.Il programma non può importare il modulo ConfigObj o Validator.Il programma non può importare il modulo bluetooth.Il programma non può importare il modulo glade.Il programma non può importare il modulo GObject.Il programma non può importare il modulo pygtk.Il canale RFCOMM tramite cui BlueProximity si connette al tuo dispositivo. Deve essere un canale aperto, nel dubbio usa il pulsante di ricerca.Il processo di scansione tenta la connessione ad ognuna delle 30 possibili porte. Questo processo impiegherà un po' di tempo e nel mentre dovresti controllare il dispositivo bluetooth nel caso sia necessario accettare manualmente la connessione. Se viene richiesto un codice significa che il dispositivo non è stato precedentemente accoppiato in maniera corretta, vedi il manuale per maggiori informazioni.Trasferisci l'indirizzo MAC del dispositivo bluetooth selezionato nel campo indirizzo sottostante._Dispositivo bluetooth_Distanza_File_Blocco_Dettagli di prossimità_Reset Min/Max_Ricerca dispositivi_Syslog_Comando di sblocco:_Utilizza il dispositivo selezionatoattivochiuso o negatoper esempio per Ubuntu Linux digitaregnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pandatolocal0 local1 local2 local3 local4 local5 local6 local7 usermin: min: - max: - stato: -in funzione...lo schermo è bloccatolo schermo è sbloccatoAvviato.arrestata.utilizzabile~/blueproximity.logblueproximity-1.2.5.orig/LANG/th/0000755000175000017500000000000010761555105016365 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/th/LC_MESSAGES/0000755000175000017500000000000010761555105020152 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/th/LC_MESSAGES/blueproximity.mo0000644000175000017500000003325310761555105023431 0ustar nitaglfnitaglf\ # ) 3 : "C &f # $ !    - < P Ka e       * >H Z dn}4 / B5?x<>R4MK^}gx<s/+- +:f7]} &4C4x4<$* AL]pyT*of3"F&i#$!#C"c+lU #o!0!!2!2"I"4d"7""4" #7#Q#Gp#f#$#$ 5$jB$$T$!%%D&&V'J'&G(In((b)>*O*_*y*+|>,[,W-Yo-W-f!."/1(r22 2272D3&_33)3@33'45=44s444445<"5 _5A5535<6R6 n6{661;Q!8O-TS%X5[.+> (BG2W*U\,MN/JD"? @ L0F= VCAIHPR<&'4$Z6 )K#3:EY97 BlueProximity 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. BlueProximity 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 Envy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Current State: Simulation Mode (locking disabled) Status: max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' for writing.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open 'D_istance:D_uration (sec.):Detected Distance: Distance:Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressNameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:StateStop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below._Bluetooth Device_Distance:_File_Locking_Proximity Details_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pgonelocal0 local1 local2 local3 local4 local5 local6 local7 usermin: min: - max: - state: -running...screen is lockedscreen is unlockedstarted.stopped.usable~/blueproximity.logProject-Id-Version: BlueProximity 1.2 Report-Msgid-Bugs-To: POT-Creation-Date: 2008-01-31 11:29+0100 PO-Revision-Date: 2008-02-09 17:53+0700 Last-Translator: Maythee Anegboonlap & pFz from irc://freenode.org/ubuntu-th Language-Team: Lars Friedrichs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: English X-Poedit-SourceCharset: utf-8 BlueProximity 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. BlueProximity 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 Envy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA สถานะปัจจุบัน: สถานะจำลอง(คำสั่งล็อคเครื่องถูกปิด) สถานะ: มากที่สุด: สถานะ: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' สำหรับเขียนคำสั่งในกิจกรรมต่างๆกำลังล็อคบันทึกสัญญาณกำลังปลดล็อคอุปกรณ์ที่ติดต่อได้ต้องเคยเชื่อมมาก่อน!อุปกรณ์บลูธูททั้งหมดที่พบ กดปุ่มสแกนอีกครั้งเพื่อค้นหาใหม่ช่องสัญญาณ rfcomm ทั้งหมดที่ใช้ได้ กดปุ่มสแกนช่องสัญญาณข้างบนอีกครั้งเพื่อค้นหาใหม่ เลือกรายการใดๆ เพื่อใช้ช่องสัญญาณนั้นตั้งค่า BlueProximityกำลังเริ่ม BlueProximity ...ช่องสัญญาณคำสั่ง _interval: (วินาที)ไม่สามารถเปิดได้ 'ระยะห่า_ง:_รอเป็นเวลา(วินาที):ระยะห่างของอุปกรณ์:ระยะห่าง:ร_อเป็นเวลา(วินาที):ช่อง_ทาง_ชื่อไฟล์ทำงานแล้ว...คำสั่งสำหรับล็_อคเครื่อง:ปล่อยไว้ - ล็อคเรียบร้อย - ปลดล็อคแล้วMACร_หัส MACชื่อไม่พบการติดต่อ กำลังพยายามค้นหาอยู่...กำลังแสกน...หยุดชั่วคราว - ไม่ได้เชื่อมต่อกรุณาตรวจสอบว่าแพคเกจ ConfigObject สำหรับไพธอนถูกติดตั้งแล้วกรุณาตรวจสอบว่า GObject bindins สำหรับไพธอนถูกติดตั้งแล้วกรุณาตรวจสอบว่า GTK2 bindings สำหรับไพธอนถูกติดตั้งแล้วกรุณาตรวจสอบว่า Glade2 bindings สำหรับไพธอนถูกติดตั้งแล้วกรุณาตรวจสอบว่าแพคเกจ bluetooth bindings สำหรับไพธอนและ bluez ติดตั้งแล้วคำสั่งสำหรับแสดงว่าค้_นหา:ช่_องสัญญาณ RFCOMM_สแกนช่องสัญญาณของอุปกรณ์ค้นหาอุปกรณ์บลูธูทในระยะ อุปกรณ์ที่พบจะแสดงในรายการด้านบนค้นหาช่องสัญญาณ rfcomm ของอุปกรณ์ที่เลือก (จากช่องที่อยู่อุปกรณ์)เลือกจากอุปกรณ์ที่_พบ:สถานะหยุด_สแกนรหัสอุปกรณ์บลูธูท(เช่น มือถือ หรือ หูฟัง) จะอยู่ในรูป XX:XX:XX:XX:XX:XXชื่อไฟล์ที่จะบันทึกการทำงานต่างๆ กรุณาตรวจสอบว่าไฟล์นี้สามารถเขียนได้โดยผู้ใช้ที่เริ่มโปรแกรมนี้โปรแกรมไม่สามารถตรวจสอบหรือนำเข้าโมดูล ConfigObjโปรแกรมไม่สามารถนำเข้าโมดูล bluetoothโปรแกรมไม่สามารถนำเข้าโมดูล gladeโปรแกรมไม่สามารถนำเข้าโมดูล gobjectโปรแกรมไม่สามารถนำเข้าโมดูล pygtkช่องสัญญาณ rfcomm ที่ BlueProximity ใช้ในการติดต่อกับอุปกรณ์ของคุณ ต้องเป็นช่องสัญญาณเปิด ถ้าไม่ทราบว่าช่องไหนกรุณากดปุ่มค้นหาช่องสัญญาณขั้นตอนในการตรวจสอบจะสแกนประมาณ 30 พอร์ตซึ่งจะใช้เวลาอยู่ซักครู่ กรุณาตรวจสอบอุปกรณ์บลูธูทของท่านหากต้องการการกระทำใด ๆ เพื่อรับการติดต่อ ถ้ามีการถามถึงรหัส สามารถดูจากคู่มือว่าจะทำอย่างไรนำรหัสอุปกรณ์ที่เลือกไว้จากรายการด้านบนใส่ไปยังช่องที่อยู่ด้านล่างอุปกรณ์_บลูธูทระยะ_ห่าง:ไ_ฟล์กำลัง_ล็อค:รายละเอียดการค้_นหายกเลิกค่า มากสุด/น้อยสุด_ค้นหาอุปกรณ์:_Syslogคำสั่ง_ปลดล็อค:ใช้_อุปกรณ์ที่เลือกไว้ทำงานอยู่ปิดหรือยกเลิกเช่น ด้วยลินุกซ์ Ubuntugnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pไม่พบlocal0 local1 local2 local3 local4 local5 local6 local7 userน้อยที่สุด: น้อยสุด: - มากสุด: - สถานะ: -ทำงานอยู่...หน้าจอถูกล็อคแล้วหน้าจอถูกปลดล็อคแล้วเริ่มแล้วหยุดใช้งานได้~/blueproximity.logblueproximity-1.2.5.orig/LANG/hu/0000755000175000017500000000000010761555105016366 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/hu/LC_MESSAGES/0000755000175000017500000000000010761555105020153 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/hu/LC_MESSAGES/blueproximity.mo0000644000175000017500000002562410761555105023435 0ustar nitaglfnitaglf\ # ) 3 : "C &f # $ !    - < P Ka e       * >H Z dn}4 / B5?x<>R4MK^}gx<s/+- +:f7]} &4C4x4<$* AL]py'%   "&4#[$!$BR^>$&- T _l   D E N X >] ! T P!Mp!O!j"y"""y"V*#/###x#K$B$3?%/s%1%/%&&W(( )))6) L)Y)o))")))@)4*4I*4~**F*+! +,+3+G+ Z+ f+ r++1;Q!8O-TS%X5[.+> (BG2W*U\,MN/JD"? @ L0F= VCAIHPR<&'4$Z6 )K#3:EY97 BlueProximity 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. BlueProximity 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 Envy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Current State: Simulation Mode (locking disabled) Status: max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' for writing.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open 'D_istance:D_uration (sec.):Detected Distance: Distance:Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressNameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:StateStop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below._Bluetooth Device_Distance:_File_Locking_Proximity Details_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pgonelocal0 local1 local2 local3 local4 local5 local6 local7 usermin: min: - max: - state: -running...screen is lockedscreen is unlockedstarted.stopped.usable~/blueproximity.logProject-Id-Version: POT-Creation-Date: PO-Revision-Date: 2008-02-28 12:28+0100 Last-Translator: KAMI Language-Team: Hungarian MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Hungarian X-Poedit-Country: HUNGARY A BlueProximity szabad szoftver, terjesztheti és/vagy módosíthatja a Free Software Foundation által kiadott GNU General Public License második (vagy bármely későbbi) változatában foglaltak alapján. A BlueProximity programot abban a reményben terjesztjük, hogy hasznos lesz, de nem vállalunk SEMMIFÉLE GARANCIÁT, még olyan értelemben sem, hogy a program alkalmas-e a KÖZREADÁSRA vagy EGY BIZONYOS FELADAT ELVÉGZÉSÉRE. További részletekért tanulmányozza a GNU GPL licencet. A BlueProximity programhoz a GNU General Public License egy példánya is jár, ha nem kapta meg, írjon a Free Software Foundation Inc.-nek. Levélcímük: 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. Aktuális állapot: Szimuláció (zárolás kikapcsolva) Üzemmód: Maximum: Állapot: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' nem nyitható meg írásra.ParancsokKépernyő zárolásaNaplózásJelenleg mért értékZárolás feloldásaMegjegyzés: Az eszköznek már párosítottnak kell lennie.Az elérhető távolságban lévő és látható Bluetooth eszközök listája. A "Keresés" gombbal lekérheti vagy frissítheti a listát.Az összes RFCOMM csatorna használható. A "Csatornakeresés" gombbal lekérheti vagy frissítheti az alábbi listát. Kattintson egy elemre a csatorna kiválasztásához.BlueProximity beállításokBlueProximity indítása...CsatornaParancskiadás időköze: (másodperc)A fájl: '_Távolság:_Időtartam (másodperc):Érzékelt távolság:Tá_volság:I_dőtartam (másodperc):_Szolgáltatás_FájlnévElindítva...Zá_rolás parancsTávozásával gépe zárolva lesz, de amint visszatér, gépe is...MAC cím_MAC címNévNincs aktív kapcsolat, kapcsolat létrehozása folyamatban...Keresés...Felfüggesztés - nincs kapcsolatBizonyosodjon meg róla, hogy a Pythonhoz szánt ConfigObject csomag telepítve van.Bizonyosodjon meg róla, hogy a Pythonhoz szánt GObject kötés telepítve van.Bizonyosodjon meg róla, hogy a Pythonhoz szánt GTK2 kötés telepítve van.Bizonyosodjon meg róla, hogy a Pythonhoz szánt Glade2 kötés telepítve van.Bizonyosodjon meg róla, hogy a Pythonhoz szánt Bluetooth kötés valamint a Bluez csomag telepítve van.Pro_ximity parancs:RFCOMM _csatorna_CsatornakeresésAz elérhető távolságban lévő és látható Bluetooth eszközök keresése és megjelenítése az alábbi listában.Használható RFCOMM csatornák keresése a MAC cím mező által megadott eszközön.Válassza ki az é_rzékelt eszközök közül:ÁllapotKeresés _leállításaA Bluetooth eszköz MAC címe (például: mobiltelefon vagy fejhallgató) a következő formátumban: XX:XX:XX:XX:XX:XX.Adja meg a fájlnevet amely fájlba a naplózást szeretné végezni. Bizonyosodjon meg róla, hogy a fájl írható a BlueProximity programot futtató felhasználó számára.A program nem tudta improtálni a GObject vagy a Validator modult.A program nem tudta improtálni a Bluetooth modult.A program nem tudta improtálni a glade modult.A program nem tudta improtálni a GObject modult.A program nem tudta improtálni a pygtk modult.Az az RFCOMM csatorna, amelyen a BlueProximity csatlakozik az eszközhöz. Csak használható csatornát válasszon ki, az elérhető csatornák listájához kattintson a "Csatornakeresés" gombra.A keresőfolyamat megpróbál csatlakozni mind a 30 lehetséges porthoz, s ez némi időt vesz igénybe. Ajánlatos figyelnie az Bluetooth eszközt, mert lehet, hogy az Ön beavatkozására is szükség lesz. Amennyiben szükséges, válassza ki az Elfogadás vagy Kapcsolódás lehetőséget. Ha az eszköz PIN kódot kér, akkor a párosítás nem volt sikeres. Tanulmányozza át a kézikönyvet, amelyből megtudhatja, hogy hogyan javíthatja ki ezt a problémát.A fent kiválasztott Bluetooth eszköz MAC címét átmásolja az alábbi cím mezőbe._Bluetooth eszköz_Távolság:_FájlKépernyő _zárolása_Proximity részletekAlapállapot_Eszközök keresése_RendszernaplóZárolás _feloldása_Kiválasztott eszköz használataAktívZárva vagy tiltottPéldául Ubuntu Linux esetén írja be a következő parancsot:gnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pTávolhelyi0 helyi1 helyi2 helyi3 helyi4 helyi5 helyi6 helyi7 felhasználóiMinimum:Minimum: - Maximum: - Állapot: -Fut...Képernyő zárolvaZárolás feloldvaelindítva.LeállítvaHasználható~/blueproximity.logblueproximity-1.2.5.orig/LANG/es/0000755000175000017500000000000010761555105016361 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/es/LC_MESSAGES/0000755000175000017500000000000010761555105020146 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/es/LC_MESSAGES/blueproximity.mo0000644000175000017500000002523610761555105023427 0ustar nitaglfnitaglf\ # ) 3 : "C &f # $ !    - < P Ka e       * >H Z dn}4 / B5?x<>R4MK^}gx<s/+- +:f7]} &4C4x4<$* AL]pyL) @JQ!Y&{#$! :KZv@V *EKe y   0 ? C S 9Z  M E!CM!E![!3" G"#U"`y"X"+3#_#f#|##?$3$/%13%0e%%/&'D( [(g( p({(((((!(())47)4l)4))<)** 5*B*U* k* u* **1;Q!8O-TS%X5[.+> (BG2W*U\,MN/JD"? @ L0F= VCAIHPR<&'4$Z6 )K#3:EY97 BlueProximity 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. BlueProximity 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 Envy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Current State: Simulation Mode (locking disabled) Status: max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' for writing.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open 'D_istance:D_uration (sec.):Detected Distance: Distance:Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressNameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:StateStop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below._Bluetooth Device_Distance:_File_Locking_Proximity Details_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pgonelocal0 local1 local2 local3 local4 local5 local6 local7 usermin: min: - max: - state: -running...screen is lockedscreen is unlockedstarted.stopped.usable~/blueproximity.logProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2008-01-31 11:29+0100 PO-Revision-Date: 2008-02-02 15:47-0600 Last-Translator: César Palma (Cesarius) Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit BlueProximity 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. BlueProximity 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 Envy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Estado Actual: Modo Simulación (Bloqueo Deshabilitado) Estado: max: estado:sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' para escritura.Comandos de AcciónBloqueadoIngresoMedido en el momentoDesbloqueadoRevise que su dispositivo este emparejado!Todos los dispositivos Bluetooth visibles, se han detectado detectado. Utilice el botón de exploración para poblar o refrescar la lista.Todos los canales rfcomm son utilizables. Utilice el botón de arriba de escaneo de canales para poblar o actualizar ésta lista. Haga clic en una entrada para seleccionar el canal.Preferencias de BlueProximityIniciando BlueProximity...CanalCommand _interval: (sec.)No se puede abrir 'D_istancia:D_uración (seg.):Distancia Detectada:Distancia:Dur_ación (seg.):F_acilidad_Nombre de archivoIniciando...Comando para bl_oquear:Dejalo - Está bloqueado, inténtalo después...MACDirección M_ACNombreNo se encontró una conexión, trata de establecer una...Explorando...Pausado - no conectadoPor favor asegúrese que el paquete ConfigObject para Python esté instalado.Por favor asegúrate que GObject Bindings para Python esté instaladoPor favor asegúrese que GTK2 bindings para python esté instalado.Por favor asegúrese que Glade2 bindings para python esté instalado.Por favor asegúrese que bluetooth bindings así como bluez para python estén instalados.comando Pro_ximity:Ca_nal RFCOMMBusca_ndo canales en el dispositivoExplorando por dispositivos Bluetooth visibles en el rango. Se mostrarán en la lista de arriba.Explorando el dispositivo seleccionado (Dirección MAC) para canales rfcomm disponibles.Seleccionar desde _dispositivos detectados:EstadoDetener Exploració_nLa dirección MAC de tu dispositivo Bluetooth (Ejm. teléfono móvil o auriculares) debe estar en el formato XX:XX:XX:XX:XX:XX El nombre de archivo del archivo a conectar. Por favor, asegúrese de que este archivo es escribible por el usuario que ha iniciado BlueProximity.El programa no puede importar el Módulo ConfigObj o Validator.El programa no puede importar el Módulo Bluetooth.El programa no puede importar el Módulo glade.El programa no puede importar el Módulo gobject.El programa no puede importar el módulo pygtk. El canal rfcomm donde BlueProximity se conecta tu dispositivo. Debe ser un canal abierto, en caso de duda, por favor utiliza el botón de exploración.El proceso de exploración intenta conectarse a cada uno de los 30 posibles puertos. Esto tomará algún tiempo, y usted debería ver su dispositivo bluetooth para todas las acciones que se han de adoptar. Si es posible haga clic en aceptar y conectar. Si se le pide un pin para el dispositivo que no fué emparejado correctamente antes, consulte el manual sobre la forma de solucionar este problema.Transferencia de la dirección MAC del dispositivo bluetooth seleccionado anteriormente en el campo de la dirección de más abajo.Dispositivo _Bluetooth_Distancia:_Archivo_BloqueadoDetalles de _Proximidad_Reiniciar Min/Max_Explorar Dispositivos_SyslogComando de Desbloq_ueo_Usar el dispositivo seleccionadoActivocerrado o denegadoEjm. con Ubuntu Linux, escribegnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pgonelocal0 local1 local2 local3 local4 local5 local6 local7 usermin:min: - max: - estado: -iniciando...Pantalla bloqueadaPantalla desbloqueadaIniciado.Detenido.utilizable~/blueproximity.logblueproximity-1.2.5.orig/LANG/ru/0000755000175000017500000000000010761555105016400 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/ru/LC_MESSAGES/0000755000175000017500000000000010761555105020165 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/ru/LC_MESSAGES/blueproximity.mo0000644000175000017500000003211210761555105023435 0ustar nitaglfnitaglf\ # ) 3 : "C &f # $ !    - < P Ka e       * >H Z dn}4 / B5?x<>R4MK^}gx<s/+- +:f7]} &4C4x4<$* AL]py,$F &*E'pJ%  8T+m%A # !!/"'Q" y"3"%"".")##M#,c#### ##$$$V$%/#%\S%Z%V &Xb&n&*':'8M'{'(>((-())j*O*IH+K+J+),<-{@0 00 001!%1+G1 s1)1@11$1P26p262623<3[30d33#3%3344641;Q!8O-TS%X5[.+> (BG2W*U\,MN/JD"? @ L0F= VCAIHPR<&'4$Z6 )K#3:EY97 BlueProximity 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. BlueProximity 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 Envy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Current State: Simulation Mode (locking disabled) Status: max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' for writing.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open 'D_istance:D_uration (sec.):Detected Distance: Distance:Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressNameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:StateStop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below._Bluetooth Device_Distance:_File_Locking_Proximity Details_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pgonelocal0 local1 local2 local3 local4 local5 local6 local7 usermin: min: - max: - state: -running...screen is lockedscreen is unlockedstarted.stopped.usable~/blueproximity.logProject-Id-Version: blueproximity 1.0 Report-Msgid-Bugs-To: POT-Creation-Date: 2008-02-09 00:13+0300 PO-Revision-Date: 2008-02-09 01:33+0300 Last-Translator: avl Language-Team: Russian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ········BlueProximity·является свободным программным обеспечением;·вы можете распостранять и/или модифицировать его ········под условиями лицензии·GNU·General·Public·License·как она опубликована· ········Free·Software·Foundation;·или версии·2·данной лицензии,·или· ········(на ваш выбор)·любой более поздней версии. ········BlueProximity·распостраняется в надежде, что она будет полезна, но ········БЕЗО ВСЯКИХ ГАРАНТИЙ;· ········Подробности см.·GNU·General·Public·License. ········Вы должны получить копиюGNU·General·Public·License· ········вместе с программой;·если этого не произошло, напишите по адресу ········Free·Software·Foundation,·Inc.,· ········59·Temple·Place,·Suite·330,· ········Boston,·MA··02111-1307··USA ········ Текущее состояние: Тестовый режим (блокировка отключена) Статус: макс: состояние: ·sudo·apt-get·install·python-bluez·sudo·apt-get·install·python-configobj·sudo·apt-get·install·python-glade2·sudo·apt-get·install·python-gobject или yum install python-gobject·sudo·apt-get·install·python-gtk2' для записи.ДействияБлокировкаВести логТекущий, измеренныйРазблокированиеОбратите внимание, что устройство должно быть уже связано!Все обнаруженые в радиусе видимости Bluetooth устройства. Используйте кнопку "сканировать" для обновления списка.Все rfcomm каналы могут быть использованы. Используйте кнопку сканирования каналов для обновления списка. Щелчок по элементу этого списка выбирает данный канал.BlueProximity·настройкиBlueProximity запускается...КаналПауза между командами: (сек.)Невозможно открыть 'Расстояние:Продолжительность·(сек.):Определена дистанция: Расстояние:Продолжительность (сек.)Уровень доступаИмя файлаИнициализация...Команда закрытия:Ушел - компьютер заблокировался, вернулся - компьютер тоже разблокировался обратноМАКМАК адресИмяСоединение не обнаружено, попытка установить...Сканирую...Режим паузы - не подключенУбедитесь, что пакет ConfigObject для питона установлен.Убедитесь, что питон-привязка к GObject·установлена.Убедитесь, что питон привязка к GTK2 установлена.Убедитесь, что питон-привязка к Glade2 установлена.Убедитесь, что питон-привязка для bluetooth и сам bluez установленыКоманда:RFCOMM·каналСканировать каналы устройстваСканировать видимые Bluetooth устройства и отобразть их затем в списке.Сканировать доступные каналы на отмеченом устройстве (поле МАК адреса).Выбрать из обнаруженых устройств:СостояниеОстановить сканированиеМАК адрес·устройства bluetooth·(например, мобильного телефона или гарнитуры)·в·формате·XX:XX:XX:XX:XX:XXИмя файла для ведения лога. Убедитесь, что этот файл доступен на запись пользователю, от которого запускается BlueProximity.Программа не может загрузить·модуль·ConfigObj·или Валидатор.Программа не может загрузить·модуль·bluetooth.Программа не может загрузить модуль glade.Программа не может загрузить модуль gobject.Программа не может загрузить модуль·pygtk.Канал RFCOMM на вашем устройстве, к которому подсоединяется BlueProximity. Это должен быть открытый канал, если вы не уверены, используйте кнопку сканирования.В процессе сканирования, программа попытается соединиться с 30-ю возможными портами. Эта процедура потребует некоторого времени и вам стоит следить за своим bluetooth устройством на предмет возможных действий, которые оно потребует. Если это возможно, щелкайте на кнопку "приянть/cjtlbybnm". Если устройство запрашивает пин-код, устройство не было ранее связано, см руководство пользователя на предмет разрешения данной проблемы.Перенести МАК адрес отмеченого выше bluetooth устройства в поле адреса._Bluetooth·устройствоРасстояние:_ФайлБлокировкаНастройкиСбросить·мин/максСканировать устройстваСислогКоманда разблокировкиИспользовать отмеченое устройствоактивнозакрыт или запрещендля дистрибутивов Ubuntu или Fedora core·,·наберитеgnome-screensaver-command·-d xscreensaver-command·-dgnome-screensaver-command·-l xscreensaver-command·-lgnome-screensaver-command·-p xscreensaver-command·-pушелlocal0 local1 local2 local3 local4 local5 local6 local7 userмин: мин:·-·макс:·-·состояние:·-работает....экран заблокированэкран разблокированстартовал.Остановленоиспользуемо~/blueproximity.logblueproximity-1.2.5.orig/LANG/de/0000755000175000017500000000000010761555105016342 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/de/LC_MESSAGES/0000755000175000017500000000000010761555105020127 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/de/LC_MESSAGES/blueproximity.mo0000644000175000017500000003265510761555105023413 0ustar nitaglfnitaglfq, # #   " & #+ $O !t     K^]PH7e7( I#b  4" 4 >HW4i 4/)BD?<>RCMK6\bkgz)x .</+!-M+{7(]`,04 FQW`| 4:ot|     -'!" $""/"&R"#y"$"!","#(#7#M#e#=w#Z#$X$>$9%z%=&Y&r&x&(&&-&&'.' B'L'['n'4w''' '''<'7( ;(JH((4(((R(RO)O)Q)jD** ***i+l+ +,/,-"- +-k8-;--;.B.3//H/1x////0a2!283=K33 333333 44+4@4H4[4y44-44445 55)5 95 E5O5c5x5 5 5 5 5?.qnE6Ph<b^18o% >cZH! &X3k9e4*=i CAg[M m:#$5FVafUNLR\jD;(K'JO"Y_7G/Qd)p20 l-,]I+WT` SB@ BlueProximity 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. BlueProximity 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 BlueProximity; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Simulation Mode (locking disabled) max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2'%s' is not a valid config file.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!Renaming the configuration will change the name of the config file on the disk.The new configuration will be created as a copy of the current configuration. Please change the according values afterwards.A command for %s has been skipped because the former command did not finish yet.A configuration file with the name '%s' already exists.All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open logfile '%s' for writing.Create new configurationCreating new config directory '%s'.Creating new configuration.Current State: D_istance:D_uration (sec.):Detected Distance: Distance:Do you really want to delete the configuration '%s'.Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressMoved old configuration to the new config directory.NameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelRename configurationSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:Selected Confi_gurationSorry, the bluetooth device is busy connecting. Please enter a correct mac address or no address at all for the config that is not connecting and try again later.StateStatus: Stop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe configfile '%s' could not be deleted.The filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The last configuration file cannot be deleted.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below.Using config file '%s'.You must enter a name for the configuration.You must enter a name for the new configuration._Bluetooth Device_Distance:_File_Locking_Name of new configuration:_New name of configuration:_Proximity Details_Rename_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -p xscreensaver-command -pgonelockingmin: min: - max: - state: -no entriesproximityrunning...screen is lockedscreen is unlockedstandardstarted.stopped.unlockingusableProject-Id-Version: BlueProximity 1.2.5 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-31 20:48+0200 PO-Revision-Date: 2008-02-28 16:01+0100 Last-Translator: Lars Friedrichs Language-Team: Lars Friedrichs MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Poedit-Language: German X-Poedit-SourceCharset: utf-8 BlueProximity ist freie Software; Sie darf weitervertrieben und/oder modifiziert werden gemäß den Bestimmungen der GNU General Public License in der Fassung der Free Software Foundation; Entweder Version 2 der Lizenz, oder je nach Geschmack eine spätere Version. BlueProximity soll natürlich einen Nutzen bringen, allerdings WIRD JEDE GARANTIE AUSGESCHLOSSEN marktfähig zu sein oder für einen bestimmten Zweck tauglich. Lies die GNU General Public License für weitere Details. Eine Kopie der GNU General Public License sollte BlueProximity beiliegen, ansonsten kann diese erhalten werden über Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Simulationsmodus (Sperren deaktiviert) max: Zustand: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2'%s' ist keine gültige Konfigurationsdatei.AktionskommandsSperrenProtokollierenAktuell gemessenEntsperrenDas Gerät sollte bereits gepaart sein!Änderung des Namens ändert ebenso den Dateinamen der Konfigurationsdatei.Die neue Konfiguration wird als Kopie der aktiven Konfiguration erstellt. Bitte ändern Sie anschließend die gewünschten Werte.Ein Kommando für %s wurde nicht ausgeführt weil das vorhergehende nicht beendet wurde.Eine Konfigurationsdatei mit dem Namen '%s' existiert bereits.Alle erkannten und sichtbaren Bluetooth Geräte im Umkreis. Drücken Sie den Scan-Knopf um diese Liste zu füllen oder zu aktualisieren.Alle RFCOMM Kanäle die benutzbar sind. Benutzen Sie den Kanal-Scan-Knopf um diese Liste zu füllen oder zu aktualisieren.BlueProximity EinstellungenBlueProximity startet...KanalKommando _Intervall: (sec.)Konnte nicht in Logdatei '%s' schreiben.Erstelle neue KonfigurationErzeuge neues Konfigurationsverzeichnis '%s'.Erzeuge eine neue Konfigurationsdatei.Aktueller Zustand: D_istanz:Da_uer (sec.):Erkannte Distanz: Distanz:Wollen Sie wirklich die Konfiguration '%s' löschen?D_auer (sec.):N_achrichtenquelleDatei_nameInitialisiert...Sperrk_ommando:Bist Du weg, schläft er - kommst Du wieder, wacht er auf...MACMAC _AdresseAlte Konfiguration wurde in das neue Konfigurationsverzeichnis verschoben.NameKeine Verbindung, versuche gerade eine aufzubauen...Scanne gerade...Pause Modus - nicht verbundenBitte stellen Sie sicher, dass das ConfigObject Paket für Python installiert ist.Bitte stellen Sie sicher, dass die GObject Bindungen für Python installiert sind.Bitte stellen Sie sicher, dass die GTK2 Bindungen für Python installiert sind.Bitte stellen Sie sicher, dass die Glade2 Bindungen für Python installiert sind.Bitte stellen Sie sicher, dass die Bluetooth Bindungen für Python sowie das Paket BlueZ installiert sind.An_wesenheitskommando:RFC_OMM KanalBenenne Konfiguration umSuche na_ch KanälenScannt nach allen sichtbaren Bluetooth Geräten im Umkreis. Diese werden in der obigen Liste dargestellt.Scanne das derzeitig ausgewählte Gerät (welches die MAC Adresse hat die im MAC Adress-Feld steht) nach benutzbaren RFCOMM Kanälen.Aus_wahl aus erkannten Geräten:Ausgewählte Konfi_gurationEntschuldigung, das Bluetooth Gerät ist beschäftigt. Bitte ändern Sie die MAC Adresse in eine gültige oder löschen Sie die Adresse für die Konfiguration welche derzeit keine Verbindung erhält. Versuchen Sie es später nochmals.ZustandStatus: Beende Sca_nDie MAC Adresse Ihres Bluetooth Geräts (wie z.B. Ihr Telefon oder Ihr Headset) im Format XX:XX:XX:XX:XX:XXDie Konfigurationsdatei '%s' konnte nicht gelöscht werden.Der Dateiname des Logfiles welches BlueProximity nutzen soll. Achten Sie darauf, dass diese Datei durch den User mit dessen Rechten BlueProximity ausgeführt wird beschreibbar ist.Die letzte Konfigurationsdatei kann nicht gelöscht werden.Das Programm kann das Modul ConfigObj oder Validator nicht finden.Das Programm kann das Modul bluetooth nicht finden.Das Programm kann das Modul glade nicht finden.Das Programm kann das Modul gobject nicht finden.Das Programm kann das Modul pygtk nicht finden.Der RFCOMM Kanal den BlueProximity für die Verbindung zu Ihrem Bluetooth Gerät benutzt. Es muß sich um einen offenen, benutzbaren Kanal handeln. Sie können auch nach benutzbaren Kanälen mit dem Kanal-Scan-Knopf suchen.Der Scan-Prozess versucht sich zu jedem der 30 möglichen Ports zu verbinden. Dies dauert einige Zeit in der Sie ihr Bluetooth Gerät beobachten sollten ob weitere Schritte nötig sind. Falls Sie gefragt werden lassen Sie jeweils die Verbinungsanforderung zu. Sollten Sie dabei nach einer PIN gefragt werden wurde das Gerät vor diesem Schritt nicht oder nicht richtig gepaart. Bitte lesen Sie im Handbuch nach, wie Sie dies auf Ihrem Rechner bewerkstelligen können.Überträgt die MAC Adresse des gefundenen und ausgewählten Bluetooth Geräts in das Adressfeld.Benutze Konfigurationsdatei '%s'.Sie müssen einen Namen für die Konfiguration eingeben.Sie müssen einen Namen für die neue Konfiguration eingeben._Bluetooth Gerät_Distanz:_DateiS_perren_Name der neuen Konfiguration:_Neuer Name der Konfiguration:Anwesen_heitsdetailsUm_benennenMin/Max zu_rücksetzen_Suche nach Geräten_SyslogEntsperrk_ommando:Übernehme gewähltes _GerätAktivgeschlossen oder verweigertz.B. unter Ubuntu Linux tippen sie dazu bittegnome-screensaver-command -p xscreensaver-command -pWegSperrenmin: min: - max: - Zustand: -keine EinträgeAnwesenheitläuft...Bildschirm gesperrtBildschirm entsperrtStandardgestartet.angehalten.Entsperrenbenutzbarblueproximity-1.2.5.orig/LANG/fa/0000755000175000017500000000000010761555105016340 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/fa/LC_MESSAGES/0000755000175000017500000000000010761555105020125 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/fa/LC_MESSAGES/blueproximity.mo0000644000175000017500000002763410761555105023412 0ustar nitaglfnitaglf\ # ) 3 : "C &f # $ !    - < P Ka e       * >H Z dn}4 / B5?x<>R4MK^}gx<s/+- +:f7]} &4C4x4<$* AL]pyg F2 y  "&#$ !1S s.| / '. V !a     ! !(!G!Gd!!!!T!"%4"jZ"m"j3#l# $$$'$$pv%H% 0&;&xN&&X'I'F.(Hu(F())u+d, , ,,,),, -)!-5K-- -A-4-4".4W..<. .)./ /7/P/_/p//1;Q!8O-TS%X5[.+> (BG2W*U\,MN/JD"? @ L0F= VCAIHPR<&'4$Z6 )K#3:EY97 BlueProximity 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. BlueProximity 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 Envy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Current State: Simulation Mode (locking disabled) Status: max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' for writing.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open 'D_istance:D_uration (sec.):Detected Distance: Distance:Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressNameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:StateStop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below._Bluetooth Device_Distance:_File_Locking_Proximity Details_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pgonelocal0 local1 local2 local3 local4 local5 local6 local7 usermin: min: - max: - state: -running...screen is lockedscreen is unlockedstarted.stopped.usable~/blueproximity.logProject-Id-Version: BlueProximity 1.2 POT-Creation-Date: PO-Revision-Date: 2008-02-02 21:19+0330 Last-Translator: Ali Sattari Language-Team: Persian MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Persian X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF BlueProximity 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. BlueProximity 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 Envy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA حال فعلی: حالت شبیه‌سازی (قفل کردن غیر فعال است) وضعیت:حداکثر:حالت: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' برای نوشتن نیست.دستورات اعمالقفل شدنگزارش کردنفاصله اندازه گیری شدهآزاد کردنلطفا توجه داشته باشید که دستگاه‌ باید قبلا جفت شده باشد!تمام دستگاه‌های bluetooth قابل روئیتِ در دسترس. برای تازه کردن فهرست از دکمه پویش استفاده کنید.تمامی کانالهای rfcomm قابل استفاده. از دکمه پویش کانال برای تازه کردن فهرست استفاده کنید. برای انتخاب هر کانال روی آن کلیک کنید.ترجیحات BlueProximityBlueProximity در حال اجرست...کانالوقفه دستور: (ثانیه)امکان باز کردن 'ف_اصله:م_دت (ثانیه):فاصله کشف شده:فاصله:مدـت (ثانیه):وـسیلهنام ف_ایلارزش‌گذاری اولیه شد...د_ستور قفل کردن:ترکش کن - قفل شده، برگرد - اینهم برگشته...MAC_نشانی MACناماتصالی پیدا نشد، در تلاش برای برقرارى ارتباط...در حال پویش...حالت وقفه - متصل نیستلطفا اطمینان حاصل کنید که بسته ConfigObject برای python نصب شده است.لطفا اطمینان حاصل کنید که ملزومات GObject برای python نصب شده‌اند.لطفا اطمینان حاصل کنید که ملزومات GTK2 برای python نصب شده‌اند.لطفا اطمینان حاصل کنید که ملزومات Glade2 برای python نصب شده‌اند.لطفا اطمینان حاصل کنید که ملزومات bluetooth برای python به همراه bluez نصب شده‌اند.دستور فا_صله:ک_انال RFCOMM_پویش کانالهای دستگاهپویش برای دستگاه‌های bluetooth قابل روئیتِ در دسترس. در فهرست بالا نمایش داده میشود.پویش دستگاه انتخاب شده (کادر نشانی MAC) برای کانالهای موجود rfcomm.از بین دستگاه‌های پیدا شده انتخاب کنید:وضعیتتوقف پوی_شنشانی MAC دستگاه bluetooth شما (مثلا تلفن همراه یا headset) در قالب XX:XX:XX:XX:XX:XXنام فایل برای گزارشها. لطفا اطمینان حاصل کنید که این فایل توسط کاربری که BlueProximity را اجرا کرده قابل نوشتن است.برنامه قادر به واردکردن ماژول ConfigObj یا Validatorنیست.برنامه قادر به واردکردن ماژول bluetoothنیست.برنامه قادر به واردکردن ماژول glade نیست.برنامه قادر به واردکردن ماژول gobject نیست.برنامه قادر به واردکردن ماژول pygtk نیست.کانال rfcommی که BlueProximity به دستگاه شما متصل میشود. باید یک کانالِ باز باشد، اگر شک دارید از دکمه پویش استفاده کنید.پروسه‌ پویش تلاش میکند تا با 30 درگاه موجود ارتباط برقرار کند. این مقداری زمان میبرد و شما باید به دستگاه bluetooth خود توجه کنید تا در صورت لزوم اقدام لازم را انجام دهید. در صورت نیاز accept/connect را انتخاب کنید. اگر از شما برای pin سوال شد دستگاه شما قبلا به خوبی جفت نشده است، برای حل این موضوع راهنما را بخوانید.انتقال نشانی MAC دستگاه bluetooth انتخاب شده در بالا به کادر نشانی زیر._دستگاه بلوتوث_فاصله:_فایل_قفل کردن_جزئیات فاصله_بازنشانی حداقل/حداکثر_پویش برای دستگاه_گزارش سیستم_دستور زمان بازشدن قفل:_استفاده از دسنگاه انتخاب شدهفعالبسته شده یا رد شدهبرای نمونه، با امثال لینوکس اوبونتوgnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pرفتهlocal0 local1 local2 local3 local4 local5 local6 local7 userحداقل:حداقل: - حداکثر: - حالت: -در حال اجرا...صفحه قفل شدهصفحه آزاد شدهاجرا شد.متوقف شد.قابل استفاده~/blueproximity.logblueproximity-1.2.5.orig/LANG/sv/0000755000175000017500000000000010761555105016402 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/sv/LC_MESSAGES/0000755000175000017500000000000010761555105020167 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/sv/LC_MESSAGES/blueproximity.mo0000644000175000017500000002142510761555105023444 0ustar nitaglfnitaglf[# "&;#b$!  % K6 e {         / 9 C R 4d   /   B ?M < > R \ p  M K 3RXggx<H/+-+;7]R dou~44M4< !2ENW^9r( "&$#K$o!B)xl!  *4IQ ZgC 3 B4Cw@BR? NN!jg{ @0+.'+VL   !!.!D!L!h!|!!!4!4!4"S"<Y"""""""" "#0:P 7N,SR$W4Z-*= 'AF1V)T[+LM.IC!> ?K/E< UB@HGOQ;%&3#Y5 (J"29DX8 6 Current State: Simulation Mode (locking disabled) Status: max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2' for writing.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open 'D_istance:D_uration (sec.):Detected Distance: Distance:Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressNameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:StateStop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below._Bluetooth Device_Distance:_File_Locking_Proximity Details_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pgonelocal0 local1 local2 local3 local4 local5 local6 local7 usermin: min: - max: - state: -running...screen is lockedscreen is unlockedstarted.stopped.usable~/blueproximity.logProject-Id-Version: 1.2.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2008-01-31 11:29+0100 PO-Revision-Date: 2008-02-09 11:03+0100 Last-Translator: Jan Braunisch Language-Team: tp-sv MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Nuvarande läge: Simuleringsläge (låsning avaktiverat) Status: max: läge: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2" för skrivning.ÅtgärdskommandonLåsningLoggningMäts upp nuUpplåsningNotera att enheten redan bör vara anpassad!Alla detekterade synliga Bluetooth-enheter inom räckvidd. Använd avsök-knappen för att fylla eller uppdatera listan.Alla användbara rfcomm-kanaler. Använd Avsök kanal-knappen ovan för att fylla eller uppdatera denna lista. Klicka på en post för att välja den kanalen.Inställningar för BlueProximityBlueProximity startar...KanalKommando_intervall: (sek.)Kunde inte öppna "Avst_ånd:_Varaktighet (sek.):Detekterat avstånd: Avstånd:Vara_ktighet (sek.):_Resurs_FilnamnInitierad...Kommando för att _låsa:Låt bli - den är låst, kom tillbaka - den är också tillbaka...MACMAC-_adressNamnIngen anslutning hittad, försöker upprätta en...Avsöker...Pausläge - inte anslutenSäkerställ att paketet ConfigObject till python är installerat.Säkerställ att GObject-bindningarna till python är installerade.Säkerställ att GTK2-bindningarna för python är installerade.Säkerställ att Glade2-bindningarna för python är installerade.Säkerställ att bluetooth-bindningarna för python liksom bluez är installerade._Närhetskommando:RFCOMM-kanal_Avsök kanaler på enhetAvsök efter synliga Bluetooth-enheter inom räckvidd. Visa dem i listan ovan.Avsök den valda enheten (MAC-adressfält) efter tillgängliga rfcomm-kanaler.Välj bland _detekterade enheter:LägeStoppa _avsökningMAC-adressen för din bluetooth-enhet (t.ex. mobiltelefon eller headset) på formatet XX:XX:XX:XX:XX:XXFilnamnet för filen att logga till. Säkerställ att denna fil kan skrivas till av användaren som startade BlueProximity.Programmet kan inte importera modulen ConfigObj eller Validator.Programmet kan inte importera modulen bluetooth.Prgrammet kan inte importera modulen glade.Programmet kan inte importera modulen gobject.Prgrammet kan inte importera modulen pygtk.Rfcomm-kanalen där BlueProximity ansluter till din enhet. Måste vara en öppen kanal, avnänd avsök-knappen om du är osäker.Vid avsökning görs försök att ansluta till var och en av de 30 möjliga portarna. Detta kommer att ta lite tid och du bör övervaka din bluetooth-enhet för att se om några åtgärder behöver vidtas. Om möjligt, tryck på acceptera/anslut. Om du blir tillfrågad om en pinkod så har du inte ställt in enheten ordentligt innan, rådfråga manualen om hur du kan rätta till detta.Överför MAC-adressen för den valda enheten ovan till adressfältet nedan._Bluetooth-enhetA_vstånd:_Fil_LåsningDetaljer för _närhet_Återställ Min/Max_Avsök efter enheter_SyslogKommando för _upplåsning:Anv_änd vald enhetaktivstängd eller nekadt.ex. med Ubuntu-Linux, skrivgnome-screensaver-command -d xscreensaver-command -dgnome-screensaver-command -l xscreensaver-command -lgnome-screensaver-command -p xscreensaver-command -pbortalocal0 local1 local2 local3 local4 local5 local6 local7 usermin: min: - max: - läge: -kör...skärmen är låstskärmen är upplåststartad.stoppad.användbar~/blueproximity.logblueproximity-1.2.5.orig/LANG/en/0000755000175000017500000000000010761555105016354 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/en/LC_MESSAGES/0000755000175000017500000000000010761555105020141 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/LANG/en/LC_MESSAGES/blueproximity.mo0000644000175000017500000003103510761555105023414 0ustar nitaglfnitaglfq, # #   " & #+ $O !t     K^]PH7e7( I#b  4" 4 >HW4i 4/)BD?<>RCMK6\bkgz)x .</+!-M+{7(]`,04 FQW`| 4:ot|     ##!!!"!&"#?"$c"!" """"##K%#^q##P\$7$e$K%%%&&(4&]&#v&&& &&& &4'6' H' R'\'k'4}'' '4''/'-(=(BX(?(<(>)RW)))))M)KJ****p+v++g+)+x ,.,<,/-+5--a-+--7<.]t//,/00H0 Z0e0k0t0000000011 1114N11111 1 1 111112 22?.qnE6Ph<b^18o% >cZH! &X3k9e4*=i CAg[M m:#$5FVafUNLR\jD;(K'JO"Y_7G/Qd)p20 l-,]I+WT` SB@ BlueProximity 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. BlueProximity 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 BlueProximity; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Simulation Mode (locking disabled) max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2'%s' is not a valid config file.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!Renaming the configuration will change the name of the config file on the disk.The new configuration will be created as a copy of the current configuration. Please change the according values afterwards.A command for %s has been skipped because the former command did not finish yet.A configuration file with the name '%s' already exists.All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open logfile '%s' for writing.Create new configurationCreating new config directory '%s'.Creating new configuration.Current State: D_istance:D_uration (sec.):Detected Distance: Distance:Do you really want to delete the configuration '%s'.Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressMoved old configuration to the new config directory.NameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelRename configurationSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:Selected Confi_gurationSorry, the bluetooth device is busy connecting. Please enter a correct mac address or no address at all for the config that is not connecting and try again later.StateStatus: Stop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe configfile '%s' could not be deleted.The filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The last configuration file cannot be deleted.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below.Using config file '%s'.You must enter a name for the configuration.You must enter a name for the new configuration._Bluetooth Device_Distance:_File_Locking_Name of new configuration:_New name of configuration:_Proximity Details_Rename_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -p xscreensaver-command -pgonelockingmin: min: - max: - state: -no entriesproximityrunning...screen is lockedscreen is unlockedstandardstarted.stopped.unlockingusableProject-Id-Version: BlueProximity 1.2.5 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-31 20:48+0200 PO-Revision-Date: 2008-02-28 15:50+0100 Last-Translator: Lars Friedrichs Language-Team: Lars Friedrichs MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: English X-Poedit-SourceCharset: utf-8 BlueProximity 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. BlueProximity 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 BlueProximity; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Simulation Mode (locking disabled) max: state: sudo apt-get install python-bluez sudo apt-get install python-configobj sudo apt-get install python-glade2 sudo apt-get install python-gobject sudo apt-get install python-gtk2'%s' is not a valid config file.Action commandsLockingLoggingMeasured atmUnlockingPlease note that the device should already be paired!Renaming the configuration will change the name of the config file on the disk.The new configuration will be created as a copy of the current configuration. Please change the according values afterwards.A command for %s has been skipped because the former command did not finish yet.A configuration file with the name '%s' already exists.All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list.All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel.BlueProximity PreferencesBlueProximity starting...ChannelCommand _interval: (sec.)Could not open logfile '%s' for writing.Create new configurationCreating new config directory '%s'.Creating new configuration.Current State: D_istance:D_uration (sec.):Detected Distance: Distance:Do you really want to delete the configuration '%s'.Dur_ation (sec.):F_acilityFile_nameInitialized...L_ocking command:Leave it - it's locked, come back - it's back too...MACMAC _AddressMoved old configuration to the new config directory.NameNo connection found, trying to establish one...Now scanning...Pause Mode - not connectedPlease make sure the ConfigObject package for python is installed.Please make sure the GObject bindings for python are installed.Please make sure the GTK2 bindings for python are installed.Please make sure the Glade2 bindings for python are installed.Please make sure the bluetooth bindings for python as well as bluez are installed.Pro_ximity command:RFCOMM C_hannelRename configurationSca_n channels on deviceScan for visible Bluetooth devices within reach. Show them in the list above.Scan the selected device (MAC Address field) for available rfcomm channels.Select from _detected devices:Selected Confi_gurationSorry, the bluetooth device is busy connecting. Please enter a correct mac address or no address at all for the config that is not connecting and try again later.StateStatus: Stop sca_nningThe MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XXThe configfile '%s' could not be deleted.The filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity.The last configuration file cannot be deleted.The program cannot import the module ConfigObj or Validator.The program cannot import the module bluetooth.The program cannot import the module glade.The program cannot import the module gobject.The program cannot import the module pygtk.The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button.The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this.Transfer the MAC address of the selected bluetooth device above into the address field below.Using config file '%s'.You must enter a name for the configuration.You must enter a name for the new configuration._Bluetooth Device_Distance:_File_Locking_Name of new configuration:_New name of configuration:_Proximity Details_Rename_Reset Min/Max_Scan for devices_Syslog_Unlocking command:_Use selected deviceactiveclosed or deniede.g. with Ubuntu Linux, typegnome-screensaver-command -p xscreensaver-command -pgonelockingmin: min: - max: - state: -no entriesproximityrunning...screen is lockedscreen is unlockedstandardstarted.stopped.unlockingusableblueproximity-1.2.5.orig/COPYING0000644000175000017500000004310310761555105016265 0ustar nitaglfnitaglf GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. blueproximity-1.2.5.orig/doc/0000755000175000017500000000000010761555105015776 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/doc/manual_html_m4f150133.png0000644000175000017500000011301710761555105022233 0ustar nitaglfnitaglfPNG  IHDRQHbKGD pHYs  tIME ?wK- IDATxwxݽ@B 5HEA*UPQ" RlQD( DDi{GzIv].R¼ϳ|g3s{^Ӷ@ s%e=gfpzUe∾5@ 誝4+`VoI7^AH%5-͒ jO 9dA _;3WZ]FM&/;}tcO#hItK244Mő+DL |~ԕ:5*h`o[ٱ]?Y&զ`hѠkOaOÖ'*@ ?Uʑ|lc] U (vT7Fq5ѪtMMup◯q..2~w@ ]PvVKkruݯ6;fR]fHHi*vK %bqګL(4|!;sXyd̪ 5isu*4 }`6H]1 5hv+^Gܶ8Ux~8.~ɥNu%Q,lPRWsrr7xdV@4TWǟ+ͫޒw:kZyU!BRlZ&w-_L\Q`a}Ւ߈`^)kF0qZWM>E*ӦE=k^O.rC|]"% jߞa+AM V$,@mrs vv/.[t^OH d[2u{ʔ;}9>| c!dӃ+mGvT1_o57vv3WCϹ竅iy呥i8#Pj>"&~ʩso+Ͼg*$>Pg:)$ciš&BM~h)H:E=;=|E}%bƬbT˲UȄa1}1"@ꚏPc%X)RW3%!B >hiWI=+,fW1I:g 9FQB10BYv"%Fo!h أT}j})Q>)GܺenϜNo)k<s+ϻ_6z9i7lnΛ(,뽐bA~Z2`xKm??k[FT!'X]>EUEج~^Dz(P/m1IU@gq$_K`?{ qFU(7q aE|f/G(ݴ5a- ==jRY$!r@(&_$ͳ.OǪb5]|Z ҩ?IM-A(ʥ#G)U3~$-Y9k[Uvd&Vq qObQ(3}/ jOTB1 7H9YLXBXќ#JWhGXֱ$;ٴF1aEroK&fsomXz>m\-_޲>!!hl]8-:%U6/Ino>AOPh֓%W>Xꥭ|=>1BZSBgLf']`t[?׸pZgt4./;ΩE5CtUE @bJ*^z"g~zb s.Q4ᄏM4}H3*+aI̹T]kWLO&8] c(IDr`拄5[Sӷ~HՏ%條sG$aMJq z=A&JWì"kO<>Fم- qODφY;Wx6ut-]aF5H:\_\XO_0{bc|hcV\Hf?P,5Cjxn.Z?;d&7̞R2E%?qafT(M̮=D,ymU]˥=8cjFX'6$SX‹-ong?Ǩ (Sf1 I'X<y!pSĚ 2"FS,lO~yo p=`I8ǡ_Zܽ]/zds.dNזu!oO)v:)]1qwF9j9$dVoHN۳;/a>_;LM46xz"t~[Ofh([Ԓm*cPlk-$#Ӗo /JKcqY}tNbYvmXʚG)ng݌ߗM]yگ;F*At DPxB?ÈȒD"#0Hy .8O/Ud TZQK*QX}FFjFpvfz}y^B|ͨ8GX@f%N%ךUѮ}FeȊ% z v^Ys`?f|O٭rv8~9Ld M&PEǟvN#pwuyz6sn,GRIKھnbup-Z[Vw?znnN4-NV;[&!$$7Rpf /e )(αOǡװoö=G\$ FU0OJa hɳ}Ѧ*&Ha iv P]M͗y_|Dv/>H`4((@IТd5Mſ_y.1A>1Hԏ˓9}1$8s.ɡR5}gQJ6kӇ6H$R&&S\ K}eKp} qJ8MlHT(^Bspuu._FL =q[42tƙl F M&mc'ĉ%&E^1oL٦#f廼\ZW.ctv_++EH#mWλb!ȲJ(Kd%Yǿ;+(^ď!Q;U|v>c}>ك||TrȒoyxH٧hJ ł 2 Mqv=;+g"EUw,OAUIź|%hlu܂]Grzg?D\+*3ٽu;_Ο^Ηi<*IhEb\dJC^1$m %z33]Js<һ5;vyvΙ2N[u*ѮN<8OB$G+RR%+|:*:H@P*4X4iæCP5SNfk#fXy(YX.|T ]Ӳiv͛oATx/ZI=._kvD?M&i\pp⒍~e3 4XRd$)ek34lRF`O+6ebɃhY5u/CG%`dVjɳF2k{^Q=ʹʌ++qo%#H._Ҷ uQI ^PJ0~AG+ f`sTQD/zQzǮ4u?vFNXl ە A~q6~mIv!D{ PHJr+eLNnYv^jW.z]%>pηL.WBelVe*q8y6}%ET` D' C XDUus?45Ms3NA 3P`OW!\ ռq4kV (e\٩lBΓroLbEA7+ 1qFoؗ$ Y0HX:q)YŢ(Le\<[Gn аDŪ(F#Ui/ߚk.9bdzaB݉W]7oPHR<9AgM%Ϊ`4R)DbG8w=1DI*WsVV7WWnE+|s]hddI_[5.vvӜK.;s+#KIy,oJB4Hzrs6?RKU:H&ʥe|d.]pz9x; k_)9Ǖ2v::->_dZ>vDٻmAaS,ekT#1IJUCI8:  ʃ)cvɲDpH2U+V\IREڛ\L(v%HD_ aq许`2 1 ɒn?=\TEM4ݙ"A 5MHIjjבdF>X$bUT8t΃5kHmtݹv#I1Z%UI,S3SUw͙R]o=yW ,#~>"n:՚,Z#iߟUe {߳uF- $ Xs7wLkiwzӝܮ{OW>s9rt? 罁n:ƞv,_voaWO.*b=w`_='dӖJN$#2@:&vǡ:SG}A.P -cnDiJAos ц-y?je/{u;'MusǻrO}zlXޝY&L2M}fTـG|D+~46?ӕW'iڼ myV $=iKIXoG=Qb z¼z{6"v#)9EuLC6-]-7z qUo{׈ڍZA'v 'PמIԨ݀mD {#_=Oc{w] <ѝ;Ҩc|!cp7C{v&*Z>˶Q5I+BhN~e+Tl*4|/}&#gXa8f~僌}SŶv'Nb>3(P2S߲jZ׽|a<-G@n[N9c]x+yO1Ř.W|w?>Lݽ֧%n%cCj]'$:MlMUfOl%FfYrfE0>gզ=ȓS_ bXu.3?gJL.;Gcsسs#\a(/_ˮC~?)i4d!|?+6Ջ^T$,gDws\ZUGS=pǫhʇ=`H^޿r ;vD5/b /`غCL>^˓}jj+o}]6׺yʠ绝3GfJ,P+ױﭬ|5dw0k<Ưއdgsi~W_O݁:x9$[ef.eJvS#sp*>-4f֋=iٯ퓫S{y&mG=#ù4{+R!3c%viI;-t"$cQZu᭜T5|z _f]JۛZȆ ]Ϗ-o:pfՋ4h@sqCU@/'Үbљd~X܍F [o^~,:Qrf=;J]q˦kBAh:ۑo15`a }rHCGԌEyE)OS2aqN}k׃G#FS%.Jjffd0( IDATƷ[I*}t3/$2KDUuX\vt <'h}*9-j@JtTA|hOX==`,3ofFˉhUW ̽Ε{b@yXFd=sa|Mc|9v1٠(sy277b}p}t}zVqHS;{-_y@~v!?n-)i9hcK=l h{m2 9Fi*vN|6a?qy\%]sfzon7mAzi6ǯZuo?`wεW79wzN<^6AEaWX143̀Y6kN竩1'}I_t UcԦK(gFًe`Tc:ğ?櫖HYIHO0ŊV4% e:g򯁮%s(Musê7"I:zf#b KyK^=dK#{ Dt\ 6^ r~o1VP?L5AR~_}l;S+x͋#u6^kWn2Pk{9a۟3ha k;{+_^i AS؝^w@xY:?9V[r_?4ɻr.@ۓ=T5JUkаu˜d\2ⴟ>UL.]]qG@א}jۘj5c1/مL~ "2. [qO*ZիKͺmYc?Cr4;sj1_0囵X&Gtr -yyxZ OiDZyIV.9uDYE [goh[)KsͮjXtS/?/T绩}=%~ +Χzړ1G痥3̜F#v^Ȗ~g}ʱ45>f?Y8s,}qSQ$|>35xf\N[$ ͒+Iݑ5 Ih|<7 sdMoh;:VfgJCs,@L-ӳ{ai{spCfGqOurQL0~/fXL_VoqT11}>>ʤ)a2@'X0d3=zJ_?"JCH/k)DuM 8~+ǶgsD/<79Jg1=;=@UGhRLh?H1`=~ONPsY^kX4]_x +^!ӑX߸y+c/t"3cةXRm _ϳ)ߠuDmH}kWw296cXZ?-Ka,_7s`f^k`@IQwyn,TWoО2m<KXliz 3[S7 vjWfvPқ JK~ٶۖJHG{k7tmFW Fn+Ƽ׳wM9~d{K>Ζ]ټj&_w]Tނ˻ Ym`oßZx٫Ŝʛ-k/ +ޝ ^2Ɲ+bj !HF }jao[h-7fR>*̸e{xkj>3^r!so-ƐTtvp|OMMYA1wһ$^OqwchZ1I]n1kV qlK ?G c g N_^U.b*[=na2Gwj/Y?neߞ}\J!հ;*O}ˑ_>.@ ^YH @'2IRxCчOrm.dC ^j~dC~vLu1{R<fđ Hl~-u?1Luy?nk]wz(otb#onFG:߮3*?MVނ˫ F QFM1a.97/[YUG})QG&6{!(rmo yڵcV~Hsx?|b SS9zOyx?HF}z {][ۼ,,: i[([KIj4hHtÂ%c)M 7EX^ Յt^e(2T}f8I'?#Z˹77[zFz ׀__ɐ)f=r=M'2c8FyKjQ@ IJJ _~2tϝ@u7зh~?_|(6@@P:vHT@p @ L !d@ !2@  @ L ykq\n|W"*UVL||]XRINNYno݈*Yy-TADlq}ٝ*<4ՁiܰU"w{6qƤ 8?<< _$99KَEnk!(ְ'|qnImZKhgb2lY澮#HёoYqn-ʼcD];HB"GO ,]Ȯ?R|P.닩"7YwRd0FDr51t/%ۜ-'痜1̞ch~bP=DGƳ^mR2DEФ]_~9‘h߼)բezjȴQaCbжp6O "!0(ōcVn0C2z)a1Q$a?׬1F݁ &Йo5OzLz930oMϏy5j+ }|#cٻaʦyqEw{te(7Zk:?OFnnOM9x M+:.XLJc>#l mXחc8~5F{|XRxthAc˚x}*v#O{5ϓB5U!o44ש`#ΧX#I /vx# чB{y}蚆zMr:ݷFy _Ik拺M4>$Uw>N0}f;5ivbz!L3FG3%i`9׏@4)@ H f L|6JԱC,X=۵kG%IgeZ}Y6؟|2 繰yqhvbaGcᢸ :[k4x(DW/+x-1mA)',8ٱn&@r/P1ð 2on9mk,U`tqI6BJI &;sP#>S?=LtTA:V: FZfk=5%΢Ft&|tâ!!ds6zp-+: O.ē9j+C2 ~P{K8繇L!e8iNkaqc33WL %A B&۞c蠣뀮;ݛ@ B&ۀ +*:T-*w?ͳث';#SUUUEKh#BV@l6g ?Ԉ$yQݡBfcQ*dv @p _V+d  X' u̺[֟$I^!d+VoUKv#!9M"蚎$I0,!Kr& +IB;g!dt竖w4]CӜ1xjk'2)pD#g== YeAAQdYN9t<5ӛ(DP ~!YE)`KӜTcd@rӅNwa]F,g!NM.`20͘&[<w:,e4E@^@ (dB&sV]^Kjnw5US MwѴ $ ~J_q>4tKtdIl2b4 gztlÛgP &BFz/9_׳b (Inx6h-[G8/N*\>¤!#L [1:7V^V|Ⱦ@|u8YҸt )vɮW4KUՐP5 Kv;v [@&`pzq]⍑3(IN$4HP{4{͆$ȒYRр _$ Ah0]O 4_YLc BٸPgBbJt5M`y=vbm12|PgJ£@?ൾ"bxeL-/AןȖGGed/"󅷨Wkrve)_*U-H%UHJ"%% 0 (Iա;PZs hrkmJ+Z^zDן_xA:$4t]vO)H haиBMӑenc0v,6'=>y1+䟸$tC [?QRyպ'kQn<3|+)'MJtI ?L1 ^"ԇ0[_=p[LgfEg *.kzzyXz-C}{ߜBơՆF YSm̜\:"{˼+LQɹ6#+F|L{=4s7/F,Qz.]Lhd*i!ddBf@ qA&%:aOigRspɻf,{zzt >8fݜz}hr5d&1j:{^$٧OdXhi6d 9RpIo"p IDATK:8zs?Flb˻eɄAQ{St.ޯU}!wKTtT78-ncC d?QuW@!d0TkW!a<:#۵hOt >PsieY񼖃]* j*HHXp&שҿW<35i$8*_)Dg2b:,9M]Yvyq-8T.KWxU0@VO\2 L&$8FFFY,`_9v1٠ۯ_a~o lⷞÅ3xiפk | !d(djٸ/-sLs0B9,빉OnSÐۏ?/t\ٷ`1ߊt 1gyoNe Q±s7BuTUEl-kaw\_.szck8让;]rOes;(?;̩*q$C)ATDDłk\ݵaŊꮈem袲 Xaz$Gfі|?ϓ!79s{rC XYTxG<2-L#ev2Ȫ&b6P(yW յS\(=  Xeqۺ]<DǘӜz;Kn g6;A0(;o!! hry̗6_xDK9YtD ;xrnx-ߞ]X#0zCE|zf>,aU5^g gJ)3m ޏYݯdX\0%uzrFuHں{iA973l`&Jk]ʪfjyA:qlb`DgXږY' sj~}:`& Y@uX3$/Ou`N=I1#mjkLË" wנcLm\vܑ'L:G6xLz1/8<989jmCG๏cp?Oy={o>]i+C,ZA{0xmϪ%,*%=bRT\B<u J0L0&$m,H[ϭ^7yBW0L z1H\(&$Ͻ@ZZ 99٤ %ןYI ˜fXՓH Ij lSC')a"O2N`"Qw &#Hg,L0 011Mzbճ '#Vj&gԄWߚXښI050Z?R* ,jd$|CôoCI`.$%B2w5aZ͕6(_L:j& MӨqm:!fj" VvFƲmRSRH^OWj k`_;"QǓ_57Ss*`5?4ң{uC lCAi$@u-& '/'U=yjӫB750'qX >v׺."JHLXk5kdzя7Ed鍭eju)غW8Qȶdw[{ADd+mu["" Q(DDDA&"" Q(DDDA&"" Q(DDDA&"" QLDDDA&"" QLDDDA&"" QLDDDA&"" QLDDDA&"" LDDDA&"" LDDDA&"" LDDDA&"" LDDDA&"" 2LDDDA&"" 2LDDDA&"" 2 .$+ ~[F^N,^QH.=d""Ҳ :DD>eE@q |`jVLDDZ, -HEi4(""EDUТjZVMC""ҪihQDDZ5 -HEi4(""EDUТjZVMC""" 2(DDDd""" 2(DDDd""" 2Q(DDDd""" 2Q(DDDd""" 2Q(DDDd""" 2Q(DDDd"" Q(DDDd"" Q(DDDd"" Q(DDDd"" Q(DDDA&"" Q(DDDA&"" Q(DDDA&"" Q(DDDA&"" QLDDDA&"" QLDDDA&"" QLDDDA&"" QLDDDA&"" LDDDA&"" LDDDA&"" LDDDA&"" 2LDDDA&""+@DDj,? ! _w@$oPsSH л@߯*6'uت۬Eid"" QlMva oNyrNd""Yň}[u5(""LDDd""" 2""Rro߱#=^=2iٺIve22d""ҲA^ۓ@NnCw IPQQ 4MG~ AS^^ҲQIDDc6}ʊd ||?4}1)++G&""[]4hSQZD4S7bi%Ƈ}?`5s~ƈQlCL#"d綡WA6*g6fiMm G#"҂iב6:mТj 2iն9U拏HMM03f'"B-jc*Ʈ#F!dŅ̝ܟzP/}kozgV-"ۤһsʓeg(+*`ءVl_=h(YQIA }0w,JᶠGe2dA{&-Y̯)yy e@?Ţ d7p cZ |ͧpŒI ZЩ3CvFd cDRٟ -l^W2tV/m,9ƆeNy8NDLlh ~.6GaܒÃ*ܸE6Olzd{ w\c KEiQWo4#ӬEV6w-lN4ZQZDzVlS=_wڠk-6#`#"RÃ5Z7s Um_#7uK; ufvNo  A_#=7y{5J""mkLDDDA&"" LDDDA&"" V~pFڏwߍ'qrN|]SW޷Kuk~Fal?w>61u86tr\mvk~J!+6ϧv;OG\d-Bvh+y>ϫX6lou4l~F?u`3wlQ[u7f7N,/pھX:ovk~viGF{UANGlfXT>)J|tn˅eDJ{9W׷>dŠ"*WbId/ǕX/W'{~ċ^䓟7{pX ~"{\rΙ̝+5WYfku˛6vGJ?~l1v9?0p+ qHǿE\}ٛ?5=s6-M<%淗UBE߱x,]ߏ]Ce43n].6>its8$/Eo ʂ22N'l?a<Ɲpo|k#\2b9g4憉¤g`;h_w~y2}K!p)t&˫닩dܰ/#^^pՑy8Usɜqt;+zsLѡm:E{;dp#Of8ˮg7+ga59׾;{oGժ4 .mu=/,Lt۬~'|&^Q ;O8?{w/h>l $W}:׮E\P6h1S?+֏GDjF+ރż_`tn otg^NbLIp2TmꛏVRfn2jcg_}մ }]O#k+6^qS] ׍c:g0iEۧQ2w>ޜ;秏dU#孵 %P'="]/U1l1ӟfݍ/dZ#e ^/KHru(=bWG1l5-gc1۽ysp+_$wcX/n1]*X&?FQ׮fn[CmؾZ>Hc/zHcoIsou2i&_cejbы9nءz}D2wX)C,Vܼ}/evv\Kx}~^.6>fkɵ' d~)]odvKN^ ?0}q%+?#cXɭW}N$`Oũ(oN/YݏM5=ӧew6)'}O]ߺKA/{vuu4wSdPrݳyet9 [.kݺwu\[=r(K9m6nlVL8K(U=d6X}Ǻ-~nkDSە?䏬|OzK_čϕսہsx^q j˘1Ju!4uņGSciBzFZt=_:G]@sr>&2se8s $T|aXUHzjnOdyu-ym.]~I7h]ٌ/R zŃCQY9{Q6y[yzz˗>·'7-Wܨu4:s{?q:xz3c ]٬2rɲU/?5zksrTW/d}_%+&cy᳚m ů6۷9}.ErᛴM[F꤮c6G]7hj٣HUOPBK/g)dz2%}ye)v\:~]G#羼Dnؐh5՜y| !7sϿ`F{oʱVFEdsb|p[lEOυ˖SYYɓsɘ6KrŗG&"-[}<>aľ[t]WxI/Ҳ)DE [o?Y?~ o4CDDd""" 2(DDDd""" 2&>CV\bYE>7@_Ah{-:xzlw\K/II[jl<zXZ'R^}NCeeڿ^{d+/knjtڍ˗PQQAzzڿs=LFFmoy-=m&ȒtڿH-5ɧ駟5]{ZlS_DA |"Ow>fΜ9q^{u?PQL1[qn@UUu]U(`l} [v[t6o-׹ˤoou\3ZNfPmԔ~A`Ty>+Wѯo?:0^{ ;}đVr]<u,[Ȋ,XlڶmeYqK:u*?#2y 裈D"j!ۿԷQ>:+>on]Sr=ߧ]q 8ێ Xp!U*4<| PKVdw(ϘN0]tڟ+nWI"Α^M,7g̠SN~N撗Cr '0d[UVA)_1:hGמ}aؾx[u5v|YGvfQWmtޮߖ'6Kyw߁YUlY mwF>C:Gy<6]y QSWqrߜmNcK>zO* A))̝7Я_?/]v;p/_In]s;ws%#3܏s=j^o]rC,g}q&{c4*/ 26\s}u]~;3١4 o] IDATd~\ߏޣxN*<um}yӘ]IJ6бmȶ<סիVpBRRR߿?SrbON~`frcA G#?'ZcrɌʎ}ǥD;0tۋwn|]}6vڑ>3KpiXi/tz[q{əͪ?|vJA;2p{ɔmrҢ<3N]Fe~x&=l,۪55:SMuoZVsbcmӏق*9#dw7|,I-e[=";'RztN,ZݻMbEBN~{ Ӯ][,Yy#Sw~o$s1²><7Gg HݕN~Y'!N-7=o.ݾ *1_o[:߉Ǘ³NCk?ޟ6_|qߴ:f %{f}=Lft> ExzC:]@^imY^gMschr7u7ԶF>*2jFyMXjMckzjj/_FNԴ4Jc.EQyaI?`~~Ю}G }aEb3e}ތ?@M /w~ 93m~H8oYk;\s9RG2yÄ2ya9ƟIۈ{l\}܀˯wf2,d'm:sń3jNj5v^ǫWURQpn|]ٙy>qGF8>- ܐ. l? Hз.*@4gF@ ʘS Ewettڙsǯ\oXnu 7\MxuοnbYuNS6~<hkoHFrZ~RmY< W0 3wCvBYY%ӗJN.iF,+a}E .n(=#CV04#c9꪿q3汝{`K{߸ᴁ?920ͮ^$f/iJv_,O <֛t [%z[frS g4\gY׀CEWۏpU'~_?u7wu4}<?Ύ݇ 2 ev`=N}qrT+)ϧs(FI^m'6(-ī_cXKet&g3QsنT7ܶMS ?6Z4Nal^WIN^.ڷg=DK oЮ}; Ӫwnb*M[jQ]L$@˥WLd~q s0^);exj&uR_4Vgƚ).:>Sc!tye1OO?}^703z̫. qI= qg+9a ꬩu%J?ohߡ]uƖkg>#g foq##C̾9 fuB,zM^ Fse#XLz. ˙|DžWFܬPem;M<0e.c5K -V[#+/+#ԩW_۰0ׅ,ѯ{gv6zw=GUAbfi˟a޲B\Bt֗ӯ_vN~ 'i7.dicD}ya spCsz`.u7]};! ?g_uYz \[V:y!n{}ޘ';9QR۰.G֖+(}9Kz%<{_vJ| MO.Z۲a8sу"J qJױD5knVOF#cb]KJ Vlt!&{h?w܍pȋk}\().^31g-Zỳ]. Og̙z}C!DusEѾ}-]ץ9s(1m3 ,2c1'!&j<9q}f͚ŀٳ'0fΜ%CS4ia2 ֮}6 g.m0z Jz|DFm%'9{3:ڞNl=]KK2>mqV =# 33N]:hBy**̤G2rL4s={ lMl_ԊP6mc=?4 n@ʼQkBLYd-#vg]wֻ=Dqx^{b(ya=ؚ0c0M^^}zJ(Crb" M@ezd{܃=G H~}oixOQQ!c.Zav c VmP6m00pe ;M!& r [[`ZA~۶ɕc. MIlmm06-a4i_zٴQ4Zf(D0L/Ҿ}{RR[6K볩m) ӶM>9&*DAU>+aIMM%ޢYZ[lے %, :enmdgg݊YZ%Vdm9C\˶Ed:vaɒEl׭Z:K,CDj{nL9(u"]O^a&=-M_A֭{8P>ﻬ\Jųlv:0bQtԅTQ@~ܵj!ҊfԔ,VQ}@zzzELDDDA&"" 2LDDIR8 &BHA; Xӗ|')^<O&"Mlܮ}3:d/dZ1kBz>i`&$$\q;.Uq?0ŪHIJ xR*cڷȶknϪT>D$ukOP;z$Ha&P3EXvI`!xӲHdfbZa|7A,91\uxaxD\RLAcuC4]vIUU45QmgߍwxjO~] ̙sQ˓t]Ÿeߟi3),ծ+}^y> nKS%kh^C3BEc<4|MVGm: '0,7Ҽ\{L#+Nw>ǹK:ǡ[V;'p(1d}88adf Vu}zRO8$||<#>RTXDaa!x`??0 ΜmxO(d eضaB6$A>iJ-G 3S"iXo|a=9YiVо].(]CS0M͈&k;lSo^{IAue7z܅?ܼ҂oab ϛF׶,˻~+}:6h[ HZȷU2 g΁]F쇛|]n\0bD|ǕG+>}?QŊExu=wO<z 0,^kqQ3L8¬O$(.*"aTUpp]H8D~Ne`$ ]K6FVri,D0 WP>&~70Mpgazqa'ᚄlp\٩8n@N%xCKZO(&-\ETU5&#Bqq mu PZq7UxGT$#-)A=d|V7߃z G 1N xc!v8xd nCBx:rw؅awmw^}4r|#\w# crcxu :͉Ԭe}Lj'2|Lp>N|f-_߸f#mwu}N{9tfӹ^p X|-¶milyʁ<|Q~E(/"OPQJc1}IMMmRR"dffFzz*)i)`lP8D8%B$5BZFigJZF:aRRSHK  Y#!m'Cβf:oڄ##i[X`x8~r&c p\Ӷq4* VaR,%]PdaX\yOXXsݑ+zeظjŋ]ʅp?t8/O7":i,OyͷEz g|5wETzw8m{0m*>{kOڱ56lsp?1+f=\m 掇;Ğq #__Ot7p@|g2+>ʟkuwc2Ͼ._2haaU|wq H 5lD ey\~LF2 *eZÄ9i]޼s"=sқl$M2W- YK$<70] &Ӳ1&:y Tp4 ?M #p!?e[aC6i9R#81Æq"'cPYô2rڐq)ֻ҃G9et>sf[V4^(xk/TK+&\IJq_b2\ߡ`,&m,||Mis8Gu sٓ ՖuEAYqc+%W(syJmkwVc6_3]x_/w y䢓uwLo&gXXPm,F, ^9L:jרw.NųcS}O+M0 yo0oi::CP=>yxA8:c1bJbU1*cqCyPXXHai)˖.e^KSTTLንjjJ Y PYgiAQgYIp( *>Ua *KcXn8SIaa[UEDc8OVfm;tkoGyy阗i髤c_'us'rYy/9;O^9>7;^ȟ&{3ܰCQU?hbLBڸ8Rm#&u/W[ooϟO_jXe6]oOA(Y Xf/ONH[O;~zG]<559yi)E|8{ڝy[gFzL;B]i><\NޫۚF;"+L׏χp 'Q+ *u]Av Xv M HXI$-BYa 02 JE4Xa¶I8=pŋK,lIDATz$\ K!!HV8RPe;ĩL1=xe,0e*ԍs2Yx.;Sٔm'IIM\9b h+qy._hIm`s~`+8O{GUU`T_,2LpeX!"!''BT:Rɳ)dQ;A$l!RB"-lC8TۂPh8p8#LP'(4IHDh뛤g&pL3x+4rpS_oS+++yrx.sF~咅{KT}4=FsI'0`QV8pJ ia'v۳tJB{wE}>p3 \$;(E֫X*(Zz*^VQiE-( XDD*@=gc64 `w^J|gyw{:P(40  b{׋hϣ:=߫c+CMQh軮k18D"0V2@u:%?dLJo0{lO.ILHnC %YSpT.XCG/p4;%`mƈE]qc~?A931  x?@!{+T7n(_H"⛔̼^/ip&{ 8ʭ~帗[:x۲s^^/00S!ҡFBH"G<4Aiy;躆ilvf;i; 8 7L$o1M 6K ZZY:M5E:؎~E8{ `G.ISSX9TI`W7IJ5 .;vc$2qhN.r97z]|CN9he,CͬJKuヒġեPNj*_3o-Ķ$ !Zf& rUSo$2qw>'IΔB|eV"8cvJ"Bq0䄈BIdB!$2!BBIdB!$2!BB_iYHNZT!đȞ]ҚB!Dv0B!#B!L!D&BH"B!L!D&BH"B!$ !D&BH"B!Z΅l--Z@YY)eKiйsWS4֏iKd7}ɼor>){0`[_~WgPԣ4ŶiZ\.d" $Ĥw\xD=:ՍŶik%RPXXĎjkk B B&-ٖnj5M9o(D;#qmak]\B!qm5I,m}8z϶eh\ n_y.TdJ)*k"|36AB〉"]9"2h&!7"Ff=F@h^0P((-mۼ23Z`!B!-Cܶ'lY7rI=HCcҡl%N`z@7AA͝q@'N&5+ve?kT J"Kj9Eq=6EG墔²];j=ʏRvk;m:f/Xl.N7c)*X(BTsr;v)lA3evz>*x 'X|<_a0bɌ9IcBCUa jqMC[>ס3܊~]Щ]ڷP9u9GvS<Ӌ% [t oO9*!1Ç2!7rsVl;՜xOfp֧"KQ?Fa*k([nUfY[o;k(Y֝l)fjJv Sk/fw4[zg%Mjٕ?{M{5k>[Fr ,rc¥,0Nv囜B.:ƵpX),&8q+E,xm- !Z[rTZԦ`gw^Mwj׸`=ݳy*7K~m߸Txq0{6Wn.|p! 0c1p9>]mgXL:suӪo,q܊˶5~,Ml,dW *TVG GTt=5݌sH/my>4a r-B|/l$g`r4m_?ˣfBS t-p~,]z gp5#x5U1t_@b|ǧ_OQG/h>\(}+yuc/6RWL`X(5Q" JL uH] Hf=shԑ5d t?O4 : 6zw1Ԟ@-N,w45V̐q;&qw +qh$LL38pvBOA,;TO˟'9{+3@i&bHu9q=c}}R81w=w =I? }fpS-?jRQE,Fhj*e9 vWEl4O)JRea'<kŊ ixlϊ=0,1:7XΧa,UŠD?8Ư[FBhǺT,|܍cnNhǢ:5w]/{,p?wI܁WyK\)-Wh0h/ܛ)HLZԴ&a6[˪ٰee{H Cu+L0cyl|6"Li!ˬ.\=N‚?vbdٹ4ݑArY6s~#)A5;X<^Qg^5>Ԝp^qo>.~z =CϘMOƝ5Xf x._cHγ8z+6u@3t]×3k;rbhV}jViMdZ/C߮vVa; k$}x<1wlrƄG0us ?sZD~D ;<ɘ>4t o8n9̋w'3aL ;Uik)dԸ{汔_IdǏ>)eLkfVjjdhZup- _ߚYL<{,ŃN˧dwW&KmrTV%?0Nq';f3 1濽ȅYk13t8#~gF״VfXQsy{fc;F %7Ze/-f0ԥxb߸eyg7zsαWƂ++h1.?: An2|@2,)hOKvMpyF@ >9Acc}y7-\zqПwϿr^2|]pw6մ>?E;:;[>~Ѻz+}*o(!!Ț{L d˨{Fا0ҵpY@YJ=4WdM7adgg3nx!v~'{Wm4>f&o>*++bdggcfum\V-B4i)S6h@GԾa\4[jA0:{gc7Qst{a`Pn)8NYݵOk2RbP샮=۵L1Uـ~}RxsY 7k[%K7Eq ٍۧ7!8 qmxK_ބ5VW6=(v.v{D7Dddfrܗ[Z6+*#:Qݒ~&++WYHaaٝ:ȽȄGX"K333 v=+uaՑ"233[ȾBG~nkԅ$=^/`N#;`0!8⤊ݻC<q؃|{/hraY $7/H$JJ`vcz|> ÐsbB#$K}\4 B>["S_aDc0.W!'Dfv"^/- ÔQ!mֺ]PRE=e+PR.]-D;"qma zw5eذ+aI)3k u2JB|3H\lxGOƎoQVVmٲ'01t=@ "D;!qmaZH"jkkenL~?!BIvGbô BBbѥ BH"B!$ !ȄBH"B!$ !ȄBIdB!$ !ȄBJdhXZB!đ/YM?`Fi !GeͷxRkJ$eBh `EEVVBqVbՕM?cEq}wߎՄB6~t`iQ#4B%K')vIENDB`blueproximity-1.2.5.orig/doc/manual_html_m4dd3226e.png0000644000175000017500000003124710761555105022406 0ustar nitaglfnitaglfPNG  IHDRh0 pHYs 7˭tIME .,>A IDATx]wX>3}U@ v+h4nbW,+*(n/1]"(DQm2S?1߼p;s̝u6?fl0fSڗ-Ѕ4 M܃A TU?7 r@t8EU?6=p\ 3`̀a3F63O 63`c3 |&//cv'y\ֈc3~iY/x&"XOoLVsvX7~։'Uw?VaNIʙ_kk:YGgb(]VӍg?TзYjn!]82jQeĦ}(%Z#cS>-%krsd0wsuW ? Z7qZ-IJ(#pFy;z{ؐ-J=Q;a },sMlL=|&[84!+87,9Dd]:cu ֘{yn&^eS`|c=QO˟,i}Wċ`Me}F*%{tqN]oO(qֶs6x^\d|lnezW<+#<@Ԅ'' 79;/qu? /tzk?,ZFT^KNܾ]E,oo5tCW]Ibe9ZO15{L2s[7AStqIڟ}.y(G}p`smt[!=_(QN^ySjOnG*Hϙ9.{|a3 Gks%&$=-dj$ @;ָO\Whf;{~d+5񲢘)Ϸ]ߞz0M\^1 xv?_ MM땍Bt - sm;qiA̙ Z,-: YJLD0>B^*PIe<3OVgc~i>?(YQW'&s@Լ/~yّCq[N#[mJb0bcU)Ds, < :o`5LI]w}Dt^_j[fgIH9՛:).JDtn*؜L)!PF{Att7Y`ůurw9ӖN_1ִ~ao<]fFiy9EV$0. \.{EtN5)b@<9mel~u![j.6mUZXR .ZS#+DDS^ .=jY -hC)Ff0pD4fع1i z갹vjD.0`k!g]1[~=M>1"[ql#,怪;iM7Ɗ|V9\81b+` ORYOߗ;u . <=XB" |6Pc<|u\A0aa*[ELxLAt;.rTP%Y`)Y˒ H*F4_FDQA*p<;){^E3eJIAFFZUa*|TB+*ulox )M%OuƬY P/Z,yY՝+G@W p\+ZD:lBߍERbsȭ+ ~t1󣤺A7Oz_[)TZF&s~c"sfiuWT`ᯔFFS_cVotߌq̮G2F 73`m1` 0lf |l.{|/Nm7:?=:}Oc}Qj f Zy9uJUd埯yZϋrf9?^!g$N.[A؏J=hfRn #65!>M)ƻxcrŎO{\7HrB3߇鉶3жfPd,@HE8 Yۯ;2%3|X7XpELnsQ'bL)66< ڭh19bi~{n7I3d*t4(_1UMM,m{!fۢ&n CEG >⛔<1KPM5aӴ m}.s@Fb)N;wشS? .  Pp~Β_v?M~=p`Ҷ?&m G,ɫ Y]&mkz})N;w|7S"y? ӐWJ.7Rm`JD2[ 6,xV 9SsM{4 aKh}Bi{9nz\]\ui'h.Ll9@sӝ8RӱeB;aEvAcGz9ty}/ Qf {Ngg,4黿{o5 ){5l[[i KBlJ1ịğtAw7"-<`B;Mi~n Aýj M:)} %= 4_tkF~Hx/D~RϲT |+5G(QeM,DXy銝saXoo KR eR[o|e WlY+(4݉GdmՕ%=}^D <AйWh΃*)(GӚW]N#QoEX11^D|('h\/q޿gy6i?+uV](Y Q=ՑxQsNR7jqEc[[[e4`߷u5#Je_k[5 nnXSm-(2Қy[UMފ,>,ltJ%A2h5 dq'<=+%( ө 3"J`כs^ީZAXazAo :OSLvbu.T,T;WSj)u_,yM= Q|93|*HJ5 c8E⥿,ݣa>@imߺÿڭt{r^] F| {G~k9\gJVo C 8&T7t2:E32l=oFMghmB uO&[yV f7R37 O@wvmy DvGY4H[Sg½@ $F.jקǕ3x9[wT 4rZ8vi'0QKV7_O^e@^a̲ڿ`ycC eB93& d< ` W0`̀f F6>,w+co{ /+ӏ8UfAawt}1d?1 3SYd94Vyd}߶mWdfn<9NMeytz˞޿A_|#O͵}wS̓dwWۄmf;gry0Zġ2ݩ}뫀A5t6rd͌eFCWVOaҚuufLO>i0uM 0lfoescjQ"g j̭τ;:}wMѷSꩫ;mBX~EkCS_ L"ih3ݏ+팉w3VA2 </kf̭/iLjecݺzIجTǛvN߽2Z<uV' zD\367souS~ytTu?uPZ߂c7QClhZ^?N<^~ݸ7ƆXzu}f:|MZ~M Uy-W6(կw67_{ە'':v./\3=|aeC_^IuReoti?ٶefiި*Nj>dk5mXвG馦z@$n> -msƆd@s .?]=$0aoJAțOWvkKkEa0=DF5Az9*#Yͮmk$ӟ~čp;L_M׏V-h,i9_`E=I^czFF"9wx<˒^(K ΐpb!lޚc_g۞94@,7iP_֎˿H_VUy v6mנ2nE]}C\5S B_/嶃%48g2#iP{!˴:,g&ͦmRU;yq5|x/~wէv҂g3\X[:v$ai7ﯫ5+磘AYV "@Yb k:\B^ݚ"br>@jo<,2K)K: vw~>[YN]2Q"!,|gI՜D6f+?_fgJH9 0l5 B,6WmZgˡƤ#(Jv-.@{#4ɻŤSe,d|m4N8Ȫ+5')sR$89j6gYyoѭ9XJXK<jK7cDD7}K#>߆V %(#op`)Ž}h*1ߝMc6/hdn8bdj(\+?D(sR@ޢr+ZK L)\9݊@TdvGFjvRZB̹.@}GfZGmxsV-)/;숆yqDzoJ3RTtrڕ ʗ07^55kJP}+8^aMVЂ_w{5t]8i̚u1P%YQAl7׮W!_XcLGm{j(}y⸪mT,jObYI_NO@`$ZOMzwL\8&YA;3aylM5KG [umV~̪Pfliu_\yrIg; #' 8Qϫq:yVo?SuP7?5a Xt۫r`9Ci4Ho'\m.ʁծw+w#Έ5KfvE!,8,s#@}|\OU|;z;L`jwrw/nqV>TZF&s~ro߬9pKй^= #DvG,_4}3zSM;?dGN\pHˁC]h$ġ//K*0P30ZAIjN"ts1#kܵrO؄4_LZ:IDATM[gdme]t9nkd5"::q]Sr~Vi% ^dt):qqz>7+3նs~7tn;\st㆖&?;|%ǝ,Q 5l_ot$;ongO>g_ Cl.)ČJ >ީr3[fҘQ`ͽ{0?ff"j}v9?a3 ;wׯ+**zYTTTzz:A4EP% `,6 oo(o~ժU={.A EyN:uTqqɨyC1n rrsܹxܚD"u M۟ _"`5KK 2?TTTqBe) &ܹdk]NM.2#ln.W.=@h0tv˄̷o  ??]{G{{AbobX\T*/,S] }"z{Z״x4ЕFef P(tn}n<ɕW>[iu ʴM4n 6kYwAF ,,QW3I{~,7?ihԵkrͶ((.vٵlee!6XOHTyL.ťi|/*(tؑD-I?c&р * 4ŮV6 ssӒs_*(pydv8j[w|ˤoСˤ}/ֆ(;"Hgjhj!s 954]Q %I2y6u{"4IEeE%EE%%EEE_.*WH+HTJ9 :ZlukДnrduTbX,K$bD,H VM`cz.9A?NHrickn" /HCr.em3_ӀWwh+ވ:yѤe%4UӒ^iP-T )'mROAQP t00[&B"6 f%erB!W]70 Hl%ᆽ:Y 0E8jTAյY9, 4հKa(ƖHRQȡ<βuJfnIBN$E/rf%~˧kkj+= (1>xo;5KW[c~'"B/ܮ$l.**4U(|6e₼Ĥ%l $gqڂשeee-һ4FA0@Pe#A9|a{/ѣGwc"77TDR'rfPWL?94rPHCh9#i٬Ԕܭ?9A̛Y GCBA@PQ )?vcrC/$UR,WV>%2iEHZQ(M!.\Ç2EzG#XMzj߿3b$ HDR$ڒ# =;^y! ( І (,;tu~CZrE(q(A}9ލ{O5-յN)p+iOfUTT( "i52]0y(X-1jDZ0bGz ^fmNm#J((AY_ A<3+qƿuIE9E3.@h* M{DE5 XPYf0}CU\U(f߁ƽR(dQ2Жƾ#'>,4qID2q=TqBu5kMxF O0Ρ6EIW>&|%7TjFT̛mߋ尷?C44EZ"Iʕ+i9I8<@0A[.K&mllrss _Qj© >nUVQk*ѵoSTˈ4`,e ڂ wN4MӭOm[PbZEQ%o6~.m}_6v%DzT;TSHIC" i?NS$.%y|sc@ 7w-+&d~@*d Y3o 4'eeK, Ei\*&00p7sH^N^ddVwlC%yRtرߠ)4]khP:4 Ԥx(&H]#蒔ccn\!eY9oԬ< Q %|<9fݾݞCEye^g%T<7X:2 .~ i-h6*texlD"VO h|.J`4XtsްK^`kjB.2iY^#VӝqC>H(qiEիWO6mذas9Ҁ-Eݻ׷o_9ΨQn߾ݜUEM(RMO RiJL]ItPwPJK1qTax~nn(z+kghk iRՄIqȃ.HYl6a{`\i⳼0H'DTQ&-NT(hBFeyV4M H6HW6\yd`4;Ľ{q@ړ'Hf&?2$ssZ"aN.*9Eio3.]rtt477 /_(jhh\z1#Yuǣ{I@ʪL6+ݔ VlD(J5C@&:|13Y,<.{՜|w׎3%|n>xӯ*+[#ئNb㣾bUg/Դh+JySC5UʫפH\TZ.-Oˠ%јJC_έ[H=Bl##h@MY |)Clsr3 Sӛ-aPUw٢QFX,6ݽ{wmm3g|:EQ)Wځ(WyUǟY4B#Pi@A1 fp`nj,ƆdcF4I^y@ ;)P޽{.],--bbb>}*~G{{{''W6f(b3 BQfqIqc(H IqZZFs}ߧX<A% (("RAD f-v]5,E( rj0&wN oIENDB`blueproximity-1.2.5.orig/doc/manual_html_42101a15.png0000644000175000017500000011137510761555105022053 0ustar nitaglfnitaglfPNG  IHDRQHsBIT|dtEXtCREATORgnome-panel-screenshot7w IDATxyMϹcm"K"?!JE} )%JEY#؇as~ܙ;Ѹ~.lg9Q B!Ӣ{L'=V_7>^(F:!" j'. ,}=X+޼H>獖p-F4X!HM1y<1z_wfgzoX^BM&9ܑr]]ŷp t mܫm∍ &`ը|EGjzla ަ`zA5=^s5O+B=MըRc?iCIPYp0k(W @TlQh t=)M*qKmΫ}$?:E>O:}|v[8~sy.7 ?8/pf&~>vLAkwf(NuѵTC~ԣ:*/RϘ%tz{W So"zځӏ+:V/ħogT+uZeث3 ٖr%fWs= "'v /V]V|} s<3` ypzkӠ ݹ R?I*i]6Ub`o%j=Ё}\AV-r[7tN톩H MEsMj4N@}+EC#:_tmX& IuyS_QTGRfm|C{j-v zvʞm B=M\Ds\g1Y= cL߾ͼ }G'{a=Y=Vg)* g?^ )6m64~۰ař,AnoOQуh֓[+vOJVAV1{Jy=&SRݻʬ3kLl涞G`Lך 6%߹q\aUEFx}|)Дy+6s=:0m29IW2/ f#i$FgT]ܡkWTODuP!ot{ B^ f&(ޞܒ^M|\T.ڳh( ֘8׼?BJc$ ]TJ(w毘W{<>~I OҶ%0hDk:ɏVZ G߱?Rfo)>Ҙucw:xMoƭ`Htw ߃3{J((~e(w VϠ~eÍ=<ػ~ 0 f*Z6CKsBJxfMN)I\[7U޳k0ݝ)MYbX5&>ՉSߌ`&:.]S3þ}l$ވ,@Ó]E2frtTuή@:<֠Te8ZeO)t +WUG<֠T9R25?k3'Y΂ /}_|W6ʼ8.׏s?b +4M_l C)`K3ϫTy2̴?MMH`q~誝ȳݾ~;J _pxxѠu+ۯ/Fá  ^ 1F4EяX{"j3\\wO_/G={*1&1zU*FA32[,T-eήA:S 583]%fq$dni[9(G)`Pu*j_Vz^4ޅ KQg$*R?, P>oLo_0jzINĎXbbIngup-֚XVu8zgfI_fyI_@-U SPx9s1it~v8Ts3*(dQHC s7}ql(`6Q֗>FN&2xG1'&-0%dN_#8NI:p84dH_51SLx$]wM %S)MSx Vea)Oj)ڕg6ܦPyp*"W#Ϛ-j˛ܓzjG!>3r "6MK{=;W[S#}\`!|'檞Bqx g/Šq:5bpp{7)3|E?*eWQ׵=zߘ.x^vl؛6 m9H^iN0]%څe fqt8]^SB= ǿ}*&4ABymO`k<2pJt]z"&c4[5-gǫ@B*6ؽ}uZk I?vI&i[-c~86EghOƊр$prV ԣQ01ٷ~&@5iл4^5CG,"dfن<߾:/{9S?Lso/Siɤ񸽼~C(\pGYPwO>g˵DjQTmDNǎG`&6oolLMMeFoE㦍o5^?D3!z9M ] jWNc`sOXEnͫL䦞f^rJtH X/Ԥs])MEI̿TyNm]f\nǦ'0&0;@V]7/{gZpюw]-%T) MԭbȔyۋDP뿰&MU`658SSvxkf<bTU >F,QzF;Od~ ~EQ0( =_a.ƪ$j:F xp}ǛmS%b0iXKkz3rf4;#Uf3 \e߆M]朶Egkxk59K6\D/_P mTwqhc ;UE Պ!z<}94c1&F\̈!aֶNJn2_0[|ŐSo3%#V]tB o|?|o'4}=GN_KWUlHҾx x d9s2(0}Y]^%յnJIW=Sz]‹W)铫z9r{dqӴr*4P{7?QvVIUQpg08ΠygBHYBױv |M(mF1#l՜_U*U tFʅ='=j{kuD,&EL(%mYt} Kӝm7R%FC-O:@`O A* *>m硚DR~vލG*qII1(ԩYKUp'}J{^7s!Vs=[#%UD7jQ&|1oLfe,mQF!_I4Y|^<!1TιiCz ]Iʪ9r_L6y]RYR#"ք+IC__s@>dxcN:9 .a"8ZaJT*bUtW̋!r#TM;Lerl:nQ*ЗZ_5~F !m 9¥i]NmY%&rrSOrfjgtO)KM*um/hGТj^;,8`q<A:rL `Άs|a)h ,尢wAQ8t5<s[Ci3 Z=Vro{^BoUsh11!nBqL_mۿ)BWL>o\mB!rRir?w'B dB!ܚ2!nMB&L![@&­I B$ !pkȄB5 dB!ܚ2!n͔ %b gP5-#`Hr~r0e4kD]:]sF:(2Uu( U|?gQ~]2 |\7%C96I ;_~ںd  Ƽ(V%TMBi6^HGQF+oiҢ@O[7`iJ&['{}+-vLي躼 ˨(S"b4u/ ij?į۷ťP}vtxz* rӤ ;=^{k/E U"Ym6fLMAowS ,^-7Ri|9oUM`0(Ntt/z/[zx|焮'wo {^wO-:&O'9vٛ osDXpk&8ggY,OOp4s-=~r< dNQ%zf E \]C|g?Qk ;dΧ-zu)S.2)\-彥gg=ϸWnۡBm܊bͮ7W-%6zgoz~oq-[2]2j@JU)W*+WzV;XJ3y=m9i[y-Г]ɳ*urH-*VMXx~Л|i]sQ)jO1\\GKz{[IyZƙ}{9z~[eBv8zp7Luh<ق7םuҖ&K5GfpWc+sNΗ]2]M2t E?|cfX9IC&you~\YyYM;{Ϭ!g0vݙ]Y~%?_{f-Ҷt]}7>OxXBÚu;nyVe:Xo`DǨ^6-_m 7%+֠,U#\Y!iʵJZlJDu6EDlijL9& Pnʧ's+:_7ˣOhU wxJly03l3f}g#m<-,>Xl(_{9a,/QX(< YWq%tad ҏc_9˗emh yp'y2MƷ,ҫc֍lZ1Mu0 hhwiO<坤:_y*:obڽ bFL__\lWH87Wbs\Rm-_u?|_)9Yqo?cq6XWv{dgά}[&m_~ȊIi5p[_ŀR>'} V]I n?˝^WgKOʛ\}rѼbaŃt!|<)z ΰFE9MDe61m)Oק?(-=&g!曼p*wL{ вtBl{~>6өqpnOfmNܜQ (z"u+VNG֫Ou঎ϱC稌-#vG'2wōzǴ'1 IDATQUsF'~ ?훷Y'd.zd:24Ԫ\k챁=uqiq^DUAխ:)WֲL,ݍf DWbs\Y$*F h'zB"}`xk뇩o1oʾv&=FW;g="71PSHp!x%r-SvtҏS9{dui:l`ڈe5]Ӷ0 QgAa_g ;/փA:RMUM)_1B1X0`cϲ^l׸vl2;%yIldV#*xBQ |-Hz=E' ,gl܁ѨY 6I5S mXƏ<5.?7 9Cl̿?#ck5¬ӡSm0u^Y÷J{P\>t@d$<|]u*tƷg@ (̶O&rHhjsJ?Q:?ɓsV43Oo9G 5U +Lj&~S)~DhjZuc-Mj?;+/f{?6Jͦڞ~y2ԛ2CΟCKѣEIn[k9o9i;Ū6o!9A_vfS3%Mz-:S&i)#U`/yKRɇvǰ9i^9cI 3<]߱L="Pܓf¼џ9:I`swy#s~B<.^ۏk-^֌L^1[M (PcO`4JRaDz?׬:>ޘ(y7^y//^/gxY1SQ[9CR9-ϬLoȸJ&m B@bTӀ Щ^J/ sa hI2~쐔6 _;ӳӃp@xOhR4mF" ř`~Wd5yo KVo&}^s9+ #~ޓfytikf~K&}Auz^)LEe8{#퐙TyRo'o|2kC&I=,҅嫺d٦sggfu vצ;r<;]L1:gܯӰs01g/1r6_t߫Lc&y2]MFϸ̘odAF/2?CI||1:r0ϊwu ϝE'TSw]{ퟴ?Sq}a}jaV, = oer&a3άmJ4f=27>5x~%w)FwG`0U_)O͟)t<_=w8KY yUIo`sK[3&&ܓ'glĘIyUI0+|wZ|\,L'eNBeq%goŽ1.@&­I B$ !pkȄB5 dB!ܚ2!nMB&L![@&­I B$ !pkȄB5 dB!ܚ2!nMB&L![@&­I B$ !pkȄB5 dB!ZMR~cutSu!wkaNT#D!Irb;ɤ7^eTV:MLp8ganބTל'e>~TӑuG8r/ω8g=ǿ\Ƌ]Q=ksp=՞j5jӰm7fTgҹ;EBvW2]K`H'6XBtg*˙< 3O0qFDyp'`Cδ̍k6<Øigۆc'UA_+;N$:8=:{N_UoPA!D6qg8EaڅoTk4ktf /Y't o.e}5k҇vçt NX%6wG=βЇ|}5֏%Y'*ЃsB!rtWbN`.}ΠQ5FD= ʻ9,X[\120J: ܿIm+D@g]>vՄB䑻:U*fmXU2T@E\\Jf͖ 05']#LJ%l2vn8;!we !3wSҹ묔_V~>%׳B<;V9u ejY?̌}嵇g[f35JSG̛O>X(R F9ʀG{ha-B[s쉧ػo3/g@N/}Q{Zw}kbGbR? _}כvbi=%c㌾X;9.sKUZ=va8.OO\=%B!O;~z[.dq3{s[d ?ti(ܻ0s>N!^qqq,5Ar"NwwТ;:4iDTM*b/ү([Ą?"6nc+U1Sl5 #?MB{6<1&!a!VH B$ !pkȄB5 dB!ܚ2!nMB&L![@&­I B$ !pkȄB5 dB!ܚ2!nMB&L![@&­_6js"ўa?@%Z$Y=m'x$ F${뽮N핏-B, dB$8JEn&H "ɢ?S63PB dBku)B$=vM MB$鑉{fkn!-El5c%iX4"#rgs}~BqܮGM#CRuh^š=킉

aϴ g]iZ yrU8gB21LX<}(U&=Ofq,{}6͙iYuWfMoH݆-xzJv zZM)>mZZ'[{)?ezp>OvC4|3tɵ\eiҠԣQ'dLҲ L՟6$Nyv8Ż^ٽ~y6B$2ֳ;a5j3m[8g{~Y<Eg7 %k9/<41nz_{a՜nSXq1%vpxn6/zf>z++|6=q3XtVBQ@f DGƅ_ Vζ?Fѵ8zK45_Ly/2% xvQu3f rOJWi'*OOBfP,s*!≠@H/8{mm!W#T̸Jzb&}67.O8fYsyoz9wوnKƫb Fհ`򣾯9C](N;ɹLBl@v`gХWC;eaZ7~ʓÞ6RˌMkCal-c"ɃLN=v3OP`1ʪ !H=uÁݖX:{n٢~`Ӯ#$:%_|MNZL䮈 (] F@]fƄCnGüX#grkd"ѿ?/ˉ8ؽmayC!r-{d'Wu'dLFF|t36(izMΒ&KhFJ ռ^d.u[Qv~7O^z:T:fZ 3sWZͷyܰC| d~]zkD/ j7h? $?k/?u^u"/_BUդ:d-)F#AŊӠI3*VzZq)k7G^9ufLLj1Hæ qkΝ-ЦcTR C9Dpgԉ#T n#l^ mHx-(X8k"2.EݫGR=WN;s"Q`ԅUj:::V?LhJIwHf UdI|||: !VLԽnp.PB0+hjR9>zz '!.su<]47_|W"#1d2a6g|:?oG~7@fmZfgO T5UGL!<,T^>uCug:c44e fYs(:&H ndh"J gI-ӜA*7 l1Q$W%,SqC#H[_9!̚w\$ QdH/t=y ' <<׮p}te'vtWɄ.b^$L2@ӵDNt4MM.<<ܙ>i8B@O5׃#)Έf21$ $ ї[rNP' |pzcκVz1^r-;%գzb_yYz#"H w=BeG kP')E\FxxWΟūs^$<<<)%>MO(3橪hbQ(Q"Ywpm dw'K%8.eʦ·=R0t4UMz}*$#K/h8VA!2Q4߭[E;QL٤w96t9lxc gB3' Cz^U8֍Ҥy+|eXQ"L8˖Vmٱ}KZ;F"E>/WuAqI RU)^ wnh2)?M%D>@& , 2BB5 dB!ܚ2!nMB&L![@&­I B$ !pkȄB5 dB!ܚ2!nMf =u~TϘ@!4_jk4nB8I ]nsxBH RvQ/c[c[%gH+Xv%?n"3ȄȆ# /gMMo[Nc˄$ z fc,.KL2!a(efeWQh" dBdB]3]sͳ`3&oI Bcٰ5{ =i^z-^G_gW-$JL) D~K4zt:{p_3u-0}\a}F~5W2q+p.eA1>?k&6NpHuBjԡAGxa8x؇7Ezo:u֑e[0l]7!]n*>š=킉

aϴ goDU18mO3ՐWQ-͙`={vYckޕK`Y!g DXZzxn}M61;,zL^Cxls<Eg72)Qgnl杻8s xNØKYn=ߎԁjz}u(kfM»˷p`.7Jѳ]Yq%[vphFqﱗKUMz+.dEPߜ6zsY~ku,X)[W!&p:ё<5BexZI|JbZZ%%^] 0b}+JWr>gS'ّn2Q|t nq ŏZ +`/d=bÌqX615fL"F ,ש9 Gv/6B;<gWɿZ/]?s1khz\g?Omh bPoѤU۵\1jyjǫTJzBX=?>ȌWO\_UBQ p2fO;i{1u,=O1=N/, Wv~I f6-vMc첵̯'NS1F IDAT`񮉮.`I n7HkyC_t-?aO@?S,;*XʲF9>cO\3z -]! 98.<ҩt{o5zrLJ`IٗiŽ`TefL8&Iy3E:е/GNMEE+YmB5a[luDUG1xQDQ#= M^1IC(vo[MC#a^39y?¯δVf?2-{!2n#;;!`X56åyA)WNbs14o7 Oue|҃ l׉A0`Y2t0K}ߍJW۫kжtlaz:sY=|@Sɼ~Q'C&~E5/gk~]zk;>uđ(*" .s#gܖpeRZ~\ʯ6,w枠( <{hu7usCLڡF֬F?mo 3€y iƥ-X| m8O+S{Tscdw^'WTpΞ>_&[7V!_kZzڨ)U<`BR5~BݵwsⰙ?e)I yXPm) mH|C=wߩd;@,*ɥ lam:vj@.:~Ǝ3sgNXĹ'غ;>Jy|B,?庍+<|sȲtN{H<8Ȅ:}Z_C=/"t|Ӈ];tOT6(bZ3rC]T ΅mS !EE2Ȝ)r§{|t7dW,_!lb*r52JPU#|Uֶ͚NI79v4F)rR#TUfO*||+s52kh469s7-O(D<@)[C @׳|pjV3ZCqlذY:b =VƐ^ű1PUTަ h:l6+˿#r(FZ8-A&Fs}7';Gf[1ю`VJHUUQmM:;tīcYlú  2Y^ޡFgT 5m67+ͦdhSUl6֭Ȅx$Dӻ0twLjhC*iAt[,u]HxT Fk h4]Z SgZju 7r^貘MX̦.CL~yR\9._b kT>#}`ZӖO%= y)2X̩r! 2HhҼ6}OOSbwg:>lyqӎx&maHfsLZ-\gǏiԬVa J4oՖ=n^yGRLYBBSƻy~!ĝ$#JW$!!:nnrk*!" 2H1 2B1r#8!NML!S B$ȄB85 2!NML!S B$ȄB85 2!NML!S B$ȄB85 2!NML!S B$ȄB85 2!NML!S+ {I=}:)? }ץNmj՘6B!+ڵЧXjT!ݏ[3䙎עv|ݩcN<ˌ7dTMFyerg-},n`5OsD@.l:yp!$Zr\krnFD`4hۗ/tDg\JxЧK! Ndzs:uѳyE⯝cg9bc?Ֆ̨Nl\s~=U7HU܋~bzg$>1?R!|e5U5W`@Y;qP;Bh)Vf5;֩8n;c]2Ϝ@/Cq}5i<͓qJ1]cؽjMt!*e?cBN WVhU=ʱ=΃tJڂr <`3_x؟IM;E<+`5Em; 7z {gȯe{mգbn\~YB! |h/i&{hԶu*_0t`mÅdh[~3#e [U؎ ԑW+yu:U ֡;??ݔMm3W8maӇϣ(˘1W|,J}bSOחڴ=*6 ж~ ژ3l*Һ+1tݓ5yтRr43CXC\4h5׎oÚ|O~YY+6?x_em_F?,Ws|svW.\!!JON\tT 9Sf$S):g9;GQ8DA_ !DILLd7-m\8c ~hQv~LMhXl {KBL!rH۞GJC!xdB!B&A&©I !pjdB!B&A&©I !pjdB!B&A&©I !pjdB!B&A&©I !pjddczeTRA#x@ds۱qB 2HI'p~ڻKB]A cU !D^ 3FsTE.GG$#!<|Y]"IGBǐݹ;c!WHGc5>b/VS$M[cТ T+B<( 2Hи\V2xPUB A&IZ;uBٲ6 ?um/Ʀ}Q";.xPL~+"9]T龄Sǎptoj:-}l[!ܱOQX2G>ȩ*W!D>r CѢpq3PjMAX>q&d4vΙqCv~&m=Amc6hAk3'D'վ4}5mzاgt ڴ N5`/iQMld 0w_:wD=cάCiZ:hضƧmdΤ4nЀ:<^Jߵ}h|{(q BK/`N>wlK+sފ޿7Ƴuhp-z'v|7Rt#G்aʱx6mf;=eRmѧ/YecR}R'a`Vlу{xW #j?6M|lK=WBQ zp>rFEMȡ#D0qVjl/n/|-^\sgڧ#uϗ)h攳i&5v NXHvO M0Do =(.4i6E%?`%'-zC!Ef֢5$MY7}(3L'3K!%ܼo8z-:6Lx8}Vht/vԄ(;d^wRR!,➊Lz z|=`T[2~GﱽiojQe\?DjmΥX6'1f.:`ٶmTvRBdCłٔL٣,=adqE؝l{qǻ\ } zf93ZjVD XMW hs-Ձ!5J1|gnDcZ8/_,ɱyc2LBs_{\(U56e[Z!m8~4g`*2j a/PLW6χcxǧV/g9qš觾MMaU0o!b ǀMIQq7xQ;swnMp1}z=}~M+Xִ*lj*MhTvh!DP5~Bݵw⢣.fNc$%aiBdR6Qz zWN?_UNicι3' llmO%< !=,?庍+<|sȲ܊ڳk'I5PfTTV="a@Sn{PޅA\yF:u S¢HWb6Xy52JPU#|U͚vNI79v4F)rR#TUfVUHEG8B%N^_7.A&^MfVo8zc6lج 1cPV+FcHZX|*joSPUZ6_U9B.P2@jSm*hߡ#^ۋlX]A A&Gw-бnSP8s!ȍ8s޾|3*o-_>##=nb!pY`Sm#}IlLFiÉM19Pm#DtdBdi|j+ktFPӆ /jj8zcёي1QbuJ6UŦi#aZyLBDLz: CWg}gLjhC*iAt[,u]HxT Fk h4]Z SgZju 7r5 ,fː ߽Yʔ+KTa'{OTlVkڲy9C𩤽G!#/EP9U>/D!"A&Zض{tx +}>a #/vD\3i;C6cjrD8;~\Of0xȰpj>|iު-{~~۽Vt6wݳ B!A&^jxHBB iu:TBBdH0 2BwdZ7E(w\F?sde -5M!@K8uG7϶sfUv9uӜi]QX2͞5~:$ϑ3$BAEfB՚ 7Ń|LR)XR${Mld<׽;:v`}:NmZ\'[0pܴ_ 7}/MlM9g:9c?Wuw7>=&62̆oԻ/;wAu宗{r[Mu;x6͞u赎mVS$s& q RR̚8FSm{1lKեߐI @j^E2wR'cPK/[ _/A^PLqM 2vo.~h^!?%OҺxD.$35̔pMnG|tju`T[2~Gﱽioꀲe۶QE{G[!,K؟`gv!xshQbX0<{e'}? +V$g~=mc1v`Etfנ'zѭtgX!djfY7v{#}2)v'[ Ūh.W!]КyqΤ eZc:nZT\Ku`HR g1 ~{n̜{_w2CQ8e/=ht.*]ut اӼl4f妡nW wmӥTk>֎ ,zZ!,=eʟ&֊/ޥm觘ب˿#׷E=)ҏf2lZWUFM_C5n<}nvh#6ф5O}p %0`B{qi*qC9>Ý=Oﻉz՚VTZބ6jJjXaP5~BݵwsⰙ?e)I yXPm) mH|C=wߩd;@,*KtF]\8u(~U;f;;Μ?&fsOuw} >|*,?庍+<|s=;u!UqcG>v-ϯ|ᡞio:>P];tOT6(bZ3rC|]T ΅mS ! KSPA>m!㿢e f3T쇪ᣨ Tlִ]( pi둔xc'NSh$91O/'%82OUUl6Ġ[Wɷ2W##Fo% t:z}߄[I<@)[C @׳|pSl5:=1Gŏ ՚#` 1jh IYUEUmVfx<*KGWt p2z/!u7p36l @4*M8Z}x~,_Igaw]p*-cyZpBFׯq}fUNZ~|GFzݚŨӡ+C'B NŦGUjS٬3ӆIb 5sG'퉦$Ȅ($ȄSQm6ԴaBKڰZ,@tdcbLT#baMUjb7oXV# NG$V 1D"% IDAT\h 勄G`4yhFcZХM0ߞyVVq(WNn%DV,fː ߭o2qR>+eتS= $$U՚f^|*ieKbN QI Ѥy+m6BJi6t}0)ȋuLNÐ~oZΎӨY+ 2(Da'A&O%_j˞_vżj)],!)]wwU=ל|SFвqC֦^μ:[mx ZhF`p-&.T[z;>J'L4mߝvlrcZr5.ujDMkS3跨՘ty7{w$Fm.F?ad8·mhS^o߭[ݿ35dz% Ѳa}j7)K(y,tx7~Wr DZ/OZ.5 ՖN@m|.aͼ)8y$OѳrYLqf|4"3e#>Y޽G 8I\y'ॏ)mxV E+FؗI-dJrmZ#Z})}2r\0I?]Qtd9#ޏ =;_objYg =||=x% rc7_pZ~Kq5`8& !H 2ܸo/Y5:lf˥[>%s'᏿SﭹjKѡ`څC|Zv,=4IҞ_^i/}+xمx39Ԩ剒G1cu~ym962LWb(՜F4QBL ͬŜR|y##w>=O\ɁTZ@Zf'քXu]+fjG^7rfΘɂ5{RY.~1EW~"dzdB!DFdB!B&A&©I !pjdB!B&A&©I !pjdB!B&A&©I !pjdB!B&A&©I !pjdB!B&A&© !j# ¯b*xj`5%]Hq$^$ͽKB 2Q$*=&bSQ Z WhW&DQ#A&fCl9ֻhdE+(jZ)UŖaɦuʿx! EST?n՚@USOtB dȩSdUQmΜ@^?w=&$E|L9jRE9ǁcG24E&a]"IG] `_Е ! -.k? QOili-BR>wG&q3 q1Wq*1!" 2*ݗp_Mom[$s& q RkU !DQA^|דؖWl9/wogdZr+On,n1sF:_p {,SfgelڴgIML0O_VGt֯ߥvq=ׂY}G6^6Dظ6ղ-\ !DQRdL˝55#uÄœZ ݳX8x}r-έ۞i>_\QSβ禙-:aa#V >4rac;k(%ط聞!xTY֤Tv\K4eX2WP̯.Lbxwr_굨3XV6LI<_LG {Q-#;wȼ^ƥ,BX!= ;Xw8h>nʕˋKHMX̦.CL~ C$܌XC 71xbN $ȄS_#0؈x)=-BXNZVB2 !ȭBddB!rP*ÊB!rPB*`xe|L%wEs}y܆֧__?|X5-xNs\mfP︔w L,}o%0>O<7LyCٻ־A5 }'Lűam9~? ;bU=yNX2T5w*=WpIN{f់s2Δm}eǟoeZx;n^+ӵ:/S | u!k5jKY{Dmÿӣ ~0Tb_\9+L9_TნicSV;s"FVCV'JyW XR/3k@ԭCڴ3/%91oO64T!xfǶ{O,:zDfg6|à}ܹ Z`ޮ+-٫ZÛ_[oRK)1 VZr|)tjӂ:!Ԩ߂žݔ o|3oFv4PwL~2ѹSk{F;x6͞uؓoj_>ٚ6=fe{w;jdΤ4nЀ:<^JrԐsrsgġ4 GPz4lۋygZOwFəgJsWט}.R^#'=ʁ-q3}rTZ,_>ufD7OezLM ݧ}?Gdbë= aphD޳c33e26mw3{ˎg_-ےqSL4󤱴cP:ϳJcҍ=t6<7.,Y&2su96E)鞵[TՒUۡɜKwR#̙ݪRm*QhzB^E'wQ>hʺCd:aڿ .w+'ןQj^E2׻q)rr~NS4:;~xi&x7^^/i<_+Arh]KU x1fhЉQ_&u@Yɒ-?@T[2|AҲ͟T)kWx9FN1QHU2lm߻>ΰ5:8u.SMԥ߳Z b fhg_Xxv^U}E͟=04'?Iޮ9cJOsxsFO&gb2kx5l˼Q Yx?Ͻ{!jz+`֏=7-M wsrb mF|Kvt)Ͳ fYYN^JVE~ D)|^.<_dV(\w:掩î&a*ށ!%xՅIEA_6os/lVh<(] n=uc*u9ٗ=}p?|?$0j/5vV?>.Kft4|1^s` lO|Saݤi/w[Jfcś(ۛskX-`5]%샣v?0 O_aʉ֟ 9 ErBc20?Bڟ8{9d"NW(^wL;ٲ)VEw2@AOވۏq}#Ck 8%9}?sLظs9]Ku`HR g'g]>o)Y_CVWK(Ojp_sjPmNK{Y{bĤJS+6zWi ^Uj=?}DZ( m?xeGS3t-oܭ/G=,EUt\.Z1sw*zYG~}{̑E<vnb;_>B>)r{_ƍ ccRTk؁}\Jai|Ջ~}{xvqoNY Tq1O=ff'fv}r_Շg[ɲŷϱ_v3ҏf2̭ﭪ@wVtHY(V+nt1VбiC1yW_s kV67JxWa4r˲T4/^AW5C+˴-E)?;qQn$l4OAJRB;7_gҴr}G'QmͯT, Mbx{{t)BB"11E3bܴ\q%<)$=\ ?U^yk*mAڧ/(A[uOχJB8Bd"(A =B< <ȴ:-KjI[ <=ʕHDyh~ඨ?Or>"K6Yv t÷r齈Z\86U0xxdBBoe?=Չ_vnʕH-Vlr4n$+T=!) XZIDATJ$$Epws`}A 0 ' !%A&©I !pjdB!B&A&©I !pjdB!B&A&©I !pjyvŤ9!"G,>5-B!r,OlĸiyьBq=2!NML!S B$ȄB85 2!NML!S B$ȄB85 2!NML!S˳{- zuHktܞ|vi*L")î~fL\+]B%.ZU@Zк U[L fg]񨽟Á|824Xﵨ4xm+4y]CeU%+/>RRRDzK0q9ټ7?چiu/Bx`Fiu{ᄾWӈ%Aw٥;gmZb'LŲy,ZCj`)EӲ0L; :9Ŭ^i 4d6-}q, J,-`Wкm{ƿֶ u{o7_sDz "Ah{~HֶO[Q߬ܿ+wKnY]7sz$Cz-=ɗ!dҜ'#64 ލ!b؉˴Fd[)_/زY=*ʴ0-t]ϨnQmX_lX}64\{MO@qa6} 7!Szw:j]=#ut.gڹ=y)yc4&?> AE!ֲYm_3Zdum3ٖ7=Ck_]MI8u7=Ȟ(/;3NJp?C[d/&UH{ӹ[/.zskX؎Ȣ~?%0-f/: ^])-QP\Ɂ,c2嗑{J~Զܷ}1c wuf/yA<2a4+K,|a7,f8+7fFg-$;KYo+YB4-ͭaTE!*o;j琻_WsإeNh~bkGǥ돃ERykۿĖ5Kݻ?_}cgL`%4 `͈aQ:f)LeLSQxHJJ"))=9%SP짤,H??o1Es.{`O%7T~^oг=GOaB.dr:; fQ.ʐT<̈!C Ka?Ҫחh޽q,Y>+6=t`sj[%8кsV16h}P˞8f]4漸i~E9㉃GWFebɋ\3Z]@wr۩EMUtI|2v;DJ"Bw8p8S躳Fv>Ś '￳,~g*x%_ev6O-Me0L<*#ۧϥ(baF#X.MqilzLS&U~ߟ/F^w,zޞRk }ND6jH9Qg\r}qГ69o.݊|- ",Z=dNgHĞ:xܞmuu}vBm !ď-.^yPeTΝGMFnԮ˛4Ytm{p7_ir$%%tYt:YŔp͟U`v$'';5ڳs{L?BLs)2A6?QGҔb_i>m2V-~щ>Yg֚m2|M!D:VkuxjG A۩:jT֭Kgnph,^gj$Kb\2ܩ5FoBS-.=nr{"2̽h?jueBގ~n69 &-= $!1>)T 'q$y-:j1ЦM-ZrɳȄK+c?֔Vu'II$11|:i";&=5_3шF4D{m|AڤVlITCMhْ֔F]` ôIMؒBXҚrM͞?_рO#h| ,>Ky l<}BcK\;Er:ae sYs0hSؓB)G%Fǣd#'=ZhId M\~ieJIwyo߮J_ul3 ;Wf6L$W"CaO1yYo ^zHu˥㦺 [$ZY1³߄fx=MeP6ch9%ləTЪ[b}΋mlvfF?ZLԹroXpkm3tJ (EI3-}4iܨ#Ŋ=={ JQ!$q4;k*^b璍 m}{~>]FEtwmi=cue*Wly͂>vaudw~ vlM߉3)"+1,[.(J 0lŖ#2#VA) cv W߿66 :6acvpz\Ϸ%7继'ta okgQCW/=hWNpzlj`j"{ $F+k}%ٹ2QVKUT":QsAg.W v M$ToE`ܖIfyg^O/Q)N5)װ,j"t&<|Z*`'d+Q>S|A]W]zlǚʾ+Nx$)B&zo߶6 Ώ/ˑQ rj}QFY̳@)*r{wQݻń3Cޕ _tIA+%Gec7v7aٰ/=թ aʀ'r n*z~q 콨Tڞ^.|{aV*Al9ۇDOiMjJy86*A/#{,1 p}#/v5ۨѝN+Ţ|o=eU4e+3J,fQr({J53rtvoc qf4|F рO#4OF4i?4q/37_i_, fřI?\nXGאTǣִDmڇus죃WJ;~+4;7{VnzV\F1-|ld?MoehQ/z]{ sN$~*jDr_.1E}̈́"lX(2~a7RVdff7+u~AÏK -&H]:Qݺ;W*k][ri?F?(J7Տ \t'[gAy^*^Meꥹꨗ'p \t;KoAyoM\{nLbFQ5 {߳q . V1RlZJckjK_s[ڿ6GN(08PuXx~SөtZe\tmغN]Afξz)ߩ$3m{~N)7/=}L=گؿf6eoUsmw~LYN,$ e]8jI؄`['z\ 1R֤ݺN sZ5mzg4G˱;r>fW'kW'6 'o8kB W au~_fmS&t-⌯;a0y:̍;:5T!IӮYzcD ZF![׭?@|EA&lxs,w>0q֓^lt}{Qm JY!;x6gm(ʟE=ڿw\DoɯoQJYA\3+i_`'2kgosaZ7'6Q?Xt`asT/6ci3q' Χ9V0Qdwd@gDO!wP㜈MZif\x!z?t\ ?j|T"f n+ ѷ|@h+3vȻx{[(ChƴFtjI[z?VYӬXZ/fň2y7W5ѽBofz=upku N(hJѦ܉-;ܖs iC{|32,6r9 0hH7 NxY`9VzIԆ# W&l ИUhFqZig"ϯL卽1rZX{4+~;xЮ{澁la TDw-?ѾW<< M 2Jr m<9z8L` kϷHS_.Ug9ȉ 1`b/ GK[;w^wn8ѯr֎˾wU 7:h1?kcabv֢ qRVhh8ێz϶xRZpy҃fYPH^zjgmA`໻5|VcWEU_݉_mGohs"(3w@߾cRc~s:r)];.Yg1gf O:X@ha:TR/`\!%f_LPo?}یVq[2Y =¿aw}(eywGhJYX_jfxR6NDJ"zia7A}G}qyg^rߓyR53i st;^yHS|eh r=vw/<0!DY*8x4d q?OOW]d[FRHۺA' Oݹg_Hۭłzm<64Q.zIGKfDIA3JoAd>ID @)DQ+rk[,|,x+@ߞQT?x?Ob4o LQy>● Qsİ)Ulԛcmy.ٰxe9˦q[Q/ 6[ G۹/"j&%+hg?vtc%U2< X0cv}se`!]XJ)2廵*2XI Sow 1xW;2Qj³\)Uś7%@[%H}QTdHV*1_]>ayE#:O#44JXޤj xV>W:zhM { ,zيf:]t۷=-++{Q\\\vv6I 3PьY0hǎ,XгWo*,*I@`++):vرc?k x;v775A0 \@Ӕe ׽ 3#D P*8w`7.&gDDD=@>VUnJ ccO#GX#1ucbiJZQXIUIn8_Iv4Y2!K^%.yxOlذAP[ࡀ0 =dg6߾} 浅6[vc8a=zPCy)f>omXNtqKa߮NZrT.%$g$g& hO:%>>_a2J:uX,l6 T.?1sss`V9V,6A`wļ:Z@PԼ}Q*&&&}cn4H \P \Te2F)AP[/d>0X_T&jbNg6MlZz]qӒɡQGJEo/*i3 Sf H`4)2:+'$ⲒJiNx@5f 3|ya7YiiYQ` ut?"Z]S[B1Ƚp9Z FUI`Օʲ򲲲Ϟ+e!+ Bmmq B"~'\ r,-\ 7a}aQ(G Ӿw0ɶA忪r9<GZ4M#8Z!C$$TYI6ER]RUX6]:5?@%0 7x(a .TF[ " IJp e˸|ad˰blUz6t&iu#gG\8Ch=OF\RRT:-B<cY"}{yq2E Aqc#MH$  C4OeWA9Bq.GRUF|R&U `2m:j;Fyʜjγ %  L{Yqy7e@!,)RRR.\4dȐCA@PTn]KJJӧ0l6{Bʕ+mY*iRYBvr+[.aU=E |(D,k5XuxlX&k8Hf&B5Y8aC/RXifnrO銻eʬdOFFJ-ځbC,GN*դX<33322̙3nnn666411199銊~lϝ;WV7V^zJ$4v eQ67L:{V<0o -9:@Ȫ6~0ݻwڵ]UUURRRBBÇ%I\\H$3fs 5hF!./KI %#hhI!UUD}iw.yE d~+p8&&&fffBPTK$U(< 88ի=M)!GȨO>NNNi&}nIENDB`blueproximity-1.2.5.orig/doc/manual_html_34e1dc3d.png0000644000175000017500000003453410761555105022310 0ustar nitaglfnitaglfPNG  IHDR]> pHYs 7˭tIME Z IDATx]wxTE?s !B]E@BPDD4 HҤ^w. *{MZ $fm3w7ِɓ9sΜ 888888uA<ȷ$ D/%/hYQsK H?s7G z8Gz=8G|Wիm %}tp Κ ZORĒD?ҋPCjeI1}1]GG;_8JT'pgZpt\^(Q;8SڍVR q9ݷ8=*OYѭe9°uڳH\ {A@SW|_)kv̓OԞ|k/ ]XWI<_*d W$ h ׎!_;,2+;L}s!Me/_k]6t sbʃx5̉qtJ?~}kϱ2]=$< ҷAJ-?@].juzRfO_3~م:Ҍ%<$_^sՔgmw}֖`_>?#ƾ$I{2wg4@s,iZpW b)t!8g]剑Kyi6eBY"R-(:&BuF/ @׮EH\Jn3GذN{{j]4^xxmmAZ{.1h|Nsu֏g4a8N8A_zpoB.Z5wa ߟ}Kp9܁+"f@1KЩ/#4tm>-L:a!kGK7QywgNkfPj7 ]L>Z~7JN ]2x=]0Z\Qu Тv@宐#>RlwEú{U΍^vc1o=ßdc}ǭZMC@e6]^~6~w]@#׹?;2S1f Z֯ߏy+'6[3qs&}3ֹ̠i\cCP+9."~k{"-S7?ls^۳...Owթ||'Νp89Cp!N8'G8CpP2ꚕX΂cY@% qtWP2CBkL{7_Osai9;KkTϧ}0M=s\+ef4x~+X6!B78r#*9q陃6t[1rDGp]ЭzZ( mo:/H 97`މ5OPf \4뙏HFZ.s5:\x2 Li.]/wg.OЉ6 TnN_ r~bL(tkƞ`N7vWTN䏯jN$Jk'SK4~;A'X~Ii@4mVP쮛EpY7^]Lk9hH(J05)vFl=/M9шQ mx(Z2x`}=miݬ,fsh#v Gu%i'VL=7ԥ؏!0J5孄sD+ W|DK?jfQX\:t۠zֆ?oMص`5qN .oЩa.fY }Wl|ݿ}躽NwP6<6n2`~S2Dsݨچ& WZz|77U Ğp:FNL8dsXŽ<0՚8Yҙ\M0εN2Ё=G>X@cʱ;7{wUN}N0F_88zKpٱ;oʰAk79Mp{8+a9=!N8'G&'qrrtN R )q2<{+*N,;J],og=m!|e F{zq7VKKÈ>/Zٵu,>1rԆșɇW'4w.W oov>bݝ=+h[=Y4Cg}WwKT\n>mtF|ci񷞗r a ;9Eo=+W|2U (-)Ymo0;DUq2KDcz)i ?v_595|Gnt9riZ[jC:R%Nj)!h`~_U=&P@1o{| =\5voi/~蜟irsFըا\>|ɮʗЬJEF9C 0zrB>7~|ϹG=]:S=ٔjf.= wf`J?ߪ//,`Ɉaf`Q͞Y|VCEʎCny^2̛o{aqݪ=5Ok#}b~D:aNoNJBں|̏nO{iՋ Uye/?XW䐂=ܞ>:. j G+bhu)?3;uvхZl{h}_ZnA>?Q`N̜G=?y{N;,)fNm{ϓ[e݊}bܷ>koͫPiSԯoiW ZpF|RH)յCy=Uʶ_N1tNmZy(Z hU՝BL㞃3-Is-veWV 2s#kW]ͼEM>.e |jK[aN-ּ~Y]5vQ0@5_43̉Fu؊Ҽ;w 3V{V$q;u 2պ읈klSﻍ˥_/tR7hMK89m?L4K!җ@Zg߿hhSெuɯ4 nﰮɪs ?(FS[kc9UTRQrZϦύ6Jr!DlAO*e*akx)=%TZ<)yc4ź0:ʽ|%V%Gl5o7-$ >hN,ݩpCBv_Z7p!'eX&T'Z҇<{nâ|}BܠD0 @ծNH~єtLzv \_Hf'~de}]:WDAkzt(:Q{5"@oԩtK\v.nz#0KTX񧵨3lXmMAXdUj&=} ?P{5;-|nmmjf]˱~x6y}}yx̯gU-ʣКN}zl11\_\ϿDpTy4ZөO/Υj/TFH׌Xw6z9wIۋE3'[<\C>;wT|%TarF6mۯlqG1|52᡺M>lfƢq㴍5+PqlǮWUC(0]B&v4W\i\ǿ(vܯ$b!A;O?iVE7:lT:Mq#24\|*-TV,mu}p :9rX>8p7@Q'kfVW`Qs5+Ul(sembb.}ZPvwܤdz~|E_rtw|߽̳my-hWoʕW{ +8yM"|+}\߹x+5Z|tpǫҵ+@Btއ iе5Xh3-<ľFK?iRP=4K۞/ߖPe-Zu(y:vEr.3av ~fG_E!՘r&ą:9v;m kDUnw/اѧZ>\]vdZ P__[T0-^}_!N8'paV!?BB$XƘH $')Fj TDD34DE,0*,( %`XZ* VRJRT(h!9.+3+G19h6sNAUR]IDAT_cOB`f|4M1 K34C3 4(aD( DQ!%l2xGOA֫WE*TPT׮];{EQHB4XABh$Qai,\Qjɻ+OA8YD@ӈe h LHL$IĘH&gdde>{(:3;f'T^}̘1M7I)Y&Azh\ՙ۶m۶m[VV߭J/_ƷLHJI9vС#r NN%U(ʖm 41Ud<㹿1F":B0!(I {\BB`(JD$8DR*]]]KY499CEiV!`I R /^,?MqS#z#˪>j4rԘYf]G$=ȺsXh4HKKh#[IoӛYFZt/89cHѪ)ѷ\Kg23j!|OL`4,6 c,G$h1$,[jV0 -[DDD?2RR&O *cɔFnzB=#88x֬FН!)YzΓ;J Ss "@?iiT2Y) Qc;th?<~l?JTgTˡtթ=~ʹLϻb&sGB$rط]&4wI:ZoҠN~7ipg%NfƄwB0X(-0!@( P )iVTJ/8O0C?eYJ4|:?mò/ψe=z,ufSjA!ZYl9za9/];vX @)xJABP&PRCCj>7\`HӇ@$"f3< h2F=l`eغ,kfbI;#KEQ*FթUjh5KkVxvqWGK4,_+Q|84+w FDQÌYf}!ǧUswhbQd$Q8 og1`Rn-~R@f @؄F63Upo-VժR}]w󭀞>YV,QAkX>bEƝ/Ga;cq m'V( `AHvR pMH$L$B4MJfPjT WE_1@s T9w5BL3q,=*˅& *{x>%gXXx{ (9-3=TNZm0˃VQf d!6 X!0oJZR̳O=II+X-J%HCJު' lT8;{8g73VQ.^%,WS?lVi,3*x8NxAfӋ48s+laXBBskGki0c D,TjB4Ѐ "űNT*~=rVKCNZ UNH,~ƬtvQSڗ՛08 (Z&ua^)I5?o|_2>'qss#eMΞ!/L`Iy&{3X1Nsvv~İM7Xe""uXWwɇպ0Nά9gP ʸggg)XHEl3+8 c螉)f^]5$R߭?c3I *-(8Gq6 ygDShi$,+Tl D<Q( Ы}nRrvnN.NJNC%IRp`y<+ ^W/(JuoTOtr~>{8gT3 ț~,7s X7>PhAwb3YUEe) "D hjwJ:bQZhOjI{9%rbhd2s Qki~@#bR1&ȋ( ٜmgiiFl14C03ڜsDW%i0;!6WvWn._uprHاf9+`2J!M.Q #&4v:IzH@\^`Z6W'VV 85E![0M)-BΞvGQo13yEQ`SZ:wnV6 ˲4E`<(ғ"9ӧO>Ea$I4  Inκa:ĴSAcE0g~1#oX:FSdMf|?xq($ M|=eet 6Bc cXV (ʺ[tVڡ]7_z18(X]tI&lL&=NNL,,-m+lwsRJ! JS~.bL]B]r*ey.ߚ< /.El1!0 \QcccEQ",6mЏ|8)# 0nIS H6eD$ cDò ü8۾kZ6f&-=?}L&N$_lES)_bͷ"F89ۻS) clݺvZ L@?HIM]t:{^ڕ=uc0~뢻Thb)Iҁ5j#B1  Z]Fa7rU?mO\,8WĒa@@P@fk/'5.Oy\@I۶cFZYhJaSgcLQєrR񖸸̔T XE 8)W `" "δ^͗|EduLZA(G!( Ib( of٠'ECCC}}}ZJL38CzQ,<>BC1lO# "@!rh4Ps* ve%|Î{Oy|"\)]E7KJJ;w46M?u#61%bV:oJMI1͝:uR(O~KPXi4s !Hle;)d2!o[t{,)$7dIL .lʠŽH%DєPT N(J3zo$MK{!X0(`YMRөD:#{J5ƌx,Ke?k=6S\cN*Ģ]cǎO}REQ gOsN ! cǎ:ȑ#qx=1*{7(Y?ٳEH!y) ^< suuoQQad'qwurqKN6ӵd28;;>P(㈈ggfffO$do4 . Um|@)O-P(4d,W/V脳OahP)1:U^=7feU+Uw(/r8ق1I$ (A+ܹDx^ӧ| ESELy9#@T/qMY9 HTԗ,02?~FӔ(f_W_ yoc%&%qvi^re.PlٲPF{&9՛jVJF=;iKjh=FVΝ;333;v0 ˲ 6tss۱cGrrr Khka(6e `id]v!@],*sS8yNFRzatvqQ0YDL$YĶi(bEd0`Y D!aZ_u1A%B0[8ND ^ ʱdcΟMy7W&&ǎprчsOh=D3wODQHDpfJx7<4>yL 72wkױr~/$Q(1 V!R" &8a!@0&$Q"@#3?s ypUSCaUiU˕II9wwhJǧlٲ:ND(OQTppAڶm insert n+1 empty lines .\" for manpage-specific macros, see man(7) .TH "BLUEPROXIMITY" "1" "February 06, 2008" "Lars Friedrichs" "" .SH "NAME" blueproximity \- locks/unlocks your desktop tracking a bluetooth device .SH "SYNOPSIS" .B blueproximity .SH "DESCRIPTION" .B blueproximity helps you adding a little more security to your desktop. It does so by detecting one of your bluetooth devices, most likely your mobile phone, and keeping track of its distance. If you move away from your computer and the distance is above a certain level (no measurementin meters is possible) for a given time, it automatically locks your desktop (or starts any other shell command you want). Once away, if you return nearer than a given level for a set time your computer unlocks magically without any interaction (or starts any other shell command you want). .PP Have a look at the package documentation in your distribution's doc directory, likely /usr/share/doc/blueproximity, to read the complete html manual or visit the website http://blueproximity.sourceforge.net . .SH "OPTIONS" .B blueproximity doesn't support any command\-line parameter. .SH "FILES" .I ~/.blueproximityrc .BR The config file containing the user's settings. .SH "SEE ALSO" .BR xscreensaver (1). .SH "AUTHOR" blueproximity was written by Lars Friedrichs . .PP This manual page was written by Francesco Namuri and Lars Friedrichs for the Debian project and Ubuntu (but may be used by others). blueproximity-1.2.5.orig/doc/manual_html_m6fd06b47.png0000644000175000017500000002012510761555105022404 0ustar nitaglfnitaglfPNG  IHDRWi+ pHYs 7˭tIME %ݎ{IDATx]gX>==$gW5qEU3몘̮úyŰFL# *d$ǁ =ߏaHݻoES:uީ@-_ 1%]~6PT-)j -[1eA~60RS)P{G,rM͞~vQCP-jբP Z!O^6Ĉȁyq gxmm,sjJ㯆ޛTԺyo,-'X8x-=T(=سqx67'?BBvAO7R?o^Vw]fYj%|kDw;̳kȁ>]~Cw^1=a#V>_`.8\wuC6^h0,#=l/ཧb- 0dw6U uC"~/_~/=*GrMOߔ˝S=X^W3tݱ1#`G >ڑc/=Od0|>3~Žy{NAcŲ%qc#ܚ?5qρu"l!ϟo~3z;de};s~V>f쪫v7Jie"䚜!;s˝Sc5qX7d#2×RJ@YQYPv.CV[tk/!K` iRZVrў]>,@Mee oD bO۔+<ޚ wpt̼ }r3ȷs{G6zk!_x[@jC>}ݻmnI=M 4^񧵷\`s\[Az7Xջ^l+;&ړiJ9L:R\^*xpźD^.U|\ظ<b2;j7!# JA⵼cR-Qt*whd)=ԍ-H: #\5u[g|&X9n1;-rz]s>̅eή !+iưߜzPwN銩VN!d?կz\lǵ##%lZq]X}:nui-Ha?놏Y<1 PTg$9 97eO7ʅϪo )zwʩs<Yvʹ ͇qŃV#K0@L3)M+\FO9qd&p0{pOI-B\5^9[ XEkw~n?^I)"Uj* W ĉRPsk!^n󪺢WT(AmYSwVwj٩捧 J.妼Zy֬q[qF{YAD#-aUr,rG^U.z{Tz{XsL"ggH9u5_:Hߝir0KW_}'-gB |<0pLjh r4c7#~mfү3{! BO{-,OiXYQ쥋5^Dyesa}8|/TzT-jE ZE 8;],tX;i#?`]s (=Kmێ7cOy=*`ukV}^Z;Ra.v͐g~_aky Ŵkk$Yj+CG|iڳyE[y+7 [E$!aZd?UZ؝ߍphA`hW |͍M.VIeV_x ")iyW*rGL-1n.+vk@R~׎z'T!%|¡z9h@Vmq1V+¬Ҏ?xDteuڰﻇu:}g?>֞^+͎Bk/73᯼OU*ߥu`gKj8ѵ\@\|iۤk<^_Dzw^eWƐ4Ӧ +_!MXx}e^4+R2n>'EC1U}@EYH-,\}'oN .=dʯB+@NDžYsh[+aK^CM)GrȺm-z&~5Ac !E)}8hWc{aaK+bh셎NĭG;x(P+?FF{`І|?>> 05Z!WL7/գW8E! w2Z!d7?$J9pJV]m ոf F-֐qW^sq>,c7.PMJ|}xf|`teέ7W۪9GDv =W\ihC?ޡ5kkP zܿ<ng [UŻԽw@$5dŔ 9Lm,YSl5q>QW lh r4Z׫?!}jxB-wQ=tN/5093"knx*wVOCwkI{TF}t>r.Bej*K{-/0<{W=>cQ|AMEG5jբP-jբ7Fms\dkĚki+Ͳ5Cdivw#ty3]VqVa$孬gG|WҪ_ɾ]($W*}ciq)@-"fnae7 lݱ>ZZε[ÜݼQq3wڭ_4ZX&V6O~YM-vsim=aIw q~^sCf9M0=Ϟ򤲿iժ6suu_T+`N^q3)wͶY3mK1z5XP¿Ml%MVJkl#+|*E3W{Q$ ArẠK$Z@*"e׶P/AdG2%>(+}~~mk1i$v>ޞl\oxL؁w(F!)tֻ7V/6,oB<ݒ%w9X/nkדVOZUoXZ/rzۄݐӌj[迵?zN`t[5_SA+rfw\ULGLWGݻ-QhKNAn62䜿pR)U;TԔP-]O)ġvԔ?N*g,0H!sV,}ڿKiwb:?;b]ʊj10V{+%vәEPQ2dužݺuCv? Z~DVM ac;vݻ -))yQlllffBS(52o~޼y{Sb2hJ >|ҿz mi!B8Nl. DR34݂<==7mDjl(鰰/dh%od'%444 ,nг;}Q D;c^v%"qۜovvf]֭d 1A0ACׯߪ|_M }=Z5鶱<'\;`gH904t8E2jLۙ {w J,*I|bZbFń ɓ'm2@#!锷"Qe$IRDO#511QV[͛!0nasiiacWA*FFFyg.&4͈2T*IIT.I%F. U߲X_[}8UQSG:kRM#KN}Gtr۰hbH䡢 `uȭ(jEu ]YUR))J˫2 WXRT.x">ks0 9 iehkci$5P%d7B--!>>> 6V)EQO,־54<%ƍ0U0ʒҲҒ_%U))*BMMͿq) ] [B`Ұ%]jiGza6iO q{Fz'/߭KXl֢i"R $)Wz29ga8_ƁO]5<%cmөY/b0 Ÿz-D\&`c¤R 2ILNB,GФT *3b8[fpp z:?|ЙWj<,>%%%Pz/3G).*Z\ZFp\(_UT|/¼qqkH@l0p@QkBD" rIe +)0_|蔜W)O6ޤɪ+$U%J 0:99؝;wR&-` k媂( ) Bl6$ -K@BFJ,Ӷ&mM3N6f?0l̍%V}oٳN::8Aa,6' |˿8%%tEQ<]17#TX%n@ 2RL"5Zqe\gJJ9\F:%3477PثaUI N>&X gNp:yh=2a9ѦI9`0-0'dĤ$B4M&/ǎ+)):t("K.:::GkaH4MDPf2A QP49Bw o%{tOV4vwOX[痊 Lt e&d3KY2qEAʓ7 a@ rEDrTz%H1 ڵ5kE3TIX Y7 k˟g"_WK(Y%&4⒥+֭echg.8cK7o1 R^\>J.jNavvv]tԩueeeBBB||Çccc+**Fmjjz"MӵR52 F& {IeڈLH*|&6=wp7I({yffcdddll, ryAAAnnnuu} ìq45ds#200ի=jE-iGiPIENDB`blueproximity-1.2.5.orig/doc/manual.html0000644000175000017500000004060210761555105020143 0ustar nitaglfnitaglf

BlueProximity manual

Introduction

This manual tries to give you the most pleasurable experience with your BlueProximity environment. You should read it carefully to get the idea behind and fully understand its possibilities and limits.

Basically BlueProximity is a tool to detect your presence near your computer. It can automatically lock your computer once you leave it and unlock it when you are back. Technically it does it the following way. It connects to your mobile phone via bluetooth and uses the rssi value – something like the automatically set transmission power – to get a distance approximation. It gives more a quality information than a quantity one. Bigger numbers are most likely bigger distances but the rssi value changes slowly and is a little inaccurate since you could also cover your phone with your hands – that will increase the rssi value without any distance change...

You see, we cannot measure exact distances but in stable environments you will most likely get reproduceable results.

Installation

There are two ways of installing BlueProximity. One and by far the easiest is by installing the Ubuntu (Feisty) package that can be downloaded via sourceforge. If you are unsure if that will do or you have a different distribution you can also select a normal tarball installation explained below. If the Ubuntu package is installed you find the start icon in your Applications menu in the utilities subfolder. To start BlueProximity from the console just type blueproximity. You can add this one to your session manager's startup profile for automatic start with system boot. Please start it now and move on to the next chapter Configuration in this document.

Using the tarball the prerequisites include a unix system with an installed python interpreter. You need the hcitool tool installed. On my Ubuntu system they are included in the bluez-utils package. You also need the PyGTK (python-gtk2, python-glade2), ConfigObj (python-configobj) and Bluetooth (python-bluez) extensions for python.

You should download the newest version of BlueProximity from its sourceforge site at http://blueproximity.sourceforge.net and unpack it via tar xvzf blueproximity-versionnumber.tar.gz

Start BlueProximity by typing start_proximity.sh which can also be put in your gnome menu and into the session manager for automatic start with system boot.

Configuration

Setting up the phone

First you should pair your computer and your mobile phone. Please refer to the FAQ part at the end of this manual how to do that. Once being paired your mobile won't ask for a password when a connection from the computer to the phone is made. There is still the possibility that your mobile phone will ask you to accept the connection which is an additional layer of security appart from the pairing mechanism. Your phone should have an option to disable this question for all or even one special paired device. Disable that question as not disabling it renders BlueProximity quite unusable since you must always do something to your phone when you come back to your computer.

Connecting the phone

After setting up the phone computer pair you can now move on and configure BlueProximity. After the first start you should see the settings window. If you closed that by accident or it did not show up (because you had installed BlueProximity earlier), you see the BlueProximity icon in the notification area as shown here.


A single left click on the icon to make the settings screen appear.


You will see three tabs regarding different types of settings. On the first tab you may configure the basic connection between computer and phone, the second tab will show settings to adapt the distance detection to your hardware, the third tab defines the actions and commands that should be engaged when locking or unlocking happens.

The first setting you should adjust is the MAC address of your mobile phone. If you know it you can skip the next step.

To find out that address you should configure your phone to bluetooth visible mode. It may be the standard setting but you never know... Now click on the Scan for devices button. A scan takes about 10 seconds. You should find your device in the list now, maybe among other bluetooth devices around your place.


Just click on your device and on the Use selected device button. Your device's mac address should now appear in the mac address field. If your BlueProximity was started for the first time your changes will be activated after you close the window, otherwise any change will be active immediately.

Setup distance detection

Now BlueProximity should already start working but there might be further tuning of distance parameters needed. Note: Your screen will never be locked as long as the settings screen is shown. This way you can change the detection parameters and test them. You will notice how the icon changes if you play with the values. See the FAQ for a good way to tune these settings.

The second tab will look like this:


You see three sections called Locking, Unlocking and measured atm.

The Locking section sets the parameters when to lock the screen. The distance parameter refers to the ruler in the distance section. You should experiment by placing the phone to a place where you want the lock to happen. Wait some seconds and you should see the value grow. It might be easier if you click on the Reset Min/Max button, move the mobile phone to the lock perimeter and wait some seconds. Take it back to the computer and you will see the maximum value right to the button. Set the lock distance to that value. The duration parameter controls how many seconds the measured distance should stay at least at or above the lock distance to lock the screen. You should set this value to more than one second as it is possible for the rssi value to oscillate sometimes. You will only loose seconds of security but win usability by not unexpectedly locking your screen.

Set the values for unlocking in a similar maner. It is usual to set the distance lower than the lock distance. Please note that BlueProximity uses the new settings immediately.

Setup of locking actions

Switch to the third tab named locking to see the following screen:


The upper section refers to the commands that BlueProximity will execute for the according event. The preset is the command to lock/unlock the screen using the GNOME desktop screensaver. If you are a KDE user you should activate the combobox and select the xscreensaver-command entry. Please note that this will only work with the KDE integrated version of xscreensaver. The original xscreensaver does not include an unlock command.

The proximity command is a command that is executed every given interval while the user is in reach (the screen is unlocked). That way you can e.g. prevent your screensaver from becoming active while you are near. Actually this is the standard setup.

The lower section refers to logging of state changes. The syslog entry allows you to generate a syslog message on every state change coming from the given logfacility and the loglevel notice. You may also additionally or exclusively log to a certain file.

Testing the settings

You could just press the close button and see if your desktop gets locked or use the simulation mode which is always active if the settings dialog is open. You can switch to the second tab to see the actual measured values and the resulting locking state right to the reset button. You may also have a look at the notification area icon which even gives you a nice tooltip when hovering your mouse pointer over it. You will see these icons and messages:


The green key shows that BlueProximity thinks everything is ok and you are around within the safe distance.


The yellow key let's you know that the detected distance is now still below the lock distance but above the unlock distance. So if your computer was locked by BlueProximity it would not yet be unlocked here.


The red key shows what you would never see while the preferences dialog is closed – this shows the screen would be locked now.

You should play around with the settings for some time to find a good setting that fits your demand and environment. See the FAQ if you have problems to find good values.

The configfile

Once started a config file named ~/.blueproximityrc is created and shows all configurable settings with their default values. In this file you may adjust all values found in the gui plus the communication channel to the mobile phone.

Pausing the software

If you would like keep the software from connecting to your phone (because you want to transfer files and it is somewhat interfering the transmission) you can activate pause mode. Right click on the icon to get the popup menu


and select Pause in that menu. You will see the icon changing to pause mode too.


To deactivate pause mode do the above steps again. You will see BlueProximity reconnecting to your phone and work again.

Stopping the software

If you would like to stop the software (for whatever reason that might be) you should right click on the tray icon


and select close in that menu. It may take up to three seconds to shutdown the software.

FAQ

Q: I can't see my mobile phone when scanning.

A: You need to activate bluetooth and disable invisibility in your phone's bluetooth settings.



Q: My phone gets detected but the distance is always 255.

A: Most likely your phone uses another channel for communication than the phones we tried. You can find a usable channel by brute force or by using the sdptool browse command. In the output watch for the lines starting with RFCOMM and Channel: where the number after channel is the needed channel number. In the config file ~/.blueproximityrc change the device_channel setting to the new channel. Channels address different services on the phone – you might sometimes even appear as a headset e.g.



Q: I want to connect to my phone (or to my computer) to send files but it tells me I am already connected and this won't work. Killing the connection via the phones menu does not work. What can I do?

A: You cannot kill the connection from your phone because BlueProximity restarts the connection immediately afterwards. You can put BlueProximity into pause mode (see previous chapter) or quit BlueProximity for the time connecting. Pause mode should be prefered, of course :-).



Q: My Device (either computer or phone) always asks for a password or pin. How can I change that?

A: Most likely your devices are not paired yet. Please install the gnome-bluetooth applet if that is not there yet. With Ubuntu the package's name is bluez-gnome.

After starting the applet (bluetooth-applet) you should configure your computer as laptop and visible to others. (Right click on the new Bluetooth icon and click on Preferences/Einstellungen)

Afterwards take your phone and do something similar to these steps: (I have a nokia 6230)

0. If BlueProximity is running, rightclick on its icon and select "Pause"

1. Take the phone and enter the BT menu

2. Move to "Paired Devices" (Gekoppelte Geräte)

3. Select Options->"Pair new device" (Neues Gerät koppeln)

The phone should look for unpaired bluetooth devices in reach. It should then show at least your notebooks name (as found in the bluetooth applets settings)

4. Select your notebook and it should ask you for your pin. Now enter the pin from /etc/bluetooth/pin.

5. The bluetooth applet should now state that it trusts your mobile (created bonding).

6. You should now change the settings for the notebook on your phone, so select the notebook

7. Select Options->connect without confirmation (Automatische Verbindung ohne Bestätigung) and set that to Yes.

Now you are ready to use BlueProximity. Please note again that the above steps are only valid on a nokia 6230 - if your phone is different, you should adopt the above procedure to your phones menu setup.

If BlueProximity is still in Pause mode click on Pause again. It should now connect without any hassle.



Q: The locking or unlocking doesn't feel right – it takes too long to get it locked or locks to early or unlocks too late.

A: Use this algorithm to get good results:

Set the lock distance up a bit and increase lock duration even more. (I am using 7/10.) Your milage may vary since it all depends on the hardware and the environment. The distance control is done by measuring the rssi (signal strength indicator) which is not deterministic. Sometimes it goes up to a certain value for no reason and will go back normal soon, so you should set the lock distance to that level and since it won't stay there long set the lock duration value something to like 10.

For unlocking you should select a value of about half of the lock distance but a very small unlock duration. That makes sure you are around and not just passing by but it should still unlock fast enough to use it after you sat down. (4/1 is my value pair here). Note that the distance value is calculated and never does big in-/decrements. so if you come back and the first measured value is 8, it will probably go down one by one per second so the 1 second unlock duration still feels quite long. If there is too much time passing you should increase the unlock distance by one and test it again.

blueproximity-1.2.5.orig/doc/manual_html_20077f87.png0000644000175000017500000001667010761555105022103 0ustar nitaglfnitaglfPNG  IHDRIV pHYs 7˭tIME 6Yg)WIDATx]wxTE?sd酄IH( AtDDDPfA/M]%H%mlذF+d2ܻs3sIh -?Դk#3\ϓMiqV)7a}W6MāO$tжP*  p?\h4]zZ]CdD0''ƥEK] F{{xt?r3ṳB#ƛ|NNg={vzNfp>%!v/q,ЬMG?[-}691>sz'MdZKOزx#=<ܳ23»3==}-r ?1y7zdSzNhIDRNT_~fS9tIݻ Lq?3^^36ngjMM=RQ8ztqV.sLw&Et7|U ~=#BC"b߇oݲ%4,PgLYawپBe~cU6E`3{ґ79䷾woNzrrō6:E~gm"iĭ$j,m[GʨcNՃ}8zr즣_9Kj/E-]잴|ϖc'|xF{)!ibc}zǜ?w6cϔ%;OVV I7ub>%"GxxpǼ5?|\+1LRjRH ˹cOլZ1wǒ-ƜZfח~?3YNa\$- AaSZ2 C=H$qБe;/y))`&J=Hhy'?9? h P7to (IҔVY^G-kpQI9hYl֟#(={س%k}v¿ 3濕''';;O+?sto=<_o$8$D\\\Z^ ?wYnԷɳ?ә{6!Nyٝ+G5]eC^ݻoq_"<47f<iI#k.d4ޙpӨ*-AvQq]_y%'L- ajq*aDH= :4vܪ/Vzw0lX̷uyy]3׮_eζ]:\70/($џnMinԮjeLhЁ%_К[³k6z_ kYi>lq⤗`ݏ6Tio}͸wūW+urG!˖DDum[{{6?3g?SᵂGۈT:hؐ4}n5[ܽ|n߶ A~n>>MJO>D*4)-/)|s#J##"Z Ie2`&@FF77f.]6S=pnHhѿ1nXix/XqX!4$)Mni$&9O.cn$I\b̾dM< iS񵼂+WNrNbͽEd)H=&H5{lI1AAa1=8'_kMw/Kz yRң7 Ð CMbm ]$1_lڟ{߉iF+L5LZgٶW2.;hk+#Lͽ''븎/zpX$(c,Kl9-S"ӼEW*bE nG '$wm-W㡴gv]@V,Vi;QS&׽<~^jG<7RdȰ cw' x <c@0/ \$>ZeM^H1?rzS@ o𬅟:c֘?x!<9)@g4iMcUFkpy%^_-)RXyb}G}}Ěix1aA!AQ^ ߛ:° Uo=36߰%7:#k8y9?QTfsk 5Uj}qY!{t1@5N6.:? oϺKr/ 9e{C^̸zq:4fؼVO'Hc?Swy|גW3T}7M>,"O.>Uqف7Nٹxm;EQ;=٥zwK<]'x s[+X1yA.<{)hɞ_vyBc䏫6lԀmW >5 8[y}hjq+mDwZrR89A夔.|mf,\R1M>x#]l(+c:N^|z`ʢkprmaIF p#p#@FRR/]:GG=nzzM7_[0 p#@FFw qǎ0 `~B[OB=>B!(yܐ$_8uuZk4<,*7,и3 sT_&Jc}~c9V7!8ߙvɳgL&ٷfQyvFy> GۼҘ v`bJ-Tpqrvrqvrq7}4K}3ϭ=j ֯0{Іww-Ҳޛ7_M[#9U*GGG'h~˫_GurRbE [7MM];m|Б v n8D)!f\ [x'N[.ĤuLLzWLAR}%hG2}qw2(Y3#'Dꝟd9Zթ^i|3fИ G8W?nrU1h} h\Z$R8wr)jipQ$ gMmU=tM_ؓ'y1Ð L"-Q9x-73}qv ˯5Cm7{XI㍙atlcq1UU%SLyEjnJjO#V}7o}{Ict)6$&zҚDֶ 6F2mZ傏Z#+QQ(.a]@*D3?>ϾrfAx jAM0kM XgQI;zK?B8#0tH]ebX,J%ZR$$v)cz؊#FCw߾'ߛ\Khw tXGGk9UUU<+6V>?X{+L>ltRT*ܶ7h/ "ŅG`7h~ D`9ח6Nbs_z$cD" ]ylh$-6Imޡmkܬ_>!!ӖhNe7zD]P'j4P{$D&_LL&H,ϚLfQH5|8e`I^ĉz 9N#< B2>k@wW܂삫7)9Q}|Rc@0Ԍٗ'O"z97*?-3hbn\f02Φ?ٯ{fNk0_N]j577w`^!KGqKDSߴK5iR0B\i:FVpQ]Ui18ΨP(Uc4Auޔ]!v>νhz]D\+rsZ4oQ fm_Yya| K&l;m"\^}nhh7IA~ܜ6yBg0-R")kq(7MF[0˳fl0/g\R@RƊH8 k&tiN02wRHHH$4"B."T}Z G9b%`|رVF6u]ozy̧$B{u WT^TVc,!@<1CF"@εW[~8x5)ߵ;vvVDP"TNKd-"hO@DR|hF={X̎Y?wG) ahmI|>d2:w̙ Fq̘1"ȑ#whxnI[S:Xc@Ĵ 4 aG'.( L%`N_̛6/,GwhO rW]Z u|ea~o-f0 nɂuSs}]K-8##c'N1b+#"^W`E"QbbBػwo{f91f-6x5ͦVjLI,F0<Js#+~gѷXxLqtS1-&B.5h5 ~)>t~ςRJZʺhuv|3ge$QR1eJ뀤.h癟dɒ[FDDꔔtkkkE" ;vPm S]sc )33o@l 5A<6g#):v6}β)D<)̜B}meMeTlS6lZiI}^nG R/q3Na└ uZ_͒.KV^kIOO I!m_jubb"EQ4MƪT7b@x9b峬fl6<; #hPB$ |;ck+ v3gu@,;{&/!3lfj /KJFWcڶiiø9q\ۅ)vOm{|}*k ^~fN$Jj(Ơ>_Sl8`S}'\ H83L{쩯;vL&#w޾/.+k1b1Ȏqu̚o-}~[}!9ŀΞ80W5ZlaYK?{*˲5ch636]læUW?[ 'K<:lGۏc\RR iL$S٨u7;2۳gOVv̙ӧOcǎi4+44422rǎ-6n8K7Ōq%hsXg4 ^_i+8Mksm>7c*K%"ЋWds,k6꫋0ktWC}*-X{l~gN^(VtOVS@,yxx( RQQQRR 6mʦMrrJ52D$fd47}[2IJ$S:T^"  c0ԔUQk1,Mo:z#B9,,,77g$EI LPC]% t&d1scYcJŚ+i~t[B $ DXL`1B?-=w$IENDB`blueproximity-1.2.5.orig/doc/manual_html_m1df5b94c.png0000644000175000017500000007713410761555105022477 0ustar nitaglfnitaglfPNG  IHDRQHsBIT|dtEXtCREATORgnome-panel-screenshot7w IDATxwT$ $"EФiүH!ITVTB׸\]_pw|{] \ 6\DD,l+ᗴ3<>j a!N:BX)i +2~ '.lc=t[?b1 L?T& p`Bqppf9!콃"#a4eǥ!ZtR,_}2\^ Oާ:ӗ6j~̔y1']=ރ;q5puz%'MJ(ՊEDhfeZ$oTm4L~IYO硾M̰\{`;fą9TjTrlX)6]DfY&_Fz,3g~ԬPsJb|GThJe塊B0M,o"b1{Qa("&<4HMoٻb fvPv:pHԭߐSFi-9|T8]-bYZTq+Ujp91S׏\9񙦉[4 dmgηk6:zmM׭ AnC:h^B~x3o0siY<0?-p8kॼW;2XCJ\ީ({ۗqp _|r ѭQ-spw}p7>7+22~_ʯz?ʴmݘa:q*w~깿mݸ[rk@hl nZ|!E/U#Q_L{mɩWy*GZGrf [A }}sE卿c󖴞՛v3\uVuwۜgxj֓9,,#9˖C毋;@Fux۹ز}뼵u6kFSUڿo3iRDTnQ!ք'cyݽ~ -i$ǎ4Rׯ@J::q]]90̔$1{/´nRv̘K(fj8&M]2WEP/^$r"+V%u` ʙ wX(f^R|˿ y /6si^_4u*6?zJ _Ebc~ "񵼆誕]a4H6gvyIlf^N.]P5&v\)<Lvm7^b'?`IAI7pj*g>ϡbt8s2:M?{x]$ouY}3ӞDT 8iB3'n+=D/:%xEwF\Nx"Jǟ^bǒG7ss*.aNQO+Qy{4}si9 yN ~E0- w+ ; &?AjG~Tafm*]Vպ 罉IcP26Er (6qYkoypҶ~üES~8>_ۖc ut6hC8M >cYZH\0V T҇fWP'QaL~[Ҝfg6%{_~[_u*H^ɠk'16o,ۗ ‘UWh#ZU>`?ڼ%HB"}8r2ϹRwc8f%K8MCmW#c[Vۨ؇ĕ/|}6uzҰJ϶}+"+ĕ+z]ZGYoyCzgtMnO/猚Ը9bc#0X` fm*{kj^]-4*w:3/>:{}T׌&3"xlwהJb R ߵ`dؾ̓5uE[z.n_}3u@ˮ5KT@ ˼#vF qf]q;ٻ=*hoи6w)G<7r-a!71y}q5p8IO!uuT˪M5Qp8=4v:%Zyb+14:9pjgUL_Hihy "=G(W6~r"QRe[n]:} ̝IIx*2H?9Tˍel'%ßE;zXQ ݛ+  #)5d;IxnjRuf;zzm/gulְ|MfR:&#;׶TmT״sx ŋ'ki;by gǡ "]d}.'jFR%Ii"ʹ shHPʹ ǟ+HfMT-&cDu~pJ/3 qv+ZeP5WHARr73`#=!a:V3һQb_ŠaAFGh}ZSA3dfM1yJ?88Z$~A|<JR!?g/_j;И28^aSo-Q =[W*;GQ;υ+y= V `3#z//9[YA0 nNXR}Im?Tâ^,_~Wo[۟ 5=r?)AUVZnՃӴc)g }`*m+Df]tM;&.W XH*֎~S7 ZFޝPZr cT0ȽY7ĿS\8MN=_ITCʁ0dz(NFfmWS+4@Q9",*Ffxɢ@9ib q᫩Y m˶P[#zWi4MͲڳ;YK>3/w;y6't~FV"jEwys$akɬے?* af`PB~nw_輆alۋ'gqZςUyC쎞g8qfYm Yz2fḲj{-\CVi@}POrN{5SħIK,1624.pdZ,+@ơݬi=,N4 Ӭ$a}ѰV_J匷4~zyuGKM_!w{tvxz!]Kgl8FMe-oiԽ ݬ)'L&tsѥikcLR\nf/rL}<KEOd{mE5%m~yG.l!s~Aꞷr:9,#[Vl2ErA+?y$77JɃXj DۮHϮ>ůzJ\bNt8ػy9Ly]^I>J쩚ehAPVLB4g}. ;{K\#YtlY47w5r ʈwJ;#ش(e9I3ۇ-S2mܓG?:2 p9Dh]'ņ㱏ws jE?=kXC?v0ylޙyeqKJ a\MOɓYC#?ocmG|Nkpp|lϭNpұN{ ⾗Y/S=xc?_ᐙڻo<﹋B7o.Waё`H]/᮵$dX=aԏФLnHOTr(buutjgcL_>hDdK'2=TEg˩Lp8 #BXg唟/}BBjo AHB ۏ8eerc]¢5rmOzUȩ碶.j[)gx%2@ΩGd)['NNm{>tgt /GfIL2 %yh"*$.-bjwpDhVݍ [ 3󃹆Az q+iР| AaDEr$oe . BPEC/l{h'ͫy0 .jJp8T7h}V7/>/l˾t+ڍaER0h<OEٞmN/ͮd3ffҤUʅH'Ntp\n5ܰuY7ID$G^{Ry'?>KGd'Ӵ(uj~xRu&@Y7MJB*t<++~^Ϲ[nònR ᵸi[~?BcNOd.xQil gngq{3?` o̜QZmD c>9nfY* ήnĬק^Rff>=gfXvRNj)S' 2+f>-[+Uy+< ˼hi9855jեFԬ]mdH9L܂>Vjw#1zƭ[w8+stf_Yzr/:Ӻ9\w[TZsrg[I>_Wk^̀7S9l'[6giXzUUywB,\ |q1Ej]ÆTf/K7iJkO)q9GӖ2W!{YuL(xE4wq* ^0hp!ڰI;p}ݣ깫/ݽ͙ 6_`R]f㺸0:>?-o,o\Yr5s\5>xV3dßrs5ڟ#۫͠mbW#rkxBj r!A+xwW#f/?Eo=IhOu̜ZN9 4Whg}*_N,9=ϝAK/^rǚ}xaӶMtGYś[s9ϻm{'-gǁޞ~1%7oid7^]ϤQ\>ER_қ2go?s-]eC?<&Q|q ! ؀~xg%c'/s3w\w :y~m/IB+U?u-e洩*j֩O: x@tjyynY@5YdIx[*k~^&LO+&+#hX!,jMRe9`Mf P̜כnIFߟg?喱l:fZ?^(&̜1y_ςIxF·o“UeY{ǾcfFw"V}53\m>\FWpu\ŋ>c۩A"}99 k {D!~6d@]{{2{ᷬKmiӯڟ,~&ڟS-_ X|)?}^_H3{ X IDAT\ܝ9~y󧏣y#ga&n`Tߋ6 |mVgW|ᇼ? 6T3o叺ÊY2E.OJ2+ϑen4׳-Iޭ|u3"?%?#id=Le{/ ?p2ܝ3ٞTPK-Pf9 wyfНO:a#3C$=9֎)|͊3]~8\Ѵ_^vg}3N\4Qw 'cMNp@O'߻ne#ih]􎿞ׇ,eUwͧeּ}LMCјt؛'=/Qc>1U2,,3p<ڭ*~v+c37g.吧,O}J 5a)/;nzA48'鼴3" hpuϜZ1iְe",/k׬zDDѴm(n=_q볇=Se7S7E 'r}:ecIuß51wY`d}N9XJuE b[wpt/<7=ڟ<yZY}}T n- b]n/]$^Zi*\eVO]!ϺwEdi0yOD[쯔o|8hH޳QfϏ?:B*tÝ=Oy- .i˪˳ΜYY@H^ mwNat, |8<^'þRW֌d}o7=?cIT+Bhフ{'.,f- oF;7gGoFyUlݿ֧'f թh3fu%׎ckyi' /%*Ob{|GȌiSrA?7jJFxn?~=L3M7513z 00$mOď捫2 L^^y}ןܯ/H J8Ad*2x2٣;~"+\ @nc)w$VK a[?BO[M[uӮj4wz''0ٟaQm;Y1 #h[^r.#.*Ձ'kLds/2f˿ߢIx͹fOn'y=Bק#o'yCL:\˜Vqx9\=vŷ&ѱBH{?cL侻U:}op'h7FJg\F?,i)yש߸ynp7hL)IMMeKOrqkOsڽZY7渋a'zN]ڜ;̛\>r\4Nq=M%)]g=MZȻG[iBo߮ 5x5?k3|QU+RvD\lj䟰4/i/F#rIGdWzw-\#鯽0hЬy-tt: f$7=:=wʾfdK\]7=JBřAwDtJsdGdC2}ꫥWiS_uf5S$ҟ~,&/x=W0.~BW)S3n>  X$?sG%ԢS}LYW1j3&bDNƛGuS8r{Bczns|IgԂLGc'ftD z츲n)4K-B#fQc)&I 5%W*eԢHiHKM)~:5NIKA&"" [S)DDd""bk 25ؚLDDlMAv Hg #^Eۖߴ%\Hƕxg@E;J-o k&/ Bt<λT--v6ld_/IDiw}8S'WT,3 '|8a5b=$lo.l[Eo8UƭZѻi[K߲,,3b4-Ėu3$#7e-\wԮR\zði]L|`(wH|\o$wZfqxޡ֡M[S+x$ҵ;^\_)C7.]s?\6w:]z)k&Ѯu;[Na-Frwb[qZρ|- LW.4o#&fZڑߢ=^ʤ.(+>f~|N4n2zfqo_OysL˶ilq{yȾAAv lYByֱxk7mǛoBϜ/~R;ϐKn%%|_\u5sw7ͅK}/|>QZF9c\Fǧobw(כ9ը)+f o3asY`!STKy/_n|5Sު1osu9v;ٷ]<BŘˆʕjKDcK, oi/+}Cޛ39OR} Zca-3d<6K֮\?k[{pݧxka}dg hyl.wOɫxԎqw%wv8WgiP!M8#.lhDen>坿xą8q1ɧH'tXԫܛ/%}r^{%qa.BpGNJl(Oߎ^1.j1E0+>v<.Ϭɚb tsuoae_}ȋE rnx;lB*']#;kʰd`Xly ]g w(;RH.zz +RGtu8\Ѵ ?\'-Tgmpxrmq7uwRl)eLi/+ǣg?ԇї=BvƷ)إJ oquTG|f"暛`Xd; ǦW{h x(zm0o2G UyOxsK<+̼ɫVp;:1}s5^j^s4vujx!>~%Yv[˯31՘7d7Xh}Ef , GTotǩCAvs8) ֭[Ѹw 3GgᏜWĮ㆞]hڪ_͋.詸G7+*FϠY\xXf2㉛ۉoӑN=v =3x9-u!=:te{:?|һ)_G~\JVgE+P}htHơn YR.EeSwѹ]ZgĄhu4=Nƙw[vu!Ǩϐ\MUJJ :#u{oe;uL$o]C ߭xE"RHݺ͖u3DtLDDlMA&"" [S)DDd""bk 22ٗSՋz\'v?[$%f?:pDDPn#*TzY2@tkn*&>3-Cشa&|G\jոbU8-Th9tz%% 6" oKZXH[ʬf9S扌)OxxtR(tb0am(Ȏk[vED s'cLDD e&` eݜd""eYlcII:x6n*V 'ضZ qx֯OVm /0.==2hUA'[vnæ OCӰQ36lZ`_C݆Mqe&{s4lڒvgb/>{\P=j_Ϟ݁EԓȾ} %i?C`{+5XL_f}W%CZwcL9l'9O[?Z4k&׹gߪ ڟ͠1SI{Oku-bdoi=6|2^]8DZL xw1񁡜ޱ#:pa,ޑz ddmz;v}7snlHi?qnV 1g\Ɓ ^Q-3@iB˵7?aUdBO3ͪ1osu9v;ٷ]<_ח{R֯^}rɭ P Gݫ%kؔ~3Ɨqk3s_g!vzϦlj/u#a'^w+wGU,}񍯿$yD7=l3tsoᅱӈ qAXX?T{+&NUC ;{Gȉ/>.&o˞+v`Gٚܘw_o=BӀP+-ά>q5`}YɈ#u0~uIqgqXVgqVऀOO}$so ?إ`&ez5<~4F9s &]yh'Lo_'9oџDco}u-磡M ۿY~H8 >0ż1i;Ͻ|+;=Mo`΋cxWJc}{e\1;'- 2TOH m̀Q9!~<7؅-Ȋpĵ}0h8/㦩=x3ͭӓYO%rMN֋ʦDw ?h5S;/zz!zݜ3.tlu> =nGYewj@DhAvݢ\Wȸe=\-d 1" -)f3ZuCܝw#&pÆe+ 6\gX>ciNOU?2]EDN$'lo,,0,2ϭ@ Qvd""NL3yp8,mCDD0e~Df웈[dQAz?},5mʾ=;ʺ""lۧ299y^'7<Ȗ}QY7ADDl̃;ʺ ""PM(^DDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25禭DvRR5NReٴ<d""T۶m yަ,S(WY7@DDNLɉ1& ػ'HP:(""S""bk:(""S""bk:(""S""bk:(""S""bk:(""S""bk:(""S""bk:(""S""bk:(""P)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&""/o IDAT [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25ؚLDDlMA&"" [S)DDd""bk 25WY7@DDN[ڄe`e~naY~h$4 ,2L+p3+̌2mN-)DDd""bk 25!""hς^?ZnyZSr 2try|?|qhMԢؚLDDlMA&"" [""Ԗ͛ٳkWᕫVneТtD&""AթW*VJ5w<2jUA 2 0 6OLl,ӶC'|>/ɉeܺd""R(A&MTLuPH.4dtˉC7{ebG3MAg.YYx8+T iD@PXw`bQ (*"AJ ^BH.$G7}qw;3;;;Ofoo|;YZ'7+|{ b$ !aشcӇnzwаSTBj_"!FѦ]GB,dR M7:,VЋB$* QMj"B5 dB!ZGv0ZJPP R~ƚ+BN:`6+a9 ;XZ dYiܶ 2o<LRwVBQ'ݽJ}pއ~dsz,րZPj5ޱhP4?3 ]|Q4!s CUɤCBnޱ=tVY^vUZ-R u dBӔQFWyS?@V֭PKe0"C@&|jνt֍j Jj=ŷBQJ&RE_ቮܾ4:tB^^x0@j_ҭ[W@jJȎ:iğH2Uumrs p 0dD&|*3O^ QSRriӮ=K}mՎmۋ7rjQ {[ndk!|d=mEu.%km6ù]CGZ>յkW @״j sWtX] d:g.R.sN-VT!K;BDN-6nڌ{b'v:s3f *sSG֭+k!|rlܴ ''=Wj5K6oJAAyZ8·ܧ)vj#V <^07B4$7+=<(cD&W- ;O^ @VOCs iŪuZ'$ߦxfe8-BGvZܵu=;vQjWO#]|I~sOyNB湏;ӂP \ۄG_UTNB!No=KB ȄB5 dB!2!~MB&L!_@&¯I B$y{eHMAҧO/^ *qK-jtW*xV,Qi5lU *=81>˿2ly\.NZ-경_-oz, 7P{Ӭ؛M~v&ο7& gGO H+m/2$wfQ& \n5V?8B1;#H  Oׁ<\9N^G\sGxwZ?g/Wzקn"K3r#;w/-ʿΌk[W)֓3?w21VZ\^#{̶賱O^n`zY|>1=հ&uyVV8}]־~t?~{fQ6N~ x@C|F j{U8&*+o#zObۿiPw%hйwr3n' q :eSݷl>}>.*S3w-[. ,UNq2/ٓM׳cS7erLw`۸0=ߋ4^y?摮Z>[r^l0{ Xw!^C/?KhhC%M5^qL#tD/^yb0ןՅ?3 &^t-M'~Ƣa vk4/Y-И2zdJ;0FPcz?N0W ɗ@̤/X<%Gck|L9uݛ:UZX8n&sY5Oߝр+/'㲗yY(@ òۀ}yno6̼9$(r}QZ'%Kry*JiSe\֐x$І_?򤒏!ٸ03xɤ~}yjL=#ժ)$XλTԗǷ^ca/S:r/t$AweskG`_r]Pf)Fd܃f| \-ZNa-%@Bb\Cze5s􊕐Ϗ93~@{= AfҷOeYݬ5(  4Y5Q[⊯wf-`BBv{J*yTܙgY7HP B, *' Kc&ν|<&0{}Eel >, xno1ތì{/jgY'';&Lm4+k ^ߟ)U޹G1*l&1U(f9+  1+sZ^8.*Sms?R)J@V{Wҍ~Sj3g5{z`fHvO,s n'4 p{1m{b_f2~Y8~~Ʀ_娗J!si!w#/Iml&sc/kMx7,C@lhs3g5{lih)|4 0{өj>X~|3t`%Wd_4fZNJZ TjiYmv{۷ah^O\~.Y/uRb;n4+7a'X4)?N6Sە%pG֟$+(˭\6{}dY.*S{3[Db2m枿4=aq/CZ7w_v9SYw ?7Ѩ4 9Sxz4=o> s(=^w_+7>- ZxMoh'5&cZ tyLWHW h~'箃b_>9Qr5%m?Jc޺bi4ݜ_fsx遅uQGzڏTj޶۾-HL@ds( صX['%e?O/ׄŝXDyz)N屵x֥ʛw ؜W8zl";ǨH[IQ{X?ns'cxL}3Ȉ <@{w`6Zfp9hb coh{_5[u iHc~|q>ږFH ųXnz%(z臝4u<-o/ REǜ;`mЛ᭞gğ3X~'7^F(m4vtRLc{"$[W(I9ۣ48 _Iןɘw2`[my1߼e+ XPv{۷m%1.޹  T.lv"mKm?Ow;i1u^cr"P{~o!q};G>!g ᛷV$/A1W n=o>(]oo۬;qY+JPm,sG/Lgbaф ˳Cj,"_xpQs0i$ֻnsf,ᢱ/ ѼE/n@&jnV/n8%ߒ=B5 dB!2!~MB&L!_@&¯I Bȶ~#%0*ubQ&pm'U+-iB}{}Hl" Q.MUٳk[`q⫔|}O-d1]96 ~lЦ]"]9_,&/+BڿGjRGΑɴhQEZdrss )HWj=ibAcLKג/Yuۿz sXg:jʲ??WhG'=R3rVQ"?:YرwϨ#jBx'Lq\SPPjh{RUIA~>b0dy|5[NϩNQ9UϠگ3N#2jxna'@tRSҾ]{1~#.IMTUUOiŇ↳"Dh5|ʁ '&&ٌ #3+WJȆ̝9\<Vj*Fn6z5Ά#ѪiQ fPGZqMt5]'QLѧT 6-[b{ g.$::EQj|B@MF2UUxTrBrfsPL*]a%|i3wdQ3h @c=ƞ]ټi3֯i{t9L6lHdd$ݻu+kڳG|r=^LviѺz;63WqӅpfwz Xc4kO{w'X\+uVvVGۿ˥њG0:.P\tm|.9x4\.zunyKwEv\Zl;vץV+~,uO MӱرX`@`P ;w"))۳jT5s>mu#yiѾNuŇo]hؙc| `ב㡓mcX³|5Bu-/X ՍĎ]еW/ڪj.U哵qj?^7tjt6N T T4cKؿibMemgE깼}tTݴj[\!sR X9RzϠQW( >NE:jnkkހp23o C7ؗ|VquvÌ+.S эXq Crr2yr&yᶇb6lߏS/s^Ul/KZ z.o'V =NYjkAzZGC4i &ˮbl6&)%)v~[0mԄtt]{?M]-{k:wI]2o{B7YoKBt ~KHl@H<63/.EG#.}I 3U/H]ܽ9̚q#163f[4̜I:^\}PfU[LXq;2~ui]ąbcͯ\˫0#w[_soGW{[bA1l\YLtPKq̶.-zOMnwg @bL/tʼn ^MmBQQU[=j2/xlz'cɟԉ5SiB (ߕ:y8SsTd/ QL- C5\;z[q'm"\V?nz~:t1Ylv((|/Pf Õn4+[RsspJ|.E禯di@{ʼn^ȜHIamzhiDцbiYONrXn?# GBGG0I{C[nՠ(O08 M-ryϋ|56^`NEhai2g C芓v=ؖ{m$ahhhXE V-lCs9\yy0빼}:jU픷|nQ5@wm{ټszٺaՏ Ya<[2؝E!V9@…N[`V41f=dxou=˚p乤t4W:?a-.+L&6xmg:xh=[pn΍}t^왬[´MV:_'p#=&ouV^^άYzvs0&]SmV0MygZjQu;#u-?-go,n"!!ȨH^޾$/ļvsމjkCm"@QsCio;,xTZXI]uwltڿԉ?Qj2YNv6vpV\M0PX^؈joՌ=Њ})9tl䱜fS8 362Ou( +MqxG?K\7| Y*sݬw?7fQZ9xKA񐷧t|?9܁%b07-rxhyj&sIS !Q$뻮h-D4`HXxh4 'ݹL^T#Svy F\q.|ҟ)3y*c~FVwsEqOd)oyomk32?1IWޱqceSm,sG/LgbϭS'?¤S7xqKfFFgv;vo>zCn=@.3_f֭\{U<3Xng(j3O>ƭwKF*neۿgcNxVb6)MveG僘ULJo`܄)U;%y/}="SC4Lf/_m6hݺ5`{nܹص2{lČ`:x-mkd2jҦ p?WȌ_Jh84[h "#+~uby8iע.γ* !!ha( @XX(aa4mޔ}{F||< 6}={6z+.(#bW dXDFEVQ[Y[/dRpXBJ1,Sd5}tt=Rs:]\N4;1GA>Y\4j(»{"Q: qY,"##iE{ o4<81U bB:kM~g90ܿ'u&Ed2i:iL''"ߔ QIUmV() rrNuDS'Zb_(+DĠL<0>?o(,N?iKրik2(k"DILh&n[Ĥ"--FTg,OuR5hF(AL7uבyb  :: 6!!!u-YVD 3bX'guH[zj=-f4 ~HSUJY1?nZ?z7iNr>ZvQ}4nܬʁHڿgmRlX0M\u" QMطw7 Æ\t +Z3l))Tef?&MTt +ڶOY8rs+a!jb!(0}k5HWD  "Dm/DɯzB5 dB!2!~MB&L!_@&¯I BDp\ZB)ł!$ZطU+z4M[$ !3D6>hݦ]mGY}w>~'{M[a2MkơXl4kW@VWng!Hf͉mq57jYbzؑ4jڬ!CZq.N49(R'W@&¯I B$ !k E|B"7ά$M">!:;>Dn\xci~;wϳHHL#klvz-Ky9OHdmJBF2]Y9m|e::zXZg-ޜϼWjnꪷp'.a˦,=>GxuMRxOQy!D}P'YDDrɹj;d;^fy^=9c//8qGoϞtrïOۓҿ7̞'MdbO,Io9!R.~L"aoλS.X̲,'sF^[`%n%.|ُWb֗0/Xp/:0?ټOr 핟6g6]3.EXқCK'sȩ@ݰti<^{z uE7{&&̊3^_k/A\ ε~$L!(7ˑ,'0:lNPy\?{@9g߄ c<ɛk~3)+n@pt\R: hy-oB29?Dw0V>y+^!I z'M6=;KK÷,o uL8.ͽ{_lTEj68w^`I70jp X04ʛ2[ѱ7<.UgƯ,Z fh8p,o>S#2o==ed듮<{^'Wp;Cy;˾h᪏%-ID9gt/}>;-)0.Z xpaM;Ӹ~ B|V^p^])f3g<Y=O!#Ʋ?Wzʉx|&\M >4M!(SK_]<>|k&Lr){gDVVYW^ukON>E%BQY:ލ=;v1BT\# ¯I f3^BMS1k깘MH9t!CӸ/@Vϝ=`0~]۷i#~4]۷O8{.NC@q <%?|E4MN3 !3D6ߠsi"#XHܝe<1@!P]NT4 d\]hBQB&L!_@&¯I B$ !kȄB5 dB!~GKA~B!*gl֋S|BQa> dyTBQB&L!_@&¯I B$ !kȄB5 dB!2!~MB&L!_ٽ~#%02ieiԨ CI]!)& 5,ۻKFfOcT=vϱ*$8E_,CZub.r,m%UbMD.r,.YL^0gaA(b !)S_8NUB(VlEQLu4'< G.2\ W|*4M_ &<4pSp4~;f٭lpzyrsi=yX`b P+:ǃ C+ j4'~%;7` df NfYɡL4 Wh4À-}T#<4M?uo^ۋ_W!j~pnCWQ4;e2(fwS6"s:]̘7YfGpjJ7sH` LahDP>?Y% " !D/^Bנ\ Ҡ%Ϲ306|?еi8{-'MSOU bwh^ CB"**t@7ܓKհXذ;/~ٌeS'!D?\ӄ̆cS& t}hrA`#vbt5:Oat,LtDvO)jޖʮLv&gϖch;i;95Dzuc^޽f-==kצnuoN_Qx ‘;4Ҭ{3bPZvsC]{A;Fnn]:׺zG^,k_<a4Me_; R݁Kb#2M{2x56pt=* MG Tvziʠ^H؅]pyET!^|fzم:f<,? ?{4GeC`?ESdd$Y9eqhG9p4)>M-#YeC籑W\]ϖ?2\1jJ= ~-`lt=g~Ɋ?۷=/+_[Ӝ`]7tÉu{*Ͼ}Y-,'׏9xts=m!7g-e˿ٸbRc.bJm^ɤ*\p y^a?Xӥ 3nn; $""BCCoo*3I>ñ|2;ɷqj|7ĺ4OEo8(y?7NgB%Ze.`f͸-[f${g|jjBCz^[ }clcp[^?CP ;op{%Wץ+wA7Fs-٧~{GA0v\;9v \'&0<0t rp|V8 2Hc·#[S (gp!쵘, h8q83͉֦gqA=Ga\8 3c=!'O02ab /?>*3].#=yt4Y>0us[txu.Bd-sȶ[{-6gdሪ;4 owU@fvUCAx)oaHjL{g'*1W7X0rZgӡGLՙ“CU:řnЩ} Н%-wBT2xffq>aTC#>c wqD9 )tf;렘i8pu[pn΍}t( =5K|>@xgZiь<4\U\Xy,nߔ袩e•&OpuXXz8fń3 O?q^t}?;2g 1km̠Wpc[>[Q=wBQxzk)?k -cB 06,ش^X" C^1gϞöic/FNgq+ D)VNf2ݳ]{2I r>"pAt֋>î1)eրOԢ7)%^t&EX"Xe3/|쟫/-O)OV@DޜgO\7uԙoח!BSw| U鲙}>`|9*ƗQڟ~ʽq(A Ť: c[,K.[?s1s̴̶&+d2OQ6H\X?wDЁ5%X":mBT~gJPFv ysAӇwN+(H)5ҩOGdwb!22ZN=|"˹zr3ϟGff&W=O睚 ՊHKvoB]`hW?pAOb_( lќ/ٜ~K@MFNƞӌ-,B5b"%8JxT '`RjguoO-`,vmѤ?ɬܧH= jNۄ"##Kބ/m4\ۋRū ͭH1fzGol6bbc0[-uewAf ޓ ۄ&-Z4'aCVy¿x>R̬Wl!""8¼3򆶶1(&I^~>.WրBi0"#|j`'_ U˖DGEt8{dR fӋ5~,(8h T澢l6cX fa6pYq("`Z(ǧ̨f34]!Ky> dfr_/JTEN QH虯Cn&ING˸x_%yZINGͤA QH虯C}38xy,?];T Ð0P]*vlgy۟ JB_<5φq6|KhjnGu0[6oA4iڜ $8HXRM>=ն}Zđdb!(0BIzGŒj?6!!!a !D1/֬9! dB!2!~MB&L!_@&¯I B$ !kȄB5 dB! iϯr!Ub㯿#ڠ"BTHZAoCJѩE2 !rK72.a)˩ !IK9Hvf ?LP/0t`b`F9BoCEA N d8EeB!*쏿.IGEME'IENDB`blueproximity-1.2.5.orig/doc/manual_html_m16b1226e.png0000644000175000017500000012344410761555105022322 0ustar nitaglfnitaglfPNG  IHDRQHsBIT|dtEXtCREATORgnome-panel-screenshot7w IDATxw|{- $PB$.JSIQA)H/  ( ]EѻH=@zrmǥ]ripJvg7ofIؠϋ5[@ Km;"I{2p%Vof~89 O:@ 2A1KKW57L h)y;=tsFNƜ' @I〤qDA L`L 6kT̉Q @ <-o9D&1ǵ/Cڇ(˶4Y6cAL "_m;IhWGkbyMZA{c!]  kdLhRĞmW,c6 ǝCW4l:ٔkw"~?og{:t@ ((dĨO\Ɉ)zA㠆3 fhb{AX, ƐEqs;§r<Ssm.ɽ[e' A!~ܼG6bK߷?alEܜ1.=OW>-շ*9~;W~r>,c20yw0es<#ݚV|,='/6e%P7Uxgl6glLr(L~h=T ׁoNCW)ř)>nS4 #c>rqGh[^DM8K`S6#2)o~ Osʵ5?Cۨ4ߚ3 wqiJГZ1sm~tR~ΑKqƙ4emz&- mDR~!ߡ%ߌ.f<ݵTZ;*/Zku;A&GHPgdf9eJOr 3\Uچ7S2)P@>|ءןaJ\DMi^HB|7{4Ӆ߳t0v?Jes%aJ#ϾEDS~bP3o:C#HbH9`uͩDiKe=% ! l>/F>Ht5HQW$H88QP8czw`4*R*b`5?nPIgB4AeqH8ێ|GW'*-GQLlEܻρfʧQ4:JhqwkkRwPKBc{trxS4 82iGU ;Iu{n ZGE_ Q[V| ezgg*~YpTl/7bN &T^Ṹ-KК=:,M\;5KOBwQOăX]Mq8+=qzSʿӳJ˭2_˪Lz=4L@lwxڢ:Wcn㯉Qmyvvrf6f׮c1KD ZGވкxAVpRKxx ΀γUzͫ@Ms, !. 37FkH^N 5.lN0IM- &ևjxi$CI\G p?ڽeY1xV͐q*Sc68zhprI]t֒ 4AJ%bb3v2u`)'KH9Lu}$*8J+.ez<=V"XYM.+e3#1,ZGr‚[͑Ջe*;OgǺDVϙ\֣wBs^`H,^OjJ d*$)cg6ijq+1wUqGR(þ#b23|vW;D=^: MrS8λ#ZSʵ-Q㮯h6s ʝ+>DhֶUz\yЂE\U:vŧtLNuJQ %=ՔpH;K*"* 9ż8z uZ'7b(^ƃ2őfGV/Dr񝮔r4sJRprKC2I > {n?ұCk\»YEڴ+/OF-QImӦWw4x6yYc* 8Y>z0ug?-[1Fpij23,jeYVJ]ȉ= kHۤ5u %αR$ {\ڱA?bwaPU! ՕhDo2Dp~EQ{F6e ,\ߚO7!5TIh*ܜ5T/VL6] S_&@/ҪXn#nZTСo#&,VD* 5^:ݖ)95Sk]}t%IB%IDmɘk&QVPUxw r863GQ. }fZ-eۭwRd<Cl97DLdÙӐ=m N Il4g/3x<2ZEuzd*E\hL2.ME x,L3 xW\u{@&|E[],-&&6 @k4k<@ xZh\<1׶@c\̯euw@  D AF2@ kD AF2@ kD AF2@ kD AF2@ kD AF2@ k4ym@ x~l/e9y"U*JWkweh^4J fǟ:IGnsO߽Y6K@R]̗v.$)Q& R0gdPl鹣[/~8M<"v d7o\a4j"~eP+xF0fn]̮[tkhHr;o{51L(4HZH*\v.wivL bg?ϵzw@9KhEr;˲Zɨk8$!!a6c`@vMD./A]΅BRHYK 3fT*5x)ШZ̲@/7 RQ /V=۵((^sa@)4SB 0v~/'M.ڹYnLQ! :32΅Bʢ?{:#S&Bh炏eBqI gU|ok>^('leuK vEE3˟EJ D\9x &sJ5XV_&g7yY:͹4(W)Zs8~>pӮ۟G,뺕XwbO1 {{ؒ>Y{[ I*=v d,g888=%lz-;kezg"vLriwZ_{hLYhu7_ AvJRw3eg4y˰GW?-U=d*\lAp#ф(5oN?H5"<뿣OǎЪ5c[) yX) 2sK`ަgdt JJdpS)w(iʿRc/G([1qF˹&s>zR/6]7Pw{ ; E(!4fZhHAr*ڐ#d* 裎3TfWbm@:_h+L3Xޯ<+F&Ѭd[?NH1Vr GTQd ט=-ժEpZmљ/.Fg+IUȾnn4<_ߏGQ>+kң+Eؓ^7^Nl7lǮeBԠ^lѦi#*V+C>'.|z7 cS1*&Iqfؼiьa7Dl}h\а:Tӌne^\ cug9;x^ū'֩oUd;VL%]g%wZ{wv}7{̿2~jmMÙf/ePվ?Щkfnd;d9á("'yzo5 Mti$}t>GޫrNofd˃1t-Doٵc׼l61cT5a랽#MMW>MґumfGi=j!Ǐg~??f3x)H=B{pub_?DgVݎM))8C 7M֍57Ye''Ö%VWFfd9ۅ݋m^5W?;ȸ+&zfsc˖b=z=&XtI:Q]KcsFֺ.K6P!ܰl_qFmbٍ2gM'IqfMQgty2ҞGlgۭٷ;1uHsSg<, '/ǰpz|t*:o^1K?^ʼn,b@Q,DâI2 tm VS47ztBQ(Epe Ld؎@PAdS'A~~32El6e8d>F4|yưOJ˽o>cfwfOKI kS4e lN){ok2瓮ʠ'}'6܋6ݖd;+9EPdL+2!S_a6P϶~hJ0fQ}4Y_m3.b;O=)l6V<:^ҪI7}fu]6jFzui=ڽ1ᥜSl .egHOy#]嗄&ͬuK#+kGEt Z@Waƨi3?zrͤgҲ4%>WgwmM?}*1`.#HNǏxkYRƁk4:kSi]qPI7b=JN.Sg IDATԐ4Ns's &CIT:o:hR5ulڭ fd;ni.BIu@&6*_D뷊saהO 32lYWf"I*w`GqFt7ĜBv#AJvJxdCAfwN&m0"3.Xd=@i 9_Qc A]qnYhl6?GPݨʠ7'O~GI;l1+G xzR*[sۤ׆ =X:ㆤQJjMeo=S7m~G۲/2}v݊FQ"S29׸a3kP:/]4uι y9' Tq&zY&ibl 䟨| ڏdi:2 ktȆ︨7R"ˈ@{K IIij|kx%nh%KYRʻj ANg6LsZR'R:y:`y5;'ue*.Ztd.IRIUNJx-/R94Ny%*yf5=6.MLcέƛᢵ_"=}Z$UDޠЎYڬc4M6Ѫҷaz6إ+t{mzq",|e6No1(^%kXT4jƟov"'yp,nENoKymT6Ee'@fb67X]zՀ KzȒíT'^vDE Aj`yu_1Ύ gv]qUޡ)^ uP%^g݄N8pW)ʈ];nHHYIe&E/%OvwKl7 j{+CToI <|ޗ9v < |q7Q\]X9d/=^EoSBPSY>ْ~gJ6רE3{*hc[| `28=WhV1"h9O^Ae>~ƫ=?@Lk^ɋ0ن(֟SfԌvRڎLMUzW.M]?lMIjg*8hlFHߑկYYD4_/Jמo)O뢞/kc8?|#"1!zJ6󇇇UOô}~;WS;~;Uٷk,Y0 ;/3`0{$T*ʡٖpL()'>#6R2Iı}ߑH{B{/L´ TbY_'#$o\X(@tǮk%A!F@ xҢ$%ˆT'Kg&1>6MxjXqykH!{[ 1vD g􉏋evewd > qg!e@ 5"  _#@ 5"  _#@ 5"  _#@ 5"  _#@ 5"  _#@ 5"  _#@ 5"  _#@ 5L NKVL om5| tgЬJ LҞ3ozO"#͔gfr0xx8.FcuRhUf] <3~.^(O_c_e4oT B kD70nM޽ PBe*9z q&q4WAT׊7b)EW, ܚ!U ߚeYl̩Ztwe;C{%(M; fםjx;7]X6%>B$w7qk՘7-ۭxOszF\Z~@%ÜU!kGESwtHwK˵é#4лxn]Z剿oq*ys$*+Euy0 1y:n1?V8'?*'l]n-wfq>eRdU7ƕKB|d}څ[筎M(?FowȆMSyT'Q ]᥍e\}/ZvsiU G~fzyUSEuJf͜WkSJ=ޟR:$ !Ru{!2# ?k<#$1^|U 7_`{YƝ0hXoqL @L @L @L @q :F)M16I2 jv"w03@$0e.WQS 7bP'̍kW4lޚQė$ vWQ? o]*@&I-zaw:e+Tp1M .iޑ/G8<YynHyA$ެଖڌӬoXl{ɱnF7a^΃&oLӾp٣ޤ^0*W NN|q1&m{ 9̝"SWW]i۶ uwR1G{B֢v|iolˮ^;xKT^~r-3ҦiC*ʐy$c96o,moBH7Def# {=!Uéݴ~b{V0ՙn"^kZ7Jǫ~C$6+V.}ԬLr5-u!(;6 7wu(CJ~44U^EkK.nnδ3)zχ Jz컓ҳYV:5*kڽ1Ȥ}~EK\[j5'ضMOVM{g$V~oݺEph޲nBNSzK}i.[lj)9fvʚn^N;/>%{Œqѹ5wa7emÌ]͛p>li_`Oۖ}YEK9ybe諃χ,?o=VG0f}Sǎp`|v-O'c:qW~n]@wcF۳S@a`6<ё\=eYp/˾E۩e҃ lӴĝH"f[7p= :S/O_A=N-WSoRy.1wk'l{Jǭ$Ife~9}Np]ja8~f?'elu,ڈ &&[m2O8@N F,c񭸔g ũH:x;ܶtMO]{GQ%_Yg fӛ-7[7ΑN7v ,c?JM9Tjkgn{leW[EtIүbg2g|[F$jY)CD-JSj=2KA{8R}$C>2.)KjK[Ed Qiν!*Fz$eU=RU"H*G+":-څ$Zʆ3W[Sg v c>}Žb}|0bދJICw7gh;ӳCm8z#I}"=[mF21\o#ז/KdGiRgϱ:OK.(_,'PVXyι 9{EZah+ag7t\ԧ0<eW!0ϥwwL-:dc$w r5sܩ'e3ε&gR>jW.ʇ#!oe%,eIŎ.p΃ ƷΖXl(zYqFt M)lf#;٥l5DEX8m Wn\U.2? =v{KRբVzXyȗ҆T fu'뿡^vZԪMhjRF]CbңUb߱O$ ?)j"`i뾠¹eԪ^/ Dy#KJ&ힹmRz輚 jݞW蓛nӗ _Jί:{95?wOJA5MyZ*' ~pcI{Ч!ZU u2d}슿^4=P,awAquwZ9 -;/:zďc:ѹJU4nB㦽);RUFL#i((?EQߥ_/FQLF#jMhd׏;7/'E%_}iEuҢ@i9~۶ wV@rrdlݴv:]~nw@)Pϵ`ǖuDܽ,OO?mwjhbJI " OVGphaym@`WLF&c_CL x<+7@PP=@L @L @'hdz_U4 ZLkVڕ/hS_ IDAT`ILLD7l܌Av[D 07]aҰykJY IʄQ2i|6L\p ?)ϿC2 w4iٞ)BbwjԵ[7mo]GnL xܻ}%JBb8@nߺ'lˉ F2Zٔ|E 5D Lc" AA07{U.g#]\ͱYMjc}~~~T=Tt , )[2cym@l(Ox3sCFR53Y j)xj<>#扒fd9eTt޸_J۶mݬ#_쾓i~CԃaTOA7&ilQoRVQE'Ald6=[n?`9MC{'j-j7gf9ʶ5^M^۽zDHH5/8i.m6RH G1<<°R5M;0+V>wh>[I>{$kMAr5xoHі|ϕF+оA]jV DLۖu:hTwӻy(nTyc8j,5э]LЖRE=qsZnr%6zl:o<==)OnKS%^d\x8ےMoH ZBIUK"J U RDC H6 TH|fg{잽3;;:R|0.'Wsh\Jqn7?>K+cR8m'i;[; d8gYiWfT4igTM 444zr_Mdd5l۶ɠ3 …1-4Q{)%v;XϜ`S pJc+܊N]eh>?xpng/}\oUdŻDEDpn2uI7W=WT#3_j}^6nYQلOi:>>*k J,ؖI¶}V,EQR}xx}f~+mܧ[l߲T u"4j0%m㏞z!M{aNAj>clL{4*6Eyo;֓Vl*?z Rд{bÎ`\lX1FlN~/:~N{V棱ywd߇DhJWj1tad˖{[.Xfְh' ]q>\9rP>?O}qD[~wˇaAc+V~+ދN\%4+Jmk{}}{-UГ o`3S㛵c(5-o=@q@r1n?CmBPÊĄm`|q E(T M<:y6 -3_j}VoW3gAuƦ,y2# ֩N,ZO4$I/eQkKaѩU6ИS;+-:,|A#P[uҦrj=cKo%$>ZgTj]uV'eWnRH8+ !fDo&#ֺ&:zبU4#̹s|*M6utoP4P>Y 1Vv܌2pHk[O8th?e,XgW!! n9b寘m@&F1''5+i~JNǚRUnܸ*ƣd*'j?doy5fܛ58e@T1<_ܙ^ψb?7azn\Z+Yn0WSg(g7L^v{T ?jfԬeKdíЛ˺b)"IM6tr`uMaC;Ү ֮-ʠK0/s8,JeCy?02¹af,ai2)ctT˧[zc 0! `c'"my+'L1%XvE{>XII^3|8ѭbř0Ӿo\mzKƨ WZUƨ0m[xóblg6)/ PnY͍]'q~9˾;)֕^/_Fc5`@Kp3.O$@e ?_]xF/wϭ[G`qT|9%kƿKe[YeEu/:*&oZA4^mY_'~ha=Iu̫}qdo*.-HX ĢfSTZ->&~N*L걥^9Aڄ6gPMwAŌK)z`2MuS.-numx:Pbk^ fAg$r\p)=Kmiw䁽#j1eWX2^θ:o(qprJ-3_Fc)܎vsmАgsuT1Ǘf5F8Tߥ$zy~ZCv+Y*d+/={7mP#X4t)E$=WTL> s%,Wce'Jd2JCLaAKmY7cn%PãlbqP˞:Y -,*nA#Cd#zx+xTj"$ 4 fs|PL&6G|ȄfE<*Seռ 9mkX{B52̃ 1oS'# CQX䈬tU^ 1#?Χ؞68Nϕ5)hT/V!#2>WǭDތOI%^&'7leq#2TZ-:'wNþ#ѵ~=۷e 9}%AP *VCAS3€><Uo m&g>KG= ՎP孟ҺQ=|+qBbI{uz#b8:5ioGw56=plϮl)>BCCiҼή>4oAhhh>LdO՛4 &Z;Za&Mcv9#[h:HSWbl'; ߦb7aNҩh?q9at{ 2G=ͯ?4e.nԘ-˞>TleehTbWNöRgnnS;q v}='+@Iu}_v2kVo™Sۺ_sdu^wq+װmv~'N0C?ztڱ-~~Lu;] l!< P~ g>>'?3r<Ⴢ F}sw {֪Rd鿄7ICf6 gvOB+]yc?'6;ArO1_#”UL>>?xpng/}\oUdŻDEDpn23ce#=MuNŃ)[~uIw}_f2]=+\߼;YF mnC0^}HtYʮCJl"{Q+·+G=W.pW/7<{kߏnP֩N,Y~lpquF1o}yZ'쒒!Zřh P-z> rK}IΨ:J['u ̝1B' 8Z)S;$uM;kϕ/tWF3㨵ɶΩ6j" Hm+;'Wk R$kSWHN{|Jce(wƳ֎Fڒ2vuxÅy#C.sJ% (JzǙӞ^YM=Vbħ8a¾zR&WO|l&֬&Cu:=rƍ݇XW05';T.>!V!;̓G6ެ(:R^ψb?7azn\Z+پZn0WSg(g7L^v{T ?jfԬeLdaS G+lɥ ~X؏eߎfx+/aG}~ckph|&zUR]ڵ%]4x eŦ9&=x")ܖ׋"p+&~$YKîhO+0)Ckv&A'_̽8ػ|MKMvW"J^3pơm+/zxV-p,&ڞ=j֭3#ѵ$.ݏ ?gw':źkEhf h ƅ0u3_Qi?ȏ2p-KsFVD*&oZA4^mY_rXtYQTƥ|w^ѝ>~?ٌu0ՠfiӋ7Q{I{ TOz`^3O ioNr:&|69ZFoҥh{gV*fl\JiҮ:whw܋=|ul+/Ʌ[Z6Co *>;&K65g^jO E%(W)Hl|ruՙ~ÄUG %8|ޞh玃UGh鵟2Mv|?+Un4h>C}҈Y<4G1)ټ?moU6 TR;/\y1n.;ޮ^ |L~-=X8{ ge"]sф=}Jd0flmcď;iFb9?| } 42/*u6SLЁ}+OV =4bqQε)rGsվ)A%]?ʔl0WryO NTRW{ @Ht:;_Fi٪%&G׷"euf}RFF}qfggТpwfbZv~ц>\V쓯Yܣ]|TPо4u(gl ;LIVu0=v#EX~Xe Rظ1oV.9ű>=]LVy'r ۶m)|2m 0C?ztڱ2g_wFpom^ ztf|N⣦F>F^?9Uٹc';,*|$ο C W oc^WK*Z\/]ښ:ݧQȗ5c8H"6#_'2C*ڦ~MKm|{3E3{fAc3g~|XW0* M'6 uVCkm2ge>[w'ҨLXC0^}HtYʮCtVJ@Ig+PhONTb9!#)hFWAn,{&aœ//SklLʽ-OZ:օ.֨Ԫӟ)!t_p;Mǜ PZ- #V)GGu".i!Zřh zu,:R(m}:g+ gv۹JY)Nv4Da冿mzX6f;)KEE0MӭlN/g 1d"oG+G9G=oİZ3#>-G:j\ -0jc_E9t [,uwU/`]%jGЛd-#OOv+˂}،] wfuMQ4FU쫀3t RvլV1T-qKe)} s.ah@&|.:0z7lWR?T+ׇA7x#>h6v2,ǀnCg/]GބIƊ?ѻch,Ga@COD6z1CWObǙK4ĒVM"κP+TrplN TZ(ޱz4^OMq.]8U/"&΍W."?#29܂,PXz!N l|~M}ϖ%XD&`h™^fSI7x(,1E< P% N%iѲn e:VQplCn('ql%}v9jG]*aP[to7Bu$8tʾ(ƸY>9{f~$$&Tz6<~x7~OIQE >r#,.ٴmeEwQ1s|ЅWL:7{T q'# qYhs||zѴZ+ZId2Dִ#S܅^cߕ4 *w"@7N_lBo3\v8d ^ڹQ5^O]Ip}0j'mӾ7(8|; R10!bd4&Bo%^$nnmV̊pd1[6osdbD00Y=kŬQaV!s6g3EܰѢ. ^>_F7Bv~k$Kd{A9"oZ>w~ڼ)c0՚C  ֝r?nYIhɄFe1xxȑ6AѠ0"+\e,U 5Yooƭk7vHF{1| Oa^8'  yߐ~j E#RVf)o%O%>sdO%Аqwh (R0oV}1?qG,3mBdTy&nݸhBo$pdD+޼d$ߘMFs;\MtX(q[jp-䰢~DP46U7ۭ6b9xvERܻ$ 7Ёbh4.RjPĽYކ٥@$2s>-&ILde}q"22iZlml϶6& a%|L!D&L!ED&¢I"Ba$ !hȄBX4IdB!,$2!MB&L!ED&¢z"P7rU)WPBdhS|*cktBX\uQ Jk121~PY74>*SsC"3\s:}Qu7BkZwnE ӊ?\TB!ONd9!d/וsgwKh)}4^&'erfl6c/"_1op5 !xyyZ3)$ JW[WPIGǯ<}~{g;՚'~Eyrs~eq) ¨oڊ-1#A o[!D#7P[BM֨v4!78⭒Փ2ijV8- !xyy:9) p#z~!ΤP;R esq|H4iU M~zBvvFNwh߸,lR>(]=o؝nyUB3#2CuN>8s,*={R(߮ iҹ?DƎӪƻu:N,^k*Ce^Dv+"r}D6 &1_XQ2*2Z]O:OT*92\f뙳}9jׯ\tB!O'paawݮ@QG5(|2\&B}E"s >'L*+ܽ >.Sem!'_$2NiKɮBd/Lέ0ܹ{/z8D;#FcO%]ԃ$_&0]f ,㋏o5&ոO.0w;˧"sO c_W*Qx"0ZBT0@C G1ġ(f#{/۪jU|QEQR1&n=~?UDy8oː/9;*dMm[pe;ށ0ihZpen^mQzr|_.^֠|BS1"<2ll42z4+Bv`6]ʊ?H7&ӪA-J ht,j/e铧7\ZD:)6?aw)jAcS Z6cX9+Z[.&'2C4<ǀocDƱND2q10QKduJ '%OPg@n=fp8y/ { W[, ;0o):ZL5{i:XU2:ڪemN_kL !DfL1tZpzğo\ܞ(&(Lթr^t.l]{[$CwsF|EJ\&߾k\aL*碟?bz™ycę[pc?="'2fdx:.ދn {lD1Ȍ4e)Fބ117}†tHMÁQu>%{$ƤRYPعnQ‘wބ)>KN%[t*f[iR0AK"D(&Z>2J8PM|EƙBNQߎ.U0c~[̡Уmkf#7qeSlyZ ̇K~U g R/%}]ߐ$~|fU]__*e*U !Dg#dBAb2afW|{*0iUa,*ݦVEע7t"n.7_ɞ[0VRަHmm=< i%Y͢5 DWihll`3?3y:k4yt?Z"۳NzRַ$1/hZVS۳\G^UBd;.4^%zHs-IdBd3фF$wij֮>6h5y✯$2!r0W(?D&DPӻhiD&DN?ɈL"ӧ_a22"_|Rls*&L W,ǶV/]g!#ΞK+<0"6)iTm)쓗.]fذɦ 6j͉^RbggOdguӆTR 3KvGv *T fN|~-}aT|zw:.,QQvQeGR4˓a'>7s!NGP>FP2.W銼IJƸL ?R+I}}+*q^4^6 RV0o#yL"?L|ܽou6ekVӉsқeXfڍMXse r ֙]7sqIQY:%+ 1a?m6?INsxhb[v\ӽ~ws9ҏC JѾ #6C):~N{V棱y7qvC/L6MĤevb,~<~bd+%KyZcJԉSǡvZ]?b`0V|>.:PYlr|GXG'&%1!)x|Qn_1}v.ҠbVJZG^|Zjjy 3yrVlkOdTUAM\LK!&k{`}>c`4:T ~T* }j'/FkÍ+ƬcYT!.ٜ Id)=4}I~)neY>4?<9Tl\HYT)sJBsh(-od98kEHiъ8dT^r|a 9#[42eAZzjUm!_Whڢ51 lmmٳk;T&3j ][ߕApa^pX 5Wފol MτS4 -r*|]8g3'._"j=<jTnaPa~^Zʿ/=ï|yΚlߝ;k:~˧Y[nDA:&|69ZFoҥh{' TOz`^3/x }a`*VAo<?xYtMUʏv{q:٫qͦGo@*VǷmFlfTׂ lNwstjX 2TݖߟDN?vQ=[txerh=g*ZC!ɧ zF_[8nU{cQ[Nf̛D)>ڸfCɦ|CqWT1g#<+/T 9(,4o 7kF IdpI:w@6|6Gb =4bqcfu IDATg'yEckg˾ʡ^$  j$@߹+q–D%LiDfA~;z$C/H"oP,}R9@4eSԠ_$2!rD9#,[ժUxL~'% 4Z FV^n"1hi|!?+Kl[7)Qtn"D}&sC$2!Y-qZ}JOB رu3]#LlV_m}?sn(&)ChNFx6WD&D(OqDFF_X j>CD&DN/z!E!$2!MB&L!ED&¢I"Ba$ !hȄBXW")0l/y(<B D"۽g/Wn""Yo-?Nn[hLq;uӇYײ~84'<9ist^~|B!rE'[W1\ 0D`6 1sM.@pwwO2*jEl_!gчM&#:W+\gݎrv;[`bܬ ̝ҬOMr{{{l5k2_^xzf {Jx*OvVTBYt"Q!&b2tNcnUEEɖf֒5zG!?cҎˬÅ}NDk0Q2ȼ[.`䪉m:L\aT* }I6=ʖ[Q_""kX|"SLF<֪9|=/p5,TF1@1g.maT:@P}EVA!KCf3}ky{@US9zwR7_i>3b F}ѕB,:i4boBSTffQ@3hԩ>]~^899e}B!E'=Xi f/ih4Tm U*͎BNdAU=wK* 9Bbщ =OBYUB! 6IdB!,$2!MB&L!ED&;>:kv7dB$&Q ۉ ! wa'3HDSHDSHD7D^/>dUNMB.rb,{vef`B"nZRF]LmݼfCמ}Y' M$.7ٶy#L錡V GA&R~7/M]HԪUj̘1_sc֢=D۩VVE!vٹKA&RLD9%펓5_D4D4D4A&HM=^f|[h Hq_ OE;*x$9uCW/]3Zp R*u_9Wm{2#M8?< x/k]|۰޵~#h8ʒSL~ӂO+q[ES5IǞm*ŷZU{Y'ٽsPm7-\v?xc'b߅Fd!X\.W9߳JlgCѥCjOk܆>_Ipk^FǏ_4k՚sYA7 YVtfliף+;S\T^Ggq0г(R[-[Ћϡj*U國l553ْ4gsQN3&xdž{ܟ)I$$$ҪUؘ[jks{NiՔ#xynfm;.Ӵ,= jG|rm.iJ;3G Y5?0X`w]+!==[^>;7&91j :2vRى1 s_o/2m5'٩ tiOƝ7F<]|^ZӲyYQY Nnzom7#Ր% Gw>K|'Rቦ v6cX㖁g8`~{a)ޙ_|.:b*Nc_X2߽Ơ Z/#oE1;/ˆEUyg\V|6wQ$7pݣFn/}M;OF1EbHLw\ȯYdeJ?+m?4hynfgzlgP8:Wm%k|3/7?t-߮$';gxBrJ׸xY|5^;Dz~3T; ذa<@L93Wrrؾ3ӟףeqk~hr[ش KO]6g^Fذa3nUj o-oȞ}9L\КY6(v[1{=g,a90x}GgEXϺT+uF'YM]dS.}2?06EbmX()ԾK *˛szǴʃ,_F;֔> ϳw6,co#-1 h" |Emgʑ_p.0 bؚck6q~|O%oeo Z^BÄmD [4vctbޝޣINǿHŧZx>OOiƣ+u%f$5[h6G2-%h;}avn0(WaO(V~,{;[g[tI˼B՝#59ݪ2=Gl7ʭ+=2%֗.t8mE^<ԵЯ9d"d.r*kd""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""d""ZP~^.yZH-^;:\)ñDD$)DD$)DD$)DD$)DD$)DD$)DD$)DD$)DD$)DD$}KFvLEG,Nj5\6nZ x@yð 1st^rh֌X_2qĒ^KD}1XyðZ3k^9359wVIv35+1g U7" `öewlB:i`YZ)N4vlBnn.qqq]ꋡ-L@+4qڟ9ݨ/~汮vH0 YD$Xh&}׈ں~6[#~"c\PeYd0kF\/^ ~p`T)jЫCI 2EDNCbaa!z{F`0lXh~|r_řީ@>Ź*x 2i|2wi3.qE&ɗ 0uz.8;Kk|!".D_ͥRR[# l0l`F`&a2BӃ lxݸ2KKAvܬ#$YA1-$f e3-j$4e4IGmn#1,WD܅ꋅn7v> ,+dViA oMn2ԃOU'lDxy~Bة^% lt ZOqT1c;ia$%İv[>ϼ#]߅訰,"RBE_ 0:\ѨG DZ ~Fj?fZ> yoXcE+d>>M|b(t0pQJTB\\~ L^39|4{+u='$"8M运3p6N#O^8Qio_>0:;zN)|du[l߹m!%)B?pJ~~cd疽,Z8 b}VuYԪ[km:{6ڥJxwnG~)}"r9l?(z w[QF<n<<ߎ"Ϳߺٵb:t%m[ ~#ZtŭȯX<שRn}Dr $./1"򯽌g^gVQ2~ egƂ?3*3yUѯ wCiӲ9sDSz?|Ϳ`a\FkNk [埃;/t\4$@>zk,g/rvdR;" 1,c'1Qx}Ec [*͝3E#(?^,[Q~\Yڻf \qCS=Yf"^1wjrZ6mNæGX)~|@&,=A)t ?0o?"rz9ܹ5Ӄ kj K`Jop`^{s2pW|Cۅ^Q/}pW x.]ƊfV{>lGsǪ<7&/~X_Zv~+`~ L"'MLL III$%%v~K[vso>Yم{/Ѹ Hj5d#>_(+q6׿ hlxpxڛm3Xg}o0 q _aނ|܆~O~ "P];Ga.?*]W 'ɦ=L̛}N[-֓zgqCrv~a:lڻw96ˋ'}de!?~pn\t!FѽנiZ|,7M+jeϪ|\]oѢv {׭O`7 i[ϝ\ioa|r&kLzm)F}rN,}i0?k\5jq-wEZ$Z4C&A\lnCƞ' Q_5ȌEEEѰF{0cՉ!***h36ҿ^MOu\g&c 1y ])=*91 wBN¤OGa+ZOW5/ѣ\r ׿97S7c|q-uK"r AT)l^g<ʯO-^|*ʯ7F-oa\9AYv v`XE%<||YLzngwLjW {Cz>ҤxAH0a lF[ ,{j1Dm1ti¬v_~4M!66&h]W4Kgؗ3X!LlzKYVtR;WA=|]⟫u=_|{9}j{B.)b}2qINNpka5DD&k)exM*Tө/Uar[6[Y:Au8ͪytn-֩mHD62\ kT޸/> ,7d`3m'Z,%`E&r`-,h9W$D{fѧcm6h@rrrMDd/:clm)67` [j7Z1NV >!m?sY"F/'c&I~=33աN$WLTLD"K%vf;~WAGnwHZZ ّh')UwQj* d,z"&r$T%92. ľND$BؘX%Jz+&2 nfΙg\~Ŭ}y9RȑJvn^fΙg%Y<hΘSDD$~@qAA9]:Y'&2`!5KI5IENDB`blueproximity-1.2.5.orig/doc/manual_html_m33642ea5.png0000644000175000017500000001440010761555105022315 0ustar nitaglfnitaglfPNG  IHDR8  pHYs 7˭tIME ֡IDATx\yXUdPYIq2SעlRsjzJu6Zzf"J"3p=s~y{M]]ko'p 'p 'pCw||$;vӲmg>4k3+1>{+D*=='7_[W.__LhEcH\ς -Um:azIɻ74>Fą]_V24o\+Yx5i*հU#u|p7"ߏzgԣ!/nEKL?mФƾz5>}~nْ\2;=Gs6Z@M}]F7$6-g˝>SheH5Qa^cEhNgso<'Q ၉SMjƉ o}Yv>cFe@Wkڨ)]{͙ޜ7y#+Ys?;V?+aoGV vWz} ?vJ\ժ9x=05,Ϯ^п?Y3= ^8l|H f>65ѷemB+u{zr7SSTJJ쓔aޞm.Olw 7W/ۯӵ,KF_˟ڨz-}SN0U@dE`mQJD KVWgr1Ϙ_PܲB Md:iA-i;-[6G)ی_5\K[[*aݲaw17>]?ץ>tl; 1snw)>KVS?9R| Z*On7oݜĔ}3\;o#ܦ_jlݛ!>-9!. #[OlO:B&l->_rp^^77PS74LF}c#Кc *6[螃?6 G>/=Y18~ _YmӪ,Һ:r]/rњw/Fn>`ypǥ_>3S/ kp֎} yaZT/A=>1Jbv{K/307oy碋_2-nz C tצ=d,Fߊ+*++ﯥ#lT99EY>>g@G5f58Z]1 g¶mv&Th|rD1 e\SV~ʢXD\.#O5kC[8`4g\KO{Zӭ^ [AB@r͚M`ڑ{(IIsn?\b;hC=ac5=C52(bJqDofu.\ /ݝ@vJ:h, L:%--~i#L@F!&{h4Jey7~~~=zUj|ZQHH:aA>e% rs U4d % "UFyj1JIN ?wblpDj̫4nnZyO7 U),IҪOahzʹ.g͒xxxj fXW7j:]uMMNK岮BIRoj5uǸG1.a&v cܣA X/ TL&l6&bj1k@XzjJKKnÓ6.:슖״JIIVNL1J%c1UVGXqOW{$24]:{T BE*4 T 5ֈ(fל+)R I=qlȚ#? TZd a ]<& %㏍BRSS[)l肂[Teee.9߮?V,V(5jL!%c!Z bg1q *0!2o(:^$Qk[,\ ^pmnsW0E+Ԏ4t@$?OYH0୦򲫹yU5BDHU4P_^i0ܛO$No9m  A#D3bfw 9JCN>{H+bYYYH@iii;Up|{]ͯ{[ Y"0 0FL*W7 EC : h;ϽYuO$7&6ڵk%7c#}/d\LKdYj1ƘVȈ3T'OZuQ-`Rw!A %%%%%6>q$I4,も .]'qɂ3V뷬e y72,VK(!X#'@dlM`KW="tg,~`D̜~MTUUU׿0.2 YVaja1 ?<2;+СC$ݱ!}DEue[eBݭ[%M=E^&{ ߹ۨ (r5X_ebQFׯӦWF7蓓?dKYY$pMI3#c,생 D%I:p@ll@tIѬp5pγCUWx><=&22n8eSRRд"b!-md{5 9r'0e6sݱ{tב\M㭢Rfy J0 "Y%ҦyYQu P+փJ%fKT-fN&@)T ,-]"'$$yyyuh嬂(="B8%W+YdW_xʦ>:̀DϨ$k#v6۔¶Tu0Ʋ|{V̉gz?HWTTB0Ƅ3hg\d}. Rl؀8qEh5 V\\А.]JJk4Mi4Z77̰g<]uyFD\Q[QFeeeeggSe>޵kN;v,M DGG{xxܹ "˲, =E:{6k;zEAP!) v,dIFQ[^@;ژt?}b0%JB-ܓٚQ˼6O*])yNؼӂCʫ뼻t$aIQ5pܟrHk4wwwR)IhVСCFq„ jcrV߭d"92aY#Fmdwi03}JBn*RE©9޾tD#D5jlu=/5VU[|%yQ4UkLK.;J)..ˌRͪ v~1c=pڌϟ;wd2 K.{>x`YYYk Ie;$ 5 gnTP':K^8b1Ȧ2\2ؾkOY͵5l"]bb ΞI+,qN*Ν;iZAˋM&-qHHȌ3JKKg̘sWҞ"ʓYpB{СEoٝN'h I~ swIENDB`blueproximity-1.2.5.orig/blueproximity_nocon.svg0000644000175000017500000012663710761555105022101 0ustar nitaglfnitaglf image/svg+xml blueproximity-1.2.5.orig/blueproximity_error.svg0000644000175000017500000010610410761555105022101 0ustar nitaglfnitaglf image/svg+xmlimage/svg+xml blueproximity-1.2.5.orig/addons/0000755000175000017500000000000010761555105016501 5ustar nitaglfnitaglfblueproximity-1.2.5.orig/addons/blueproximity.desktop0000644000175000017500000000044310761555105023011 0ustar nitaglfnitaglf[Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Application Terminal=false Name[de_DE]=BlueProximity Exec=/usr/bin/blueproximity Icon[de_DE]=/usr/share/pixmaps/blueproximity.xpm Name=BlueProximity Icon=/usr/share/pixmaps/blueproximity.xpm Categories=Application;Utility; StartupNotify=false blueproximity-1.2.5.orig/addons/blueproximity.xpm0000644000175000017500000004152210761555105022147 0ustar nitaglfnitaglf/* XPM */ static char * blueproximity_base_xpm[] = { "60 60 608 2", " c None", ". c #000000", "+ c #030405", "@ c #010102", "# c #000101", "$ c #05080C", "% c #0A1117", "& c #0C151C", "* c #0E171F", "= c #0B131A", "- c #070C12", "; c #020305", "> c #020304", ", c #020202", "' c #000002", ") c #05090C", "! c #192737", "~ c #273E56", "{ c #304C69", "] c #314E6C", "^ c #2C4762", "/ c #203347", "( c #101B25", "_ c #020204", ": c #010203", "< c #070B0F", "[ c #22374C", "} c #314D6B", "| c #2D4864", "1 c #162330", "2 c #010202", "3 c #020203", "4 c #010101", "5 c #182634", "6 c #304D6A", "7 c #324F6D", "8 c #29415B", "9 c #080C11", "0 c #010204", "a c #23374C", "b c #98A7B6", "c c #4D6680", "d c #2F4B68", "e c #0C141C", "f c #020405", "g c #24394F", "h c #B6C1CB", "i c #EDF0F2", "j c #5C738B", "k c #1C2D3E", "l c #FFFFFF", "m c #F6F7F9", "n c #6E8297", "o c #2D4863", "p c #030506", "q c #0C131B", "r c #8395A7", "s c #B8C2CC", "t c #9CAAB8", "u c #070B10", "v c #000202", "w c #0F1922", "x c #B3BEC9", "y c #36526F", "z c #1F3144", "A c #243A50", "B c #C8D0D8", "C c #3C5874", "D c #030608", "E c #DFE4E9", "F c #DADFE4", "G c #47617C", "H c #121D2A", "I c #AFBAC6", "J c #405A76", "K c #CFD6DD", "L c #E8EBEE", "M c #556D85", "N c #203245", "O c #D0D7DE", "P c #677D93", "Q c #AAB6C2", "R c #375471", "S c #BCC5CF", "T c #F2F4F6", "U c #657A91", "V c #2A425B", "W c #000001", "X c #284059", "Y c #3D5875", "Z c #D6DCE2", "` c #F7F8F9", " . c #6A7F95", ".. c #687D93", "+. c #FDFDFD", "@. c #75889C", "#. c #304D6B", "$. c #304C6A", "%. c #72869A", "&. c #F9F9FA", "*. c #6D8197", "=. c #637990", "-. c #778A9E", ";. c #080C12", ">. c #070A0F", ",. c #7B8EA1", "'. c #FAFBFC", "). c #708499", "!. c #61778E", "~. c #F5F7F8", "{. c #7C8FA2", "]. c #121C27", "^. c #FCFCFD", "/. c #ECEFF2", "(. c #E4E7EB", "_. c #F3F5F6", ":. c #FEFEFE", "<. c #7F91A4", "[. c #010304", "}. c #111A25", "|. c #8293A6", "1. c #14202C", "2. c #71859A", "3. c #8798A9", "4. c #1F3245", "5. c #F9FAFB", "6. c #8B9BAC", "7. c #010303", "8. c #172533", "9. c #8D9DAE", "0. c #DDE2E7", "a. c #253C53", "b. c #010103", "c. c #162331", "d. c #516A83", "e. c #8596A8", "f. c #131E2A", "g. c #4F6881", "h. c #EAEDF0", "i. c #899AAB", "j. c #E8ECEF", "k. c #63665E", "l. c #62645F", "m. c #62665D", "n. c #62635E", "o. c #0C131A", "p. c #4B647E", "q. c #E7EAEE", "r. c #F0F3F5", "s. c #91A1B1", "t. c #213549", "u. c #63655D", "v. c #62655F", "w. c #809766", "x. c #A8CB86", "y. c #C7E6A7", "z. c #D1EEB5", "A. c #D3F0B8", "B. c #C8EAA9", "C. c #B0D68B", "D. c #8AAE66", "E. c #66705A", "F. c #61645E", "G. c #62655E", "H. c #060A0F", "I. c #48617C", "J. c #E4E8EC", "K. c #A3B0BD", "L. c #9EACBA", "M. c #C2CBD4", "N. c #F1F3F5", "O. c #94A3B3", "P. c #7D8F6C", "Q. c #C5E4A7", "R. c #E6F7D4", "S. c #E4F6D1", "T. c #CFF0AF", "U. c #C3EB9B", "V. c #BEEA92", "W. c #C4EC9E", "X. c #D3F1B6", "Y. c #DBF4C3", "Z. c #CDEEAD", "`. c #95BA71", " + c #63675E", ".+ c #61665E", "++ c #D4DAE0", "@+ c #A5B2BF", "#+ c #597189", "$+ c #F0F2F4", "%+ c #99A8B6", "&+ c #1A2938", "*+ c #97AF7F", "=+ c #E2F5CF", "-+ c #DDF4C7", ";+ c #B1E67C", ">+ c #91DC49", ",+ c #8EDB44", "'+ c #8EDB43", ")+ c #8DDA42", "!+ c #8CDA40", "~+ c #8CDA3F", "{+ c #9CE05A", "]+ c #C4EC9C", "^+ c #D9F3C0", "/+ c #BCE098", "(+ c #6A7360", "_+ c #62665E", ":+ c #283F58", "<+ c #597088", "[+ c #EFF1F3", "}+ c #A9B5C2", "|+ c #8495A7", "1+ c #546C85", "2+ c #63655E", "3+ c #93A97D", "4+ c #E6F7D7", "5+ c #D2F0B3", "6+ c #9CDF5A", "7+ c #96DD50", "8+ c #95DD4F", "9+ c #94DD4D", "0+ c #93DC4C", "a+ c #93DC4B", "b+ c #92DC49", "c+ c #91DC48", "d+ c #91DC47", "e+ c #ADE578", "f+ c #D8F2BE", "g+ c #C3E5A3", "h+ c #686E60", "i+ c #566E87", "j+ c #A0AEBC", "k+ c #556D86", "l+ c #FDFEFE", "m+ c #7B8DA0", "n+ c #080E13", "o+ c #727B69", "p+ c #E3F5D2", "q+ c #D8F3BE", "r+ c #ABE473", "s+ c #B5E784", "t+ c #AEE578", "u+ c #9DE05C", "v+ c #9BDF59", "w+ c #9BDF58", "x+ c #9ADF57", "y+ c #99DE55", "z+ c #98DE54", "A+ c #97DE52", "B+ c #97DD51", "C+ c #ACE574", "D+ c #DAF3C1", "E+ c #B0D38E", "F+ c #3A3B37", "G+ c #394044", "H+ c #485966", "I+ c #828B8F", "J+ c #B6B7B4", "K+ c #959B9D", "L+ c #586671", "M+ c #C4C7C7", "N+ c #8697A9", "O+ c #BAD69F", "P+ c #EDF9E1", "Q+ c #E3F6CF", "R+ c #EDF9E0", "S+ c #E6F7D5", "T+ c #C2EC9A", "U+ c #A1E163", "V+ c #A0E061", "W+ c #9FE060", "X+ c #9FE05F", "Y+ c #9EE05D", "Z+ c #9CDF5B", "`+ c #BFEA94", " @ c #DAF3C2", ".@ c #81966A", "+@ c #646661", "@@ c #646662", "#@ c #9C9D9A", "$@ c #F5F5F4", "%@ c #253B51", "&@ c #696D64", "*@ c #EBF8DF", "=@ c #ECF9DF", "-@ c #DDEFCB", ";@ c #A8B998", ">@ c #8E9388", ",@ c #949E89", "'@ c #C8DBB6", ")@ c #EDF9E2", "!@ c #D0F0B1", "~@ c #A6E26B", "{@ c #A6E26A", "]@ c #A5E269", "^@ c #A4E267", "/@ c #A3E266", "(@ c #A3E165", "_@ c #A2E165", ":@ c #A4E167", "<@ c #D5F2BA", "[@ c #DBF3C3", "}@ c #D7F2BB", "|@ c #D5F1B9", "1@ c #D3F1B5", "2@ c #D1F0B2", "3@ c #CFEFAF", "4@ c #CDEFAC", "5@ c #CCEFA9", "6@ c #C9EEA6", "7@ c #C7EDA3", "8@ c #C5ED9F", "9@ c #C1EB99", "0@ c #C0EB95", "a@ c #BDEA92", "b@ c #BBE98E", "c@ c #B9E98B", "d@ c #B6E886", "e@ c #B4E782", "f@ c #B1E67D", "g@ c #A7E16F", "h@ c #81AA59", "i@ c #656863", "j@ c #162431", "k@ c #8FA37A", "l@ c #E3F6D0", "m@ c #E2F2D3", "n@ c #6B6E66", "o@ c #62645E", "p@ c #62635F", "q@ c #B4C4A3", "r@ c #EFFAE4", "s@ c #BCE990", "t@ c #ACE474", "u@ c #AAE472", "v@ c #A9E370", "w@ c #A8E36F", "x@ c #A8E36E", "y@ c #A8E36D", "z@ c #B8E58B", "A@ c #BAE193", "B@ c #B3DC8B", "C@ c #AED787", "D@ c #ABD183", "E@ c #A6CB80", "F@ c #9FC47A", "G@ c #99BD74", "H@ c #92B56F", "I@ c #8BAC6B", "J@ c #82A362", "K@ c #81A260", "L@ c #80A25F", "M@ c #7FA15E", "N@ c #7EA15B", "O@ c #7CA159", "P@ c #7CA158", "Q@ c #7BA157", "R@ c #79A054", "S@ c #79A053", "T@ c #779F51", "U@ c #7DA15B", "V@ c #6C8355", "W@ c #040608", "X@ c #C5D4B6", "Y@ c #889D71", "Z@ c #636560", "`@ c #E3F2D4", " # c #B2E67F", ".# c #B2E67E", "+# c #ADE577", "@# c #81D62D", "## c #76D31B", "$# c #73D216", "%# c #73CC1C", "&# c #71C51F", "*# c #70BF20", "=# c #6CB822", "-# c #68B022", ";# c #62A720", "># c #5C9C1E", ",# c #55911A", "'# c #4D8516", ")# c #447713", "!# c #3C6A0F", "~# c #3E6A13", "{# c #406B16", "]# c #426C19", "^# c #456C1D", "/# c #476D21", "(# c #496E24", "_# c #4B6E28", ":# c #4C6F2B", "<# c #4E702E", "[# c #4F702F", "}# c #507030", "|# c #5C7445", "1# c #6B8750", "2# c #22364A", "3# c #63655F", "4# c #E1EAD8", "5# c #656C5E", "6# c #616360", "7# c #CEE0BC", "8# c #E8F7D9", "9# c #ADE576", "0# c #75D31A", "a# c #8FDB45", "b# c #A7E36C", "c# c #A1E162", "d# c #86D836", "e# c #7DD527", "f# c #83A95C", "g# c #080D12", "h# c #DDE6D5", "i# c #6A795C", "j# c #D1E3BF", "k# c #D6EFBE", "l# c #72CD19", "m# c #71CD17", "n# c #72CF17", "o# c #73D118", "p# c #73D117", "q# c #B6E885", "r# c #C2EB9A", "s# c #ACE475", "t# c #7AD421", "u# c #A3C77F", "v# c #99BD76", "w# c #A2C77E", "x# c #AFE57B", "y# c #80D62B", "z# c #7CD526", "A# c #A7E26C", "B# c #98DE53", "C# c #77D31D", "D# c #89D93B", "E# c #9BDE59", "F# c #71786A", "G# c #1B2B3C", "H# c #62655D", "I# c #B0BFA0", "J# c #96B378", "K# c #6B7262", "L# c #CDDFBA", "M# c #A6D677", "N# c #6FC619", "O# c #6FC719", "P# c #71CA1A", "Q# c #72CB1A", "R# c #73CF19", "S# c #73CF18", "T# c #81D72E", "U# c #C0EB97", "V# c #BCE196", "W# c #909F81", "X# c #BCE296", "Y# c #B3E680", "Z# c #B8E888", "`# c #AAD67F", " $ c #656762", ".$ c #A9D87D", "+$ c #A7E36D", "@$ c #A2D56F", "#$ c #829170", "$$ c #A1D76D", "%$ c #84AB5E", "&$ c #445767", "*$ c #263D54", "=$ c #767D6F", "-$ c #E3F6D1", ";$ c #C9D9B9", ">$ c #77905E", ",$ c #687060", "'$ c #B4CE99", ")$ c #CEE1BB", "!$ c #7AC92F", "~$ c #8BDA3D", "{$ c #CAEEA7", "]$ c #BEE29A", "^$ c #717A68", "/$ c #79826E", "($ c #BEE399", "_$ c #BDEA90", ":$ c #809769", "<$ c #5E645F", "[$ c #35506B", "}$ c #5F645F", "|$ c #879F70", "1$ c #AFE57A", "2$ c #A9D87A", "3$ c #6C7563", "4$ c #727B68", "5$ c #A0D76B", "6$ c #90C261", "7$ c #636660", "8$ c #4E5C65", "9$ c #030406", "0$ c #D9EBC7", "a$ c #D5E7C3", "b$ c #BDCFAC", "c$ c #A2C381", "d$ c #96B677", "e$ c #9FC07F", "f$ c #C1D8AA", "g$ c #CCDEBB", "h$ c #90CD54", "i$ c #6DC319", "j$ c #7FD42B", "k$ c #CEEFAE", "l$ c #C0DEA3", "m$ c #AAC88D", "n$ c #A7C18D", "o$ c #70726D", "p$ c #767874", "q$ c #A6B396", "r$ c #445461", "s$ c #495965", "t$ c #666863", "u$ c #9DAD8C", "v$ c #6B6D68", "w$ c #6F7D88", "x$ c #606460", "y$ c #6F716C", "z$ c #89A36F", "A$ c #686965", "B$ c #576061", "C$ c #324E6B", "D$ c #8D9C7E", "E$ c #BBD3A4", "F$ c #B7CF9F", "G$ c #C5D5B5", "H$ c #C5D8B2", "I$ c #ABD284", "J$ c #7DC538", "K$ c #6CC218", "L$ c #73CE19", "M$ c #B7E886", "N$ c #CDECAF", "O$ c #6E7567", "P$ c #5F625C", "Q$ c #080A0C", "R$ c #203346", "S$ c #334F6B", "T$ c #5F6360", "U$ c #39516A", "V$ c #3A526A", "W$ c #606360", "X$ c #36506A", "Y$ c #2B455F", "Z$ c #111C27", "`$ c #C1D7AD", " % c #DAEFC4", ".% c #7ABD38", "+% c #69B81C", "@% c #68BA17", "#% c #69BC16", "$% c #6ABE17", "%% c #70C91A", "&% c #A5E169", "*% c #94AC7C", "=% c #080D13", "-% c #253B52", ";% c #63645F", ">% c #6C6F68", ",% c #D1E6BD", "'% c #8AC74E", ")% c #67BA16", "!% c #68BC16", "~% c #75CE1E", "{% c #B1E57D", "]% c #D9F3BF", "^% c #ABC691", "/% c #0B1219", "(% c #1D2E40", "_% c #213448", ":% c #23384D", "<% c #1C2D3F", "[% c #0D151D", "}% c #020303", "|% c #6C6E68", "1% c #C4D9B0", "2% c #BDE299", "3% c #8BCD4B", "4% c #6EC01E", "5% c #6BC218", "6% c #7DCF2E", "7% c #9FDE63", "8% c #DBF2C3", "9% c #A1B98A", "0% c #91A082", "a% c #D1E7BB", "b% c #D7F1BE", "c% c #D2EFB7", "d% c #DCF4C5", "e% c #DFF4CA", "f% c #BAD79D", "g% c #7B876F", "h% c #626460", "i% c #7A8173", "j% c #A0B28D", "k% c #AEC598", "l% c #B7CDA1", "m% c #AEC498", "n% c #96A784", "o% c #6E7369", "p% c #64665E", "q% c #63665D", " ", " ", " ", " ", " ", " ", " . ", " + @ # $ % & * = - ; . > , ", " ' @ ) ! ~ { ] ] ] ] ] ] ] ^ / ( @ _ ", " : < [ } ] ] ] ] ] ] ] ] ] ] ] ] ] | 1 2 3 ", " 4 5 6 ] ] ] ] ] 7 ] ] ] ] ] ] ] ] ] ] ] 8 9 0 ", " 2 a ] ] ] ] ] ] ] b c ] ] ] ] ] ] ] ] ] ] ] d e f ", " 2 g ] ] ] ] ] ] ] ] h i j ] ] ] ] ] ] ] ] ] ] ] { % ; ", " > k ] ] ] ] ] ] ] ] ] h l m n ] ] ] ] ] ] ] ] ] ] ] o p ", " _ q ] ] ] ] ] ] ] ] ] ] h l l l r ] ] ] ] ] ] ] ] ] ] ] / > ", " 2 8 ] ] ] ] ] ] ] ] ] ] s l l l l t 7 ] ] ] ] ] ] ] ] ] ] u ", " v w ] ] ] ] ] ] ] ] ] ] ] h l l l l l x y ] ] ] ] ] ] ] ] ] z ; ", " : A ] ] ] ] ] ] ] ] ] ] ] h l l l l l l B C ] ] ] ] ] ] ] ] d > ", " D ] ] ] ] ] ] ] ] ] ] ] ] h l l B E l l l F G ] ] ] ] ] ] ] ] w . ", " 3 H ] ] ] ] ] ] ] ] ] ] ] ] I l l h J K l l l L M ] ] ] ] ] ] ] z ; ", " ; N ] ] ] ] ] ] J O P ] ] ] Q l l h ] R S l l l T U ] ] ] ] ] ] V . ", " W X ] ] ] ] ] Y Z l ` .] ] Q l l h ] ] ..l l l +.@.] ] ] ] ] ] #.2 ", " 4 $.] ] ] ] ] %.+.l l &.*.] Q l l h ] =.` l l +.-.] ] ] ] ] ] ] ] ;. ", " >.] ] ] ] ] ] ] ,.+.l l '.).Q l l h !.~.l l +.{.] ] ] ] ] ] ] ] ] ].' ", " . * ] ] ] ] ] ] ] ] -.^.l l './.l l (._.l l :.<.] ] ] ] ] ] ] ] ] ] ! [. ", " . }.] ] ] ] ] ] ] ] ] @.'.l l l l l l l l :.|.] ] ] ] ] ] ] ] ] ] ] k f ", " . 1.] ] ] ] ] ] ] ] ] ] 2.'.l l l l l l :.3.] ] ] ] ] ] ] ] ] ] ] ] 4.; ", " 3 1 ] ] ] ] ] ] ] ] ] ] ] n 5.l l l l l 6.] ] ] ] ] ] ] ] ] ] ] ] ] a : ", " 7.8.] ] ] ] ] ] ] ] ] ] ] ] 9.l l l l 0.] ] ] ] ] ] ] ] ] ] ] ] ] ] a.# ", " b.c.] ] ] ] ] ] ] ] ] ] ] d./.l l l l :.e.] ] ] ] ] ] ] ] ] ] ] ] ] a.@ ", " . f.] ] ] ] ] ] ] ] ] ] g.h.l l l l l l :.i.] ] ] ] ] ] ] ] ] ] ] ] g 2 ", " . w ] ] ] ] ] ] ] ] ] c j.l l l l l l l l :.9.] ] ] ] ] ] ] ] ] ] ] a : ", " k.l.l.l.l.l.l.m.n. o.] ] ] ] ] ] ] ] p.q.l l l l l l r._.l l l s.] ] ] ] ] ] ] ] ] ] t.> ", " u.v.w.x.y.z.A.B.C.D.E.F.G. H.] ] ] ] ] ] ] I.J.l l l K.L.l l M.j N.l l l O.] ] ] ] ] ] ] ] ] z ; ", " F.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+ # { ] ] ] ] ] ] ++l l l @+] L.l l M.] #+$+l l l %+] ] ] ] ] ] ] ] &++ ", " l.*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+ # :+] ] ] ] ] ] <+[+l }+7 ] L.l l M.] ] |+l l l ^.1+] ] ] ] ] ] ] f.' ", " 2+3+4+5+6+7+7+8+9+0+a+b+c+d+e+f+g+h+_+ ; N ] ] ] ] ] ] ] i+j+7 ] ] L.l l M.] k+[+l l l+m+] ] ] ] ] ] ] ] n+ ", " G.o+p+q+r+s+t+u+v+w+x+y+z+A+B+7+C+D+E+l.l. F+G+H+H+H+H+H+H+H+H+H+H+H+H+I+J+J+K+L+M+l l :.N+] ] ] ] ] ] ] ] $.2 ", " l.O+P+Q+P+R+R+S+T+U+V+W+X+Y+u+Z+6+`+ @.@l.l.l.l.l.l.l.+@@@@@@@@@@@l.l.l.l.l.l.l.l.l.#@$@s.] ] ] ] ] ] ] ] ] %@2 ", " &@*@=@-@;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@4@5@6@7@8@]+9@0@a@b@c@d@e@f@t+g@h@l.i@] ] ] ] ] ] ] ] ] ] j@[. ", " G.k@l@m@n@.+o@p@l.q@r@s@t@r+u@v@v@w@x@y@z@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@O@V@l.] ] ] ] ] ] ] ] ] #.W@ ", " _+X@l@Y@_+ Z@`@^+ #.#+#v+~+@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#/#(#_#:#<#[#}#|#1#l.] ] ] ] ] ] ] ] ] 2#> ", " 3#4#l@5#6# l.7#8#9#)+0#$#$#$#$#$#$#$#$#$#$###$#$#$#a#w@b#c#d#$#$#$#0#$#$#0#e#/@f#l.] ] ] ] ] ] ] ] } g# ", " m.h#l@i#l. l.j#k#l#m#n#n#o#o#p#$#$#$#$#@#q#r#s#t#!+c@u#v#w#x#y#z#X+A#B#C#$#D#E#F#l.] ] ] ] ] ] ] ] G#; ", " H#I#l@J#l. 2+K#L#M#N#O#P#Q#l#R#S#$#$#$#T#U#V#W#X#Y#Z#`#l.l. $.$b#+$@$#$$$v+d#Y+%$l.&$] ] ] ] ] ] ] *$@ ", " 3#=$-$;$>$l.l.l.,$'$)$!$N#O#P#Q#l#R#n#~$e@U#{$]$^$l./$($_$:$<$[$}$|$1$2$3$l.4$5$U+6$7$8$] ] ] ] ] ] ] ~ 9$ ", " l.0$a$b$c$d$e$f$g$h$i$N#O#P#Q#l#R#j$k$l$m$n$o$m. o@p$q$Z@r$] s$t$u$v$<$w$x$y$z$A$B$C$] ] ] ] ] ] 2#> v ", " u.D$=+E$F$G$H$I$J$K$i$N#O#P#Q#l#L$M$N$O$l.l.o@ G.@@P$Q$R$S$6#+@T$U$] V$W$l.T$X$] ] ] ] ] Y$Z$4 ", " Z@`$ %.%+%@%#%$%K$i$N#O#%%Q#l#&%<@*%2+ @ =%z d ] ] ] ] ] ] ] ] ] ] #.-%].@ [. ", " ;%>%,% %'%)%!%$%K$i$N#O#%%~%{%]%^%l. . : @ /%1 (%_%:%:%_%<%c.[%> 4 }% ", " _+|%1%l@2%3%4%5%i$N#6%7%2@8%9%Z@n. 3 f > : : > f b. ", " l.Z@0%a%-$l@b%c%d%l@e%f%g%v.h% ", " _+l.i%j%k%l%m%n%o%l.G. ", " 6#p%m.v.q%2+;% ", " ", " ", " ", " ", " ", " "}; blueproximity-1.2.5.orig/addons/blueproximity0000755000175000017500000000017110761555105021342 0ustar nitaglfnitaglf#!/bin/bash # BlueProximity startup script # (c) 2007-08-17 Lars Friedrichs python /usr/share/blueproximity/proximity.py blueproximity-1.2.5.orig/blueproximity_attention.svg0000644000175000017500000011143110761555105022754 0ustar nitaglfnitaglf image/svg+xmlimage/svg+xml blueproximity-1.2.5.orig/blueproximity_base.svg0000644000175000017500000010250010761555105021656 0ustar nitaglfnitaglf image/svg+xml blueproximity-1.2.5.orig/proximity.py0000755000175000017500000015744210761555105017667 0ustar nitaglfnitaglf#!/usr/bin/env python # coding: utf-8 # blueproximity SW_VERSION = '1.2.5' # Add security to your desktop by automatically locking and unlocking # the screen when you and your phone leave/enter the desk. # Think of a proximity detector for your mobile phone via bluetooth. # requires external bluetooth util hcitool to run # (which makes it unix only at this time) # Needed python extensions: # ConfigObj (python-configobj) # PyGTK (python-gtk2, python-glade2) # Bluetooth (python-bluez) # copyright by Lars Friedrichs # this source is licensed under the GPL. # I'm a big fan of talkback about how it performs! # I'm also open to feature requests and notes on programming issues, I am no python master at all... # ToDo List can be found on sourceforge # follow http://blueproximity.sourceforge.net APP_NAME="blueproximity" ## This value gives us the base directory for language files and icons. # Set this value to './' for svn version # or to '/usr/share/blueproximity/' for packaged version dist_path = './' # system includes import os import sys import time import threading import signal import syslog import locale #Translation stuff import gettext #Get the local directory since we are not installing anything local_path = dist_path + 'LANG/' # Init the list of languages to support langs = [] #Check the default locale lc, encoding = locale.getdefaultlocale() if (lc): #If we have a default, it's the first in the list langs = [lc] # Now lets get all of the supported languages on the system language = os.environ.get('LANGUAGE', None) if (language): """langage comes back something like en_CA:en_US:en_GB:en on linuxy systems, on Win32 it's nothing, so we need to split it up into a list""" langs += language.split(":") """Now add on to the back of the list the translations that we know that we have, our defaults""" langs += ["en"] """Now langs is a list of all of the languages that we are going to try to use. First we check the default, then what the system told us, and finally the 'known' list""" gettext.bindtextdomain(APP_NAME, local_path) gettext.textdomain(APP_NAME) # Get the language to use lang = gettext.translation(APP_NAME, local_path, languages=langs, fallback = True) """Install the language, map _() (which we marked our strings to translate with) to self.lang.gettext() which will translate them.""" _ = lang.gettext # now the imports from external packages try: import gobject except: print _("The program cannot import the module gobject.") print _("Please make sure the GObject bindings for python are installed.") print _("e.g. with Ubuntu Linux, type") print _(" sudo apt-get install python-gobject") sys.exit(1) try: from configobj import ConfigObj from validate import Validator except: print _("The program cannot import the module ConfigObj or Validator.") print _("Please make sure the ConfigObject package for python is installed.") print _("e.g. with Ubuntu Linux, type") print _(" sudo apt-get install python-configobj") sys.exit(1) IMPORT_BT=0 try: import bluetooth IMPORT_BT = IMPORT_BT+1 except: pass try: import _bluetooth as bluez IMPORT_BT = IMPORT_BT+1 except: pass try: import bluetooth._bluetooth as bluez IMPORT_BT = IMPORT_BT+1 except: pass if (IMPORT_BT!=2): print _("The program cannot import the module bluetooth.") print _("Please make sure the bluetooth bindings for python as well as bluez are installed.") print _("e.g. with Ubuntu Linux, type") print _(" sudo apt-get install python-bluez") sys.exit(1) try: import pygtk pygtk.require("2.0") import gtk except: print _("The program cannot import the module pygtk.") print _("Please make sure the GTK2 bindings for python are installed.") print _("e.g. with Ubuntu Linux, type") print _(" sudo apt-get install python-gtk2") sys.exit(1) try: import gtk.glade except: print _("The program cannot import the module glade.") print _("Please make sure the Glade2 bindings for python are installed.") print _("e.g. with Ubuntu Linux, type") print _(" sudo apt-get install python-glade2") sys.exit(1) ## Setup config file specs and defaults # This is the ConfigObj's syntax conf_specs = [ 'device_mac=string(max=17,default="")', 'device_channel=integer(1,30,default=7)', 'lock_distance=integer(0,127,default=7)', 'lock_duration=integer(0,120,default=6)', 'unlock_distance=integer(0,127,default=4)', 'unlock_duration=integer(0,120,default=1)', 'lock_command=string(default=''gnome-screensaver-command -l'')', 'unlock_command=string(default=''gnome-screensaver-command -d'')', 'proximity_command=string(default=''gnome-screensaver-command -p'')', 'proximity_interval=integer(5,600,default=60)', 'buffer_size=integer(1,255,default=1)', 'log_to_syslog=boolean(default=True)', 'log_syslog_facility=string(default=''local7'')', 'log_to_file=boolean(default=False)', 'log_filelog_filename=string(default=''' + os.getenv('HOME') + '/blueproximity.log'')' ] ## The icon used at normal operation and in the info dialog. icon_base = 'blueproximity_base.svg' ## The icon used at distances greater than the unlock distance. icon_att = 'blueproximity_attention.svg' ## The icon used if no proximity is detected. icon_away = 'blueproximity_nocon.svg' ## The icon used during connection processes and with connection errors. icon_con = 'blueproximity_error.svg' ## The icon shown if we are in pause mode. icon_pause = 'blueproximity_pause.svg' ## This class represents the main configuration window and # updates the config file after changes made are saved class ProximityGUI (object): ## Constructor sets up the GUI and reads the current config # @param configs A list of lists of name, ConfigObj object, proximity object # @param show_window_on_start Set to True to show the config screen immediately after the start. # This is true if no prior config file has been detected (initial start). def __init__(self,configs,show_window_on_start): #This is to block events from firing a config write because we initialy set a value self.gone_live = False #Set the Glade file self.gladefile = dist_path + "proximity.glade" self.wTree = gtk.glade.XML(self.gladefile) #Create our dictionary and connect it dic = { "on_btnInfo_clicked" : self.aboutPressed, "on_btnClose_clicked" : self.btnClose_clicked, "on_btnNew_clicked" : self.btnNew_clicked, "on_btnDelete_clicked" : self.btnDelete_clicked, "on_btnRename_clicked" : self.btnRename_clicked, "on_comboConfig_changed" : self.comboConfig_changed, "on_btnScan_clicked" : self.btnScan_clicked, "on_btnScanChannel_clicked" : self.btnScanChannel_clicked, "on_btnSelect_clicked" : self.btnSelect_clicked, "on_btnResetMinMax_clicked" : self.btnResetMinMax_clicked, "on_settings_changed" : self.event_settings_changed, "on_settings_changed_reconnect" : self.event_settings_changed_reconnect, "on_treeScanChannelResult_changed" : self.event_scanChannelResult_changed, "on_btnDlgNewDo_clicked" : self.dlgNewDo_clicked, "on_btnDlgNewCancel_clicked" : self.dlgNewCancel_clicked, "on_btnDlgRenameDo_clicked" : self.dlgRenameDo_clicked, "on_btnDlgRenameCancel_clicked" : self.dlgRenameCancel_clicked, "on_MainWindow_destroy" : self.btnClose_clicked } self.wTree.signal_autoconnect(dic) #Get the Main Window, and connect the "destroy" event self.window = self.wTree.get_widget("MainWindow") if (self.window): self.window.connect("delete_event", self.btnClose_clicked) self.window.set_icon(gtk.gdk.pixbuf_new_from_file(dist_path + icon_base)) self.proxi = configs[0][2] self.minDist = -255 self.maxDist = 0 self.pauseMode = False self.lastMAC = '' self.scanningChannels = False #Get the New Config Window, and connect the "destroy" event self.windowNew = self.wTree.get_widget("createNewWindow") if (self.windowNew): self.windowNew.connect("delete_event", self.dlgNewCancel_clicked) #Get the Rename Config Window, and connect the "destroy" event self.windowRename = self.wTree.get_widget("renameWindow") if (self.windowRename): self.windowRename.connect("delete_event", self.dlgRenameCancel_clicked) #Prepare the mac/name table self.model = gtk.ListStore(gobject.TYPE_STRING,gobject.TYPE_STRING) self.tree = self.wTree.get_widget("treeScanResult") self.tree.set_model(self.model) self.tree.get_selection().set_mode(gtk.SELECTION_SINGLE) colLabel=gtk.TreeViewColumn(_('MAC'), gtk.CellRendererText(), text=0) colLabel.set_resizable(True) colLabel.set_sort_column_id(0) self.tree.append_column(colLabel) colLabel=gtk.TreeViewColumn(_('Name'), gtk.CellRendererText(), text=1) colLabel.set_resizable(True) colLabel.set_sort_column_id(1) self.tree.append_column(colLabel) #Prepare the channel/state table self.modelScan = gtk.ListStore(gobject.TYPE_STRING,gobject.TYPE_STRING) self.treeChan = self.wTree.get_widget("treeScanChannelResult") self.treeChan.set_model(self.modelScan) colLabel=gtk.TreeViewColumn(_('Channel'), gtk.CellRendererText(), text=0) colLabel.set_resizable(True) colLabel.set_sort_column_id(0) self.treeChan.append_column(colLabel) colLabel=gtk.TreeViewColumn(_('State'), gtk.CellRendererText(), text=1) colLabel.set_resizable(True) colLabel.set_sort_column_id(1) self.treeChan.append_column(colLabel) #Show the current settings self.configs = configs self.configname = configs[0][0] self.config = configs[0][1] self.fillConfigCombo() self.readSettings() #this is the gui timer self.timer = gobject.timeout_add(1000,self.updateState) #fixme: this will execute the proximity command at the given interval - is now not working self.timer2 = gobject.timeout_add(1000*self.config['proximity_interval'],self.proximityCommand) #Only show if we started unconfigured if show_window_on_start: self.window.show() #Prepare icon self.icon = gtk.StatusIcon() self.icon.set_tooltip(_("BlueProximity starting...")) self.icon.set_from_file(dist_path + icon_con) #Setup the popup menu and associated callbacks self.popupmenu = gtk.Menu() menuItem = gtk.ImageMenuItem(gtk.STOCK_PREFERENCES) menuItem.connect('activate', self.showWindow) self.popupmenu.append(menuItem) menuItem = gtk.ImageMenuItem(gtk.STOCK_MEDIA_PAUSE) menuItem.connect('activate', self.pausePressed) self.popupmenu.append(menuItem) menuItem = gtk.ImageMenuItem(gtk.STOCK_ABOUT) menuItem.connect('activate', self.aboutPressed) self.popupmenu.append(menuItem) menuItem = gtk.MenuItem() self.popupmenu.append(menuItem) menuItem = gtk.ImageMenuItem(gtk.STOCK_QUIT) menuItem.connect('activate', self.quit) self.popupmenu.append(menuItem) self.icon.connect('activate', self.showWindow) self.icon.connect('popup-menu', self.popupMenu, self.popupmenu) self.icon.set_visible(True) #now the control may fire change events self.gone_live = True #log start in all config files for config in self.configs: config[2].logger.log_line(_('started.')) ## Callback to just close and not destroy the rename config window def dlgRenameCancel_clicked(self,widget, data = None): self.windowRename.hide() return 1 ## Callback to rename a config file. def dlgRenameDo_clicked(self, widget, data = None): newconfig = self.wTree.get_widget("entryRenameName").get_text() # check if something has been entered if (newconfig==''): dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _("You must enter a name for the configuration.")) dlg.run() dlg.destroy() return 0 # now check if that config already exists newname = os.path.join(os.getenv('HOME'),'.blueproximity',newconfig + ".conf") try: os.stat(newname) dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _("A configuration file with the name '%s' already exists.") % newname) dlg.run() dlg.destroy() return 0 except: pass config = None for conf in self.configs: if (conf[0]==self.configname): config = conf # change the path of the config file oldfile = self.config.filename self.config.filename = newname # save it under the new name self.config.write() # delete the old file try: os.remove(oldfile) except: print _("The configfile '%s' could not be deleted.") % oldfile # change the gui name self.configname = newconfig # update the configs array config[0] = newconfig # show changes self.fillConfigCombo() self.windowRename.hide() ## Callback to just close and not destroy the new config window def dlgNewCancel_clicked(self,widget, data = None): self.windowNew.hide() return 1 ## Callback to create a config file. def dlgNewDo_clicked(self, widget, data = None): newconfig = self.wTree.get_widget("entryNewName").get_text() # check if something has been entered if (newconfig==''): dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _("You must enter a name for the new configuration.")) dlg.run() dlg.destroy() return 0 # now check if that config already exists newname = os.path.join(os.getenv('HOME'),'.blueproximity',newconfig + ".conf") try: os.stat(newname) dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _("A configuration file with the name '%s' already exists.") % newname) dlg.run() dlg.destroy() return 0 except: pass # then let's get it on... # create the new config newconf = ConfigObj(self.config.dict()) newconf.filename = newname # and save it to the new name newconf.write() # create the according Proximity object p = Proximity(newconf) p.Simulate = True p.start() # fill that into our list of active configs self.configs.append([newconfig,newconf,p]) # now refresh the gui to take account of our new config self.config = newconf self.configname = newconfig self.proxi = p self.readSettings() self.configs.sort() self.fillConfigCombo() # close the new config dialog self.windowNew.hide() ## Helper function to enable or disable the change or creation of the config files # This is called during non blockable functions that rely on the config not # being changed over the process like scanning for devices or channels # @param activate set to True to activate buttons, False to disable def setSensitiveConfigManagement(self,activate): # get the widget combo = self.wTree.get_widget("comboConfig") combo.set_sensitive(activate) button = self.wTree.get_widget("btnNew") button.set_sensitive(activate) button = self.wTree.get_widget("btnRename") button.set_sensitive(activate) button = self.wTree.get_widget("btnDelete") button.set_sensitive(activate) ## Helper function to populate the list of configurations. def fillConfigCombo(self): # get the widget combo = self.wTree.get_widget("comboConfig") model = combo.get_model() combo.set_model(None) # delete the list model.clear() pos = 0 activePos = -1 # add all configurations we have, remember the index of the active one for conf in self.configs: model.append([conf[0]]) if (conf[0]==self.configname): activePos = pos pos = pos + 1 combo.set_model(model) # let the comboBox show the active config entry if (activePos != -1): combo.set_active(activePos) ## Callback to select a different config file for editing. def comboConfig_changed(self, widget, data = None): # get the widget combo = self.wTree.get_widget("comboConfig") model = combo.get_model() name = combo.get_active_text() # only continue if this is different to the former config if (name != self.configname): newconf = None # let's find the new ConfigObj for conf in self.configs: if (name == conf[0]): newconf = conf # if found set it as our active one and show it's settings in the GUI if (newconf != None): self.config = newconf[1] self.configname = newconf[0] self.proxi = newconf[2] self.readSettings() ## Callback to create a new config file for editing. def btnNew_clicked(self, widget, data = None): # reset the entry widget self.wTree.get_widget("entryNewName").set_text('') self.windowNew.show() ## Callback to delete a config file. def btnDelete_clicked(self, widget, data = None): # never delete the last config if (len(self.configs)==1): dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _("The last configuration file cannot be deleted.")) dlg.run() dlg.destroy() return 0 # security question dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_YES_NO, _("Do you really want to delete the configuration '%s'.") % self.configname) retval = dlg.run() dlg.destroy() if (retval == gtk.RESPONSE_YES): # ok, now stop the detection for that config self.proxi.Stop = True # save the filename configfile = self.config.filename # rip it out of our configs array self.configs.remove([self.configname, self.config, self.proxi]) # change active config to the next one self.configs.sort() self.configname = configs[0][0] self.config = configs[0][1] self.proxi = configs[0][2] # update gui self.readSettings() self.fillConfigCombo() # now delete the file on the disk try: os.remove(configfile) except: # should this be a GUI message? print _("The configfile '%s' could not be deleted.") % configfile ## Callback to rename a config file. def btnRename_clicked(self, widget, data = None): # set the entry widget self.wTree.get_widget("entryRenameName").set_text(self.configname) self.windowRename.show() ## Callback to show the pop-up menu if icon is right-clicked. def popupMenu(self, widget, button, time, data = None): if button == 3: if data: data.show_all() data.popup(None, None, None, 3, time) pass ## Callback to show and hide the config dialog. def showWindow(self, widget, data = None): if self.window.get_property("visible"): self.Close() else: self.window.show() for config in self.configs: config[2].Simulate = True ## Callback to create and show the info dialog. def aboutPressed(self, widget, data = None): logo = gtk.gdk.pixbuf_new_from_file(dist_path + icon_base) description = _("Leave it - it's locked, come back - it's back too...") copyright = u"""Copyright (c) 2007,2008 Lars Friedrichs""" people = [ u"Lars Friedrichs ", u"Tobias Jakobs", u"Zsolt Mazolt"] translators = """Translators: de Lars Friedrichs en Lars Friedrichs es César Palma fa Ali Sattari hu Kami it e633 Prosper ru Alexey Lubimov sv Jan Braunisch th Maythee Anegboonlap & pFz Former translators: fr Claude sv Alexander Jönsson sv Daniel Nylander """ license = _(""" BlueProximity 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. BlueProximity 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 BlueProximity; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """) about = gtk.AboutDialog() about.set_icon(logo) about.set_name("BlueProximity") about.set_version(SW_VERSION) about.set_copyright(copyright) about.set_comments(description) about.set_authors(people) about.set_logo(logo) about.set_license(license) about.set_website("http://blueproximity.sourceforge.net") about.set_translator_credits(translators) about.connect('response', lambda widget, response: widget.destroy()) about.show() ## Callback to activate and deactivate pause mode. # This is actually done by removing the proximity object's mac address. def pausePressed(self, widget, data = None): if self.pauseMode: self.pauseMode = False for config in configs: config[2].dev_mac = config[2].lastMAC config[2].Simulate = False self.icon.set_from_file(dist_path + icon_con) else: self.pauseMode = True for config in configs: config[2].lastMAC = config[2].dev_mac config[2].dev_mac = '' config[2].Simulate = True config[2].kill_connection() ## helper function to set a ComboBox's value to value if that exists in the Combo's list # The value is not changed if the new value is not member of the list. # @param widget a gtkComboBox object # @param value the value the gtkComboBox should be set to. def setComboValue(self, widget, value): model = widget.get_model() for row in model: if row[0] == value: widget.set_active_iter(row.iter) break ## helper function to get a ComboBox's value def getComboValue(self, widget): model = widget.get_model() iter = widget.get_active_iter() return model.get_value(iter, 0) ## Reads the config settings and sets all GUI components accordingly. def readSettings(self): #Updates the controls to show the actual configuration of the running proximity was_live = self.gone_live self.gone_live = False self.wTree.get_widget("entryMAC").set_text(self.config['device_mac']) self.wTree.get_widget("entryChannel").set_value(int(self.config['device_channel'])) self.wTree.get_widget("hscaleLockDist").set_value(int(self.config['lock_distance'])) self.wTree.get_widget("hscaleLockDur").set_value(int(self.config['lock_duration'])) self.wTree.get_widget("hscaleUnlockDist").set_value(int(self.config['unlock_distance'])) self.wTree.get_widget("hscaleUnlockDur").set_value(int(self.config['unlock_duration'])) self.wTree.get_widget("comboLock").child.set_text(self.config['lock_command']) self.wTree.get_widget("comboUnlock").child.set_text(self.config['unlock_command']) self.wTree.get_widget("comboProxi").child.set_text(self.config['proximity_command']) self.wTree.get_widget("hscaleProxi").set_value(self.config['proximity_interval']) self.wTree.get_widget("checkSyslog").set_active(self.config['log_to_syslog']) self.setComboValue(self.wTree.get_widget("comboFacility"), self.config['log_syslog_facility']) self.wTree.get_widget("checkFile").set_active(self.config['log_to_file']) self.wTree.get_widget("entryFile").set_text(self.config['log_filelog_filename']) self.gone_live = was_live ## Reads the current settings from the GUI and stores them in the configobj object. def writeSettings(self): #Updates the running proximity and the config file with the new settings from the controls was_live = self.gone_live self.gone_live = False self.proxi.dev_mac = self.wTree.get_widget("entryMAC").get_text() self.proxi.dev_channel = int(self.wTree.get_widget("entryChannel").get_value()) self.proxi.gone_limit = -self.wTree.get_widget("hscaleLockDist").get_value() self.proxi.gone_duration = self.wTree.get_widget("hscaleLockDur").get_value() self.proxi.active_limit = -self.wTree.get_widget("hscaleUnlockDist").get_value() self.proxi.active_duration = self.wTree.get_widget("hscaleUnlockDur").get_value() self.config['device_mac'] = str(self.proxi.dev_mac) self.config['device_channel'] = str(self.proxi.dev_channel) self.config['lock_distance'] = int(-self.proxi.gone_limit) self.config['lock_duration'] = int(self.proxi.gone_duration) self.config['unlock_distance'] = int(-self.proxi.active_limit) self.config['unlock_duration'] = int(self.proxi.active_duration) self.config['lock_command'] = self.wTree.get_widget('comboLock').child.get_text() self.config['unlock_command'] = str(self.wTree.get_widget('comboUnlock').child.get_text()) self.config['proximity_command'] = str(self.wTree.get_widget('comboProxi').child.get_text()) self.config['proximity_interval'] = int(self.wTree.get_widget('hscaleProxi').get_value()) self.config['log_to_syslog'] = self.wTree.get_widget("checkSyslog").get_active() self.config['log_syslog_facility'] = str(self.getComboValue(self.wTree.get_widget("comboFacility"))) self.config['log_to_file'] = self.wTree.get_widget("checkFile").get_active() self.config['log_filelog_filename'] = str(self.wTree.get_widget("entryFile").get_text()) self.proxi.logger.configureFromConfig(self.config) self.config.write() self.gone_live = was_live ## Callback for resetting the values for the min/max viewer. def btnResetMinMax_clicked(self,widget, data = None): self.minDist = -255 self.maxDist = 0 ## Callback called by almost all GUI elements if their values are changed. # We don't react if we are still initializing (self.gone_live==False) # because setting the values of the elements would already fire their change events. # @see gone_live def event_settings_changed(self,widget, data = None): if self.gone_live: self.writeSettings() pass ## Callback called by certain GUI elements if their values are changed. # We don't react if we are still initializing (self.gone_live==False) # because setting the values of the elements would already fire their change events. # But in any case we kill a possibly existing connection. # Changing the rfcomm channel e.g. fires this event instead of event_settings_changed. # @see event_settings_changed def event_settings_changed_reconnect(self,widget, data = None): self.proxi.kill_connection() if self.gone_live: self.writeSettings() pass ## Callback called when one clicks into the channel scan results. # It sets the 'selected channel' field to the selected channel def event_scanChannelResult_changed(self,widget, data = None): # Put selected channel in channel entry field selection = self.wTree.get_widget("treeScanChannelResult").get_selection() (model, iter) = selection.get_selected() value = model.get_value(iter, 0) self.wTree.get_widget("entryChannel").set_value(int(value)) self.writeSettings() ## Callback to just close and not destroy the main window def btnClose_clicked(self,widget, data = None): self.Close() return 1 ## Callback called when one clicks on the 'use selected address' button # it copies the MAC address of the selected device into the mac address field. def btnSelect_clicked(self,widget, data = None): #Takes the selected entry in the mac/name table and enters its mac in the MAC field selection = self.tree.get_selection() selection.set_mode(gtk.SELECTION_SINGLE) model, selection_iter = selection.get_selected() if (selection_iter): mac = self.model.get_value(selection_iter, 0) self.wTree.get_widget("entryMAC").set_text(mac) self.writeSettings() ## Callback that is executed when the scan for devices button is clicked # actually it starts the scanning asynchronously to have the gui redraw nicely before hanging :-) def btnScan_clicked(self,widget, data = None): # scan the area for bluetooth devices and show the results watch = gtk.gdk.Cursor(gtk.gdk.WATCH) self.window.window.set_cursor(watch) self.model.clear() self.model.append(['...', _('Now scanning...')]) self.setSensitiveConfigManagement(False) gobject.idle_add(self.cb_btnScan_clicked) ## Asynchronous callback function to do the actual device discovery scan def cb_btnScan_clicked(self): tmpMac = self.proxi.dev_mac self.proxi.dev_mac = '' self.proxi.kill_connection() macs = [] try: macs = self.proxi.get_device_list() except: macs = [['', _('Sorry, the bluetooth device is busy connecting.\nPlease enter a correct mac address or no address at all\nfor the config that is not connecting and try again later.')]] self.proxi.dev_mac = tmpMac self.model.clear() for mac in macs: self.model.append([mac[0], mac[1]]) self.window.window.set_cursor(None) self.setSensitiveConfigManagement(True) ## Callback that is executed when the scan channels button is clicked. # It starts an asynchronous scan for the channels via initiating a ScanDevice object. # That object does the magic, updates the gui and afterwards calls the callback function btnScanChannel_done . def btnScanChannel_clicked(self,widget, data = None): # scan the selected device for possibly usable channels if self.scanningChannels: self.wTree.get_widget("labelBtnScanChannel").set_label(_("Sca_n channels on device")) self.wTree.get_widget("channelScanWindow").hide_all() self.scanningChannels = False self.scanner.doStop() self.setSensitiveConfigManagement(True) else: self.setSensitiveConfigManagement(False) mac = self.proxi.dev_mac if self.pauseMode: mac = self.lastMAC was_paused = True else: self.pausePressed(None) was_paused = False self.wTree.get_widget("labelBtnScanChannel").set_label(_("Stop sca_nning")) self.wTree.get_widget("channelScanWindow").show_all() self.scanningChannels = True dialog = gtk.MessageDialog(message_format=_("The scanning process tries to connect to each of the 30 possible ports. This will take some time and you should watch your bluetooth device for any actions to be taken. If possible click on accept/connect. If you are asked for a pin your device was not paired properly before, see the manual on how to fix this."),buttons=gtk.BUTTONS_OK) dialog.connect("response", lambda x,y: dialog.destroy()) dialog.run() self.scanner = ScanDevice(mac,self.modelScan,was_paused,self.btnScanChannel_done) return 0 ## The callback that is called by the ScanDevice object that scans for a device's usable rfcomm channels. # It is called after all channels have been scanned. # @param was_paused informs this function about the pause state before the scan started. # That state will be reconstructed by the function. def btnScanChannel_done(self,was_paused): self.wTree.get_widget("labelBtnScanChannel").set_label(_("Sca_n channels on device")) self.scanningChannels = False self.setSensitiveConfigManagement(True) if not was_paused: self.pausePressed(None) self.proxi.Simulate = True def Close(self): #Hide the settings window self.window.hide() #Disable simulation mode for all configs for config in configs: config[2].Simulate = False def quit(self, widget, data = None): #try to close everything correctly self.icon.set_from_file(dist_path + icon_att) for config in configs: config[2].logger.log_line(_('stopped.')) config[2].Stop = 1 time.sleep(2) gtk.main_quit() ## Updates the GUI (values, icon, tooltip) with the latest values # is always called via gobject.timeout_add call to run asynchronously without a seperate thread. def updateState(self): # update the display with newest measurement values (once per second) newVal = int(self.proxi.Dist) # Values are negative! if newVal > self.minDist: self.minDist = newVal if newVal < self.maxDist: self.maxDist = newVal self.wTree.get_widget("labState").set_text(_("min: ") + str(-self.minDist) + _(" max: ") + str(-self.maxDist) + _(" state: ") + self.proxi.State) self.wTree.get_widget("hscaleAct").set_value(-newVal) #Update icon too if self.pauseMode: self.icon.set_from_file(dist_path + icon_pause) self.icon.set_tooltip(_('Pause Mode - not connected')) else: # we have to show the 'worst case' since we only have one icon but many configs... connection_state = 0 con_info = '' con_icons = [icon_base, icon_att, icon_away, icon_con ] for config in configs: if config[2].ErrorMsg == "No connection found, trying to establish one...": connection_state = 3 else: if config[2].State != _('active'): if (connection_state < 2): connection_state = 2 else: if newVal < config[2].active_limit: if (connection_state < 1): connection_state = 1 if (con_info != ''): con_info = con_info + '\n\n' con_info = con_info + config[0] + ': ' + _('Detected Distance: ') + str(-config[2].Dist) + '; ' + _("Current State: ") + config[2].State + '; ' + _("Status: ") + config[2].ErrorMsg if self.proxi.Simulate: simu = _('\nSimulation Mode (locking disabled)') else: simu = '' self.icon.set_from_file(dist_path + con_icons[connection_state]) self.icon.set_tooltip(con_info + '\n' + simu) self.timer = gobject.timeout_add(1000,self.updateState) def proximityCommand(self): #This is the proximity command callback called asynchronously as the updateState above if self.proxi.State == _('active') and not self.proxi.Simulate: ret_val = os.popen(self.config['proximity_command']).readlines() self.timer2 = gobject.timeout_add(1000*self.config['proximity_interval'],self.proximityCommand) ## This class creates all logging information in the desired form. # We may log to syslog with a given syslog facility, while the severety is always info. # We may also log a simple file. class Logger(object): ## Constructor does nothing special. def __init__(self): self.disable_syslogging() self.disable_filelogging() ## helper function to convert a string (given by a ComboBox) to the corresponding # syslog module facility constant. # @param facility One of the 8 "localX" facilities or "user". def getFacilityFromString(self, facility): #Returns the correct constant value for the given facility dict = { "local0" : syslog.LOG_LOCAL0, "local1" : syslog.LOG_LOCAL1, "local2" : syslog.LOG_LOCAL2, "local3" : syslog.LOG_LOCAL3, "local4" : syslog.LOG_LOCAL4, "local5" : syslog.LOG_LOCAL5, "local6" : syslog.LOG_LOCAL6, "local7" : syslog.LOG_LOCAL7, "user" : syslog.LOG_USER } return dict[facility] ## Activates the logging to the syslog server. def enable_syslogging(self, facility): self.syslog_facility = self.getFacilityFromString(facility) syslog.openlog('blueproximity',syslog.LOG_PID) self.syslogging = True ## Deactivates the logging to the syslog server. def disable_syslogging(self): self.syslogging = False self.syslog_facility = None ## Activates the logging to the given file. # Actually tries to append to that file first, afterwards tries to write to it. # If both don't work it gives an error message on stdout and does not activate the logging. # @param filename The complete filename where to log to def enable_filelogging(self, filename): self.filename = filename try: #let's append self.flog = file(filename,'a') self.filelogging = True except: try: #did not work, then try to create file (is this really needed or does python know another attribute to file()? self.flog = file(filename,'w') self.filelogging = True except: print _("Could not open logfile '%s' for writing." % filename) self.disable_filelogging ## Deactivates logging to a file. def disable_filelogging(self): try: self.flog.close() except: pass self.filelogging = False self.filename = '' ## Outputs a line to the logs. Takes care of where to put the line. # @param line A string that is printed in the logs. The string is unparsed and not sanatized by any means. def log_line(self, line): if self.syslogging: syslog.syslog(self.syslog_facility | syslog.LOG_NOTICE, line) if self.filelogging: try: self.flog.write( time.ctime() + " blueproximity: " + line + "\n") self.flog.flush() except: self.disable_filelogging() ## Activate the logging mechanism that are requested by the given configuration. # @param config A ConfigObj object containing the needed settings. def configureFromConfig(self, config): if config['log_to_syslog']: self.enable_syslogging(config['log_syslog_facility']) else: self.disable_syslogging() if config['log_to_file']: if self.filelogging and config['log_filelog_filename'] != self.filename: self.disable_filelogging() self.enable_filelogging(config['log_filelog_filename']) elif not self.filelogging: self.enable_filelogging(config['log_filelog_filename']) ## ScanDevice is a helper class used for scanning for open rfcomm channels # on a given device. It uses asynchronous calls via gobject.timeout_add to # not block the main process. It updates a given model after every scanned port # and calls a callback function after finishing the scanning process. class ScanDevice(object): ## Constructor which sets up and immediately starts the scanning process. # Note that the bluetooth device should not be connected while scanning occurs. # @param device_mac MAC address of the bluetooth device to be scanned. # @param was_paused A parameter to be passed to the finishing callback function. # This is to automatically put the GUI in simulation mode if it has been before scanning. (dirty hack) # @param callback A callback function to be called after scanning has been done. # It takes one parameter which is preset by the was_paused parameter. def __init__(self,device_mac,model,was_paused,callback): self.mac = device_mac self.model = model self.stopIt = False self.port = 1 self.timer = gobject.timeout_add(500,self.runStep) self.model.clear() self.was_paused = was_paused self.callback = callback ## Checks whether a certain port on the given mac address is reachable. # @param port An integer from 1 to 30 giving the rfcomm channel number to try to reach. # The function does not return True/False but the actual translated strings. def scanPortResult(self,port): # here we scan exactly one port and give a textual result _sock = bluez.btsocket() sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM , _sock ) try: sock.connect((self.mac, port)) sock.close return _("usable") except: return _("closed or denied") ## Asynchronous working thread. # It scans a single port at a time and reruns with the next one in the next loop. def runStep(self): # here the scanning of all ports is done self.model.append([str(self.port), self.scanPortResult(self.port)]) self.port = self.port + 1 if not self.port > 30 and not self.stopIt: self.timer = gobject.timeout_add(500,self.runStep) else: self.callback(self.was_paused) def doStop(self): self.stopIt = True ## This class does 'all the magic' like regular device detection and decision making # whether a device is known as present or away. Here is where all the bluetooth specific # part takes place. It is build to be run a a seperate thread and would run perfectly without any GUI. # Please note that the present-command is issued by the GUI whereas the locking and unlocking # is called by this class. This is inconsitent and to be changed in a future release. class Proximity (threading.Thread): ## Constructor to setup our local variables and initialize threading. # @param config a ConfigObj object that stores all our settings def __init__(self,config): threading.Thread.__init__(self, name="WorkerThread") self.config = config self.Dist = -255 self.State = _("gone") self.Simulate = False self.Stop = False self.procid = 0 self.dev_mac = self.config['device_mac'] self.dev_channel = self.config['device_channel'] self.ringbuffer_size = self.config['buffer_size'] self.ringbuffer = [-254] * self.ringbuffer_size self.ringbuffer_pos = 0 self.gone_duration = self.config['lock_duration'] self.gone_limit = -self.config['lock_distance'] self.active_duration = self.config['unlock_duration'] self.active_limit = -self.config['unlock_distance'] self.ErrorMsg = _("Initialized...") self.sock = None self.ignoreFirstTransition = True self.logger = Logger() self.logger.configureFromConfig(self.config) self.timeAct = 0 self.timeGone = 0 self.timeProx = 0 ## Returns all active bluetooth devices found. This is a blocking call. def get_device_list(self): ret_tab = list() nearby_devices = bluetooth.discover_devices() for bdaddr in nearby_devices: ret_tab.append([str(bdaddr),str(bluetooth.lookup_name( bdaddr ))]) return ret_tab ## Kills the rssi detection connection. def kill_connection(self): if self.sock != None: self.sock.close() self.sock = None return 0 ## This function is NOT IN USE. It is a try to create a python only way to # get the rssi values for a connected device. It does not work at this time. def get_proximity_by_mac(self,dev_mac): sock = bluez.hci_open_dev(dev_id) old_filter = sock.getsockopt( bluez.SOL_HCI, bluez.HCI_FILTER, 14) # perform a device inquiry on bluetooth device #0 # The inquiry should last 8 * 1.28 = 10.24 seconds # before the inquiry is performed, bluez should flush its cache of # previously discovered devices flt = bluez.hci_filter_new() bluez.hci_filter_all_events(flt) bluez.hci_filter_set_ptype(flt, bluez.HCI_EVENT_PKT) sock.setsockopt( bluez.SOL_HCI, bluez.HCI_FILTER, flt ) duration = 4 max_responses = 255 cmd_pkt = struct.pack("BBBBB", 0x33, 0x8b, 0x9e, duration, max_responses) bluez.hci_send_cmd(sock, bluez.OGF_LINK_CTL, bluez.OCF_INQUIRY, cmd_pkt) results = [] done = False while not done: pkt = sock.recv(255) ptype, event, plen = struct.unpack("BBB", pkt[:3]) if event == bluez.EVT_INQUIRY_RESULT_WITH_RSSI: pkt = pkt[3:] nrsp = struct.unpack("B", pkt[0])[0] for i in range(nrsp): addr = bluez.ba2str( pkt[1+6*i:1+6*i+6] ) rssi = struct.unpack("b", pkt[1+13*nrsp+i])[0] results.append( ( addr, rssi ) ) print "[%s] RSSI: [%d]" % (addr, rssi) elif event == bluez.EVT_INQUIRY_COMPLETE: done = True elif event == bluez.EVT_CMD_STATUS: status, ncmd, opcode = struct.unpack("BBH", pkt[3:7]) if status != 0: print "uh oh..." printpacket(pkt[3:7]) done = True else: print "unrecognized packet type 0x%02x" % ptype # restore old filter sock.setsockopt( bluez.SOL_HCI, bluez.HCI_FILTER, old_filter ) sock.close() return results ## Returns the rssi value of a connection to the given mac address. # @param dev_mac mac address of the device to check. # This should also be removed but I still have to find a way to read the rssi value from python def get_proximity_once(self,dev_mac): ret_val = os.popen("hcitool rssi " + dev_mac + " 2>/dev/null").readlines() if ret_val == []: ret_val = -255 else: ret_val = ret_val[0].split(':')[1].strip(' ') return int(ret_val) ## Fire up an rfcomm connection to a certain device on the given channel. # Don't forget to set up your phone not to ask for a connection. # (at least for this computer.) # @param dev_mac mac address of the device to connect to. # @param dev_channel rfcomm channel we want to connect to. def get_connection(self,dev_mac,dev_channel): try: self.procid = 1 _sock = bluez.btsocket() self.sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM , _sock ) self.sock.connect((dev_mac, dev_channel)) except: self.procid = 0 pass return self.procid def run_cycle(self,dev_mac,dev_channel): # reads the distance and averages it over the ringbuffer self.ringbuffer_pos = (self.ringbuffer_pos + 1) % self.ringbuffer_size self.ringbuffer[self.ringbuffer_pos] = self.get_proximity_once(dev_mac) ret_val = 0 for val in self.ringbuffer: ret_val = ret_val + val if self.ringbuffer[self.ringbuffer_pos] == -255: self.ErrorMsg = _("No connection found, trying to establish one...") self.kill_connection() self.get_connection(dev_mac,dev_channel) return int(ret_val / self.ringbuffer_size) def go_active(self): #The Doctor is in if self.ignoreFirstTransition: self.ignoreFirstTransition = False else: self.logger.log_line(_('screen is unlocked')) if (self.timeAct==0): self.timeAct = time.time() ret_val = os.popen(self.config['unlock_command']).readlines() self.timeAct = 0 else: self.logger.log_line(_('A command for %s has been skipped because the former command did not finish yet.') % _('unlocking')) self.ErrorMsg = _('A command for %s has been skipped because the former command did not finish yet.') % _('unlocking') def go_gone(self): #The Doctor is out if self.ignoreFirstTransition: self.ignoreFirstTransition = False else: self.logger.log_line(_('screen is locked')) if (self.timeGone==0): self.timeGone = time.time() ret_val = os.popen(self.config['lock_command']).readlines() self.timeGone = 0 else: self.logger.log_line(_('A command for %s has been skipped because the former command did not finish yet.') % _('locking')) self.ErrorMsg = _('A command for %s has been skipped because the former command did not finish yet.') % _('locking') def go_proximity(self): #The Doctor is still in if (self.timeProx==0): self.timeProx = time.time() ret_val = os.popen(self.config['proximity_command']).readlines() self.timeProx = 0 else: self.logger.log_line(_('A command for %s has been skipped because the former command did not finish yet.') % _('proximity')) self.ErrorMsg = _('A command for %s has been skipped because the former command did not finish yet.') % _('proximity') ## This is the main loop of the proximity detection engine. # It checks the rssi value against limits and invokes all commands. def run(self): duration_count = 0 state = _("gone") proxiCmdCounter = 0 while not self.Stop: #print "tick" try: if self.dev_mac != "": self.ErrorMsg = _("running...") dist = self.run_cycle(self.dev_mac,self.dev_channel) else: dist = -255 self.ErrorMsg = "No bluetooth device configured..." if state == _("gone"): if dist>=self.active_limit: duration_count = duration_count + 1 if duration_count >= self.active_duration: state = _("active") duration_count = 0 if not self.Simulate: # start the process asynchronously so we are not hanging here... timerAct = gobject.timeout_add(5,self.go_active) #self.go_active() else: duration_count = 0 else: if dist<=self.gone_limit: duration_count = duration_count + 1 if duration_count >= self.gone_duration: state = _("gone") proxiCmdCounter = 0 duration_count = 0 if not self.Simulate: # start the process asynchronously so we are not hanging here... timerGone = gobject.timeout_add(5,self.go_gone) #self.go_gone() else: duration_count = 0 proxiCmdCounter = proxiCmdCounter + 1 if dist != self.Dist or state != self.State: #print "Detected distance atm: " + str(dist) + "; state is " + state pass self.State = state self.Dist = dist # let's handle the proximity command if (proxiCmdCounter >= self.config['proximity_interval']) and not self.Simulate and (self.config['proximity_command']!=''): proxiCmdCounter = 0 # start the process asynchronously so we are not hanging here... timerProx = gobject.timeout_add(5,self.go_proximity) time.sleep(1) except KeyboardInterrupt: break self.kill_connection() if __name__=='__main__': gtk.glade.bindtextdomain(APP_NAME, local_path) gtk.glade.textdomain(APP_NAME) # react on ^C signal.signal(signal.SIGINT, signal.SIG_DFL) # read config if any configs = [] new_config = True conf_dir = os.path.join(os.getenv('HOME'),'.blueproximity') try: # check if config directory exists os.mkdir(conf_dir) print(_("Creating new config directory '%s'.") % conf_dir) # we should now look for an old config file and try to move it to a better place... os.rename(os.path.join(os.getenv('HOME'),'.blueproximityrc'),os.path.join(conf_dir,_("standard")+".conf")) print(_("Moved old configuration to the new config directory.")) except: # we can't create it because it is already there... pass # now look for .conf files in there vdt = Validator() for filename in os.listdir(conf_dir): if filename.endswith('.conf'): try: # add every valid .conf file to the array of configs config = ConfigObj(os.path.join(conf_dir,filename),{'create_empty':False,'file_error':True,'configspec':conf_specs}) # first validate it config.validate(vdt, copy=True) # rewrite it in a secure manner config.write() # if everything worked add this config as functioning configs.append ( [filename[:-5], config]) new_config = False print(_("Using config file '%s'.") % filename) except: print(_("'%s' is not a valid config file.") % filename) # no previous configuration could be found so let's create a new one if new_config: config = ConfigObj(os.path.join(conf_dir, _('standard') + '.conf'),{'create_empty':True,'file_error':False,'configspec':conf_specs}) # next line fixes a problem with creating empty strings in default values for configobj config['device_mac'] = '' config.validate(vdt, copy=True) # write it in a secure manner config.write() configs.append ( [_('standard'), config]) # we can't log these messages since logging is not yet configured, so we just print it to stdout print(_("Creating new configuration.")) print(_("Using config file '%s'.") % _('standard')) # now start the proximity detection for each configuration for config in configs: p = Proximity(config[1]) p.start() config.append(p) configs.sort() # the idea behind 'configs' is an array containing the name, the configobj and the proximity object pGui = ProximityGUI(configs,new_config) # make GTK threadable gtk.gdk.threads_init() # aaaaand action! gtk.main() blueproximity-1.2.5.orig/ChangeLog0000644000175000017500000001125110761555105017003 0ustar nitaglfnitaglfChange log for BlueProximity 1.2.5 "double kill, multi kill, monster kill, rampage!" - 2008-02-28 - info: This is an unstable release preparing 1.2.6 - it has incomplete translations too - fixed: No runtime errors on scanning while still connecting (Bug #1892724) - fixed: correct inheriting of classes from 'object' (Bug #1892724) - fixed: you are now told if your config files are broken (at least on the console) (Bug #1781957) - fixed: commands not ending will now not make blueproximity hang - added: log file notice on hanging commands - added: support for multiple config files via *.conf files in ~/.blueproximity - added: new configurations can be added, deleted, renamed via gui - added: new locale hu - thanks Kami - modified: old config file is gone, it should now reside in directory ~/.blueproximity - modified: much more Doxygen documentation in the source - modified: proximity command has moved into Proximity class 1.2.4 "keep releasing" - released 2008-02-09 - added: support for russian language - thanks Alexey 1.2.3 "do it the ubuntu way" - released 2008-02-09 - modified: many small thnigs to get upstream compliance to all ubuntu policies - modified; changed source to support the old and the newer pybluez _bluetooth import variants 1.2.2 "fix it, fix it, fix it" - released 2008-01-31 - fixed: errors during imports can now be translated and don't lead to an error (Bug #1881000) - fixed: now the "Use selected device" button works again - shame on me... (Bug #1878304) - added: now we have a (rather uninteresting) man page (Bug #1841869) 1.2.1 "I'll be back" - released 2007-11-22 - fixed: proximity command now only executes if proximity detected and not paused (Bug #1835488) - added: some tool tips should help the initial user - added: new channel setting via GUI (Bug #1772585) - added: scan for usable channels on a device (Bug #1772585) - added: more error messages if external packages are missing 1.2 "call me HIG" - released 2007-09-11 - fixed: unlock command was always executed at start-up - fixed: MAC address is now being saved even if nothing else changed (Bug #1781579) - fixed: preferences window may now be closed using the X button of the window manager (thx to Zsolt Mazolt) - added: lock/unlock commands now can be changed via GUI (notebook tab 'Locking') - added: logging functions to log to syslog or file - added: proximity command which will be fired at given interval while proximity is detected (possible use: never activate screensaver while near) - added: we are now multilingual - see the .pot file. English and German in included (thx to Mark Mruss and www.learningpython.com) (Bug #1772603) - added: language French (Claude - f5pbl@users.sourceforge.net) - added: language Farsi (Ali Sattari - ali.sattari@gmail.com) - added: language Spanish (César Palma - cesarpalma80@gmail.com) - added: language Swedish (Daniel Nylander - dnylander@users.sourceforge.net) - modified: scanning now shows by message and watch cursor (Bug #1776732) - modified: every control directly accessible via keyboard (Bug #1776732) - modified: layout optimized by Tobias Jakobs (Bug #1776732) - modified: control range optimized to possible value range (Bug #1776732) - modified: gnome screensaver now locks the screen no matter what its settings say (Bug #1778306) - modified: new program info dialog accessible via icon's context menu (Bug #1776732) - modified: preferences dialog now has a proper icon (Bug #1776732) - modified: preferences dialog now accessible via 'preferences' entry in icon's context menu (Bug #1776732) - modified: preferences dialog now does auto-save and auto-activate values - changes are active immediately (Bug #1776732) - modified: info replaces old apply button which was no longer needed (Bug #1776732) - modified: switched to new, scalable icon set by Tobias and me - modified: changed allowed settings for ranges and durations to limits given by the GUI. 1.1 "see what's coming" - released 2007-08-18 - fixed: icon shows connecting process - fixed: no window flicker on start-up (Bug #1772241) - fixed: first window not displaced at upper left corner (Bug #1772241) - fixed: wrong set MAC when no config file exists, now shows correctly "not configured" in icon tool-tip - added: start-up script start_proximity.sh to be run from anywhere (link it in your session start-up) - added: automatically show settings screen on first start-up (Feature #1772589) - added: pause mode via icon's context menu (Feature #1776527) - added: Ubuntu Feisty package (Feature #1772590) - modified: some aspects regarding easier packaging - modified: logo - modified: switching most bt functions to pybluez, only rssi detection relies on hcitool 1.0 "the not final one" - released 2007-08-11 initial public release blueproximity-1.2.5.orig/proximity.glade0000644000175000017500000023365210761555105020306 0ustar nitaglfnitaglf BlueProximity Preferences GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False 12 True False 10 True False 0 True Selected Confi_guration True True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 8 False False True no entries False True 4 True True True True gtk-new True GTK_RELIEF_NORMAL True 4 False False True True gtk-delete True GTK_RELIEF_NORMAL True 4 False False True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-save-as 4 0.5 0.5 0 0 0 False False True _Rename True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 4 False False 0 False False 0 False True True True True True GTK_POS_TOP False False 6 True 0.5 0.5 1 1 0 0 0 0 True False 0 True Select from _detected devices: True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 treeScanResult PANGO_ELLIPSIZE_NONE -1 True 0 0 False False 6 True True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True All detected visible Bluetooth devices in reach. Use the scan button to populate or refresh the list. True True True True True False False True 0 True True True <i><small>Please note that the device should already be paired!</small></i> False True GTK_JUSTIFY_LEFT True False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True 0 6 True Scan for visible Bluetooth devices within reach. Show them in the list above. True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-find 4 0.5 0.5 0 0 0 False False True _Scan for devices True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 6 True Transfer the MAC address of the selected bluetooth device above into the address field below. True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-apply 4 0.5 0.5 0 0 0 False False True _Use selected device True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 0 False False 5 True False 12 True MAC _Address True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 entryMAC PANGO_ELLIPSIZE_NONE -1 False 0 2 False False True The MAC address of your bluetooth device (e.g. mobile phone or headset) in the format XX:XX:XX:XX:XX:XX True True True 0 True False 0 True True 2 False True 5 True False 12 True RFCOMM C_hannel True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 entryChannel PANGO_ELLIPSIZE_NONE -1 False 0 2 False False True The rfcomm channel where BlueProximity connects to your device. Must be an open channel, if in doubt please use the scan button. True 1 0 True GTK_UPDATE_ALWAYS False False 1 1 30 1 10 10 0 True True True Scan the selected device (MAC Address field) for available rfcomm channels. True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-find 4 0.5 0.5 0 0 0 False False True Sca_n channels on device True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 0 False False True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True All rfcomm channels that are usable. Use the scan channel button above to populate or refresh this list. Click on an entry to select this channel. True True False False True False False False 0 True True False True True _Bluetooth Device True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 12 True 9 2 False 6 12 True _Distance: True False GTK_JUSTIFY_LEFT False False 0 0.5 12 0 hscaleLockDist PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True D_uration (sec.): True False GTK_JUSTIFY_LEFT False False 0 0.5 12 0 hscaleLockDur PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True D_istance: True False GTK_JUSTIFY_LEFT False False 0 0.5 12 0 hscaleUnlockDist PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True Dur_ation (sec.): True False GTK_JUSTIFY_LEFT False False 0 0.5 12 0 hscaleUnlockDur PANGO_ELLIPSIZE_NONE -1 False 0 0 1 5 6 fill True True _Reset Min/Max True GTK_RELIEF_NORMAL True 0 1 8 9 fill True Distance: False False GTK_JUSTIFY_LEFT False False 0 0.5 12 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 7 8 fill True <b>Unlocking</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 3 4 7 fill True <b>Measured atm</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 6 7 7 fill True min: - max: - state: - False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 8 9 True False True GTK_POS_TOP 0 GTK_UPDATE_CONTINUOUS False 0 0 127 0 0 0 1 2 7 8 fill True True True GTK_POS_TOP 0 GTK_UPDATE_CONTINUOUS False 0 0 120 1 1 0 1 2 5 6 fill True True True GTK_POS_TOP 0 GTK_UPDATE_CONTINUOUS False 0 0 127 1 1 0 1 2 4 5 fill True True True GTK_POS_TOP 0 GTK_UPDATE_CONTINUOUS False 0 0 120 1 1 0 1 2 2 3 fill True True True GTK_POS_TOP 0 GTK_UPDATE_CONTINUOUS False 0 0 127 1 1 0 1 2 1 2 fill True <b>Locking</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 7 fill False True True _Proximity Details True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 12 True 10 2 False 6 12 True <b>Action commands</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True L_ocking command: True False GTK_JUSTIFY_LEFT False False 0 0.5 12 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True _Unlocking command: True False GTK_JUSTIFY_LEFT False False 0 0.5 12 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True gnome-screensaver-command -l xscreensaver-command -l False True True 1 2 1 2 fill True gnome-screensaver-command -d xscreensaver-command -d False True True 1 2 2 3 fill fill True The filename of the file to be logged to. Please make sure this file is writable by the user that started BlueProximity. True True True 0 ~/blueproximity.log True False 1 2 9 10 True File_name True False GTK_JUSTIFY_LEFT False False 0 0.5 36 0 entryFile PANGO_ELLIPSIZE_NONE -1 False 0 0 1 9 10 fill True True _File True GTK_RELIEF_NORMAL True False False True 0 1 8 9 12 fill True F_acility True False GTK_JUSTIFY_LEFT False False 0 0.5 36 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 7 8 fill True local0 local1 local2 local3 local4 local5 local6 local7 user False True 1 2 7 8 fill fill True True _Syslog True GTK_RELIEF_NORMAL True False False True 0 1 6 7 12 fill True <b>Logging</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 5 6 fill True Pro_ximity command: True False GTK_JUSTIFY_LEFT False False 0 0.5 12 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 3 4 fill True gnome-screensaver-command -p xscreensaver-command -p False True True 1 2 3 4 fill fill True Command _interval: (sec.) True False GTK_JUSTIFY_LEFT False False 0 0.5 24 0 hscaleProxi PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True True True GTK_POS_TOP 0 GTK_UPDATE_DELAYED False 60 5 600 5 2 0 1 2 4 5 fill fill False True True _Locking True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 0 True True True False 0 True True gtk-about True GTK_RELIEF_NORMAL True 0 False False True True gtk-close True GTK_RELIEF_NORMAL True 0 False True GTK_PACK_END 0 False True Create new configuration GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER_ON_PARENT True True False gtk-new True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False 12 True False 0 8 True False 8 True _Name of new configuration: True True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 entryNewName PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True True True 0 True False 0 True True 0 True True True <small>The new configuration will be created as a copy of the current configuration. Please change the according values afterwards.</small> False True GTK_JUSTIFY_LEFT True False 0.5 0.5 0 8 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False 8 True True gtk-new True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END True True gtk-cancel True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False True Rename configuration GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER_ON_PARENT True True False gtk-new True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False 12 True False 0 8 True False 8 True _New name of configuration: True True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 entryRenameName PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True True True 0 True False 0 True True 0 True True True <small>Renaming the configuration will change the name of the config file on the disk.</small> False True GTK_JUSTIFY_LEFT True False 0.5 0.5 0 8 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False 8 True True gtk-apply True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END True True gtk-cancel True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False True blueproximity-1.2.5.orig/README0000644000175000017500000000266310761555105016120 0ustar nitaglfnitaglfblueproximity v1.2.5 This software helps you add a little more security to your desktop. It does so by detecting one of your bluetooth devices, most likely your mobile phone, and keeping track of its distance. If you move away from your computer and the distance is above a certain level (no measurement in meters is possible) for a given time, it automatically locks your desktop (or starts any other shell command you want). See end of this file for interesting commands. Once away your computer awaits its master back - if you are nearer than a given level for a set time your computer unlocks magically without any interaction (or starts any other shell command you want). See the doc/ directory or the website which both contain a manual with screenshots. Please note that there might still some bugs, use the sourceforge site to keep track of them or tell me about new ones not mentioned there. Please read the whole manual - it's short enough, hopefully easy understandable and hey - it even got some pretty pictures in there too :-) Here's a list on contributors to the source: - Tobias Jakobs (GUI optimizations) - Zsolt Mazolt (GUI and KDE stuff) Interesting commands: * Un-/Locking gnome-screenserver gnome-screensaver-command -l gnome-screensaver-command -d * Telling GAIM your status gaim-remote "irc:setstatus?status=away&message=BlueProximity thinks I am away" gaim-remote "irc:setstatus?status=available" blueproximity-1.2.5.orig/blueproximity_pause.svg0000644000175000017500000010272010761555105022065 0ustar nitaglfnitaglf image/svg+xmlimage/svg+xml