You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(12) |
Jul
(47) |
Aug
(21) |
Sep
(5) |
Oct
(17) |
Nov
|
Dec
(8) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(4) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(9) |
Aug
|
Sep
(3) |
Oct
|
Nov
|
Dec
|
2003 |
Jan
|
Feb
(6) |
Mar
(7) |
Apr
(8) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(9) |
Nov
|
Dec
|
2004 |
Jan
(8) |
Feb
(46) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2005 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2006 |
Jan
(27) |
Feb
(2) |
Mar
|
Apr
(64) |
May
|
Jun
|
Jul
(11) |
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
(2) |
From: Gordon M. <go...@us...> - 2006-04-14 07:40:19
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.image/src/org/bitpedia/collider/image In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753/plugins/org.bitpedia.collider.image/src/org/bitpedia/collider/image Added Files: ImageFormatHandler.java Log Message: initial commit from code drop of april 12 --- NEW FILE: ImageFormatHandler.java --- package org.bitpedia.collider.image; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.LinkedHashMap; import java.util.Map; import org.bitpedia.collider.core.FormatHandler; import org.bitpedia.collider.core.Submission; public class ImageFormatHandler implements FormatHandler { private String errorString; public boolean supportsExtension(String ext) { return "bmp".equalsIgnoreCase(ext) || "gif".equalsIgnoreCase(ext) || "jpg".equalsIgnoreCase(ext) || "jpeg".equalsIgnoreCase(ext) || "png".equalsIgnoreCase(ext); } public boolean supportsMemAnalyze() { return false; } public boolean supportsFileAnalyze() { return true; } public void analyzeInit() { } public void analyzeUpdate(byte[] buf, int bufLen) { } public Map analyzeFinal() { return null; } private int[] parseBmp(DataInputStream stm) throws IOException { /* File must start with "BM" */ if (('B' != stm.readByte()) || ('M' != stm.readByte())) { return null; } stm.skip(16); byte[] buf = new byte[12]; stm.read(buf); ByteBuffer bb = ByteBuffer.wrap(buf); bb.order(ByteOrder.LITTLE_ENDIAN); int[] params = new int[3]; params[0] = bb.getInt(); params[1] = bb.getInt(); bb.position(bb.position()+2); params[2] = bb.getShort(); return params; } private int[] parseGif(DataInputStream stm) throws IOException { /* File must start with "GIF" */ if (('G' != stm.readByte()) || ('I' != stm.readByte()) || ('F' != stm.readByte())) { return null; } stm.skip(3); byte[] buf = new byte[5]; stm.read(buf); ByteBuffer bb = ByteBuffer.wrap(buf); bb.order(ByteOrder.LITTLE_ENDIAN); int[] params = new int[3]; params[0] = bb.getShort(); params[1] = bb.getShort(); /* packed byte: * Bits 8 and 5 are flags we don't need to worry about; * bits 6-8 and 1-3 are 3-bit descriptions of the number of bits, * minus 1, of "color resolution" and "bits per pixel" respectively. * Usually these values are the same, but if they're not, take the * larger of the two to be "bpp," since this is what standard * image editing programs seem to do. I don't know why. */ byte packed = bb.get(); int bpp1 = ((packed & 0x70) >> 4) + 1; int bpp2 = (packed & 0x07) + 1; if(bpp1 > bpp2) { params[2] = bpp1; } else { params[2] = bpp1; } return params; } private int[] parseJpg(DataInputStream stm) throws IOException { /* File must start with 0xFFD8FFE0, <2 byte field length>, "JFIF", 0x00 */ if (0xFFD8FFE0 != stm.readInt()) { // ((byte)0xFF != stm.readByte()) || ((byte)0xD8 != stm.readByte()) || // ((byte)0xFF != stm.readByte()) || ((byte)0xE0 != stm.readByte())) { return null; } short bytesLeft = stm.readShort(); bytesLeft -= 2; /* 2 bytes of the field length indicator itself count */ if (('J' != stm.readByte()) || ('F' != stm.readByte()) || ('I' != stm.readByte()) || ('F' != stm.readByte())) { return null; } bytesLeft -= 4; stm.skip(bytesLeft); /* now we parse the file for the image information field. JPEG fields * have the general structure of: 0xFF, <1 byte field type>, <2 byte field * length>, <x byte field data> */ while (true) { // uint8 type, samples, bits_per_sample; /* if there's no 0xFF marker, JPEG file is malformed */ byte b = stm.readByte(); if (-1 != b) { return null; } /* JPEG files are sometimes padded with sequential 0xFF bytes */ byte type; do { type = stm.readByte(); } while (0xFF == type); /* image information fields (for various types of compression) */ switch (type & 0xFF) { case 0xC0: case 0xC1: case 0xC2: case 0xC3: case 0xC5: case 0xC6: case 0xC7: case 0xC9: case 0xCA: case 0xCB: case 0xCD: case 0xCE: case 0xCF: stm.skip(2); /* skip the field length */ int bitsPerSample = stm.readByte(); int[] params = new int[3]; params[1] = stm.readShort(); params[0] = stm.readShort(); int samples = stm.readByte(); params[2] = samples * bitsPerSample; return params; case 0xD9: /* if end of image, */ case 0xDA: /* or beginning of compressed data, */ return null; /* there was no image info (or we missed it) */ /* if any other field, we don't care, so skip past it */ default: bytesLeft = stm.readShort(); /* since the length takes 2 bytes, length must be >= 2 */ if (bytesLeft < 2) { return null; } bytesLeft -= 2; /* skip the rest of the field and go on the next one */ stm.skip(bytesLeft); } } } private int[] parsePng(DataInputStream stm) throws IOException { /* File must start with 0x89, "PNG", 0x0D0A1A0A */ if (stm.readByte() != (byte)0x89 || stm.readByte() != 'P' || stm.readByte() != 'N' || stm.readByte() != 'G' || stm.readByte() != 0x0D || stm.readByte() != 0x0A || stm.readByte() != 0x1A || stm.readByte() != 0x0A) { return null; } /* Skip IHDR chunk length (since we know its structure already) */ stm.skip(4); /* * Make sure this really is an IHDR chunk (the first chunk must be an * IHDR chunk in a valid PNG file) */ if (stm.readByte() != 'I' || stm.readByte() != 'H' || stm.readByte() != 'D' || stm.readByte() != 'R') { return null; } int[] params = new int[3]; /* Read in our data */ params[0] = stm.readInt(); params[1] = stm.readInt(); /* bpp depends on bit_depth and color_type. */ int bitDepth = stm.readByte(); int colorType = stm.readByte(); switch (colorType) { case 0: /* grayscale */ case 3: /* pixels are palette indices */ params[2] = bitDepth; break; case 2: /* pixels are RGB triples */ params[2] = bitDepth * 3; break; case 4: params[2] = bitDepth * 2; /* pixels are grayscale + alpha */ break; case 6: params[2] = bitDepth * 4; /* pixels are RGB triples + alpha */ break; default: return null; /* invalid color_type */ } return params; } public Map analyzeFile(String fileName) { DataInputStream stm = null; try { stm = new DataInputStream(new FileInputStream(fileName)); String ext = Submission.extractExt(fileName); int[] imgAttrs; String format; if ("bmp".equalsIgnoreCase(ext)) { imgAttrs = parseBmp(stm); format = "BMP"; } else if ("gif".equalsIgnoreCase(ext)) { imgAttrs = parseGif(stm); format = "GIF"; } else if ("jpg".equalsIgnoreCase(ext) || "jpeg".equalsIgnoreCase(ext)) { imgAttrs = parseJpg(stm); format = "JPEG"; } else if ("png".equalsIgnoreCase(ext)) { imgAttrs = parsePng(stm); format = "PNG"; } else { return null; } if (null == imgAttrs) { return null; } Map attrs = new LinkedHashMap(); attrs.put("tag.image.width", ""+imgAttrs[0]); attrs.put("tag.image.height", ""+imgAttrs[1]); attrs.put("tag.image.bpp", ""+imgAttrs[2]); attrs.put("tag.image.format", format); return attrs; } catch (IOException e) { errorString = e.getMessage(); return null; } finally { try { stm.close(); } catch (IOException e) {} } } public String getError() { return errorString; } } |
From: Gordon M. <go...@us...> - 2006-04-14 07:40:19
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753/plugins/org.bitpedia.collider.wav Added Files: plugin.xml .cvsignore Log Message: initial commit from code drop of april 12 --- NEW FILE: plugin.xml --- <?xml version="1.0" ?> <!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 0.4" "http://jpf.sourceforge.net/plugin_0_4.dtd"> <plugin id="org.bitpedia.collider.wav" version="0.0.1"> <requires> <import plugin-id="org.bitpedia.collider.core"/> </requires> <runtime> <library id="wav" path="bin/" type="code"> <export prefix="*"/> </library> </runtime> <extension plugin-id="org.bitpedia.collider.core" point-id="FormatHandler" id="Wav"> <parameter id="class" value="org.bitpedia.collider.wav.WavFormatHandler"/> </extension> </plugin> --- NEW FILE: .cvsignore --- bin |
From: Gordon M. <go...@us...> - 2006-04-14 07:40:19
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753/plugins/org.bitpedia.collider.video Added Files: .cvsignore plugin.xml Log Message: initial commit from code drop of april 12 --- NEW FILE: .cvsignore --- bin --- NEW FILE: plugin.xml --- <?xml version="1.0" ?> <!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 0.4" "http://jpf.sourceforge.net/plugin_0_4.dtd"> <plugin id="org.bitpedia.collider.video" version="0.0.1"> <requires> <import plugin-id="org.bitpedia.collider.core"/> </requires> <runtime> <library id="video" path="bin/" type="code"> <export prefix="*"/> </library> </runtime> <extension plugin-id="org.bitpedia.collider.core" point-id="FormatHandler" id="Video"> <parameter id="class" value="org.bitpedia.collider.video.VideoFormatHandler"/> </extension> </plugin> |
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.ui/src/org/bitpedia/collider/ui In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753/plugins/org.bitpedia.collider.ui/src/org/bitpedia/collider/ui Added Files: MainDialog.java ColliderUtils.java BrowserControl.java WidthSpring.java AppPlugin.java Log Message: initial commit from code drop of april 12 --- NEW FILE: MainDialog.java --- package org.bitpedia.collider.ui; import java.awt.BorderLayout; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; import java.io.Reader; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JTextArea; import javax.swing.Spring; import javax.swing.SpringLayout; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import org.bitpedia.collider.core.Bitcollider; import org.bitpedia.collider.core.Submission; import edu.stanford.ejalbert.BrowserLauncher; import edu.stanford.ejalbert.exception.BrowserLaunchingExecutionException; import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException; import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException; public class MainDialog extends JPanel implements ActionListener, DropTargetListener, Bitcollider.Progress { public static final int GAP = 6; private Collection fmtHandlers; private JFrame frame; private SpringLayout layout = new SpringLayout(); private JLabel lblCurFile = new JLabel("Current File:"); private JProgressBar pbCurFile = new JProgressBar(0, 100); private JLabel lblOverallProgress = new JLabel("Overall progress:"); private JProgressBar pbOverallProgress = new JProgressBar(0, 100); private JLabel lblFilesToProcess = new JLabel("0 files to process", SwingConstants.CENTER); private JLabel lblFilesProcessed = new JLabel("0 files processed", SwingConstants.CENTER); private JLabel lblFilesSkipped = new JLabel("0 files skipped", SwingConstants.CENTER); private JTextArea taHint = new JTextArea( " (1) Drag files onto this window\n" + " (2) The Bitcollider extracts identifiers and metadata\n" + " (3) Your default web browser will launch to submit the info"); private JCheckBox chbCloseWindow = new JCheckBox( "Close window after processing", false); private JCheckBox chbDontShowForSmall = new JCheckBox( "Don't show window for small files", true); private JButton btnAbout = new JButton("About"); private JButton btnBrowse = new JButton("Browse"); private JButton btnClose = new JButton("Close"); private Spring sprPnlWidth = new WidthSpring(this); private JFileChooser fileChooser = new JFileChooser(); private int filesSkipped = 0; private int filesProcessed = 0; private int filesToProcess = 0; private boolean noSubmitting = false; private String alternateUrl; private boolean md5 = false; private boolean crc32 = false; public MainDialog(JFrame frame) { this.frame = frame; fileChooser.setMultiSelectionEnabled(true); setLayout(layout); add(lblCurFile); layout.putConstraint(SpringLayout.NORTH, lblCurFile, GAP, SpringLayout.NORTH, this); layout.putConstraint(SpringLayout.WEST, lblCurFile, GAP, SpringLayout.WEST, this); add(pbCurFile); layout.putConstraint(SpringLayout.EAST, pbCurFile, -GAP, SpringLayout.EAST, this); layout.putConstraint(SpringLayout.WEST, pbCurFile, GAP, SpringLayout.WEST, this); layout.putConstraint(SpringLayout.NORTH, pbCurFile, GAP, SpringLayout.SOUTH, lblCurFile); add(lblOverallProgress); layout.putConstraint(SpringLayout.NORTH, lblOverallProgress, GAP, SpringLayout.SOUTH, pbCurFile); layout.putConstraint(SpringLayout.WEST, lblOverallProgress, GAP, SpringLayout.WEST, this); add(pbOverallProgress); layout.putConstraint(SpringLayout.EAST, pbOverallProgress, -GAP, SpringLayout.EAST, this); layout.putConstraint(SpringLayout.WEST, pbOverallProgress, GAP, SpringLayout.WEST, this); layout.putConstraint(SpringLayout.NORTH, pbOverallProgress, GAP, SpringLayout.SOUTH, lblOverallProgress); Spring lblWidth = Spring.scale(Spring.sum(sprPnlWidth, Spring .constant(-4 * GAP)), 1f / 3f); add(lblFilesToProcess); layout.putConstraint(SpringLayout.NORTH, lblFilesToProcess, GAP, SpringLayout.SOUTH, pbOverallProgress); layout.putConstraint(SpringLayout.WEST, lblFilesToProcess, GAP, SpringLayout.WEST, this); layout.getConstraints(lblFilesToProcess).setWidth(lblWidth); add(lblFilesProcessed); layout.putConstraint(SpringLayout.NORTH, lblFilesProcessed, GAP, SpringLayout.SOUTH, pbOverallProgress); layout.putConstraint(SpringLayout.WEST, lblFilesProcessed, GAP, SpringLayout.EAST, lblFilesToProcess); layout.getConstraints(lblFilesProcessed).setWidth(lblWidth); add(lblFilesSkipped); layout.putConstraint(SpringLayout.EAST, lblFilesSkipped, -GAP, SpringLayout.EAST, this); layout.putConstraint(SpringLayout.WEST, lblFilesSkipped, GAP, SpringLayout.EAST, lblFilesProcessed); layout.putConstraint(SpringLayout.NORTH, lblFilesSkipped, GAP, SpringLayout.SOUTH, pbOverallProgress); layout.getConstraints(lblFilesSkipped).setWidth(lblWidth); add(taHint); taHint.setEditable(false); taHint.setFocusable(false); taHint.setBackground(this.getBackground()); layout.putConstraint(SpringLayout.EAST, taHint, -GAP, SpringLayout.EAST, this); layout.putConstraint(SpringLayout.WEST, taHint, GAP, SpringLayout.WEST, this); layout.putConstraint(SpringLayout.NORTH, taHint, GAP, SpringLayout.SOUTH, lblFilesToProcess); add(chbCloseWindow); layout.putConstraint(SpringLayout.NORTH, chbCloseWindow, GAP, SpringLayout.SOUTH, taHint); layout.putConstraint(SpringLayout.WEST, chbCloseWindow, GAP, SpringLayout.WEST, this); add(chbDontShowForSmall); layout.putConstraint(SpringLayout.NORTH, chbDontShowForSmall, GAP, SpringLayout.SOUTH, chbCloseWindow); layout.putConstraint(SpringLayout.WEST, chbDontShowForSmall, GAP, SpringLayout.WEST, this); Spring btnWidth = Spring.scale(Spring.sum(sprPnlWidth, Spring .constant(-4 * GAP)), 1f / 3f); add(btnAbout); btnAbout.addActionListener(this); layout.putConstraint(SpringLayout.NORTH, btnAbout, GAP, SpringLayout.SOUTH, chbCloseWindow); layout.putConstraint(SpringLayout.WEST, btnAbout, GAP, SpringLayout.WEST, this); layout.putConstraint(SpringLayout.SOUTH, btnAbout, -GAP, SpringLayout.SOUTH, this); layout.getConstraints(btnAbout).setWidth(btnWidth); add(btnBrowse); btnBrowse.addActionListener(this); layout.putConstraint(SpringLayout.NORTH, btnBrowse, GAP, SpringLayout.SOUTH, chbCloseWindow); layout.putConstraint(SpringLayout.WEST, btnBrowse, GAP, SpringLayout.EAST, btnAbout); layout.putConstraint(SpringLayout.SOUTH, btnBrowse, -GAP, SpringLayout.SOUTH, this); layout.getConstraints(btnBrowse).setWidth(btnWidth); add(btnClose); btnClose.addActionListener(this); layout.putConstraint(SpringLayout.EAST, btnClose, -GAP, SpringLayout.EAST, this); layout.putConstraint(SpringLayout.NORTH, btnClose, GAP, SpringLayout.SOUTH, chbCloseWindow); layout.putConstraint(SpringLayout.WEST, btnClose, GAP, SpringLayout.EAST, btnBrowse); layout.putConstraint(SpringLayout.SOUTH, btnClose, -GAP, SpringLayout.SOUTH, this); layout.getConstraints(btnClose).setWidth(btnWidth); new DropTarget(this, this); new DropTarget(taHint, this); } public void configure(boolean noSubmitting, String alternateUrl, boolean md5, boolean crc32) { this.noSubmitting = noSubmitting; this.alternateUrl = alternateUrl; this.md5 = md5; this.crc32 = crc32; } public static void main(String[] args) { JFrame frame = new JFrame("jBitcollider"); frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add("Center", new MainDialog(frame)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(450, 300); frame.setResizable(false); frame.setLocationRelativeTo(null); frame.setVisible(true); } public void actionPerformed(ActionEvent event) { if (event.getSource() == btnAbout) { JOptionPane .showMessageDialog( null, "jBitcollider 0.1.0 \n" + "(PD) 2006 The Bitzi Corporation\n\n" + "For more information about the jBitcollider and Bitzi's Free\n" + "Universal Media Catalog , please visit http://bitzi.com", "About", JOptionPane.INFORMATION_MESSAGE); } else if (event.getSource() == btnBrowse) { int ret = fileChooser.showOpenDialog(frame); if(ret == JFileChooser.APPROVE_OPTION) { File[] selFiles = fileChooser.getSelectedFiles(); List files = new LinkedList(); for (int i = 0; i < selFiles.length; i++) { files.add(selFiles[i].getPath()); } executeBitcollider(files); } } else if (event.getSource() == btnClose) { System.exit(0); } } public void setSize(int width, int height) { super.setSize(width, height); System.out.println("setSize: " + width + ", " + height); } private void processDtde(DropTargetDragEvent dtde) { DataFlavor[] flavors = dtde.getTransferable().getTransferDataFlavors(); for (int i = 0; i < flavors.length; i++) { if (flavors[i].isFlavorJavaFileListType()) { dtde.acceptDrag(DnDConstants.ACTION_MOVE); return; } else if (flavors[i].getMimeType().startsWith("text/uri-list") && flavors[i].getRepresentationClass() == Reader.class) { dtde.acceptDrag(DnDConstants.ACTION_MOVE); return; } } dtde.rejectDrag(); } public void dragEnter(DropTargetDragEvent dtde) { processDtde(dtde); } public void dragOver(DropTargetDragEvent dtde) { processDtde(dtde); } public void dropActionChanged(DropTargetDragEvent dtde) { processDtde(dtde); } public void dragExit(DropTargetEvent dtde) { } private void executeBitcollider(final List files) { final Bitcollider bc = new Bitcollider(fmtHandlers); bc.setCalcCrc32(crc32); bc.setCalcMd5(md5); bc.setPreview(true); Submission prevSub = bc.generateSubmission(files, null, true); filesToProcess = prevSub.getNumBitprints(); lblFilesToProcess.setText(""+filesToProcess+" files to process"); Thread bt = new Thread(new Runnable() { public void run() { try { bc.setPreview(false); bc.setProgress(MainDialog.this); Submission submission = bc.generateSubmission(files, null, true); String tmpdir = System.getProperty("java.io.tmpdir"); String sep = System.getProperty("file.separator"); if ((null != tmpdir) && (!"".equals(tmpdir)) && (!tmpdir.endsWith(sep))) { tmpdir = tmpdir + sep; } String htmlFileName = tmpdir + "bitprint.htm"; PrintWriter pw = new PrintWriter(htmlFileName); try { submission.setAutoSubmit(!noSubmitting); submission.makeHtml(pw, alternateUrl); } finally { pw.close(); } // BrowserControl.displayURL("file://localhost/" // + htmlFileName); BrowserLauncher bl = new BrowserLauncher(null); bl.openURLinBrowser("file://localhost/"+htmlFileName); SwingUtilities.invokeLater(new Runnable() { public void run() { pbCurFile.setValue(0); pbOverallProgress.setValue(0); lblFilesToProcess.setText("0 files to process"); } }); } catch (FileNotFoundException e) { } catch (BrowserLaunchingInitializingException e) { } catch (UnsupportedOperatingSystemException e) { } catch (BrowserLaunchingExecutionException e) { } } }); bt.start(); } public String filenameFromUrl(URL url) { String filename = url.getFile(); int lastSlash = url.getPath().lastIndexOf("/"); if(lastSlash==filename.length()) { filename = filename.substring(0,filename.length()-1); lastSlash = url.getPath().lastIndexOf("/"); } if(lastSlash>0) { filename = filename.substring(lastSlash+1); } return filename; } public void drop(DropTargetDropEvent dtde) { DataFlavor[] flavors = dtde.getTransferable().getTransferDataFlavors(); Transferable tr = dtde.getTransferable(); for (int i = 0; i < flavors.length; i++) { if (flavors[i].isFlavorJavaFileListType()) { dtde.acceptDrop(DnDConstants.ACTION_MOVE); try { List files = (List) tr.getTransferData(flavors[i]); executeBitcollider(files); } catch (UnsupportedFlavorException ufe) { } catch (IOException e) { } return; } else if (flavors[i].getMimeType().startsWith("text/uri-list") && flavors[i].getRepresentationClass() == Reader.class) { dtde.acceptDrop(DnDConstants.ACTION_MOVE); try { BufferedReader reader = new BufferedReader((Reader)tr.getTransferData(flavors[i])); String line; List files = new ArrayList(); while((line = reader.readLine()) != null) { files.add((new URL(line.trim())).getFile()); } executeBitcollider(files); } catch (IOException e) { } catch (UnsupportedFlavorException e) { // TODO Auto-generated catch block e.printStackTrace(); } return; } } dtde.rejectDrop(); } public void setFmtHandlers(Collection fmtHandlers) { this.fmtHandlers = fmtHandlers; } private void updateProgress(int percent, String fileName, String message) { if (0 == percent) { if (null != message) { pbCurFile.setValue(0); filesSkipped++; lblFilesSkipped.setText(""+filesSkipped+" files skipped"); } else { pbCurFile.setValue(0); } } else if (percent <= 100) { pbCurFile.setValue(percent); if (null != message) { filesProcessed++; lblFilesProcessed.setText(""+filesProcessed+" files processed"); pbOverallProgress.setValue(100 * filesProcessed / filesToProcess); } } } public void progress(final int percent, final String fileName, final String message) { if (SwingUtilities.isEventDispatchThread()) { updateProgress(percent, fileName, message); } else { try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { updateProgress(percent, fileName, message); } }); } catch (Exception e) { } } } } --- NEW FILE: ColliderUtils.java --- package org.bitpedia.collider.ui; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.util.logging.ConsoleHandler; import java.util.logging.FileHandler; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; import java.util.logging.XMLFormatter; public class ColliderUtils { public static final Logger colliderLogger = Logger .getLogger("org.bitpedia.collider"); static { colliderLogger.setLevel(Level.OFF); Handler[] handlers = colliderLogger.getHandlers(); for (int i = 0; i < handlers.length; i++) { colliderLogger.removeHandler(handlers[i]); } } public static final Logger debugLogger = Logger .getLogger("org.bitpedia.collider.debugLogger"); static { InputStream stm = ClassLoader.getSystemClassLoader() .getResourceAsStream("logging.properties"); if (null != stm) { Properties props = new Properties(); try { props.load(stm); configureLogger(debugLogger, props); } catch (Throwable e) { System.err.println("Error loading logging properties."); e.printStackTrace(System.err); } } } private static void configureLogger(Logger logger, Properties props) throws IOException { String propBaseName = logger.getName().substring( colliderLogger.getName().length() + 1); String level = props.getProperty(propBaseName + ".level"); if (null != level) { Level lev = Level.parse(level); logger.setLevel(lev); if (Level.OFF.equals(lev)) { return; } } String handlerName = props.getProperty(propBaseName + ".handler"); Handler handler = null; if ("console".equals(handlerName)) { handler = new ConsoleHandler(); } else if (null != handlerName) { handler = new FileHandler(handlerName); } if (null != handler) { logger.addHandler(handler); String formatterName = props.getProperty(propBaseName + ".formatter"); if ("xml".equals(formatterName)) { handler.setFormatter(new XMLFormatter()); } else if ("simple".equals(formatterName)) { handler.setFormatter(new SimpleFormatter()); } } } } --- NEW FILE: BrowserControl.java --- package org.bitpedia.collider.ui; import java.io.IOException; /** * A simple, static class to display a URL in the system browser. * * Under Unix, the system browser is hard-coded to be 'netscape'. Netscape must * be in your PATH for this to work. This has been tested with the following * platforms: AIX, HP-UX and Solaris. * * Under Windows, this will bring up the default browser under windows, usually * either Netscape or Microsoft IE. The default browser is determined by the OS. * This has been tested under Windows 95/98/NT. * * Examples: * * BrowserControl.displayURL("http://www.javaworld.com") * * BrowserControl.displayURL("file://c:\\docs\\index.html") * * BrowserContorl.displayURL("file:///user/joe/index.html"); * * Note - you must include the url type -- either "http://" or "file://". */ public class BrowserControl { /** * Display a file in the system browser. If you want to display a file, you * must include the absolute path name. * * @param url * the file's url (the url must start with either "http://" or * "file://"). */ public static void displayURL(String url) { boolean windows = isWindowsPlatform(); String cmd = null; try { if (windows) { // cmd = 'rundll32 url.dll,FileProtocolHandler http://...' cmd = WIN_PATH + " " + WIN_FLAG + " " + url; Process p = Runtime.getRuntime().exec(cmd); } else { // Under Unix, Netscape has to be running for the "-remote" // command to work. So, we try sending the command and // check for an exit value. If the exit command is 0, // it worked, otherwise we need to start the browser. // cmd = 'netscape -remote openURL(http://www.javaworld.com)' cmd = UNIX_PATH + " " + UNIX_FLAG + "(" + url + ")"; Process p = Runtime.getRuntime().exec(cmd); try { // wait for exit code -- if it's 0, command worked, // otherwise we need to start the browser up. int exitCode = p.waitFor(); if (exitCode != 0) { // Command failed, start up the browser // cmd = 'netscape http://www.javaworld.com' cmd = UNIX_PATH + " " + url; p = Runtime.getRuntime().exec(cmd); } } catch (InterruptedException x) { System.err.println("Error bringing up browser, cmd='" + cmd + "'"); System.err.println("Caught: " + x); } } } catch (IOException x) { // couldn't exec browser System.err.println("Could not invoke browser, command=" + cmd); System.err.println("Caught: " + x); } } /** * Try to determine whether this application is running under Windows or * some other platform by examing the "os.name" property. * * @return true if this application is running under a Windows OS */ public static boolean isWindowsPlatform() { String os = System.getProperty("os.name"); if (os != null && os.startsWith(WIN_ID)) return true; else return false; } /** * Simple example. */ public static void main(String[] args) { displayURL("http://www.javaworld.com"); } // Used to identify the windows platform. private static final String WIN_ID = "Windows"; // The default system browser under windows. private static final String WIN_PATH = "rundll32"; // The flag to display a url. private static final String WIN_FLAG = "url.dll,FileProtocolHandler"; // The default browser under unix. private static final String UNIX_PATH = "netscape"; // The flag to display a url. private static final String UNIX_FLAG = "-remote openURL"; } --- NEW FILE: WidthSpring.java --- package org.bitpedia.collider.ui; import javax.swing.JComponent; import javax.swing.Spring; public class WidthSpring extends Spring { private JComponent comp; public WidthSpring(JComponent comp) { this.comp = comp; } public int getMinimumValue() { return comp.getWidth(); } public int getPreferredValue() { return comp.getWidth(); } public int getMaximumValue() { return comp.getWidth(); } public int getValue() { return comp.getWidth(); } public void setValue(int value) { if (0 <= value) { comp.setSize(value, comp.getHeight()); } } } --- NEW FILE: AppPlugin.java --- package org.bitpedia.collider.ui; import java.awt.BorderLayout; import java.util.Iterator; import java.util.LinkedList; import java.util.Collection; import javax.swing.JFrame; import org.java.plugin.boot.Application; import org.java.plugin.boot.ApplicationPlugin; import org.java.plugin.registry.Extension; import org.java.plugin.registry.ExtensionPoint; import org.java.plugin.registry.Extension.Parameter; import org.java.plugin.util.ExtendedProperties; public class AppPlugin extends ApplicationPlugin implements Application { private JFrame frame; private MainDialog mainDlg; private Collection fmtHandlers; public AppPlugin() { frame = new JFrame("jBitcollider"); frame.getContentPane().setLayout(new BorderLayout()); mainDlg = new MainDialog(frame); frame.getContentPane().add("Center", mainDlg); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(450, 300); frame.setResizable(false); frame.setLocationRelativeTo(null); } protected Application initApplication(ExtendedProperties props, String[] args) throws Exception { boolean noSubmitting = false; String alternateUrl = null; boolean md5 = false; boolean crc32 = false; int i = 0; while (i < args.length) { if ("-n".equals(args[i])) { noSubmitting = true; } else if ("-u".equals(args[i])) { if (i+1 < args.length) { alternateUrl = args[i+1]; i++; } } else if ("-md5".equals(args[i])) { md5 = true; } else if ("-crc32".equals(args[i])) { crc32 = true; } i++; } mainDlg.configure(noSubmitting, alternateUrl, md5, crc32); return this; } protected void doStart() throws Exception { } protected void doStop() throws Exception { } public void startApplication() throws Exception { fmtHandlers = loadFormatHandlers(); mainDlg.setFmtHandlers(fmtHandlers); frame.setVisible(true); } public Collection loadFormatHandlers() { Collection handlers = new LinkedList(); try { String id = getManager().getPlugin("org.bitpedia.collider.core") .getDescriptor().getId(); ExtensionPoint toolExtPoint = getManager().getRegistry() .getExtensionPoint(id, "FormatHandler"); for (Iterator it = toolExtPoint.getConnectedExtensions().iterator(); it .hasNext();) { Extension ext = (Extension) it.next(); Parameter classParam = ext.getParameter("class"); ClassLoader classLoader = getManager().getPluginClassLoader(ext.getDeclaringPluginDescriptor()); Class handlerClass = classLoader.loadClass(classParam.valueAsString()); handlers.add(handlerClass.newInstance()); } } catch (Exception e) { System.out.println("Error loading plugins: "+e.getMessage()); e.printStackTrace(); } return handlers; } public Collection getFmtHandlers() { return fmtHandlers; } } |
From: Gordon M. <go...@us...> - 2006-04-14 07:40:18
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.ui/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753/plugins/org.bitpedia.collider.ui/lib Added Files: BrowserLauncher2-10rc4.jar Log Message: initial commit from code drop of april 12 --- NEW FILE: BrowserLauncher2-10rc4.jar --- PK Â0@÷@þ!£I«´ÝÚNW¹¶WÔÜ¥HÿÞ¸¹¾÷ày 0£${C©1WjÕÒiß0>ÐdåÉÕZõp²Ýöë+w¼ÊÚì®+F²IÂ3n¯@¶_@¤18 $ 9òTà9Ç _`¥|c´úPK ìJs²Mú»Ú¨*+9vyª¹a«¸ãæPéJ°_ jW¹j²àȬéÊѼiåâÉ«cä¢ÀÙÇÓ2ê¹°Èi[P¯)I>1ÒТÌÔJ-ÌÐ0¹b©PÈ;$9VéjüVÑóµ8!Óe§µnBuϬ¶T+ï¬knå ã9\ÑÑvìÖñ,öDð¦CH ´×uÔh>'ËÝÁ·×Uåÿ6ºÔ`üWE íÐFWïèx׺'æ¬<Pi%ÏNbcÂN=ví¦idïé0ÑÅR>£Õ1+ýÿÿtÂÙòêèØôÌò=&UGyâ,pl+za¾yçÀ¬#yÓÊémÖ¬J5eå¶:ö#É=¼tÔëQnT+o\dºìUiΫWm3jf³M ²Ý̾?ÁWMb?Imü´øbëz»2 ¡úó½CÐZH¥Ò+ÜEð·?¡ì\?,¶c¸àwÌóÀ~ ¶gÒ©e4Ö·Íwtz@ýûBM8¸ÆQ^'gôxÉÄxî/ùðÐÖºÿ¿BSKó2v,!]<xáÐI/£u ÍJîZBTÉgî i ¼iR²ÇKI¥{I?²âÊCãÏ´¯Ñã¦÷+q^¿ÿï¬Ò=ÿ`â8þò¨õÒ³*¡^Æ1j]vZ¯§õyõíc¼^ò öÊ?PK J½Kï0ÔÐCõΨþ<åø«TbUò«üQ§gG âÆ"^ætîÓçû¾3§ûÍÛ?ÿ0EÇ0nâ8ª&òpLdq¾@´ù^\4Q@U;LÔð£6 \ÑãÕ<®¸zp7 L20ÍÐqåhZ O[B1Ýuþ;³)_zײ± ,¡T¨ns¹èÈYW¬ÆN+ⲪUG¬ó .Täg ±ù¡\kG:inDz±&Ôܾ,;¤ë£ÿñ_ èP÷u_úÑ çåùPÖ ?¶Â WÃa×b!Þ $y=ºa+\ùÚOsÑßb¨öR,e"øÏÐùÕ÷ÔÛ|eU,ÉõNF<cèÛ<÷>7i1ÃX5Ä-_×ãTGÅú¤ Ah3Ê0¼j>Ç)åÅBF»Þ·RÉZ^C\Ê0*ÕEIÆA0¡³ÍX8o,D¿ ègÿ´zÌ&hY,àYs¸¥ÍñU°ð3n3ô7yÄRr¯Já¦ôwJt×Ì[¸»\÷°ÀPùíÂpdr±¾.5ãÞj7c_ùÃæÐ¿ïìÐGs~´D¿û~vHÙ¤@Ïz>5Ts¥VÓyªøfzÎT½)ÞHC¨m?ÀÐÁþ8kDUËOHLþU «ßÚ×'Ë{lCô<9dtûÑѽÔ=ÉH Jcâñ-ÙïÈ{.:ì ¯î½LBKdMËÈã &üûW#¿7Öñ-D¢yÜgpÎã¡`(R«l:ºgf yÔçZþMtÒ±L.1Ìü$åê:ÖC_LxDS_ÌC1Ke¬ü6ðL c©F¹33é¼[ùg QkÓþ5v7Õı½©H>²! Ý8Ó¡¸&ñáßIQD®)%öÿoÇPýLö¡bKô@æË©zÔµ¨ÏÑß=9½»³óeª«îs+´ª¿ºH_µE¬Ã°JX¹ï¬}rüÂ*cݲ6ìÊPK pP5aÓCÍCÁ=J¦mÆA0á7ܸù»PÌR«ãÃ>sC9J\eÓÐ=>H©qÈ£>×Òä¢eÂpaæ')W×±úbÂ#jL}ñöOu|ðL c©FdDòHÞÓùË Ý8Ó¡8ÆtóOfZSD[&:ÿ2#CuÁds_Òʼ0Í],Ñ'=\emÊs´»Í£G°{¿L±`ÕmªÜÁ êïU¤¯Z"ÖaX¥E¬Ü<k*÷a±nY¶§òPK Þ?<@ý3Þ{°dW`Õź»t|äÎÝ/#»Ê]XÁSóU üªsñ¡kèa½*¼ ß½öQyðWÖ×멽 ÖPÔQÒ±®£Ì>p<G1$+{]íØï¬åxâ2¸í Ùá="yË·¹ÛåÒ ýYPSCgÂpa~`N÷¾ìbÄ]*T¦Úb¬ßr¯ï i6¥?Òâg <¸ª%¥/ÏbJzÇìÖG1C¹bø7]î]ñF8oBLsÓFÛ¤-NpÖÝß×CÒÐuld° áüßVcÈ}yÕ [14ÿ&ÿ]·0g}úDZt<ÕVܾéHnl#IÀ¢sHÒô.·OÈSÕ'°(½H¯A*Ó°C6IX"d/ce&pHrSµG$~ TI bÒL ´²ÈE½W£ü;PK `RÆ3´`ZÂs2r2ò2Lð¥ á¢(lW¡ ¦%6ÏèdH6~è×Ýãsi^pIì¼=Z6 Ýetm¹6¯O[öð©+jÁç)CS PHÕrâz|QV6¥ô*I«h§ù !R¾}Tv_TôADg9&áHxAÅxõts")áe¯à²+*^ÅU ¨c)*^ÃëÞPñ&ÞRñ6®1lYâÑb6+©xïªxïáþJÉëiËÑÈ£Ó}¾smÍÿ@×½ôÜ«=å<8V/WU;m:ÅBÁ²]I¸»dæ+gh¸K«Zªy)ç}Í"éjS *´-Cý9£çUÔ'c!שÅ(êú$zU|ëG*¥aÖ·Ò¬{çVgB¸ø1Ýëfe]<aµ6·ÿÕ«¸»cC²hPû*ÚpÒ§¼D=ms»Üù÷ÒVÑ/KØÄ¹ë¤õ_¹ï¤þêÄÄ4O»cùEû$wGl:Î%áµ'X[¹CmÓjuyi»ÎáNQ:˰ã<ê]Ç.£NQxûm UòmÀ*z×DÝ^älå}B©ÉxTJzw!]A½Pàf¡ý_åÉ? Kvå,ÕÊ:].Ën,§¾+Q?ó9VÙ 1´V¼-SôØO/ñ«÷i¥ÑÌhÞ¹vÓ¢1è1ÛÑO£ê+àqWÍFÁQÒ"ãª6âÖªºêX4(aÃgø!"`H"æp{u°9¾ë66 ô"¨¿5t_ ÷oÜF-Í%l"m:<pãsÔ,b3©Ô-Fý/P'~)$ $yÐlõU±Ýcì Ub4£ya-ãË[µz[ð0ís|߸[º¤í¾B =æE±? SÑP[ ª¯ .":NYj_v°:K£Ý:ÑE²nÏ:Dp=¿{!Úã-÷å¾J\+RøÒÓ²àÍqÙ¯Ð),æë4Ù/È%<Dc¥»µô¨«Çnz5î!}ô óQt&°Läéi½5*à¢VäV&v uA.^uíNà»x%°¹¤>t(tñÉf7üÜó»ç§~û¤D.j*QVI¾Àz½1`Ê¿)³9x#à¤%}£vêw#5Þ:x'p´âvU½ÀÆlÓ¤×9@åG7þTVioÊñ¨µ^ZÚJs´ÝÎB $¾d§ã©@à= oºQjM¤¾ c¹å¼Ì»#x|*¼PÌ *Öf|fݪWRiòì§4 æuZìÊû»Mg±Xþ_nT õ/~YKÃ0##-ë{_sKW%æÿ¦ño(.¦7KªÀ?Á ö±Î_{ÖPeì°Ëø~ ×?(á¨TøbÍo'Ø3.ûoãéÝYÁîbg3ÇýßPK p4I´ ¤Ï¤ï&é¦OH!¡ i63ýدý:ýi?õC;ýÝÝmÈÔ3ºçÞsÏû{Îÿòß7ÞÐwÃhÂ9ó*£ £±jø¬Ç4<®á kÀýxRÅS hÃÓëóó¹|Q.ç5\>#Ïjè4_/kèð+$üª¸¼üZ_Çs*Èoh8$á75ð[*¾â;alÇwU|OÃ÷Ãx/ñ~ áRÓTü8~"?Uñ³0vá¢7âeüBÅ/UüJAøÐøÑÄ©øD<9¦ÀH6ϱiMÇF;kMïSÐÔ·i9f®$4b@Óý9³XTÐ\Åâ¢Èq)ÆL{Z8.§]J;y[ÁÆ*J[LåDÚU¯Å,r"~FX9}Õ¸ð9+FFÇæ4i] ÑÃÂÉg(U/#¦mÎ G±±(¬L2Tró VÎù¬MÉÓ\i|¬!ËÓÂ5m¶¯ää Kئ# §d[C4m¶Ï³M«h¦lÞÅIË8lb¶H1[¼P*h·ádÓ B½Y+ëìWPß¾cBA ?¡#+YK$KsÂ3'sB¦$6s¦gpf²ýÈb27Sy;§ÍÚ^²Ò3T3ÓùblØLwÚyÐÎ- ;Q¾¦_aiEÖÌe¦Ø¦JÞ¼Üêùâ¸ÍýãʪôxÕþnõ8fE.£ R#1îUGÌõùZÌ%Qõñ´5EC[ªÄÆÏ¥EAIo*¦#¾Ç´¯}Gg#§²VFØý¶0YU^´r¿ 6]²s^Ý oFDB/kÜÎÑÄöåoI&ºÌåzP'Ëæ ¼ WñkÛkpÖµâ¦lQÚ[ö²Ä´Å$ö6NV¬ZNòêUÁÖZ6×xßuçîU°yéE2ïæKV¦:!uçv2J£ùYYºëoUÝRßáh»hn$ó.Ñòl;oëø-.éø8¦åPÐÎÏu»éêv÷ÅËY^»ôjdÔ-{öeLUù6^B¾ýejdbuìC/_пt\F¯Wðªb¿ä2$IWIÒnIÚíeBǧA·H×pEGêèË\pUÅ5¯ã Öõ²¦#Aärìs5xí"ʱ¥i*÷î+rd̯û>T¿>àá¾þQ¿Óñ&ÞRqCÇÛø=Ñr éø$N)8øAMé¼Y¤ÿ:¦0]öÓ÷>Û6çeÑËû?òý±dÌRÎQñ?áÏ öÿ UÁ¾ `9wÿí\·¥B!o;"3Rl£óEGÌUåP%wãÎkâX4§ÅÒXï±Ô8¤ÀEö¾öËZÀÛòæ*qÞ$渪Ñ^îLve¯ªë®Û4¥cgí-®8Ýn°}yÓ¯9;ZÛkN!Ù[oåmÖ:e:öÖÐsâU¯ßð³å[âìûÑr Ü©ÜE.Ͱ>å÷ëR }È9§ff2K¦]YÃqlâç~HëX`/ôðT.þØÝ=ûðá²½¹°ß>dsá!v¡&»&åòOå]ë0O1B 0½Ðe)É5ä"·aÄ5Ð%À|PÁQ2×Ifå¶ê5( Cã:l4pMa®=¨ÑHxz´#ð&Rõ¯`ÅèV^ÁªhVÁ¤îìM ÜZ¡kF_^f6ÞÅJã®kXzÆEØðÈZ¢Æ÷§Z{Ñ.#¬R+e{Wëxõ¡z^¹§»#cý6ô£ ²o£í 6u%2*È{º-©F#j¹õ"×±=Õqí7.Ë*ÒÂzñ@ׯyãÛ©0¹âÝLæI¦òI¦ïe&íÆû¯þßù¿cïaÿÁÄz\YÊF<äæë$RtRʤëJcÜÕÁ ãÜÕSÓ¿iA/¹Çð ³ûu§¸Qns§RjNP´¾ÍÏÿCüÙNI^%àô$Hh1 ó°#UoDÙ#Aä*×ATçp5QO$²Ysq]LÁNV±÷°¶JÖ@$péf`ÝÊL#Së70Éèf°3®30ùqAý´µ »Oñqð»Ë$Gi£5Èøüe§?7°E@SÔÀ¿(5DâCêV¤;-U>ËóºÎ àvë"=?ÆÃݬ»ò $áhí \G, \ÅÎ=AYDõt®o~¥+ý4h¤òhïgâGGIñÖâq¾ï'H{N_`i=C§XZOë<äÓü¬+a7¹â»Î¤¾³r7ãv§ Ë(ëJe!æ®Þ F8K=^8r~8ÖËFí\À½7üGð¥=ïêmó¨*ÚBÔ±× wÈÕ[·LÇáõ®#ÄJi«¯cWÁº/Ñaì~®Ã±K+\ /0/ò½äj]ãñùZÐ< ªÉïHߤ/ݲɫOu,j^ÙèCÝ¢v9Xâ£.²Ü$Ö@~Àï¾ Î¸ýPK Ñ ®&of1¿°·zeuÓsk <&*hêh©Èº>§,%ì©x òôÌ´Kع0¬>#MBóÌìçy y3¥9å¾ýQ5æ¼I M«°ã¡H° z´1GÈ4 SÁFôâ¼XúØÁ)c*¢NOg´5<Y,` V0JVð~+ãw ~?(èD;oYl þ?)8# N ¥'"ºèTpTp]¼¾BKèÜZA"º<[ý näsÑúgÇqç¼|¤É¸¥à6î¸zAÁøH(ÞU0öB_¢gPÁ¢HßÇøøñî!VïHVÌ&ËhÑ^4æy#2ü÷ʼ:õ£à>PW¾uïÊNäOÃù»²¦:+Ê[ðÿÊædq¨ùð¿ TGþ¿(¡ósX©Ý¾vÿJîÕÒ5Íå§§ ÓÒÒÓ©ZTsn»¤ËÔN¨S3GãZ.§óe_z4NSK»Ãzß*ã`ù ¯xOoU¼]Ä$Ýü(5NG={ɸÀªþÙÿ7cßPKÅ»cW¨ü~ª<î}zΡüx·e8Lr´yU²J)¦lýCê`>ké ã/¾4]£.Y®±å$Bâ.Õ8e);ʲ<<Á*cÃà õÛ×Vù D<j:Çø÷$| 2¶àË8Äç~Éz°½ö3Ǭ½u÷cîÎÇÝ/&0õz þÉ|âìçú¾E¹KÜ«[à»m+=ÉÕg÷¢«âà$¾Ê]BÊ¡,hÚKÚ ¼)ôs5ó$Z÷I󨽥5\㽺dUÛÐ<ÖÞÅ:RêÊÿµÁõØüÁ9øHq¤(µqU©MsX[Bc2¼-nÛ^ÆlvqDP˵xº n£õLÑ6¦'Â3!ð ±\¥ôD(ð>N¬>XÛISEOêc lÿ;bPÚð<¾¯:²½íþM\]Âd¸mû4ux½óxìøæpÚ\C^a¦£:¸³±z»æ±ûm´ßPÎ÷÷4ú üúVa«ù.¶ÚaÍamWÐè<_%Íýçºxî]@èq+Ø fæö0±¿Ï}7íÝÉõSØÈ5A¼à.$)}Uôuì'÷ ¾AÍo1_ç¨Úãàÿ<?nàädð.¦ðr´z&îPgâ\Æ Í*¦M~ºgà¡îVzèb¦OÒc\/vÒcOòj 9/[èÎÒ^8÷Ôöãu×ÞA¼o2:OÉIJâuN/Ò¨õf6JK|Õ÷5ôÚ¶3<¾Ä"É}ÚXÍÌlÅ>7;[ð©WI¿Nγ¬ÄkØçlt´¾ÍƤÚ6»§Q»í«9DC;ú)b;Q¦Ý(ä.´}móØÿ°ÅO]ÃK¶·&GªèÃg[ì§Ñ>4æß¢µ KhO²TÄÂÁ/~Ç=8¾UôXg{xÞDoÙ^7:z®×ö¦¨ ÚÍVk÷}ÿ~Õö ÕêÇöôGõô¹3 KLåôåÞ¹ï}Þ}ùëïßîHâG¼"ãUçp^A¯)h Á¨½O ¡pàqÑ`BÁEeLʰDaPIÁëpÄSY,®K Ú ÄËbË´X®(Ø×"¸*oÈxSÁ6¼ÁÛ-x×d¼+ã= kõ¢V.wNh´Î¢fwfÄYª ¥)åöKh¶Ükêº|>£Pé,»5f; NcB+ÛvìËeÃÉiK¿`8ÂLËtJÆÃB»`HX3-£¿2IÓÚhhÎÖµâ°æâ\%Ü&-:£²TMYª¦& -&íÔt»êÓôòÞó»Ák: +Lh^¡ØpÑ´. ãZtÛ*»NEwm¶,rÜ1Æî¦2 çEQ.{tM<ÑhDY<÷ÆGjàIJºã º×MÍϳØÊïV0üT¹Áç?1æOÍ|â,âä)Å]âÞ´sá;|=âvìæªú Ím£Áëq8ļæáï1&ý¸Î9»Û¥LÜ $-dD¶«Ø émÝ£d¸ÚãôíO1\9ý!gØËF]/·&Ê·?IÙÊu³ÄEFÞu&)a.o1Ã0viKo!9Ã-òdÁ|Á¤ÅãC*æQM)µÆStØ©ìúæSõòÁ(Æ(WBânb&ÅFpáBú`Xê\¼H}¥Q´oÚÄK ×ÅjqzPB9ùÿêgiêâË 'V éF0NeÜ5Må@ø^¡£ä*u|«ìá)ÃÜÿë@©³¬´ë,ð¦nÕk5ôyyµÆMÅ&µüeójËñH¤SªT25P[²K/ý±x{ùÓl Ì"§1yÙ~4:4Êã¶FÿÛüu-¢ÁÞ¥FªêϧDöf«º['x¢x»èë eYWÇu ¶"î3fµR.o p®(> Ê'ú®®è ]øÒºãô¦Ñz.qàKÚøpÕ òsI?Äù_Ðýç3Çè-$Ð÷æ¥c{hôxÉ7¤çuß /ô?EÍ>í°£K7H»Ò$]±I +3Ãëô¤~ÔK×:iùiMünF4£(]Ø&BÙcô&0à꣹AhBÆû0GÒ[ÀÕÛM2QØ ÒÌ!"Ô Òu M{îÓ*|zÙ±´L^ï5}iXâcÇ²Ø ¾6àSït×H*¬õãb!p¡L2úÞ¯öa;ù¢é±Ûñ°Fq<¤ÚYw¼ºz×0ºð>'«!1u½rõhNÿª¿<¹9÷Æá |' *Õ´¤²¥l i2:E«[4Îf·ÿPK a1+¢JXù :Er±6ßPK ö ?ÓðsÁþBÅ»*~© ÑuVZ¦7¦Ä̲qÁH× »ó\Ë®=¢`{`qk¾Õ`1{ª0=;)fNeç³EÛ¦»å¶wÚ¨·irOa6ß48;7)Îÿu6BÏÎÏMef³ &fÌJ;-ª[IËF}Ñt=Ô¶ËK'ݰZefØÃ,ØÖê¤ãTOÎLÏÌdÈå¦Ù\áiîlG;YÈ?¹-uái=fÙ÷¨·&`«fä´ðSá=f,ÛÌ·rÞX¬Ë:e£~Úp-!ʰ·dµxSÏñ! á¹®ÞdwEvQÁÄ·r[hv°×;ÒgzAÆÚn}Ãkr9t=*; «ðU÷`xÆ6½t«^qfÝ©¥3-Ï5ÊÞS«1í#gî¦ëÍ/¸³+Y_)"0]ºsM£Áûø¶mÏWÓF³ì Í\µ<?½Ê4ÄÓÓ¶¡ÎÉÉvµjºf¥hYùÅýþ%«¼Th{e"¥uÝ EÈ\½Í{!»Z6åØHuÅ=m{ôØnzf¥Û$ZV°ïdX®*Ìv¬\Z¬oX´O|Îi»e3g ¡ý|P¤c UÇq/ïÎú2ù\³áxÙ}ç¦'zwØ9Åa¿ÂeF4¢cO¨¸¢ã×ø S,¥ã·øßë¸÷tüA,×ðÇ à-g;õ¨¥¿'"_,Òñg<¡ã/¨ªø@Çuü¤u|ìå`5,'Å8nÊ\5ËmÑ¥)aªì4LXSpÿݦàAkSýQX þ¿3G.Ók&³¯Ù+n}BÇ1#ÉyÁª× r Óñ¨ÜÈY®sØj\ÕYÕñØìtÔuì¤coÌ ùs¼Øp2¸ôqÕ1)]RX\6Ë|>ÖEo»`Ôh²w¤ñ^ófÊo>;ŶíYbÅ9|:Â®Ûæ_ æÁ°(áá³l¤çtÙ±EéÑ¬è ²gÃÝÁ#L»4,Èay9h>UΡá'Å+Þ¹¹Ì"¡Õ¸_ÿ¬H¹î´Hï»ëÈ ]Å\l×DVzÿÛÄ[bZ·²¼¥0:ãJöèÝÿÄæX\1Ì/?h|ýï8¤÷â(©/H]òD¬Q~¤KcHô<ù!Ñâ>ÐÇ è¤¤*|*DÈ+£t`tÊèøMFÇn¢ïºÏqMðsHóHG¶SûEjRþ1|I î°Kpâ"!òv4©ØÞ@ßð¨TNK@Ý7 ÏÓhs_fbâ0GøÄ.ÑâY%ÞÉ='{ÿZ§n×`0^~ì02*ò¨=ñª|AÀÂ-¤JO&XÇâSRÚø´ÒpbDJ£4&¥q)HRZJÒg¯ËvÏɹåzôaìeØ£G`s@áE.ýPK ¼õ¢×".fzó^àÉY¦piEϬ5á´ü°iê+í°Ù$ßÑGRØà¶ðJ¼JijNÝ'MÎ]ÇäOíÛÊ\ñ"üòÅjýÕ¤úI~áïdÐÂÏ0dÚÏå øª J@kÐå±Ú¿Ãáþ¶ÑÚa)¯»¼%½0 [_,üm(uÞ]ðzÇ;ÒPÔPbÈæ]¿]ànSЫa,\>ç©I=ó¤60~Ç1 ·1l`?Ãm wÌã®{° , ¢aÑÀ}< c¥pg(¦¿þÕÃú?ò:wceé(B®þj¯1Õ\æõïñ@Ò6jÈ5^wB¯R+ÿz§0~(XQªp¹NïÆ(}¯PKA·Z¡¼±ØâÂV}I¾º£Üå-÷<µçøÞ«¤ôcßlx02ÐÐä²XqV©¯£iý9ø¯îaHO¹êÛÙý'®¦ÀÃäTÍh.ôf :sç¤MÚ´ôNMÅ`)ÖÑÔiÜ¥¤ ^s<IDg8´3m h©Ë'ö4ji×þ 9Gw5¡©!#©d@Z£Ý,ºèôomÔEhÇÑ &éà¶à(H4¿ÁpÃdSX¯ »Sc£k|ÝêùMôÐæôLjmÙ Mô-¿AÿÂ{ìy<±ããa&åÔÛN"Kë43Ä8SÄÖD<n«.£pCl=8A§í"KEJøNuøNá4ÎP³$gå} LF)z»#¢~ïÑÿ8·77° }!³Ñ.:²"xÖñ¤L_ ˧d<-cÌVÜϸñ¬8ÿv<ïÆç 7^z~^Æd¼(ã% Ú#á½Ñ@dG¸'Ô-Aêâ^G:5ÕÙ«&sZqrIPr)}´ÝHd5#+aQð:¬ús¦ôïV3Û$T&Ó!á¦`J3ýÙÄP3Üô·õgMCAA°Þ®§ts®ÁÛØ+ÁÙkâF=¥ rCýÑö'¹ã ¦cj²W5t±¶7æ Ný:Z<çV$ÒFܯP<húj.ÔSþ!=ó÷ШffcjF³8¨¨Gè©«Iý0%W4mäþ<M× -k2iSK 3X..Á2¨gM²9uS\Q[Béâj¦ º¹BBêXìIwGMö!0Ó2¦NRûtFKõIÊhÏ,ìsk£ºG\Îéå±%%¼{ò,gs±<]ÚǨ+á+^KΪÌß!ãueî.¯MuIÔIX8 /'ÜÐ8;wYO43bZ§."cõÛ9{½£ »è£Ý¦1¼e|QÁ8¾$¾¬`Þ§àýh#03¬m¡*¦¯ÈxYÁWñ¯)ø:Î*8WÃ7ÄpAÅ0I LÏK ¦ðªi|SÂw[ÎE°=Hhoá5qEÁ·qE£Å§à;ø®ï)ø>~ àu¼!!PþFàFÿ\Ⱥ ¹ÁyÑÙ6¦S/ð/ËdÒ©Å}ørYÓׯùtQbI-¾Õ' ~?QðSüLÁÏñ¿ñ+¿Æoüo)ø~/ã þ7ü oü0;î$´¿S£Z,'(E!B·?+øþ*¡!A ÉEÓtn`Ðg¦}©tªÕT ¦°ÒÎ.u£UBìÌ÷%T=3´iÊgfíÔj.ÉPú;þ!¡íÿ®e,23 ûh1fÏÆkí/¦ãZö¤NgDÅâ±è¡¬© 8fñÜPeôv´Eû»BÑ@(ÚÕÝÕØìDH(ÉðôPF-TÁúòëÍhè?[®¸(âªMrgW$оGÂÖë«óe¤PÉ ³Ë_5S}óþØÖÈ"*ïïë YYÜ¡@w´£mOÕó®pèî@$L4Ùûê¹Â{q@·B6«,<Þù»¼sPÍ´QÓzá¨3e-jBJuäÛf¥4¡¥Ü2o+_¶ÍªÝâµ+¿ø\¹Ít!$¼zÖ>Ñ6̼ɿï×nhÂYÍ ËähÑ2 qC9«ÙBÀþ¨ò v(ªQ`Í,¹EÎo«xÙFÒÐeÙô¢\j(×VKcéîkÓj5Îo½E£ÆÓËg)4#<µåöoel$ÇBxÆCWu³ÜdoLmÆ@¶3m0ÏSż)÷¶7Þ[ÎÓNÕUµ¡µ±lÃQ3oÑ;¢êf§ãú(<EjÕÍò="ðµJEÅpåÚr Y.\q?7 ò oK&ç¡"äû°Í÷Hx/*°[±óÛÙN;°ÿì"8¯h±IkGÇ\Ý'9åM¦áè;I8/ÂÕÔ|ç,)^r9nâü6,ãÜY?;p'`ÍÄ=lÓÐ ]¤ñéO¹ø[1 ¹Ï= w°ù<ª¦àq`/gÕÅR-(ÎgìÙKØí µLÁ+a,pµ[Ó¨ëÄÒÖ ,«wNa¹Ä¾gÙêÌËJ8¼+lb½³é*§pcW_æÜe?7V`ïøÕSbw +%ƪi¬ê³åxo¢Ö¼Iø.AyÖÕâî'°¦I¬/á]DuÐ^~¢ðTqµP®$ëâF·Ðä_aì¡îF<(ó½ãéqìeǵíÌ}ø>Cè·ráv%8ð¶{ªðì¦LûdÇaèDÉá$mÿÙSØÎk'E&å¤0¬ÖTlÏ÷n}äZ ¡VYõÆÓ¸¿uÆâ@Ñk.a]½¾kppÕ¸ÕUï@ÓæÊºÊ1¬(ÐçÒNCvÃY±}üê³ãX°{}-XùuàZl<Û±cn~yz` 9¬Å0ñaÒÎÃDíÜKâ!ráßqJ8ÆÙGøýû¨ ]zé^z¡§Ã6aÎ÷Ò.JFÑuðÅ ¯¢äû¬d8YL¸ò$Y7¹>Àïæ<ºûmtwp·ÔS"àwìB¯£VÀçÝ0M-Ø4b£µ ä\u®1ÔÛ¤æù¤Kö{fd/ÓÚWï,`» (=\ÄvS:b!QòÒªð8Öà lÀä<E{bT=M;ÇÏ@ÇsHáy"ÿ塤q/á1FÀøNFÔ¸ÕÂÓÉë-´]äñX(:Û ( "¿OXx:¨ÇCø ³¥Èª¼?_ÚbäÞX#Î$n 6{oµH1=§°Y¬ÏΩrg)òjøµQ3Un ÒHbÆO3ObðhFyÃ×Ýâ´i¦m&6q7N¬,mjc[@ðzñã4ÛºuÜÚm³¸NMfkÓÚùÏE#0ÍWÍ÷ÝwsÏ=ç?Ë=WϾùÅG4K2/â´ <@ Å*Á_ió¸'xOx:*1ñ~¿¬Í³Ú<gà+ç ¯øk_àëøoxÁÄßø[ø;/ð÷øm^ à[xÙÀ?ø§ ÛcN{"ÚyÄé±Ç5ÝíCvKÆÅ[8±Q0kW_ÿÀÐî®ðÞÝýC;ÚûÚ{::ûÁ,mÜN¶ô»©Xbä3:´k'Ü]v<ãR'XÐßÙÑÞr>SÿÀ¶®¾ËݸN/w¢åÊt$.wÚña'å.ÛDä ªG·#96f'¢í©QquýùÆ;fÕ ¥L¼ýö^*·9ý+L9-)àÒú"Oì¥Ý«ÎsM!¬µE<»®JeÆ]þqÆÝX2A² Þ@´4sHzù©¼^#o}¦xvVýùÎa$ÇÄÎTRðWåbY7IÄg{[DX,e&Ïn¤7Ò\nÈ ÁÊK&9+¨ÝF2ñx6)èpÞSÃE:UOé¨ ./¥uüWvd óݹ᤻U½¸ ²#WPÆþd&q²Î¼ìâ9ªY²Òz<ÈP}»3§HÂI'dR©dÊUÒ`! {´I[p0bá(Þ#XähðóÐÚRùÄÕ4âÁ¼sAÉú²òûC,d¬¨«¶ÕZÒ$ÍÚ´Xr 4ÐSVH9zoZ²FÖ \I߯m²ÇÇÆm÷ ï²f% êGìx\äH%3£Ôæd¢)ËV»» Û,Ë!¬åþJGÁµ¿Cq(kaQA)ÞLeu¬ò;ÞÎ;éÌøx2EýzǵX"£þ£i×+²uçÿÕ¨],bv<öÏÀS>sÎ]C#c¶zä^Âö(sêWªº]´¢¦êQg8CüÌôN"*h|ë¶ø²ÙxyïðA'â^ÜtùÛb^G{çPW¸¿3Üß5е«s¨·o>ÇæU¬õÇí|=ª/½¢UjYtDB]gÀÉ«ë.´9·¨ÑKx8g\Gïü¥émêË$ÜXÞ ÁÜiÈMki©wc¦¾Du¼ªdE<ë¼IZÿ°cµò*HɦKÚ/êÄ×ñ¦÷j!9]ï§õ/wÔß°ÙÛ'ÓÜÐP_ªj¾@Ý· 4±.ÍZÊÓ^mªv{Euõô¢k±Ü[6V½AçÏv:Ìë:%¼ÏtçϹ!A¡]:µ©rÝÉÃNªÃV«HnW"êé¹@UÝ¥%;k6ÆF§WD³ ìXz<nÍÆßi¥:¡' |Çȼ)g,y]}[{÷§#cÍ\ÙÕ¹gGwoÑÓ»·«»»]_uÌ:Tòî(¼V\R\Sêòz¶§ó¡ºòí|¶°¹RqÞL¦ë!7À;ã°B;ͱJ,ù[2v¾_NÉÎQä¢hòIѯ;¦¿ª8µqí8á«EQ |+¶Yå3BÖ)¬Ü»æÎ8êo/a][uNÅ^?V`CV¶PgBDóªaHuÄÕw¢E{º4 ú6EÛ6*MyÞ\¨úÞYÝÞh}~¤b\Ã@n1ñÖþ·®Ñ×zHM`i¸y{Ö<è6ÞG:DïøuÔ¢í+¸ÉËÞ7ëqÇÑÈö ¿ 'УbßW8*àmz~Ëcge sLD¤P&?#üîW§f 7°éUvf£9Ü.DXöèðïf1ÿ4iúñiZ²[Û>È|owpûwÆ®ÁÆØMXTmØN@²2¶1óß¡¿ËÞ÷¨òk´çëTúû¸o`~Íø!÷ü»~nüpþCYuº>SM.¢/qçjÆÈ¨Í&j«¾åãÙô{=,örù~LxÇgØ7IÿYrýÉç³ÈëÜ«¦:ÜCíѼgôÚëa2îoľp3Ùe^º"gÐ\nʦül^ð å·OàÃå^ºòy)< 8ñoó{K~üJ²Óû³Ý3ÄLÏsÐîb&nÓ3Û>ÊíçL`vcp@yîäÔÜc)U ì§_>W0Ñ! ¼´Ý<,2\&>, 4Û@·ØÉ0½ig¿T#.5pe&nY¸]øÌÅ]2)gSÌB¦Ëð,Ås÷çÌ/J-^bªzEá5Y7d¥gÞ:ñèñÌëgZhõÌk0ÎõÌkây_Íë§ÔÄ3Ù¨#-ú,þÂ3´ö&<'YÊ(û9£ {ÉËwü%îËÅ׫Üáç×VSwBpO6öiz[p ÃpSîÛл¾æ·ùV|ç¨ùô~¦C^?Ëeâ§§â¶JC®@ ¬!èk ú:ÔÉz¬VæÑ è«°C®Æóy>ZXî§z>t ä)¥0Ø9*°ÏSxóh:©Ãµ^.§âàÁ\&s¬l8 ¹úÒ{}'Pñ¢Ï+βrú½§ ©ÊÏ{÷ÎqÒ W NzÚúPK ÎÞ\KòºñÁôyWO6Ä©lL]aK^I%p³³Ô¥s Ô°Àc<a¾HeÐf^|$FÈh0DiFÒ¥M:Í0±|ÏkµT¬§ <ö Ï(a¡ü&Ìpp]}ÑâåÄF ®|ô0MB0Ì]2AõÊÃc¼Ûêw´)gG 7hp¹ËDþ^®»Î¹û³Ñºîaþ ôÔ-Üõ¿JeË |~jÀÿDüÅKù¹ø«ðû>~-âC|¬ñ-)ú({Ó¾ÆÊoPK vò£Vî>3LëJ×s ×fð¥î3¼½äu!Þòùª»¾4Ä¥L\ºÔJ#äÿ0k%´UÈ$§QÆÌE"ÐÝ`S¤Ç01{Ïo· T §i<Ãs^¤±»ÿÝZëjì6÷mo 5*´xåà ÷hanLëÔãæULðnW¨Ïg!_-$^PÇãD.O×<÷ÜúÙüh^«¢ï`¸dh¼A«âÒzLqvÞÐ^ÆôÆæØf6ÒGôk9Gq²ZÃ$Ö1O«ù0·pfwAn`÷ªúü@¬ÍÆëX6QoijÉz#ñZã\©bÁ¤týË !`; £ CxÑr,ÈL&;ñ;+©à[!R½ºåÍ#Bgl±[6ìóxÞ.ýC«Á?0ý׿¯;Lu[8L÷ò|gÙw[E¡Ô¬2u\_mV«b1y±l·×$9ÅØ¶ÛôÊæºÅü)DQp)7Pp D÷á ñãcý?õ¤BZæIÝv=ãßU0Ûü±XYuO(ª¶"Ãâ`ÃýdÙ¶AÑQ+R0Âú®ÉK5³ìnF½n:lçØ©ôt#ɵ⽪ôþ r©(R¹Zä8uáÛ~Døýh30Ü£hä{Ó`é̤töS*I¸/ÆÉNÍ8¦1JÑVàCyÄá8âkÃhäùY(ýÒç«áaQÖ ö@G]7Ïum¿j®ÑmüÄ%ûéNááÝLßè9"»<üòõôjôw~,|/iú²@K´&¶ÑdÂÀ$áÉH"ÕÆ}#t2î«1µçÊÜY\íYÈúUUd§:qÇÈOð¯ªiA,óPK qHöõKÜùØSnànëïrÏýDKKUäÝÒ«®®ãè_ê2¯Ñ&z1a¢¦Ewp×Ä=Üg0O¾X«Ñ'ÿÙêÆñ羨íG1,];kg¸Î=Z·+êj»>+¡"QX§kI-éù'η©\Ï6mÊm7¤Ä§þØFñç$Vhõ-«¤ÝCÅ;b¸ÓÖ©¦'èÌæ@-¥1¤ûDç9MW/ äé#k]tùÙ#°ÙòtÕ ~HÑ<Cú¢>ñ¸@ÖÅXѦÒy#þp¹LwÊ¿"uôç61C`î)Û&eÉs)"à2Å4i2Ð9¾£ûmùõ¹CǼ|ÄX ì#æx¬n3¸«ÄÌÑOj×H=UþN4Æ1ÑzOÎJõQ5ã` &iÜô7PK ¯(`¡øß³e8¼Æo-ûRÃBK7¾z!æFÌN½îpZÅÙépõÿ,¦K¡ÂÀYvÈõåºt/½M×ðôïÆI: Eö4dsyG¹Í°Íd¨ð7¿râ$U)ºµq¬ã.æzÜÃ}Àß-`Ô"x¥¾ªð9Àþj8T#ÉX¥Mjj,©WªÚU/Nõ0í!áoz¨|Ðc¤lûÔÕ@o@ÝÁ²ÿUj·B»Ï_íó¿?Bk~$?{¿uþÀÇor|~ÏÕ3¾%y¿eoÊ×XûPK ¸Öê`PÏY#³õ n<w1 F£ {`GpT dLÆ«ù¶±mɼ«4T*çÅ1 Ñi#sÔ`Kº2îmgÜ-60GCOÁJÔLÀªÙ Ág( £dÝ)1mèBo]:iÜ*zY®äÓ½=jC6NµP:Àü¬+Cª]ä¯û³çàãã\v\úJUS%ÁRÉ.lE#:ÜáÓl}¿Ü¬a²xO$,Ö#r·¥¢[Üc ·Ë&°$ëÙÍf>I`µIVËt¤èRà o½À{ÑçIU^ô°AlQDÜÄ9d<vS5ìv Ê(i t<¾Ñ §$wÜ$ÊTH^T=>Òïâáá"Ïáþ~XUCc:iþX©gØ?L¯7w£Ùâv9¢e¿MdDPK kQZû½ºY¦É¶øÔÿ"(þ ÉIï{CÊÀü 63eñ L´}EUNä*eµÇëÜU»ûàòÛÆ"·ò$?ùOüá¿W};p´Éët¾BtVÏQ;9×xö\à®ó|gÌk²BôGSà&nµºc¸óµÕoø'ÏL9ýO.þ+ã6cÑ»s7»7ìã7PK ÉIï{CÊÀü 63eñ L´}EUNä*eµÇëÜU»ûàòÛÆ"·ò$?ùOüá¿W};p´Éët¾BtVÏQ;9×xö\à®ó|gÌk²BôGSà&nµºc¸óµÕoø'ÏL9ýO.þ+ã6cÑ»s7»7ìã7PK ~ Áí>¿Ü¸G þyNU#¥Ì®çñ ÌåÛÜ¢iÜÄÇãíKâÈÎcq êØhNÄÃQM5; W¾T°»Î°Îë*¡Y/Ýîúúï|ûùS~~¹W*¾(üS¼ú1ÀA¶vy{ìÂP¡ø © fÿèhiAÍb}Ù6#+f%þ²èp! ²ÅÂG¤.Ðstñ3îô²eÝæG0NK¿ðg¯ø³Ä½¤ú©$ncIVbe÷1 û'PK u0Ôbb4e:)jGXánÚì¤Vg³Þè ýí ¤&°ÀCvR± .a¢s7 _6Ú1hm|ÙÇS8^:ÞÜ:J3¯KoJ;"Ñ^WSÞöX"ÓdÕ¸öW§öÇN\r¼Ká µ)¯|ÎF¦üúH'PiÍ5¯%Ð.Hý@hc ¹³8*R,¼øÄ\®u´7'$QÁkrjpskm6;:̨TÖouqÃâOq,5;>"ç{AhByÛXðç¢Q¦qÑH4 Xæ ÑGîb:¬|d¡`W£fs/8ÿÜÀT`E¶ DëÆ£¡@/¬7DÁF\QÔZbÌì+R{Übj¹`%)°uée@ª«;¦lõ6²wÞ-í 0¹¨3ít ¶þò*ú.ÓACË©Y]gÆ ÍN><í °¬°U³\¬±æk3 ª nåV-Ù)è1ãé)¿ÅOümù~þÁßåg¤yÖàçxÆß3øû|·ÁÏ/ÔD3ã$·þÐàñö¤ª¶3mäì î´ÕcðüÁ?á"ÚÕÁÀ~Æ?Ǭ^Õ¬wË7høü¸Á/Kó4¿äW5þ tlxÈÃ0Ñb¶=óäIï)0<^fx|"Ç2dÜVuù>ç¶Ò< =RÛo Ï(axø¥ìd´*çÅóiHe '§ rEJäãI#¶0Q)quyÒù^rØ-Õùpæk¡ ]ZëMn®Ï|UWÙïlwàVÈ!LK?£³gÏ "ñå!Äÿ|»ðôÚK N¦£×ºß²²L*nú\HZÂÑåRzÁSa5 0ÝÙ,GÊe=^s["gål÷Ä&;#*&è`ª£;¨&Ó]t71}3ÍÆM5¾îUý}´Oõxü«O}Õ'¾ßYpæxÝ«oJÕãA¯z¼ÝUÿ¤tÕã5®úý<Uÿ:g¶gé9´ßâ4Ê#âeýTP1HÞ¶~ÒúÈa!zÂÐÀ°¨Fc8ñ}4.=ô§Ó«ã1,ÁpBMÄp¥}4Ã2ê£)éÛ¦b8âA×OÓûè`Ìg`ë>F>+æÐ ÿì*ï£984Ç_¤JUæ6¤ZM©T5Øè§y}4ÓñøÍOÒ$-¬P»©ÝEà|±Zsýô9à8\pÌï§#ú¨vȬ6IK¢#ÚYÖù(ÜwÔ^ò5V&iù>Hó^ÄÓÑó÷!å4m3åÓQ4«i9ÍÌ£zZB+h¤ãÑD«©(FÇÒYt]NMt¡ÛiìenÛ=@¿¢ém@¿O'ÓGt ët*Òi<ÚymÆÍ||$°=+pó~Ðôb@ùèô#¼6ÀúéEÐÓKôÀÒOég¶=ÐzÐïAï¤:Ⱥ^Ø[Q¤¶Í o~à Ú[aM!G=êÎ öIú9î$ìêôàg¬¾L¯Øøùh*À:Ñ´ øY3H«Ûææ÷SCm~i~¥ÿXè$IÇâÆÆAjj«ô¯QÊ a¬-(-HÒºëi©ôÇ×j¥ÚØ3´~±·TË+ñ&©¹ÖWªxóOKRKmai~©/IÐÐF ÝûñS·µjnNHR[£eÐÑ6Ð[Ð]¡í´:9ξvA/çP+Kíté|:.¤3è".VÜo_M4~I¯'@gwûZiý#N§ß`T(ü;²ø'«x´gÒkô[øe1húýò^DkéôGHÏ#¤Ð÷^ÑäK0ÈÑ´© ¶|bN©2ñ8OÁxªæ1¨æ§©y@æcKÔ¿CÔáÇù;d:þÍéÉh=¤né!Ü ÓoÞ¿5I!f&©GæI ·¢÷««#)RÕ<"µx¶ '1Yj;Ú5Hl'ìí©ølÓ;µ`NOÒöVgy;ÎZ÷»coæúxwì²>@;ptÖ°«Ôùä$ít3Exg8ÿÌôdªÿ,{r¶5I»*`Ìç¤Íó¤¢Ë`¤WÀ®¤Ú°rBÇÕ1{è4º.xÎ 0ÎéRº 7ctÌí6¤ÛòïcÞE¯cåßt/çÑ}<öqÝϳé^HòQÔÇÇQ[©ÛiÃôï¤ù"äÝô(ßLñÝô÷ÓS$Ã/Ð~~æû¼V`Y¿æÑp7èM'¸\5 Uó7óWó¯K6V 9WøµVVe;é8Áô}ÀåÇÊÜ[ Éf*·òàôdåVy¿Mï8¡i ÜVü;Ow=2ò¤ÄötaSÕ~*a%éâ¨h.ió¾.}|.k«ê§/´ÒåmvùâÛ¿¤+jó+i·J'¥ùUsûéªÚAºº´ ®©õBí{öÒĦ*A1@\»®õ_7@×K)F(:7bV!ðäCâÅÐmÂíÚ AKV#ì´ à®Ã½gÓ»Àð¬ä-XÉ;t ýMÉl=¤SFôgX'Ó_è¯O¤ù.Öòa,`ÿ Ü$»bø ^®ª²`n{n¬´ßÎGßBõeyª[ì-)(ñÞFS¦xn¥IPeIÊ;®'¬/» ÷~üà?_Í,<ÒL-¦"´n3æs!-cùQtÔÌEHñ£Þ êf?EÚÂðj°Rrâh¹0>TI쥰Ëiì?ðôAéð*41ÆÇJ«¸ÙN&Të¤~oª¢ü4¥^jÚËç/âná|5óqAnlyÍçÀ°iCðÁÉ> Û)lO¤°yاÚBúLù(Üêh/LtÙÛÞ²»ÿPK Iã²*®hbIn>Làªe T5h¸¦á:nHñ ý(Hó*niA|ÀíîhD¸À'ReHß2*r%¤¨J\Ô°*MM÷¸/- :TÔUØ vWD©Y+uÎ} {ÆCc=ïv-±{pBAÒ % öÞ ÌòA£eߥ--âUÇ<kú´Í/õ%ξN¥ÝIÓ6ýS Ng_-þyÍÄuѳNE(ØS0m±Ø¬[4J5C§lX× ×û2ê¯é¨4óoØL¸÷>óõ|Gï¹F£àÔjÂe¾»ÊFIXôÖ*½Zd,Á²Ñ_Ádvá?k)®ºÎÌ.('a9µ¦@YP Ö ç5f®ë¸ FB]¤¼ kÂ/l7Æpv"=]«+mWÎNöÐHv!A[vnYÌÁåiÂ)¼×SÈbBÁ· ´}Bl »iíá0¾Øç!üHoW f 1¯ ?°kú¦a$öoáÙ:Î4«U °G "ú-Ûz çÁ»V¸øó)|*§ð9¾õ%*¾nÌúk|£àð6òea͹µf]Ø~ïzÌwI¯7=_/ ݱùTuÕñ^UME7mÝþWY3Ü}f§)½ÔôuÓÓeÜoÙÈÿcf$dÞ«æ×\CBæçJlP£ìwÏ÷nðTÆ}Y9#ÙðYÎöÚµÓ©7¥z`ÇD°mùQ+7]dt÷;»²eO©ìÊvw {7x"´ ãF£!lN ¥øª}ÝôKøN[ÃÁ zÌI Î}£|¿H¨٠RYz¬lñ&ÉXèWq»cPË&ËMW'MþÆù·úsÄUDRðæ¬ðKÇ4åwMQ¾3¹M(¹É DrSèËm!º2½Øâ?ÎyÊQ: Q$ ÑO<yÚ\oâ¬dx%Xe`õ1µ(ãmj2Á]gO¦þB|H½¼ ÄÊ&³Ñ-h+éht»fc¿"ÕÂîÙxîÄ·ÐO=-ÌªéØ¹J«-ì¦HÇåj"ÙĨÜì£âÓÂþÒÓ"9µp@cĤ£-láÐv¹Ç±r sàaÀB.`aá\\ÆñWð=:®¶êÑñïàÝ'% `u'IÇ øuí¦¬@T¯ËÚòV«©em¢Z7,ÀHŨX|e¢º¬ ´æ*¯¯5s^-ê$æª%U_PÍ ß]¡bVj§sf¥k+é S]''é±bÍ2Õcæ°@¸´ªÞÎ9\N$²¹Ûê5«F9=g£<ÌÎÃdRWõ¼ºf;|HG Dè.bØjþeX/´%äÁ5'\¤Dcd~Õ¬npX¶_3ͪI°R "RÖ,%ÛÆI~±Rh®Ô2Û.(í¹F"SSuý]2è¥äPráÌ;%mݪT J¾OgÍ÷ÂA®yÙ?¡mcW²¡ÀÑJm³é1¥ÐhK¥¥ <)ÝIß»Y½{ð\µn´© ×È¡éEÐ ÓÄÐ)нÇ7«ëZYÕÇÌr}M3,>LcrÆë++Á-¨cñµz͵xÕ ÿÊPÜ«o23~õrʽdóS³»çűB~÷)fQbV©zÑÁ#Hóé:#èçÓ³x.1ÁK¤À$¦^hhøîÓ8^R £jÅékÜ-Ρ8ûîÈî¾ÉÿÑ(úÏÎ8¶Älñ¶Vâ ®¯k=cJÖRà ³ªBL<¬7¬¡ÁÔAc°~ôôöé½·ApEÐ§Û Éíáä6DÒ÷ ó>dK#lHN=dZB2 %%«éÇ&y\Ü´íð'CÓ}4`göÕßô 2ã£Æ©qÿ!éimh`~Iziz®ÕõÇN +wÖ%ÙäüÏc1>ÜCPÙâ»ßàæqsévÏM»SÙÂCÀ_¶Û¦!ý¼æÛ#0L £vH»ãÔd㺸¿®ödlOÜÅ ;íR=¤.j|/©.¿zD]ѼpÀι39ôQâ[äë}-ðZdBbH¬ïJ'%Ö~õ÷RëÄ: ±¾'µô£_Ú?Q¶~~ì~²/ÿPK ÒÀ¸!ºª.`ân¨cS¦¤ñ·ÜhâÂ¥?Êx[L$ÚÄäÎ}soÎ||¾¾èbßl°]B¡x"O¬¦sϸísåÙ8Êë-e0ó±/zÞnCÕJ\&Ó±i¡æ.÷G<iüÔã±ÝÙóÏüÀ³ÀóhÌÙ£+f±TÁPb~!¢{Ù .O"*Ös#A®8~ÖôkD7UPÀN»Øc8üg'9WåT,ë9ª¥SUûM;Í|s³hÐïèH£[@l¢hTL«ýÖyGÙê<C»~¢U²µ×" 2Ú¨â^àhµ×DëÄzÔ¥of,_PK òhøØ÷q@(^ÅI]òÍó!Á»Õ÷PãDöfÓ41RÔC=j(Llçèe8%Ìô!Xñ¤tôt"CEÒte# RÏ<.ÝðQÌE DýÌÄIÔù&F/¬wÇ)±W(çR¨Kð§2MEä¬ Òm?ý¾±¼mòÚwĶ]¯ÂCpôïC'¿¸Q1Î<Nãµ'²n\<Ü{¡õ zq´ÏµèÀ3¸V(£ÂÝÃC¬¸ëf¬/°µ$WB{ÛÄãù Øf ½í ÎÉ»ÎcïPK 4P "¦%mDA$Åþ¤-6¬¸MnÒ ÍnÜÝ>Éáã¯ÊhêØySÇ?Êñ»4¶ÜýιçÞs¾oϽû÷?¿ý`Oäë:¦ô`ºoáFf0+9 ó:èÖ7ð1nÊ¡ aÑÀ~LÊ5K Hc NYO¬l(¾ ³E»ÞpĹhvq×l×'ô¦ï(Pox¡à@ÁvÅR³¾&üµæÐ,xe˹cù¶´;N5\·'®³A5ûÔ·WË¡¨¼ZMøÌÑçËqÑVp!oäX.CßvkãÛ<¥uß{*wåÄkë Û!¶½Åa1rské âp(yZ]UêÝEALø¾çwwÛP®sßÊUçû*ÔiÊli%j"($wHç÷Ê÷EÐt`½¦_s¶Ôi`» crYï àø¿Gñ7º¸8Z©¹z=b±(×xç5T¸@z]ÐRÓqnyTJø³_E#´=WÁ±<f½¦ë æ0]2Y[é]3j ¬ÃNà+Ø¥h¶¥Ê*¸øÈN%¦Õªð¨Y{Ì{ ä@54øe @¾±ÙéÛó|ææM>ïN,ÉçìÊÊò³¯³äGÔ,gʯ5ë ·QÛj6²ð\þ«f¸î¬*;»bڮɪcO-_öìX´(c®5CÓLYzSAê}¿cvj"Zåpk~0½»EdWÜæ6äéóT ýùÆt)êGýå¦ïè}8=\ØEi56i»yßè¶ç¹NEÝ8¾w[p'³]®öÛ§1ôÚö8¯,°!-ÇÝóòÞi´£òã¤çXzÏ/eLíu;µà¯Îs¼Ùyò¤õóÐq¦u*Ù2²ÕdïÔ_ûÞpײ¼ÞU\Ä¢D{2åSåL¶½rFßóTìì{xN}ý%´ùýÐW}0^ ©[æ>iþDý¹ØÈÏmbÿê´p0R71@+9oáPò0¡DFR-ÆQþ[8ÖÂÐèèR[8þÁèçø!b¸JtµOà&abªL³þ\Á,æ1¯±oÇ·¸±]áçÊ jï½*¹uxKôÞ´xK¸©ô¹®0:°³â ù2sÏ3ãU¢8½¼:oà/Z½|.¤¾C_2µø)õ{ÂR1 O§â"<µÓ«e&S3d¿³¯2?vY°nY¿"ÑmàsÎãX%ó{d~s9b:ÁÊ4Ör-âì¢]î"ÖÛÕa¡£¢ÜÿPK Ë<%=ÒÒ6{à³yÊêÍÙ[^®ÜÊe¤V:åãÀ)¯]c`ôCÒ:ôèSQ쩨À+&g!áà]U®«d[¿å¡a>QS"|ëÒþ*iIòâjÇ2µV*1OãVh1» ªpg+¾äÄyVZa¥&0»¥d>ÍèùSª`I*gdÜ-^=\ÌL²³pUhÄþ-³<k2±|êÊè£Ý°9KM$éÐmf{è&8òþà¾&ðp£ïläÒÒ4Ymh6aöÁÑ,¼HKʼÎT"I^2Ü 9þpyKÜ_ðb?b/äó¾ã+ZÍ¿NæT â&ÉaPÄP±>eͦ¿@/Æ#Y/ ¶@t ÌÆlÓ D ¸ °$¾áå6ÿØW=m²Õ¿3pë$7jF F±¨Ñ¼?±Ëgñ2Ô\Ðä"²ú²¥ñêK¦èË®öTb!! !\À£äà5ebíhÚK «éfgÃÁ ;Ð6(J"KNjÛÁ£¬ëÑÅøÔdÏpÓ|Üôn*ÂU¤æÿ#'R!2` Èw@8âTÿáüºa1°¦sì%ìbÀðkCòkâ¡4¦(W=|ÑA»$¯Z|¡]©É<p5´P04ÕÖ°ÝDi7%Q_f&½àæ%`%iÆ"È2ëÕb$1¸Êlý8Î~ÝE<}æôlãå^¹T#ÐÛ^"ÐÐYeUð|Vi%WX+ýXÅ÷nAA|í&±*únÛÅJ 8w6cjÃ:a5ýè-Ù ÀâFÅÑ[<ÑïøD_j{?¦DÙµÑ$¡7$Mdª¶äëçeIëD=LLÆÈ£ ÎXEIÀÌ@¢ 2 (4G¥ }¥~«¾`Ü&Ï6@h*XÛ'9îg TOÄÊÞe[«.û!b« g)*ÎAZÖâØØ£Rz4cXqù%ȬØì¥÷ÅñD ð±þïÊ¥[¢q:ÿ¸°ëK{qs}9»Ý\/ì»9ýxûyvý~d/g»ùìüâo.gïfüõóX°¤Ê i°Câ:FP£`n¢o4ÌJÜ 'µCÞãÛ(HHOó8-ýKÙðÐÉ^sæêZºà3µÏΨ1aTñ²ÎJƼ VDèGoE^î}É2V·¢øÆ1¨êêîÉHR¥#Ivyìô¡?F¨YYBñ·ìaÓ\õyé2Øl!z+ö1æYxÓIT<ýîM gñ¤?d¬Ê¥w©ñÌfWVþà22óJ@¨ñ`¯8Ø2 óÙ¿sÕ XM¼JÈf¢ÈwëP±áôY wH0 l·DzøÈ¦3Ð?AäíILÏÉøz²è2¼'õòö µfä·%(ÞzΣÔtW¯´Nl½ã Áy·8¯Ì+6ÿâ«&4w÷Lí9û¼ùº. >¡(çTö`tèì4ÉÏ+P$²:ë)Éääx! ç½@.M&pÁ«-U jÔsú O3R¸òâEãY¨ð½GBñ¦¤3@=Ud³æl̺g®hiÕât1i {àSma2 bN¿ÙÁIÕìs¥JFE~Sݪîf'ÙV` O¾µ_ÛÁøPMÏ4a ?hl? ÑÔQJÇê(ëÅNB½RT2H%ܶä©*A£#ü ^IHÏPÉ"±NV¨ýí½ÏlðÁ¬ ;ïj+5h\=Sß@AE¿¹l2pþλS.©¦¢ÇV;ä½mfêðÒ§ei6nEr«'Á5Â9Ø$, ó ]zô¾°ÁËÔ´lA6áëÈ¼Ê !Åp´)íàáF;úpµãRîkY÷:5ÈE8×îBq1ËwiN×'ÞZ:¥ÏÌëR¦Ê+Éù>89Æì¸ª qú#²yhâY¯Á%?Ty\>29H*ú ÎdJ. )ïOptg["ê$ôøÌÿQ_üKëȱ£ë{ð¸Òòl!.I.»otNî¸ÎÅ îlB]"xÎ$Gvðû¡9òû¦k]ƼHý±FO錄 2] ÷$ I¾1 ¼úe9/D<wÈuEà¶Uè{Ùܵ±Ï¬½ó(p£Øû vÚ6¦\Là ÷æ¡Jat^ÞdUå ø L¨¿Ï½¤iSNZkIEpøÔOc)aêtÕ®¡T#3Q:oà»3Xî¼%kêÄâÆA9Kê P n§æÿörÔ<TüÄìYeúÕn ÁÌ>LysÆùnéÒò]]R#'ó|SÛ×LÎËÑα`g¥)èF*ò«²Æ<nÆØ¢hX¸WäãSÁ]¯=QÆ;³SÏÏgÔh¦rT/ÂßuÅHuE¡©áÐèÇlóÒ>¼nrß·£ý3QÇNâY ÃWÀYIÎH¦7+y/}çq£þ³ÉêLs0h_»l(ÅQVJÛîçé#ü$ýüBÌæÞßÇvÒõP(ÊAOFÅ{ÓÚÕq#¯øø¡\¢>Ámuû«zE8ÎÕ¾òp¼úäóàd¿3ÒEAûË\¯:¥fÃûGºxÐ5ò@+×!ûø²ãM¾¯ãezØaV\æ3ÒnosuÅuz3Óãæ`ÎF©4¦=F¤¯×kI/&GÍ=Ï$nÇÆ®_9?á²³ò£ÖaE;^äÿfp?Mîß6dÐBÒd<çb#ßCã±mð¹4IàhSyYZúØOyÄM»Õû*ÈÝ"ªíî-@O8sU4>^êGS±F °ÑÛ4</²Úç~§Acâ¡ íïñôH> ù* DÙhªH¼qywË1p~¼ ZqÁÕ\G ( ¥;:òvմܵ:I>WïÜh ¢Þr#YUeý"+ÎtºS øGª ÆëfsÇ^]6L00A! ßk ¾i'µýJ Qâ¤ßu,íZåbgνq(ó¥ÜFJ£¡mø2µ©dooãÔ8ÆM^!úgWïùHüiìû?îû5èc¿î3 f0ÈZè;iì9{ík´=ï_ÒxíùAöµ©JáÒbâõâ{_l5!©Þ¡Ð6Ãýô{Éý°BôéNçSí²|ÖI*4 >õ#ë'Ú¾:¬Ö§xlGª#þ ÿäPÈ7&0ôÑ×?-_.á Lú_ª©~cËõ½ ©ô×6nÒ7\²Wñyõdø®C¤ÊÝNcQÕæ´AÜËþmÏe[y tÊˤñz7ofIo6É#W|rw©~mûLø$é¨[Ú:N¼ÿÜiWf xWÌuôT÷ÀE߲ź@ÅáÆÐNF]p'i:o®äÍ l£@U/!ÔF*ßÐÖ[ʳ¯=?/{nxH¿®Mèé³¢ëR 桾"·p¾ ß{ðè]#í`ð~p)kMÝã=Ý%rÛ §ÁCP])ýàÅO(ë{ÿX$À|g+P>!xÏØèé+Ï¿dÜ[ÃÌaoùÓrë jµx ¯C_¼QjàÒø¼ä§-H®K.h< V½gÐøÖÊGô}"ìt;|(IóÈÂ!¢G©ßØâþ u*áµXpR¾¾±&óùäúî3³¿íùôbr¿Ú»S{5;Oæíláĸ´ïæÓ©½yg/>Læï§#O1âúÆø¹øyhuÃ?Oÿ}7½¾³·ÓùÇÙÝÍvþÙNnoiòÉù |é¿/¦·wöÓéµ½ÁìfDÎânñ³kûi>»]¿çùðÇ|öþÃýpsu9ó;?ÝÌ ho'ó»Ùtaoç7Ì.û{:,êûiv÷áæþ.ð{\6ÿ]_ìtÆMÿ};Ç;!66ûHOé³ë«ûK~äf¸¾¹£Ùic4ìî9ct¬ÄÐü§sbßõÝä|v5£%ñfÈ»ÙÝ5-Á¬å÷W¹¹½ßÞ,¦Hî4 ñ{>[üÓÒ¯ÿº¹4ÇÇÉõ¨ÎÛµoîQ }_]öFMíåôÝôânö.¤e÷§Fø½¸c]]ÙëéѯÓù³æÃ|z;Í-¿2ckñ¿qx$pÓ? ÷×xx ÆÿëösD0Çä= Iîf´8ÐÁáøúCwøInìÇÉgyå³ñ eÃ-}© vÂ99¿Îñg&!Ñåäãäýt /ÏÈìâvz1ÃÐßIô謯<sqCJô¯{"ýB'±:NÌ þ®Ó[J@ µ{Ê«áQ?,±z´v¦Jðx'ïÙ= ~@ª.Ýù ã+.L\í º°Åör}¤ç}Ì-[²ÞaPK Ñ b £ |
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.video/src/org/bitpedia/collider/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753/plugins/org.bitpedia.collider.video/src/org/bitpedia/collider/video Added Files: QuickTimeFormat.java VideoFormatHandler.java AviFormat.java VideoUtils.java MpegFormat.java Log Message: initial commit from code drop of april 12 --- NEW FILE: QuickTimeFormat.java --- package org.bitpedia.collider.video; import java.io.IOException; import java.io.RandomAccessFile; import org.bitpedia.collider.video.VideoFormatHandler.VideoData; public class QuickTimeFormat { /* QuickTime uses big-endian ordering, and block ("atom") lengths include the * entire atom, including the fourcc specifying atom type and the length * integer itself. */ public static void parseQuickTime(RandomAccessFile stm, VideoData data) throws IOException { int blockLen; byte[] fourcc = new byte[4]; stm.skipBytes(4); stm.read(fourcc); /* If data is first, header's at end of file, so skip to it */ if("mdat".equals(new String(fourcc))) { stm.seek(0); blockLen = VideoUtils.readBE(stm, 4); stm.seek(blockLen + 4); stm.read(fourcc); } if(!"moov".equals(new String(fourcc))) { return; } long blockStart = stm.getFilePointer(); blockLen = VideoUtils.readBE(stm, 4); /* mvhd length */ stm.read(fourcc); if(!"mvhd".equals(new String(fourcc))) { return; } /* Now we're at the start of the movie header */ /* 20: time scale (time units per second) (4 bytes) */ stm.seek(blockStart + 20); int timescale = VideoUtils.readBE(stm, 4); /* 24: duration in time units (4 bytes) */ data.duration = (int)VideoUtils.round((double)VideoUtils.readBE(stm, 4) / timescale * 1000); /* Skip the rest of the mvhd */ stm.seek(blockStart + blockLen); /* Find and parse trak atoms */ while(stm.getFilePointer() < stm.length()) { /* Find the next trak atom */ blockStart = stm.getFilePointer(); blockLen = VideoUtils.readBE(stm, 4); /* trak (or other atom) length */ stm.read(fourcc); if (!"trak".equals(new String(fourcc))) { /* If it's not a trak atom, skip it */ if (stm.getFilePointer() < stm.length()) { stm.seek(blockStart + blockLen); } continue; } long subBlockStart = stm.getFilePointer(); int subBlockLen = VideoUtils.readBE(stm, 4); /* tkhd length */ stm.read(fourcc); if (!"tkhd".equals(new String(fourcc))) { return; } /* Now in the track header */ /* 84: width (2 bytes) */ stm.seek(subBlockStart + 84); int width = VideoUtils.readBE(stm, 2); /* 88: height (2 bytes) */ stm.seek(subBlockStart + 88); int height = VideoUtils.readBE(stm, 2); /* Note on above: Apple's docs say that width/height are 4-byte integers, * but all files I've seen have the data stored in the high-order two * bytes, with the low-order two being 0x0000. Interpreting it the * "official" way would make width/height be thousands of pixels each. */ /* Skip rest of tkhd */ stm.seek(subBlockStart + subBlockLen); /* Find mdia atom for this trak */ subBlockStart = stm.getFilePointer(); subBlockLen = VideoUtils.readBE(stm, 4); stm.read(fourcc); while(!"mdia".equals(new String(fourcc))) { stm.seek(subBlockStart + subBlockLen); subBlockStart = stm.getFilePointer(); subBlockLen = VideoUtils.readBE(stm, 4); stm.read(fourcc); } /* Now we're in the mdia atom; first sub-atom should be mdhd */ long subSubBlockStart = stm.getFilePointer(); int subSubBlockLen = VideoUtils.readBE(stm, 4); stm.read(fourcc); if (!"mdia".equals(new String(fourcc))) { return; } stm.seek(subSubBlockStart + subSubBlockLen); subSubBlockStart = stm.getFilePointer(); subSubBlockLen = VideoUtils.readBE(stm, 4); stm.read(fourcc); if (!"hdlr".equals(new String(fourcc))) { return; } /* 12: Component type: "mhlr" or "dhlr"; we only care about mhlr, * which should (?) appear first */ stm.seek(subSubBlockStart + 12); stm.read(fourcc); if (!"mhlr".equals(new String(fourcc))) { return; } stm.read(fourcc); if ("vide".equals(new String(fourcc))) { /* This is a video trak */ data.height = height; data.width = width; } /* Skip rest of the trak */ stm.seek(blockStart + blockLen); } } } --- NEW FILE: VideoFormatHandler.java --- package org.bitpedia.collider.video; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.util.LinkedHashMap; import java.util.Map; import org.bitpedia.collider.core.FormatHandler; public class VideoFormatHandler implements FormatHandler { private static final int UNKNOWN_FMT = 0; private static final int AVI_FMT = 1; private static final int QUICK_TIME_FMT = 2; private static final int MPEG_FMT = 3; /* * We must be able to determine file format using this many bytes from the * beginning of the file */ private static final int HEAD_BUFFER = 12; public static class VideoData { int width; /* width in pixels */ int height; /* height in pixels */ int fps; /* frames per second */ int duration; /* duration in milliseconds */ int bitrate; /* bitrate in kbps */ String codec; /* video compression codec */ } private String errorString; public boolean supportsExtension(String ext) { return "avi".equalsIgnoreCase(ext) || "mov".equalsIgnoreCase(ext) || "qt".equalsIgnoreCase(ext) || "mpg".equalsIgnoreCase(ext) || "mpeg".equalsIgnoreCase(ext) || "m2v".equalsIgnoreCase(ext); } public boolean supportsMemAnalyze() { return false; } public boolean supportsFileAnalyze() { return true; } public void analyzeInit() { } public void analyzeUpdate(byte[] buf, int bufLen) { } public Map analyzeFinal() { return null; } private int findFormat(String fileName) { InputStream stm = null; try { stm = new FileInputStream(fileName); byte[] buffer = new byte[HEAD_BUFFER]; if (HEAD_BUFFER != stm.read(buffer)) { return UNKNOWN_FMT; } if (("RIFF".equals(new String(buffer, 0, 4))) && ("AVI ".equals(new String(buffer, 8, 4)))) { /* AVI signature: "RIFF____AVI " */ return AVI_FMT; } else if (("moov".equals(new String(buffer, 4, 4))) || ("mdat".equals(new String(buffer, 4, 4)))) { /* QuickTime signature: "____moov" or "____mdat" */ return QUICK_TIME_FMT; } else if (0 == buffer[0] && 0 == buffer[1] && 1 == buffer[2] && ((byte)0xB3 == buffer[3] || (byte)0xBA == buffer[3])) { /* MPEG signature: 0x000001B3 or 0x000001BA */ return MPEG_FMT; } else { return UNKNOWN_FMT; } } catch (FileNotFoundException e) { return UNKNOWN_FMT; } catch (IOException e) { return UNKNOWN_FMT; } finally { try { stm.close(); } catch (IOException e) { } } } public Map analyzeFile(String fileName) { File file = new File(fileName); int fmt = findFormat(fileName); String fmtStr = ""; VideoData data = new VideoData(); RandomAccessFile stm = null; try { stm = new RandomAccessFile(fileName, "r"); switch (fmt) { case AVI_FMT: fmtStr = "AVI"; AviFormat.parseAvi(stm, data); break; case QUICK_TIME_FMT: fmtStr = "QuickTime"; QuickTimeFormat.parseQuickTime(stm, data); break; case MPEG_FMT: int version = MpegFormat.parseMpeg(stm, data); if (1 == version) { fmtStr = "MPEG-1"; } else if (2 == version) { fmtStr = "MPEG-2"; } break; } } catch (FileNotFoundException e) { } catch (IOException e) { } finally { try { stm.close(); } catch (IOException e) { } } /* * If necessary, use filesize to estimate bitrate from duration or vice * versa */ if ((0 == data.bitrate) && (0 != data.duration)) { data.bitrate = (int) VideoUtils.round((double)file.length() / data.duration * 8); } else if ((0 == data.duration) && (0 != data.bitrate)) { data.duration = (int) VideoUtils.round((double)file.length() / data.bitrate * 8); } Map attrs = new LinkedHashMap(); if (!VideoUtils.isEmpty(fmtStr)) { attrs.put("tag.video.format", fmtStr); } if (0 != data.width) { attrs.put("tag.video.width", "" + data.width); } if (0 != data.height) { attrs.put("tag.video.height", "" + data.height); } if (0 != data.fps) { attrs.put("tag.video.fps", "" + data.fps); } if (0 != data.duration) { attrs.put("tag.video.duration", "" + data.duration); } if (0 != data.bitrate) { attrs.put("tag.video.bitrate", "" + data.bitrate); } if (!VideoUtils.isEmpty(data.codec)) { attrs.put("tag.video.codec", data.codec); } return attrs; } public String getError() { return errorString; } } --- NEW FILE: AviFormat.java --- package org.bitpedia.collider.video; import java.io.IOException; import java.io.RandomAccessFile; import org.bitpedia.collider.video.VideoFormatHandler.VideoData; public class AviFormat { public static void parseAvi(RandomAccessFile stm, VideoData data) throws IOException { byte[] fourcc = new byte[4]; stm.skipBytes(12); /* Verify existence of and read length of AVI header: * "LIST____hdrlavih____" * where the first ____ is the length of the LIST block */ stm.read(fourcc); if (!"LIST".equals(new String(fourcc))) { return; } stm.skipBytes(4); stm.read(fourcc); if (!"hdrl".equals(new String(fourcc))) { return; } stm.read(fourcc); if (!"avih".equals(new String(fourcc))) { return; } int blockLen = VideoUtils.readLE(stm, 4); /* Now we're at the start of the AVI header */ /* 0: microseconds per frame (4 bytes) */ data.fps = (int)VideoUtils.round(1e6 / VideoUtils.readLE(stm, 4)); stm.skipBytes(12); /* 16: total frames (4 bytes) */ data.duration = (int)VideoUtils.round((double)VideoUtils.readLE(stm, 4) * 1000 / data.fps); stm.skipBytes(12); /* 32: width (4 bytes) */ data.width = VideoUtils.readLE(stm, 4); /* 36: height (4 bytes) */ data.height = VideoUtils.readLE(stm, 4); /* Skip rest of avi header */ stm.skipBytes(blockLen - 40); /* Verify existence of and read length of video stream header: * "LIST____strlstrh____vids" */ stm.read(fourcc); if (!"LIST".equals(new String(fourcc))) { return; } blockLen = VideoUtils.readLE(stm, 4); stm.read(fourcc); if (!"strl".equals(new String(fourcc))) { return; } stm.read(fourcc); if (!"strh".equals(new String(fourcc))) { return; } stm.skipBytes(4); stm.read(fourcc); if (!"vids".equals(new String(fourcc))) { return; } /* Now we're in the video stream header */ /* 16: FOURCC of video codec (4 bytes)*/ stm.read(fourcc); data.codec = new String(fourcc); } } --- NEW FILE: VideoUtils.java --- package org.bitpedia.collider.video; import java.io.IOException; import java.io.RandomAccessFile; public class VideoUtils { public static double round(double value) { return Math.floor(value + 0.5); } /* * Read the specified number of bytes as a little-endian (least significant * byte first) integer. Note: bytes must be less than the byte width of * "unsigned long int" on your platform (e.g. 8 for 32-bit systems). */ public static int readLE(RandomAccessFile stm, int bytes) throws IOException { int x, res = 0; for (x = 0; x < bytes; x++) { res |= stm.read() << (x * 8); } return res; } /* Same as above, but big-endian (most significant byte first) ordering */ public static int readBE(RandomAccessFile stm, int bytes) throws IOException { int x, res = 0; for (x = bytes - 1; x >= 0; x--) { res |= stm.read() << (x * 8); } return res; } public static boolean isEmpty(String str) { return (null == str) || "".equals(str); } } --- NEW FILE: MpegFormat.java --- package org.bitpedia.collider.video; import java.io.IOException; import java.io.RandomAccessFile; import org.bitpedia.collider.video.VideoFormatHandler.VideoData; public class MpegFormat { /* * Returns 1 or 2 to indicate MPEG-1 or MPEG-2 * * Most MPEG data is stored in bits not necessarily aligned on byte * boundaries; bits are ordered most-significant first, so big-endian of a * sort. Block sizes only count bytes after the block size integer. */ public static int parseMpeg(RandomAccessFile stm, VideoData data) throws IOException { int version = 0; /* MPEG-1/2; our return value */ /* * First check if this is a Program stream (multiplexed audio/video), * and handle Pack header if so */ int temp = VideoUtils.readBE(stm, 4); if (0x000001BA == temp) { /* Figure out if this is an MPEG-1 or MPEG-2 program */ temp = stm.read(); if (0x20 == (temp & 0xF0)) { /* binary 0010 xxxx */ version = 1; } else if (0x40 == (temp & 0xC0)) { /* binary 01xx xxxx */ version = 2; } else { return 0; } if (1 == version) { stm.skipBytes(4); data.bitrate = (int) VideoUtils.round((double) ((VideoUtils .readBE(stm, 3) & 0x7FFFFE) >> 1) * 0.4); } else { stm.skipBytes(5); data.bitrate = (int) VideoUtils.round((double) ((VideoUtils .readBE(stm, 3) & 0xFFFFFC) >> 2) * 0.4); temp = stm.read() & 0x07; /* stuffing bytes */ if (0 != temp) { stm.skipBytes(temp); } } /* * Skip any other blocks we find until we get to a video stream, * which might be within a 2nd PACK */ temp = VideoUtils.readBE(stm, 4); while (0x000001BA != temp && 0x000001E0 != temp) { if (0 == temp) { /* Skip past zero padding */ int buf = 0; while (0x00000100 != (temp & 0xFFFFFF00)) { if (-1 == buf) { return version; /* shouldn't happen here either */ } temp <<= 8; buf = stm.read(); temp |= buf; } } else { temp = VideoUtils.readBE(stm, 2); stm.skipBytes(temp); temp = VideoUtils.readBE(stm, 4); } } /* * Now read byte by byte until we find the 0x000001B3 instead of * actually parsing (due to too many variations). Theoretically this * could mean we find 0x000001B3 as data inside another packet, but * that's extremely unlikely, especially since the sequence header * should not be far */ temp = VideoUtils.readBE(stm, 4); int buf = 0; while (0x000001B3 != temp) { if (-1 == buf) { return version; /* No seq. header; shouldn't happen */ } temp <<= 8; buf = stm.read(); temp |= buf; } } else { /* video stream only */ stm.seek(4); } /* Now we're just past the video sequence header start code */ temp = VideoUtils.readBE(stm, 3); data.width = (temp & 0xFFF000) >> 12; data.height = temp & 0x000FFF; switch (stm.read() & 0x0F) { case 1: /* 23.976 fps */ case 2: /* 24 fps */ data.fps = 24; break; case 3: /* 25 fps */ data.fps = 25; break; case 4: /* 29.97 fps */ case 5: /* 30 fps */ data.fps = 30; break; case 6: /* 50 fps */ data.fps = 50; break; case 7: /* 59.94 fps */ case 8: /* 60 fps */ data.fps = 60; break; } if (0 == data.bitrate) { /* if this is a video-only stream, */ /* get bitrate from here */ temp = (VideoUtils.readBE(stm, 3) & 0xFFFFC0) >> 6; if (0x3FFFF != temp) { /* variable bitrate */ data.bitrate = (int) VideoUtils.round((double) temp * 0.4); } } else { stm.skipBytes(3); } /* If MPEG-2 or don't know yet, look for the sequence header extension */ if (1 != version) { /* Skip past rest of sequence header and 64-byte matrices (if any) */ temp = stm.read(); if (0 != (temp & 0x02)) { stm.skipBytes(63); temp = stm.read(); } if (0 != (temp & 0x01)) { stm.skipBytes(64); } temp = VideoUtils.readBE(stm, 4); if (0x000001B5 == temp) { if (0 == version) { version = 2; } stm.skipBytes(1); /* extensions specify MSBs of width/height */ temp = VideoUtils.readBE(stm, 2); data.width |= (temp & 0x0180) << 5; data.height |= (temp & 0x0060) << 7; stm.skipBytes(2); /* and a numerator/denominator multiplier for fps */ temp = stm.read(); if ((0 != (temp & 0x60)) && (0 != (temp & 0x1F))) { data.fps = (int) VideoUtils.round((double) data.fps * (temp & 0x60) / (temp & 0x1F)); } } else if (version == 0) { version = 1; } } return version; } } |
From: Gordon M. <go...@us...> - 2006-04-14 07:40:17
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis/src/org/bitpedia/collider/vorbis In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753/plugins/org.bitpedia.collider.vorbis/src/org/bitpedia/collider/vorbis Added Files: VorbisFormatHandler.java Log Message: initial commit from code drop of april 12 --- NEW FILE: VorbisFormatHandler.java --- package org.bitpedia.collider.vorbis; import java.io.File; import java.util.LinkedHashMap; import java.util.Map; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javazoom.spi.vorbis.sampled.file.VorbisAudioFileReader; import org.bitpedia.collider.core.FormatHandler; public class VorbisFormatHandler implements FormatHandler { private String errorString; public boolean supportsExtension(String ext) { return "ogg".equalsIgnoreCase(ext); } public boolean supportsMemAnalyze() { return false; } public boolean supportsFileAnalyze() { return true; } public void analyzeInit() { } public void analyzeUpdate(byte[] buf, int bufLen) { } public Map analyzeFinal() { return null; } private void extractParams(Map src, Map dest) { Object value = src.get("ogg.bitrate.nominal.bps"); if (null != value) { dest.put("tag.vorbis.bitrate", value.toString()); } value = src.get("duration"); if (null != value) { dest.put("tag.vorbis.duration", value.toString()); } value = src.get("ogg.frequency.hz"); if (null != value) { dest.put("tag.vorbis.samplerate", value.toString()); } value = src.get("ogg.channels"); if (null != value) { dest.put("tag.vorbis.channels", value.toString()); } value = src.get("title"); if (null != value) { dest.put("tag.audiotrack.title", value.toString()); } value = src.get("author"); if (null != value) { dest.put("tag.audiotrack.artist", value.toString()); } value = src.get("album"); if (null != value) { dest.put("tag.audiotrack.album", value.toString()); } value = src.get("ogg.comment.track"); if (null != value) { dest.put("tag.audiotrack.tracknumber", value.toString()); } value = src.get("comment"); if (null != value) { dest.put("tag.objective.description", value.toString()); } value = src.get("ogg.comment.genre"); if (null != value) { dest.put("tag.id3genre.genre", value.toString()); } } public Map analyzeFile(String fileName) { Map res = null; try { VorbisAudioFileReader vafr = new VorbisAudioFileReader(); AudioFileFormat baseFileFormat = vafr.getAudioFileFormat(new File(fileName)); AudioFormat baseFormat = baseFileFormat.getFormat(); res = new LinkedHashMap(); extractParams(baseFileFormat.properties(), res); extractParams(baseFormat.properties(), res); } catch (Exception e) { errorString = e.getMessage(); } return res; } public String getError() { return errorString; } } |
From: Gordon M. <go...@us...> - 2006-04-14 07:40:17
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.image In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753/plugins/org.bitpedia.collider.image Added Files: plugin.xml .cvsignore Log Message: initial commit from code drop of april 12 --- NEW FILE: plugin.xml --- <?xml version="1.0" ?> <!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 0.4" "http://jpf.sourceforge.net/plugin_0_4.dtd"> <plugin id="org.bitpedia.collider.image" version="0.0.1"> <requires> <import plugin-id="org.bitpedia.collider.core"/> </requires> <runtime> <library id="image" path="bin/" type="code"> <export prefix="*"/> </library> </runtime> <extension plugin-id="org.bitpedia.collider.core" point-id="FormatHandler" id="Image"> <parameter id="class" value="org.bitpedia.collider.image.ImageFormatHandler"/> </extension> </plugin> --- NEW FILE: .cvsignore --- bin |
From: Gordon M. <go...@us...> - 2006-04-14 07:40:17
|
Update of /cvsroot/bitcollider/jbitcollider/logs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753/logs Added Files: .cvsignore Log Message: initial commit from code drop of april 12 --- NEW FILE: .cvsignore --- jpf.log |
From: Gordon M. <go...@us...> - 2006-04-14 07:40:16
|
Update of /cvsroot/bitcollider/jbitcollider In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20753 Added Files: boot.properties log4j.properties .classpath run.bat .project .cvsignore Log Message: initial commit from code drop of april 12 --- NEW FILE: boot.properties --- org.java.plugin.boot.applicationPlugin = org.bitpedia.collider.ui --- NEW FILE: log4j.properties --- # JPF-Demo # Copyright (C) 2004 - 2005 Dmitry Olshansky # $Id: log4j.properties,v 1.1 2006/04/14 07:40:12 gojomo Exp $ applicationRoot = . # # Log4j configuration # Available priorities are: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL # log4j.rootLogger = ALL,console log4j.logger.org.java.plugin = ALL,jpf log4j.appender.console = org.apache.log4j.varia.NullAppender #log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.conversionPattern = %d [%t] %-5p %c %m%n log4j.appender.jpf = org.apache.log4j.FileAppender log4j.appender.jpf.file = ${applicationRoot}/logs/jpf.log log4j.appender.jpf.layout = org.apache.log4j.PatternLayout log4j.appender.jpf.layout.conversionPattern = %d [%t] %-5p %c %m%n log4j.appender.jpf.append = false #log4j.appender.other = org.apache.log4j.FileAppender #log4j.appender.other.file = ${applicationRoot}/logs/other.log #log4j.appender.other.layout = org.apache.log4j.PatternLayout #log4j.appender.other.layout.conversionPattern = %d [%t] %-5p %c %m%n #log4j.appender.other.append = false --- NEW FILE: .classpath --- <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry output="plugins/org.bitpedia.collider.core/bin" kind="src" path="plugins/org.bitpedia.collider.core/src"/> <classpathentry output="plugins/org.bitpedia.collider.image/bin" kind="src" path="plugins/org.bitpedia.collider.image/src"/> <classpathentry output="plugins/org.bitpedia.collider.ui/bin" kind="src" path="plugins/org.bitpedia.collider.ui/src"/> <classpathentry output="plugins/org.bitpedia.collider.video/bin" kind="src" path="plugins/org.bitpedia.collider.video/src"/> <classpathentry output="plugins/org.bitpedia.collider.vorbis/bin" kind="src" path="plugins/org.bitpedia.collider.vorbis/src"/> <classpathentry output="plugins/org.bitpedia.collider.wav/bin" kind="src" path="plugins/org.bitpedia.collider.wav/src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="lib" path="plugins/org.bitpedia.collider.ui/lib/BrowserLauncher2-10rc4.jar"/> <classpathentry kind="lib" path="plugins/org.bitpedia.collider.vorbis/lib/jogg-0.0.7.jar"/> <classpathentry kind="lib" path="plugins/org.bitpedia.collider.vorbis/lib/jorbis-0.0.15.jar"/> <classpathentry kind="lib" path="plugins/org.bitpedia.collider.vorbis/lib/tritonus_share.jar"/> <classpathentry kind="lib" path="plugins/org.bitpedia.collider.vorbis/lib/vorbisspi1.0.2.jar"/> <classpathentry kind="lib" path="lib/commons-logging.jar"/> <classpathentry kind="lib" path="lib/jpf.jar"/> <classpathentry kind="lib" path="lib/jpf-boot.jar"/> <classpathentry kind="lib" path="lib/jpf-tools.jar"/> <classpathentry kind="lib" path="lib/jxp.jar"/> <classpathentry kind="lib" path="lib/log4j.jar"/> <classpathentry kind="output" path="bin"/> </classpath> --- NEW FILE: run.bat --- java -cp lib\jpf-boot.jar org.java.plugin.boot.Boot %1 %2 %3 %4 %5 %6 %7 %8 %9 --- NEW FILE: .project --- <?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name>jBitcollider</name> <comment></comment> <projects> </projects> <buildSpec> <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand> </buildSpec> <natures> <nature>org.eclipse.jdt.core.javanature</nature> </natures> </projectDescription> --- NEW FILE: .cvsignore --- bin |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:54
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis/src/org/bitpedia In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.vorbis/src/org/bitpedia Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis/src/org/bitpedia added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:54
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.wav Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:54
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.video Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.video added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:54
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis/src/org In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.vorbis/src/org Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis/src/org added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:54
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.video/src/org/bitpedia/collider/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.video/src/org/bitpedia/collider/video Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.video/src/org/bitpedia/collider/video added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:54
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.vorbis/src Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis/src added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:54
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis/src/org/bitpedia/collider/vorbis In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.vorbis/src/org/bitpedia/collider/vorbis Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis/src/org/bitpedia/collider/vorbis added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:53
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.vorbis Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.vorbis added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:53
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav/src/org/bitpedia In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.wav/src/org/bitpedia Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav/src/org/bitpedia added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:53
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav/src/org In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.wav/src/org Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav/src/org added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:53
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.ui/src/org/bitpedia/collider In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.ui/src/org/bitpedia/collider Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.ui/src/org/bitpedia/collider added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:53
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav/src/org/bitpedia/collider/wav In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.wav/src/org/bitpedia/collider/wav Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav/src/org/bitpedia/collider/wav added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:53
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.wav/src Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.wav/src added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:51
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.image/src/org/bitpedia In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.image/src/org/bitpedia Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.image/src/org/bitpedia added to the repository |
From: Gordon M. <go...@us...> - 2006-04-14 07:39:51
|
Update of /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.image/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20415/plugins/org.bitpedia.collider.image/src Log Message: Directory /cvsroot/bitcollider/jbitcollider/plugins/org.bitpedia.collider.image/src added to the repository |