From 9664bee729d487bcc0a0bc35859f8e13d5421c75 Mon Sep 17 00:00:00 2001 From: Patrick J Volkerding Date: Wed, 26 Sep 2012 01:10:42 +0000 Subject: Slackware 14.0 Wed Sep 26 01:10:42 UTC 2012 Slackware 14.0 x86_64 stable is released! We're perfectionists here at Slackware, so this release has been a long time a-brewing. But we think you'll agree that it was worth the wait. Slackware 14.0 combines modern components, ease of use, and flexible configuration... our "KISS" philosophy demands it. The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware project by picking up a copy from store.slackware.com. We're taking pre-orders now, and offer a discount if you sign up for a subscription. Thanks to everyone who helped make this happen. The Slackware team, the upstream developers, and (of course) the awesome Slackware user community. Have fun! :-) --- source/n/bluez/bluez-4.91.tar.sign | 8 - source/n/bluez/bluez-4.99.tar.sign | 17 + source/n/bluez/bluez.SlackBuild | 47 +-- source/n/bluez/bluez.enable.audio.socket.diff | 12 + source/n/bluez/config/bluetooth.sh | 7 - source/n/bluez/config/rc.bluetooth | 5 +- source/n/bluez/doinst.sh | 1 - source/n/bluez/passkey-agent.c | 418 --------------------- source/n/bluez/patches/bluez-dbus-config.patch | 22 -- source/n/bluez/patches/bluez-run_udev_helper.patch | 12 - .../n/bluez/patches/bluez-unbreak_dell_mouse.patch | 14 - 11 files changed, 48 insertions(+), 515 deletions(-) delete mode 100644 source/n/bluez/bluez-4.91.tar.sign create mode 100644 source/n/bluez/bluez-4.99.tar.sign create mode 100644 source/n/bluez/bluez.enable.audio.socket.diff delete mode 100644 source/n/bluez/config/bluetooth.sh delete mode 100644 source/n/bluez/passkey-agent.c delete mode 100644 source/n/bluez/patches/bluez-dbus-config.patch delete mode 100644 source/n/bluez/patches/bluez-run_udev_helper.patch delete mode 100644 source/n/bluez/patches/bluez-unbreak_dell_mouse.patch (limited to 'source/n/bluez') diff --git a/source/n/bluez/bluez-4.91.tar.sign b/source/n/bluez/bluez-4.91.tar.sign deleted file mode 100644 index bb9b05b69..000000000 --- a/source/n/bluez/bluez-4.91.tar.sign +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.11 (GNU/Linux) -Comment: See http://www.kernel.org/signature.html for info - -iD8DBQBNkiAFyGugalF9Dw4RAqa6AJ9bxkhDm2sW6JqVMT8JwSa/5eFZaQCbBuKA -27f95iFeuRTVrhRkoFiTOto= -=u4px ------END PGP SIGNATURE----- diff --git a/source/n/bluez/bluez-4.99.tar.sign b/source/n/bluez/bluez-4.99.tar.sign new file mode 100644 index 000000000..a9a039be3 --- /dev/null +++ b/source/n/bluez/bluez-4.99.tar.sign @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.12 (GNU/Linux) + +iQIcBAABAgAGBQJPVkejAAoJEAbKn10dzyZZ0rEP/1BvYxUAoYf0cP2pQIqDwzkV +l9PSVsxKq/n3rNwKEWBufo3heHYxVAG5prlPiY8yHj4Q0tFNiCSPL+zLObG++iDy +3x+wxmaNaqbYurXQolHOqmH1L4OeMqT3mdzlb7xN48RLHLiS0XwTUMu2VBcM00me +nd03q+7gV6c1v3bXrDalUJuQQYHeubSLT6YMDKmMj/7PiLfA8hEoOE1uWefcBcas +B9xi5IBY208Cdq5odL6ae8ybvvG/PTDSFAOZNCzqIjJMYEwBosh1TbPN1AvUu1z2 +bzbgAa3oaRXnGZNDJ07pwa+2A+jAAtDRNO2R6z5lovpT568nwY6bmDIvbcIHuMHj +xhrhbUvPnhIcn+no+WkAtYjNe8ydcdH8BkeA7o1oauRAYJlGoTIVugobu2a608NN +7bGChWnhTPaKty8p0NGuE5gFvMwwLeE3W3d50+JH6icNBZbZOYK+88q1OI9hTHSW +fUm/tydzqRwPDuqgt6CiYxT49AuwQ+MjfED0fwvlfta8A+tYUDkgaOkpUcJvq8v/ +Bnd0mUkT7l2fiymw7hfzJEh9EXBWmXJBs77zkYPBmzv/YDSCpMWZuEHI7gvcBu4j +BN/+pJfYwo/kPRS0nXc/Xt438H806SUdvD926MmRwmg5jYmBRVJSemYtPHfkC03L +MO/geWyy5aH5w/+THCgN +=BIdO +-----END PGP SIGNATURE----- diff --git a/source/n/bluez/bluez.SlackBuild b/source/n/bluez/bluez.SlackBuild index 0403c932b..d77c15149 100755 --- a/source/n/bluez/bluez.SlackBuild +++ b/source/n/bluez/bluez.SlackBuild @@ -2,7 +2,7 @@ # Slackware build script for bluez - http://www.bluez.org -# Copyright 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -24,7 +24,7 @@ PKGNAM=bluez VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} NUMJOBS=${NUMJOBS:-" -j7 "} @@ -70,16 +70,8 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -# Fixup the dbus config file for our usage: -zcat $CWD/patches/bluez-dbus-config.patch.gz | patch -p1 --verbose || exit 1 - -# Use a wrapper to check rc.bluetooth mode before starting bluetoothd -zcat $CWD/patches/bluez-run_udev_helper.patch.gz | patch -p1 --verbose || exit 1 - -# Unbreak a Dell USB mouse -# https://bugzilla.novell.com/show_bug.cgi?id=522287 -# https://bugzilla.redhat.com/show_bug.cgi?id=517088 -zcat $CWD/patches/bluez-unbreak_dell_mouse.patch.gz | patch -p1 --verbose || exit 1 +# Enable the audio socket in audio.conf: +zcat $CWD/bluez.enable.audio.socket.diff.gz | patch -p1 --verbose || exit 1 CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ @@ -89,10 +81,13 @@ CXXFLAGS="$SLKCFLAGS" \ --sysconfdir=/etc \ --mandir=/usr/man \ --localstatedir=/var \ + --enable-datafiles \ + --enable-audio \ --enable-gstreamer \ --enable-alsa \ --enable-usb \ --enable-tools\ + --enable-input \ --enable-bccmd \ --enable-hid2hci \ --enable-dfutool \ @@ -101,38 +96,30 @@ CXXFLAGS="$SLKCFLAGS" \ --enable-dund \ --enable-cups \ --enable-service \ - --enable-udevrules \ - --enable-configfiles \ + --enable-network \ + --enable-serial \ + --enable-health \ + --enable-pnat \ + --enable-maemo6 \ + --enable-wiimote \ + --enable-test \ + --enable-dbusoob \ + --with-ouifile=/usr/share/hwdata/oui.txt \ --disable-silent-rules \ --build=$ARCH-slackware-linux make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 -# I'm don't think we need this, but I'll leave it commented just in case: -# http://bugs.archlinux.org/task/4930 -# The dbus-1 and bluetooth linkages are obvious, but I had to get the rt and -# pthread ones from the old bluez-utils (VERSION=3.36) tests/Makefile -#gcc $SLKCFLAGS $(pkg-config --cflags dbus-1) -DVERSION=3.36 \ -# -L$(pwd)/lib/.libs -ldbus-1 -lbluetooth -lpthread -lrt \ -# $CWD/passkey-agent.c -o $PKG/usr/bin/passkey-agent || exit 1 - +cp scripts/bluetooth-serial.rules $PKG/lib/udev/rules.d/97-bluetooth-serial.rules || exit 1 cp -a scripts/bluetooth_serial $PKG/lib/udev/bluetooth_serial || exit 1 chmod 0755 $PKG/lib/udev/bluetooth_serial -cat $CWD/config/bluetooth.sh > $PKG/lib/udev/bluetooth.sh -chmod 0755 $PKG/lib/udev/bluetooth.sh - -# SuSE says this is safe... :-) -mkdir -p $PKG/etc/modprobe.d -cat $CWD/config/bluetooth.modprobe > $PKG/etc/modprobe.d/bluetooth.conf - mkdir -p $PKG/etc/bluetooth cp -a audio/audio.conf $PKG/etc/bluetooth cp -a input/input.conf $PKG/etc/bluetooth cp -a network/network.conf $PKG/etc/bluetooth cp -a serial/serial.conf $PKG/etc/bluetooth -cp -a tools/rfcomm.conf $PKG/etc/bluetooth chmod 644 $PKG/etc/bluetooth/*.conf mkdir -p $PKG/etc/alsa diff --git a/source/n/bluez/bluez.enable.audio.socket.diff b/source/n/bluez/bluez.enable.audio.socket.diff new file mode 100644 index 000000000..52b9d0c6b --- /dev/null +++ b/source/n/bluez/bluez.enable.audio.socket.diff @@ -0,0 +1,12 @@ +--- ./audio/audio.conf.orig 2010-08-25 00:10:02.000000000 -0500 ++++ ./audio/audio.conf 2012-09-09 12:36:31.766492102 -0500 +@@ -4,6 +4,9 @@ + # particular interface + [General] + ++# Enable the audio socket ++Enable=Socket ++ + # Switch to master role for incoming connections (defaults to true) + #Master=true + diff --git a/source/n/bluez/config/bluetooth.sh b/source/n/bluez/config/bluetooth.sh deleted file mode 100644 index 22034551c..000000000 --- a/source/n/bluez/config/bluetooth.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# Check whether /etc/rc.d/rc.bluetooth is executable before starting -# the bluetooth subsystem for hotplugged bluetooth devices -[ -x /etc/rc.d/rc.bluetooth ] && exec /usr/sbin/bluetoothd --udev -exit 0 - diff --git a/source/n/bluez/config/rc.bluetooth b/source/n/bluez/config/rc.bluetooth index 12540d833..296c45422 100644 --- a/source/n/bluez/config/rc.bluetooth +++ b/source/n/bluez/config/rc.bluetooth @@ -1,12 +1,11 @@ #!/bin/sh bluez_start() { - # bluetoothd requires dbus, but dbus isn't started early enough during - # system boot, so we have to re-trigger the events now - udevadm trigger --subsystem-match=bluetooth --action=add + /usr/sbin/bluetoothd } bluez_stop() { + udevadm trigger --subsystem-match=bluetooth --action=remove pkill -TERM bluetoothd 1>/dev/null 2>/dev/null } diff --git a/source/n/bluez/doinst.sh b/source/n/bluez/doinst.sh index 0d4dde1da..fe68ad7f4 100644 --- a/source/n/bluez/doinst.sh +++ b/source/n/bluez/doinst.sh @@ -25,5 +25,4 @@ config etc/bluetooth/main.conf.new config etc/bluetooth/network.conf.new config etc/bluetooth/serial.conf.new config etc/bluetooth/rfcomm.conf.new -config etc/modprobe.d/bluetooth.conf.new diff --git a/source/n/bluez/passkey-agent.c b/source/n/bluez/passkey-agent.c deleted file mode 100644 index 8ac91d27d..000000000 --- a/source/n/bluez/passkey-agent.c +++ /dev/null @@ -1,418 +0,0 @@ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2004-2008 Marcel Holtmann - * - * - * 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 St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include - -#define INTERFACE "org.bluez.Security" - -static char *passkey = NULL; -static char *address = NULL; - -static int do_reject = 0; - -static volatile sig_atomic_t __io_canceled = 0; -static volatile sig_atomic_t __io_terminated = 0; - -static void sig_term(int sig) -{ - __io_canceled = 1; -} - -static DBusHandlerResult agent_filter(DBusConnection *conn, - DBusMessage *msg, void *data) -{ - const char *name, *old, *new; - - if (!dbus_message_is_signal(msg, DBUS_INTERFACE_DBUS, "NameOwnerChanged")) - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - - if (!dbus_message_get_args(msg, NULL, - DBUS_TYPE_STRING, &name, DBUS_TYPE_STRING, &old, - DBUS_TYPE_STRING, &new, DBUS_TYPE_INVALID)) { - fprintf(stderr, "Invalid arguments for NameOwnerChanged signal"); - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - } - - if (!strcmp(name, "org.bluez") && *new == '\0') { - fprintf(stderr, "Passkey service has been terminated\n"); - __io_terminated = 1; - } - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - -static DBusHandlerResult request_message(DBusConnection *conn, - DBusMessage *msg, void *data) -{ - DBusMessage *reply; - const char *path, *address; - dbus_bool_t numeric; - - if (!passkey) - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - - if (!dbus_message_get_args(msg, NULL, - DBUS_TYPE_STRING, &path, DBUS_TYPE_STRING, &address, - DBUS_TYPE_BOOLEAN, &numeric, DBUS_TYPE_INVALID)) { - fprintf(stderr, "Invalid arguments for passkey Request method"); - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - } - - if (do_reject) { - reply = dbus_message_new_error(msg, - "org.bluez.Error.Rejected", ""); - goto send; - } - - reply = dbus_message_new_method_return(msg); - if (!reply) { - fprintf(stderr, "Can't create reply message\n"); - return DBUS_HANDLER_RESULT_NEED_MEMORY; - } - - printf("Passkey request for device %s\n", address); - - dbus_message_append_args(reply, DBUS_TYPE_STRING, &passkey, - DBUS_TYPE_INVALID); - -send: - dbus_connection_send(conn, reply, NULL); - - dbus_connection_flush(conn); - - dbus_message_unref(reply); - - return DBUS_HANDLER_RESULT_HANDLED; -} - -static DBusHandlerResult cancel_message(DBusConnection *conn, - DBusMessage *msg, void *data) -{ - DBusMessage *reply; - const char *path, *address; - - if (!dbus_message_get_args(msg, NULL, - DBUS_TYPE_STRING, &path, DBUS_TYPE_STRING, &address, - DBUS_TYPE_INVALID)) { - fprintf(stderr, "Invalid arguments for passkey Confirm method"); - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - } - - printf("Request canceled for device %s\n", address); - - reply = dbus_message_new_method_return(msg); - if (!reply) { - fprintf(stderr, "Can't create reply message\n"); - return DBUS_HANDLER_RESULT_NEED_MEMORY; - } - - dbus_connection_send(conn, reply, NULL); - - dbus_connection_flush(conn); - - dbus_message_unref(reply); - - return DBUS_HANDLER_RESULT_HANDLED; -} - -static DBusHandlerResult release_message(DBusConnection *conn, - DBusMessage *msg, void *data) -{ - DBusMessage *reply; - - if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_INVALID)) { - fprintf(stderr, "Invalid arguments for passkey Release method"); - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - } - - if (!__io_canceled) - fprintf(stderr, "Passkey service has been released\n"); - - __io_terminated = 1; - - reply = dbus_message_new_method_return(msg); - if (!reply) { - fprintf(stderr, "Can't create reply message\n"); - return DBUS_HANDLER_RESULT_NEED_MEMORY; - } - - dbus_connection_send(conn, reply, NULL); - - dbus_connection_flush(conn); - - dbus_message_unref(reply); - - return DBUS_HANDLER_RESULT_HANDLED; -} - -static DBusHandlerResult agent_message(DBusConnection *conn, - DBusMessage *msg, void *data) -{ - if (dbus_message_is_method_call(msg, "org.bluez.PasskeyAgent", "Request")) - return request_message(conn, msg, data); - - if (dbus_message_is_method_call(msg, "org.bluez.PasskeyAgent", "Cancel")) - return cancel_message(conn, msg, data); - - if (dbus_message_is_method_call(msg, "org.bluez.PasskeyAgent", "Release")) - return release_message(conn, msg, data); - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - -static const DBusObjectPathVTable agent_table = { - .message_function = agent_message, -}; - -static int register_agent(DBusConnection *conn, const char *agent_path, - const char *remote_address, int use_default) -{ - DBusMessage *msg, *reply; - DBusError err; - const char *path, *method, *address = remote_address; - - if (!dbus_connection_register_object_path(conn, agent_path, - &agent_table, NULL)) { - fprintf(stderr, "Can't register object path for agent\n"); - return -1; - } - - if (use_default) { - path = "/org/bluez"; - method = "RegisterDefaultPasskeyAgent"; - } else { - path = "/org/bluez/hci0"; - method = "RegisterPasskeyAgent"; - } - - msg = dbus_message_new_method_call("org.bluez", path, INTERFACE, method); - if (!msg) { - fprintf(stderr, "Can't allocate new method call\n"); - return -1; - } - - if (use_default) - dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path, - DBUS_TYPE_INVALID); - else - dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path, - DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID); - - dbus_error_init(&err); - - reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err); - - dbus_message_unref(msg); - - if (!reply) { - fprintf(stderr, "Can't register passkey agent\n"); - if (dbus_error_is_set(&err)) { - fprintf(stderr, "%s\n", err.message); - dbus_error_free(&err); - } - return -1; - } - - dbus_message_unref(reply); - - dbus_connection_flush(conn); - - return 0; -} - -static int unregister_agent(DBusConnection *conn, const char *agent_path, - const char *remote_address, int use_default) -{ - DBusMessage *msg, *reply; - DBusError err; - const char *path, *method, *address = remote_address; - - if (use_default) { - path = "/org/bluez"; - method = "UnregisterDefaultPasskeyAgent"; - } else { - path = "/org/bluez/hci0"; - method = "UnregisterPasskeyAgent"; - } - - msg = dbus_message_new_method_call("org.bluez", path, INTERFACE, method); - if (!msg) { - fprintf(stderr, "Can't allocate new method call\n"); - dbus_connection_unref(conn); - exit(1); - } - - if (use_default) - dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path, - DBUS_TYPE_INVALID); - else - dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path, - DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID); - - dbus_error_init(&err); - - reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err); - - dbus_message_unref(msg); - - if (!reply) { - fprintf(stderr, "Can't unregister passkey agent\n"); - if (dbus_error_is_set(&err)) { - fprintf(stderr, "%s\n", err.message); - dbus_error_free(&err); - } - return -1; - } - - dbus_message_unref(reply); - - dbus_connection_flush(conn); - - dbus_connection_unregister_object_path(conn, agent_path); - - return 0; -} - -static void usage(void) -{ - printf("Bluetooth passkey agent ver %s\n\n", VERSION); - - printf("Usage:\n" - "\tpasskey-agent [--default] [--path agent-path] [address]\n" - "\n"); -} - -static struct option main_options[] = { - { "default", 0, 0, 'd' }, - { "reject", 0, 0, 'r' }, - { "path", 1, 0, 'p' }, - { "help", 0, 0, 'h' }, - { 0, 0, 0, 0 } -}; - -int main(int argc, char *argv[]) -{ - struct sigaction sa; - DBusConnection *conn; - char match_string[128], default_path[128], *agent_path = NULL; - int opt, use_default = 0; - - snprintf(default_path, sizeof(default_path), - "/org/bluez/passkey_agent_%d", getpid()); - - while ((opt = getopt_long(argc, argv, "+dp:h", main_options, NULL)) != EOF) { - switch(opt) { - case 'd': - use_default = 1; - break; - case 'r': - do_reject = 1; - break; - case 'p': - if (optarg[0] != '/') { - fprintf(stderr, "Invalid path\n"); - exit(1); - } - agent_path = strdup(optarg); - break; - case 'h': - usage(); - exit(0); - default: - exit(1); - } - } - - argc -= optind; - argv += optind; - optind = 0; - - if (argc < 1) { - usage(); - exit(1); - } - - passkey = strdup(argv[0]); - address = (argc > 1) ? strdup(argv[1]) : NULL; - - if (!use_default && !address) { - usage(); - exit(1); - } - - if (!agent_path) - agent_path = strdup(default_path); - - conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); - if (!conn) { - fprintf(stderr, "Can't get on system bus"); - exit(1); - } - - if (register_agent(conn, agent_path, address, use_default) < 0) { - dbus_connection_unref(conn); - exit(1); - } - - if (!dbus_connection_add_filter(conn, agent_filter, NULL, NULL)) - fprintf(stderr, "Can't add signal filter"); - - snprintf(match_string, sizeof(match_string), - "interface=%s,member=NameOwnerChanged,arg0=%s", - DBUS_INTERFACE_DBUS, "org.bluez"); - - dbus_bus_add_match(conn, match_string, NULL); - - memset(&sa, 0, sizeof(sa)); - sa.sa_flags = SA_NOCLDSTOP; - sa.sa_handler = sig_term; - sigaction(SIGTERM, &sa, NULL); - sigaction(SIGINT, &sa, NULL); - - while (!__io_canceled && !__io_terminated) { - if (dbus_connection_read_write_dispatch(conn, 500) != TRUE) - break; - } - - if (!__io_terminated) - unregister_agent(conn, agent_path, address, use_default); - - if (passkey) - free(passkey); - - dbus_connection_unref(conn); - - return 0; -} diff --git a/source/n/bluez/patches/bluez-dbus-config.patch b/source/n/bluez/patches/bluez-dbus-config.patch deleted file mode 100644 index 0d0fb4620..000000000 --- a/source/n/bluez/patches/bluez-dbus-config.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- ./src/bluetooth.conf.orig 2010-10-04 06:41:01.000000000 -0500 -+++ ./src/bluetooth.conf 2010-11-07 19:50:47.229999322 -0600 -@@ -11,13 +11,18 @@ - - - -+ - - - - - -- -+ - -+ -+ -+ - - -